aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2010-10-18 16:15:50 -0700
committerBen Pfaff <blp@nicira.com>2010-11-05 09:25:38 -0700
commit7a0efeb5ad32fc685640b3815da4e20a7f11e3c5 (patch)
tree542c88dd6189a5513e6ad8497b9ec7b16a71e6c7
parent0bd0c6606aa8f8ecc3822faef9c34b4116791ac9 (diff)
ofproto: Simplify send_flow_removed().
I have no evidence that the optimization in this function is valuable. An upcoming commit will introduce a new form of flow expiration message that is sent to controllers that ask for it, while the standard OpenFlow 1.0 message is sent to other controllers. Since retaining this optimization with that logic would complicate the function, this commit drops it.
-rw-r--r--ofproto/ofproto.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index c949fde3..b35139cb 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -4543,8 +4543,6 @@ send_flow_removed(struct ofproto *p, struct rule *rule,
long long int now, uint8_t reason)
{
struct ofconn *ofconn;
- struct ofconn *prev;
- struct ofpbuf *buf = NULL;
if (!rule->send_flow_removed) {
return;
@@ -4556,20 +4554,16 @@ send_flow_removed(struct ofproto *p, struct rule *rule,
* being added (and expiring). (It also prevents processing OpenFlow
* requests that would not add new flows, so it is imperfect.) */
- prev = NULL;
LIST_FOR_EACH (ofconn, node, &p->all_conns) {
- if (rconn_is_connected(ofconn->rconn)
- && ofconn_receives_async_msgs(ofconn)) {
- if (prev) {
- queue_tx(ofpbuf_clone(buf), prev, prev->reply_counter);
- } else {
- buf = compose_flow_removed(p, rule, now, reason);
- }
- prev = ofconn;
+ struct ofpbuf *msg;
+
+ if (!rconn_is_connected(ofconn->rconn)
+ || !ofconn_receives_async_msgs(ofconn)) {
+ continue;
}
- }
- if (prev) {
- queue_tx(buf, prev, prev->reply_counter);
+
+ msg = compose_flow_removed(p, rule, now, reason);
+ queue_tx(msg, ofconn, ofconn->reply_counter);
}
}