This function will flush the connection tracking tables of a specific
datapath.

It simply calls a function pointer in the dpif_class. No dpif
currently implements the required interface.

The next commits will provide an implementation in dpif-netlink.

Signed-off-by: Daniele Di Proietto <diproiet...@vmware.com>
---
 lib/ct-dpif.c       | 11 +++++++++++
 lib/ct-dpif.h       |  1 +
 lib/dpif-netdev.c   |  1 +
 lib/dpif-netlink.c  |  1 +
 lib/dpif-provider.h |  4 ++++
 5 files changed, 18 insertions(+)

diff --git a/lib/ct-dpif.c b/lib/ct-dpif.c
index eb1b2fc..5f39513 100644
--- a/lib/ct-dpif.c
+++ b/lib/ct-dpif.c
@@ -107,6 +107,17 @@ ct_dpif_dump_done(struct ct_dpif_dump_state *dump)
             : EOPNOTSUPP);
 }
 
+/* Flush the entries in the connection tracker used by 'dpif'.
+ *
+ * If 'zone' is not NULL, flush only the entries in '*zone'. */
+int
+ct_dpif_flush(struct dpif *dpif, const uint16_t *zone)
+{
+    return (dpif->dpif_class->ct_flush
+            ? dpif->dpif_class->ct_flush(dpif, zone)
+            : EOPNOTSUPP);
+}
+
 /* Free memory held by 'entry'. */
 void
 ct_dpif_entry_uninit(struct ct_dpif_entry *entry)
diff --git a/lib/ct-dpif.h b/lib/ct-dpif.h
index 03f1c20..454be41 100644
--- a/lib/ct-dpif.h
+++ b/lib/ct-dpif.h
@@ -175,6 +175,7 @@ int ct_dpif_dump_start(struct dpif *, struct 
ct_dpif_dump_state **,
                        const uint16_t *zone);
 int ct_dpif_dump_next(struct ct_dpif_dump_state *, struct ct_dpif_entry *);
 int ct_dpif_dump_done(struct ct_dpif_dump_state *);
+int ct_dpif_flush(struct dpif *, const uint16_t *zone);
 void ct_dpif_entry_uninit(struct ct_dpif_entry *);
 void ct_dpif_format_entry(const struct ct_dpif_entry *, struct ds *,
                           bool verbose, bool print_stats);
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 0f76249..3440755 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -3690,6 +3690,7 @@ const struct dpif_class dpif_netdev_class = {
     NULL,                       /* ct_dump_start */
     NULL,                       /* ct_dump_next */
     NULL,                       /* ct_dump_done */
+    NULL,                       /* ct_flush */
 };
 
 static void
diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c
index bf81e61..fa995c1 100644
--- a/lib/dpif-netlink.c
+++ b/lib/dpif-netlink.c
@@ -2322,6 +2322,7 @@ const struct dpif_class dpif_netlink_class = {
     NULL,                       /* ct_dump_start */
     NULL,                       /* ct_dump_next */
     NULL,                       /* ct_dump_done */
+    NULL,                       /* ct_flush */
 };
 
 static int
diff --git a/lib/dpif-provider.h b/lib/dpif-provider.h
index f00e635..a9844be 100644
--- a/lib/dpif-provider.h
+++ b/lib/dpif-provider.h
@@ -415,6 +415,10 @@ struct dpif_class {
     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;
-- 
2.1.4

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to