From b6e001b699d9affb558278ec90950f9960fe1826 Mon Sep 17 00:00:00 2001 From: Ethan Jackson Date: Tue, 30 Aug 2011 18:19:48 -0700 Subject: [PATCH] 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. --- ofproto/ofproto-dpif.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) 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; } -- 2.30.2