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: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0b0517ef142805bf7691091c1eaafa10a669b06b;p=openvswitch 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 6fb1ea8a..edc93977 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. */