This is in preparation for supporting OpenFlow1.4 flow monitor replies.

Signed-off-by: Simon Horman <ho...@verge.net.au>

---
v2
* No change
---
 ofproto/connmgr.c | 16 +++++-----------
 ofproto/connmgr.h |  5 +++++
 ofproto/ofproto.c | 25 +++++++++++++++++++++++++
 3 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/ofproto/connmgr.c b/ofproto/connmgr.c
index a173456..d525227 100644
--- a/ofproto/connmgr.c
+++ b/ofproto/connmgr.c
@@ -2191,7 +2191,9 @@ ofmonitor_flush(struct connmgr *mgr)
 
     LIST_FOR_EACH (ofconn, node, &mgr->all_conns) {
         struct ofpbuf *msg, *next;
+        struct list msgs;
 
+        list_init(&msgs);
         LIST_FOR_EACH_SAFE (msg, next, list_node, &ofconn->updates) {
             unsigned int n_bytes;
 
@@ -2199,15 +2201,12 @@ ofmonitor_flush(struct connmgr *mgr)
             ofconn_send(ofconn, msg, ofconn->monitor_counter);
             n_bytes = rconn_packet_counter_n_bytes(ofconn->monitor_counter);
             if (!ofconn->monitor_paused && n_bytes > 128 * 1024) {
-                struct ofpbuf *pause;
-
                 COVERAGE_INC(ofmonitor_pause);
                 ofconn->monitor_paused = monitor_seqno++;
-                pause = ofpraw_alloc_xid(OFPRAW_NXT_FLOW_MONITOR_PAUSED,
-                                         OFP10_VERSION, htonl(0), 0);
-                ofconn_send(ofconn, pause, ofconn->monitor_counter);
+                ofmonitor_compose_paused(&msgs);
             }
         }
+        ofconn_send_replies(ofconn, &msgs);
     }
 }
 
@@ -2216,7 +2215,6 @@ ofmonitor_resume(struct ofconn *ofconn)
     OVS_REQUIRES(ofproto_mutex)
 {
     struct rule_collection rules;
-    struct ofpbuf *resumed;
     struct ofmonitor *m;
     struct list msgs;
 
@@ -2226,11 +2224,7 @@ ofmonitor_resume(struct ofconn *ofconn)
     }
 
     list_init(&msgs);
-    ofmonitor_compose_refresh_updates(&rules, &msgs);
-
-    resumed = ofpraw_alloc_xid(OFPRAW_NXT_FLOW_MONITOR_RESUMED, OFP10_VERSION,
-                               htonl(0), 0);
-    list_push_back(&msgs, &resumed->list_node);
+    ofmonitor_compose_resumed(&rules, &msgs);
     ofconn_send_replies(ofconn, &msgs);
 
     ofconn->monitor_paused = 0;
diff --git a/ofproto/connmgr.h b/ofproto/connmgr.h
index 07ec9e4..f3b9448 100644
--- a/ofproto/connmgr.h
+++ b/ofproto/connmgr.h
@@ -238,4 +238,9 @@ void ofmonitor_compose_refresh_updates(struct 
rule_collection *rules,
                                        struct list *msgs)
     OVS_REQUIRES(ofproto_mutex);
 
+void ofmonitor_compose_paused(struct list *msgs);
+void ofmonitor_compose_resumed(struct rule_collection *rules,
+                               struct list *msgs)
+    OVS_REQUIRES(ofproto_mutex);
+
 #endif /* connmgr.h */
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index 8de552f..cfef4ad 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -4752,6 +4752,31 @@ ofmonitor_compose_refresh_updates(struct rule_collection 
*rules,
 }
 
 static void
+ofproto_compose_paused_or_resumed(struct list *msgs, bool paused)
+{
+    struct ofpbuf *msg;
+    enum ofpraw raw;
+    raw = paused ? OFPRAW_NXT_FLOW_MONITOR_PAUSED
+        : OFPRAW_NXT_FLOW_MONITOR_RESUMED;
+    msg = ofpraw_alloc_xid(raw, OFP10_VERSION, htonl(0), 0);
+    list_push_back(msgs, &msg->list_node);
+}
+
+void
+ofmonitor_compose_paused(struct list *msgs)
+{
+    ofproto_compose_paused_or_resumed(msgs, true);
+}
+
+void
+ofmonitor_compose_resumed(struct rule_collection *rules, struct list *msgs)
+    OVS_REQUIRES(ofproto_mutex)
+{
+    ofmonitor_compose_refresh_updates(rules, msgs);
+    ofproto_compose_paused_or_resumed(msgs, false);
+}
+
+static void
 ofproto_collect_ofmonitor_refresh_rule(const struct ofmonitor *m,
                                        struct rule *rule, uint64_t seqno,
                                        struct rule_collection *rules)
-- 
2.0.0.rc2

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

Reply via email to