summaryrefslogtreecommitdiff
path: root/ofproto/connmgr.c
diff options
context:
space:
mode:
authorVasu Dasari <vdasari@gmail.com>2021-12-08 18:05:22 -0500
committerIlya Maximets <i.maximets@ovn.org>2022-04-28 21:26:40 +0200
commitd8ab75cd69c6eee136636c75f5c8aa6bcd8d7a53 (patch)
tree06780420864f0f24031e3f82ed51d9d54f0f0c7d /ofproto/connmgr.c
parentd94cd0d3eec33e4290d7ca81918f5ac61444886e (diff)
downloadopenvswitch-d8ab75cd69c6eee136636c75f5c8aa6bcd8d7a53.tar.gz
ofp-monitor: Extend Flow Monitoring support for OF 1.0-1.2 with Nicira Extensions.
Currently OVS supports flow-monitoring for OpenFlow 1.0 and Nicira Extenstions. Any other OpenFlow versioned messages are not accepted. This change will allow OpenFlow1.0-1.2 Flow Monitoring with Nicira extensions be accepted. Also made sure that flow-monitoring updates, flow monitoring pause messages, resume messages are sent in the same OpenFlow version as that of flow-monitor request. Description of changes: 1. Generate ofp-msgs.inc to be able to support 1.0-1.2 Flow Monitoring messages. include/openvswitch/ofp-msgs.h 2. Support vconn to accept user specified version and use it for vconn flow-monitoring session ofproto/ofproto.c 3. Modify APIs to use protocol as an argument to encode and decode messages include/openvswitch/ofp-monitor.h lib/ofp-monitor.c ofproto/connmgr.c ofproto/connmgr.h ofproto/ofproto.c 4. Modified following testcases to be verified across supported OF Versions ofproto - flow monitoring ofproto - flow monitoring with !own ofproto - flow monitoring with out_port ofproto - flow monitoring pause and resume ofproto - flow monitoring usable protocols tests/ofproto.at 5. Updated NEWS with the support added with this commit Signed-off-by: Vasu Dasari <vdasari@gmail.com> Reported-at: https://mail.openvswitch.org/pipermail/ovs-discuss/2020-December/050820.html Acked-by: Aaron Conole <aconole@redhat.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Diffstat (limited to 'ofproto/connmgr.c')
-rw-r--r--ofproto/connmgr.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/ofproto/connmgr.c b/ofproto/connmgr.c
index 172a58cfb..b6af9ddb5 100644
--- a/ofproto/connmgr.c
+++ b/ofproto/connmgr.c
@@ -2193,7 +2193,8 @@ ofmonitor_report(struct connmgr *mgr, struct rule *rule,
if (flags) {
if (ovs_list_is_empty(&ofconn->updates)) {
- ofputil_start_flow_update(&ofconn->updates);
+ ofputil_start_flow_update(&ofconn->updates,
+ ofconn_get_protocol(ofconn));
ofconn->sent_abbrev_update = false;
}
@@ -2243,6 +2244,7 @@ ofmonitor_flush(struct connmgr *mgr)
OVS_REQUIRES(ofproto_mutex)
{
struct ofconn *ofconn;
+ enum ofputil_protocol protocol;
if (!mgr) {
return;
@@ -2260,8 +2262,10 @@ ofmonitor_flush(struct connmgr *mgr)
&& rconn_packet_counter_n_bytes(counter) > 128 * 1024) {
COVERAGE_INC(ofmonitor_pause);
ofconn->monitor_paused = monitor_seqno++;
+ protocol = ofconn_get_protocol(ofconn);
struct ofpbuf *pause = ofpraw_alloc_xid(
- OFPRAW_NXT_FLOW_MONITOR_PAUSED, OFP10_VERSION, htonl(0), 0);
+ OFPRAW_NXT_FLOW_MONITOR_PAUSED,
+ ofputil_protocol_to_ofp_version(protocol), htonl(0), 0);
ofconn_send(ofconn, pause, counter);
}
}
@@ -2271,6 +2275,7 @@ static void
ofmonitor_resume(struct ofconn *ofconn)
OVS_REQUIRES(ofproto_mutex)
{
+ enum ofputil_protocol protocol;
struct rule_collection rules;
rule_collection_init(&rules);
@@ -2280,10 +2285,13 @@ ofmonitor_resume(struct ofconn *ofconn)
}
struct ovs_list msgs = OVS_LIST_INITIALIZER(&msgs);
- ofmonitor_compose_refresh_updates(&rules, &msgs);
+ ofmonitor_compose_refresh_updates(&rules, &msgs,
+ ofconn_get_protocol(ofconn));
- struct ofpbuf *resumed = ofpraw_alloc_xid(OFPRAW_NXT_FLOW_MONITOR_RESUMED,
- OFP10_VERSION, htonl(0), 0);
+ protocol = ofconn_get_protocol(ofconn);
+ struct ofpbuf *resumed = ofpraw_alloc_xid(
+ OFPRAW_NXT_FLOW_MONITOR_RESUMED,
+ ofputil_protocol_to_ofp_version(protocol), htonl(0), 0);
ovs_list_push_back(&msgs, &resumed->list_node);
ofconn_send_replies(ofconn, &msgs);