New functions are implemented in the conntrack module to support this.
Signed-off-by: Daniele Di Proietto <[email protected]>
Acked-by: Flavio Leitner <[email protected]>
---
lib/conntrack.c | 23 +++++++++++++++++++++++
lib/conntrack.h | 2 ++
lib/dpif-netdev.c | 10 +++++++++-
3 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/lib/conntrack.c b/lib/conntrack.c
index 6e59375..634f2a7 100644
--- a/lib/conntrack.c
+++ b/lib/conntrack.c
@@ -1171,3 +1171,26 @@ conntrack_dump_done(struct conntrack_dump *dump
OVS_UNUSED)
{
return 0;
}
+
+int
+conntrack_flush(struct conntrack *ct, const uint16_t *zone)
+{
+ unsigned i;
+
+ for (i = 0; i < CONNTRACK_BUCKETS; i++) {
+ struct conn *conn, *next;
+
+ ct_lock_lock(&ct->buckets[i].lock);
+ HMAP_FOR_EACH_SAFE(conn, next, node, &ct->buckets[i].connections) {
+ if (!zone || *zone == conn->key.zone) {
+ ovs_list_remove(&conn->exp_node);
+ hmap_remove(&ct->buckets[i].connections, &conn->node);
+ atomic_count_dec(&ct->n_conn);
+ delete_conn(conn);
+ }
+ }
+ ct_lock_unlock(&ct->buckets[i].lock);
+ }
+
+ return 0;
+}
diff --git a/lib/conntrack.h b/lib/conntrack.h
index eba3ae9..00a22f1 100644
--- a/lib/conntrack.h
+++ b/lib/conntrack.h
@@ -83,6 +83,8 @@ int conntrack_dump_start(struct conntrack *, struct
conntrack_dump *,
const uint16_t *pzone);
int conntrack_dump_next(struct conntrack_dump *, struct ct_dpif_entry *);
int conntrack_dump_done(struct conntrack_dump *);
+
+int conntrack_flush(struct conntrack *, const uint16_t *zone);
/* 'struct ct_lock' is a wrapper for an adaptive mutex. It's useful to try
* different types of locks (e.g. spinlocks) */
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 910ada3..3165bd3 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -4281,6 +4281,14 @@ dpif_netdev_ct_dump_done(struct dpif *dpif OVS_UNUSED,
return err;
}
+static int
+dpif_netdev_ct_flush(struct dpif *dpif, const uint16_t *zone)
+{
+ struct dp_netdev *dp = get_dp_netdev(dpif);
+
+ return conntrack_flush(&dp->conntrack, zone);
+}
+
const struct dpif_class dpif_netdev_class = {
"netdev",
dpif_netdev_init,
@@ -4324,7 +4332,7 @@ const struct dpif_class dpif_netdev_class = {
dpif_netdev_ct_dump_start,
dpif_netdev_ct_dump_next,
dpif_netdev_ct_dump_done,
- NULL, /* ct_flush */
+ dpif_netdev_ct_flush,
};
static void
--
2.8.1
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev