[ovs-dev] [PATCH 04/11] ofproto-dpif: Drop special packets more judiciously.

Ethan Jackson ethan at nicira.com
Wed Sep 7 02:32:27 UTC 2011


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 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index 478768f..4253202 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 && ofport->bundle && ofport->bundle->lacp
+               && flow->dl_type == htons(ETH_TYPE_LACP)) {
+        if (packet) {
+            lacp_process_packet(ofport->bundle->lacp, ofport, packet);
         }
         return true;
     }
-- 
1.7.6.1




More information about the dev mailing list