[ovs-dev] [branch-1.11] ofproto-dpif: Configure datapath max-idle through ovs-vsctl.

Alex Wang alexw at nicira.com
Fri Jun 20 04:20:57 UTC 2014


This patch adds a new configuration option, "max-idle" to the
Bridge "other-config" column. This sets how long datapath flows,
for the configured bridge, are cached in the datapath before
ovs-vswitchd thread expires them.

This commit is a backport of commit 72310b04 (upcall: Configure
datapath max-idle through ovs-vsctl.).

Signed-off-by: Alex Wang <alexw at nicira.com>
---
 ofproto/ofproto-dpif.c     |    6 ++++++
 ofproto/ofproto-provider.h |    1 +
 ofproto/ofproto.c          |    8 ++++++++
 ofproto/ofproto.h          |    1 +
 vswitchd/bridge.c          |   18 ++++++++++++++++++
 5 files changed, 34 insertions(+)

diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index ae40962..031efdb 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -4640,6 +4640,12 @@ subfacet_max_idle(const struct ofproto_dpif *ofproto)
     long long int now;
     int i;
 
+    /* If 'max_idle' is specified, uses it instead of doing the
+     * calculation. */
+    if (ofproto->up.max_idle) {
+        return ofproto->up.max_idle;
+    }
+
     total = hmap_count(&ofproto->subfacets);
     if (total <= ofproto->up.flow_eviction_threshold) {
         return N_BUCKETS * BUCKET_WIDTH;
diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h
index 2f429e0..3db2ef1 100644
--- a/ofproto/ofproto-provider.h
+++ b/ofproto/ofproto-provider.h
@@ -50,6 +50,7 @@ struct ofproto {
     unsigned flow_eviction_threshold; /* Threshold at which to begin flow
                                        * table eviction. Only affects the
                                        * ofproto-dpif implementation */
+    unsigned max_idle;
     bool forward_bpdu;          /* Option to allow forwarding of BPDU frames
                                  * when NORMAL action is invoked. */
     char *mfr_desc;             /* Manufacturer (NULL for default)b. */
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index 7d94f8b..1b0a1ed 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -573,6 +573,14 @@ ofproto_set_flow_eviction_threshold(struct ofproto *ofproto, unsigned threshold)
     }
 }
 
+/* Sets the maximum idle time for flows of 'ofproto' in the datapath before
+ * they are expired. */
+void
+ofproto_set_max_idle(struct ofproto *ofproto, unsigned max_idle)
+{
+    ofproto->max_idle = max_idle;
+}
+
 /* If forward_bpdu is true, the NORMAL action will forward frames with
  * reserved (e.g. STP) destination Ethernet addresses. if forward_bpdu is false,
  * the NORMAL action will drop these frames. */
diff --git a/ofproto/ofproto.h b/ofproto/ofproto.h
index e930dd6..5dd1c44 100644
--- a/ofproto/ofproto.h
+++ b/ofproto/ofproto.h
@@ -234,6 +234,7 @@ void ofproto_set_extra_in_band_remotes(struct ofproto *,
                                        const struct sockaddr_in *, size_t n);
 void ofproto_set_in_band_queue(struct ofproto *, int queue_id);
 void ofproto_set_flow_eviction_threshold(struct ofproto *, unsigned threshold);
+void ofproto_set_max_idle(struct ofproto *, unsigned max_idle);
 void ofproto_set_forward_bpdu(struct ofproto *, bool forward_bpdu);
 void ofproto_set_mac_table_config(struct ofproto *, unsigned idle_time,
                                   size_t max_entries);
diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index 20359fa..e1ea3f9 100644
--- a/vswitchd/bridge.c
+++ b/vswitchd/bridge.c
@@ -199,6 +199,7 @@ static void bridge_configure_flow_eviction_threshold(struct bridge *);
 static void bridge_configure_netflow(struct bridge *);
 static void bridge_configure_forward_bpdu(struct bridge *);
 static void bridge_configure_mac_table(struct bridge *);
+static void bridge_configure_max_idle(struct bridge *);
 static void bridge_configure_sflow(struct bridge *, int *sflow_bridge_number);
 static void bridge_configure_ipfix(struct bridge *);
 static void bridge_configure_stp(struct bridge *);
@@ -611,6 +612,7 @@ bridge_reconfigure_continue(const struct ovsrec_open_vswitch *ovs_cfg)
         bridge_configure_flow_eviction_threshold(br);
         bridge_configure_forward_bpdu(br);
         bridge_configure_mac_table(br);
+        bridge_configure_max_idle(br);
         bridge_configure_remotes(br, managers, n_managers);
         bridge_configure_netflow(br);
         bridge_configure_sflow(br, &sflow_bridge_number);
@@ -1572,6 +1574,22 @@ bridge_configure_flow_eviction_threshold(struct bridge *br)
     ofproto_set_flow_eviction_threshold(br->ofproto, threshold);
 }
 
+static void
+bridge_configure_max_idle(struct bridge *br)
+{
+    const char *max_idle_str;
+    unsigned max_idle;
+
+    max_idle_str = smap_get(&br->cfg->other_config,
+                            "max-idle");
+    if (max_idle_str) {
+        max_idle = strtoul(max_idle_str, NULL, 10);
+    } else {
+        max_idle = 0;
+    }
+    ofproto_set_max_idle(br->ofproto, max_idle);
+}
+
 /* Set forward BPDU option. */
 static void
 bridge_configure_forward_bpdu(struct bridge *br)
-- 
1.7.9.5




More information about the dev mailing list