thread->dpif = dump->dpif;
}
+struct ct_dpif_dump_state;
+struct ct_dpif_entry;
+
/* Datapath interface class structure, to be defined by each implementation of
* a datapath interface.
*
* return. */
void (*recv_purge)(struct dpif *dpif);
+ /* When 'dpif' is about to purge the datapath, the higher layer may want
+ * to be notified so that it could try reacting accordingly (e.g. grabbing
+ * all flow stats before they are gone).
+ *
+ * Registers an upcall callback function with 'dpif'. This is only used
+ * if 'dpif' needs to notify the purging of datapath. 'aux' is passed to
+ * the callback on invocation. */
+ void (*register_dp_purge_cb)(struct dpif *, dp_purge_callback *, void *aux);
+
/* For datapaths that run in userspace (i.e. dpif-netdev), threads polling
* for incoming packets can directly call upcall functions instead of
* offloading packet processing to separate handler threads. Datapaths
* that directly call upcall functions should use the functions below to
* to register an upcall function and enable / disable upcalls.
*
- * Registers an upcall callback function with 'dpif'. This is only used if
+ * Registers an upcall callback function with 'dpif'. This is only used
* if 'dpif' directly executes upcall functions. 'aux' is passed to the
* callback on invocation. */
void (*register_upcall_cb)(struct dpif *, upcall_callback *, void *aux);
/* Get datapath version. Caller is responsible for freeing the string
* returned. */
char *(*get_datapath_version)(void);
+
+ /* Conntrack entry dumping interface.
+ *
+ * These functions are used by ct-dpif.c to provide a datapath-agnostic
+ * dumping interface to the connection trackes provided by the
+ * datapaths.
+ *
+ * ct_dump_start() should put in '*state' a pointer to a newly allocated
+ * stucture that will be passed by the caller to ct_dump_next() and
+ * ct_dump_done(). If 'zone' is not NULL, only the entries in '*zone'
+ * should be dumped.
+ *
+ * ct_dump_next() should fill 'entry' with information from a connection
+ * and prepare to dump the next one on a subsequest invocation.
+ *
+ * ct_dump_done should perform any cleanup necessary (including
+ * deallocating the 'state' structure, if applicable). */
+ int (*ct_dump_start)(struct dpif *, struct ct_dpif_dump_state **state,
+ const uint16_t *zone);
+ int (*ct_dump_next)(struct dpif *, struct ct_dpif_dump_state *,
+ struct ct_dpif_entry *entry);
+ int (*ct_dump_done)(struct dpif *, struct ct_dpif_dump_state *state);
+
+ /* Flushes the connection tracking tables. If 'zone' is not NULL,
+ * only deletes connections in '*zone'. */
+ int (*ct_flush)(struct dpif *, const uint16_t *zone);
};
extern const struct dpif_class dpif_netlink_class;