From 0b0517ef142805bf7691091c1eaafa10a669b06b Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 12 Mar 2012 14:27:25 -0700 Subject: [PATCH] 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 --- ofproto/fail-open.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) 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. */ -- 2.30.2