bridge: Reorder neighbor suppression check when flooding
authorIdo Schimmel <idosch@nvidia.com>
Wed, 19 Apr 2023 15:34:52 +0000 (18:34 +0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 21 Apr 2023 07:25:49 +0000 (08:25 +0100)
The bridge does not flood ARP / NS packets for which a reply was sent to
bridge ports that have neighbor suppression enabled.

Subsequent patches are going to add per-{Port, VLAN} neighbor
suppression, which is going to make it more expensive to check whether
neighbor suppression is enabled since a VLAN lookup will be required.

Therefore, instead of unnecessarily performing this lookup for every
packet, only perform it for ARP / NS packets for which a reply was sent.

Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/bridge/br_forward.c

index 02bb620..0fe133f 100644 (file)
@@ -224,8 +224,8 @@ void br_flood(struct net_bridge *br, struct sk_buff *skb,
                /* Do not flood to ports that enable proxy ARP */
                if (p->flags & BR_PROXYARP)
                        continue;
-               if ((p->flags & (BR_PROXYARP_WIFI | BR_NEIGH_SUPPRESS)) &&
-                   BR_INPUT_SKB_CB(skb)->proxyarp_replied)
+               if (BR_INPUT_SKB_CB(skb)->proxyarp_replied &&
+                   (p->flags & (BR_PROXYARP_WIFI | BR_NEIGH_SUPPRESS)))
                        continue;
 
                prev = maybe_deliver(prev, p, skb, local_orig);