From: Ethan Jackson Date: Wed, 31 Aug 2011 01:19:48 +0000 (-0700) Subject: ofproto-dpif: Drop special packets more judiciously. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b6e001b699d9affb558278ec90950f9960fe1826;p=openvswitch ofproto-dpif: Drop special packets more judiciously. Before this patch, ofproto-dpif would not forward any LACP or CFM packets regardless of whether or not the relevant modules were configured on the in_port. Feature #6316. --- diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 478768f0..c84456bc 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -1614,16 +1614,21 @@ static bool process_special(struct ofproto_dpif *ofproto, const struct flow *flow, const struct ofpbuf *packet) { - if (cfm_should_process_flow(flow)) { - struct ofport_dpif *ofport = get_ofp_port(ofproto, flow->in_port); - if (packet && ofport && ofport->cfm) { + struct ofport_dpif *ofport = get_ofp_port(ofproto, flow->in_port); + + if (!ofport) { + return false; + } + + if (ofport->cfm && cfm_should_process_flow(flow)) { + if (packet) { cfm_process_heartbeat(ofport->cfm, packet); } return true; - } else if (flow->dl_type == htons(ETH_TYPE_LACP)) { - struct ofport_dpif *port = get_ofp_port(ofproto, flow->in_port); - if (packet && port && port->bundle && port->bundle->lacp) { - lacp_process_packet(port->bundle->lacp, port, packet); + } else if (ofport->bundle && ofport->bundle->lacp + && flow->dl_type == htons(ETH_TYPE_LACP)) { + if (packet) { + lacp_process_packet(ofport->bundle->lacp, ofport, packet); } return true; }