From: Ben Pfaff Date: Mon, 12 Mar 2012 21:27:25 +0000 (-0700) Subject: fail-open: Use connmgr_send_packet_in() instead of connmgr_broadcast(). X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=946384e2da6e33dadb42bc1a3055e8eb4004eaae;hp=c7ae835ac2f4fe7b45b6761e9b1e8d4e5a95f39c;p=sliver-openvswitch.git fail-open: Use connmgr_send_packet_in() instead of connmgr_broadcast(). 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 Signed-off-by: Ben Pfaff --- diff --git a/ofproto/fail-open.c b/ofproto/fail-open.c index 541bb054b..73f95760e 100644 --- a/ofproto/fail-open.c +++ b/ofproto/fail-open.c @@ -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. */