fail-open: Use connmgr_send_packet_in() instead of connmgr_broadcast().
authorBen Pfaff <blp@nicira.com>
Mon, 12 Mar 2012 21:27:25 +0000 (14:27 -0700)
committerBen Pfaff <blp@nicira.com>
Thu, 15 Mar 2012 17:23:04 +0000 (10:23 -0700)
Otherwise even controllers that should not receive any packet-ins (via
enable-async-messages=false) still receive the packet-ins that probe for
a controller being up when we're in fail-open.

Bug #9964.
Reported-by: James Schmidt <jschmidt@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
ofproto/fail-open.c

index 6fb1ea8a6b3bb30619f66c44bc208c1d07f8ae3e..edc939772f4f42e92fa96a5d4c2ea4a11b16d359 100644 (file)
@@ -115,19 +115,23 @@ fail_open_is_active(const struct fail_open *fo)
 static void
 send_bogus_packet_ins(struct fail_open *fo)
 {
+    struct ofputil_packet_in pin;
     uint8_t mac[ETH_ADDR_LEN];
-    struct ofpbuf *opi;
     struct ofpbuf b;
 
-    /* Compose ofp_packet_in. */
     ofpbuf_init(&b, 128);
     eth_addr_nicira_random(mac);
     compose_benign_packet(&b, "Open vSwitch Controller Probe", 0xa033, mac);
-    opi = make_packet_in(pktbuf_get_null(), OFPP_LOCAL, OFPR_NO_MATCH, &b, 64);
-    ofpbuf_uninit(&b);
 
-    /* Send. */
-    connmgr_broadcast(fo->connmgr, opi);
+    memset(&pin, 0, sizeof pin);
+    pin.packet = b.data;
+    pin.packet_len = b.size;
+    pin.reason = OFPR_NO_MATCH;
+    pin.send_len = b.size;
+    pin.fmd.in_port = OFPP_LOCAL;
+    connmgr_send_packet_in(fo->connmgr, &pin);
+
+    ofpbuf_uninit(&b);
 }
 
 /* Enter fail-open mode if we should be in it. */