summaryrefslogtreecommitdiff
path: root/ofproto
diff options
context:
space:
mode:
authorVlad Buslov <vladbu@mellanox.com>2019-07-21 11:34:21 +0300
committerBen Pfaff <blp@ovn.org>2019-08-21 15:28:01 -0700
commitb6bdc3cd730c2c47726f5913ba549b0284499f96 (patch)
tree481c95d7e2e98e41fd8637b3a3fd2fc7564d68cb /ofproto
parentc194367cbf86cce4faad9e4126ee0529f37c3690 (diff)
downloadopenvswitch-b6bdc3cd730c2c47726f5913ba549b0284499f96.tar.gz
upcall: Configure datapath max-revalidator through ovs-vsctl.
This patch adds a new configuration option, "max-revalidator" to the Open_vSwitch "other-config" column. This sets maximum allowed ravalidator timeout. Actual timeout value is determined at runtime as minimum of "max-idle" and "max-revalidator". Signed-off-by: Vlad Buslov <vladbu@mellanox.com> Acked-by: Roi Dayan <roid@mellanox.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
Diffstat (limited to 'ofproto')
-rw-r--r--ofproto/ofproto-dpif-upcall.c3
-rw-r--r--ofproto/ofproto-provider.h4
-rw-r--r--ofproto/ofproto.c10
-rw-r--r--ofproto/ofproto.h2
4 files changed, 18 insertions, 1 deletions
diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c
index 731ee7280..b3598742b 100644
--- a/ofproto/ofproto-dpif-upcall.c
+++ b/ofproto/ofproto-dpif-upcall.c
@@ -978,7 +978,8 @@ udpif_revalidator(void *arg)
duration);
}
- poll_timer_wait_until(start_time + MIN(ofproto_max_idle, 500));
+ poll_timer_wait_until(start_time + MIN(ofproto_max_idle,
+ ofproto_max_revalidator));
seq_wait(udpif->reval_seq, last_reval_seq);
latch_wait(&udpif->exit_latch);
latch_wait(&udpif->pause_latch);
diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h
index 7907d4bfb..92b384448 100644
--- a/ofproto/ofproto-provider.h
+++ b/ofproto/ofproto-provider.h
@@ -524,6 +524,10 @@ extern unsigned ofproto_flow_limit;
* on system load and other factors. This variable is subject to change. */
extern unsigned ofproto_max_idle;
+/* Maximum timeout (in ms) for revalidator timer.
+ * Revalidator timeout is a minimum of max_idle and max_revalidator values. */
+extern unsigned ofproto_max_revalidator;
+
/* Number of upcall handler and revalidator threads. Only affects the
* ofproto-dpif implementation. */
extern size_t n_handlers, n_revalidators;
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index 1d6fc0069..6f1d327ee 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -306,6 +306,7 @@ struct ovs_mutex ofproto_mutex = OVS_MUTEX_INITIALIZER;
unsigned ofproto_flow_limit = OFPROTO_FLOW_LIMIT_DEFAULT;
unsigned ofproto_max_idle = OFPROTO_MAX_IDLE_DEFAULT;
+unsigned ofproto_max_revalidator = OFPROTO_MAX_REVALIDATOR_DEFAULT;
size_t n_handlers, n_revalidators;
@@ -702,6 +703,15 @@ ofproto_set_max_idle(unsigned max_idle)
ofproto_max_idle = max_idle;
}
+/* Sets the maximum allowed revalidator timeout. */
+void
+ofproto_set_max_revalidator(unsigned max_revalidator)
+{
+ if (max_revalidator >= 100) {
+ ofproto_max_revalidator = max_revalidator;
+ }
+}
+
/* 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 6e4afffa1..6e17fd317 100644
--- a/ofproto/ofproto.h
+++ b/ofproto/ofproto.h
@@ -308,6 +308,7 @@ int ofproto_port_dump_done(struct ofproto_port_dump *);
#define OFPROTO_FLOW_LIMIT_DEFAULT 200000
#define OFPROTO_MAX_IDLE_DEFAULT 10000 /* ms */
+#define OFPROTO_MAX_REVALIDATOR_DEFAULT 500 /* ms */
const char *ofproto_port_open_type(const struct ofproto *,
const char *port_type);
@@ -335,6 +336,7 @@ void ofproto_set_in_band_queue(struct ofproto *, int queue_id);
void ofproto_set_bundle_idle_timeout(unsigned timeout);
void ofproto_set_flow_limit(unsigned limit);
void ofproto_set_max_idle(unsigned max_idle);
+void ofproto_set_max_revalidator(unsigned max_revalidator);
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);