• John Fastabend's avatar
    net: deliver skbs on inactive slaves to exact matches · 597a264b
    John Fastabend authored
    Currently, the accelerated receive path for VLAN's will
    drop packets if the real device is an inactive slave and
    is not one of the special pkts tested for in
    skb_bond_should_drop().  This behavior is different then
    the non-accelerated path and for pkts over a bonded vlan.
    
    For example,
    
    vlanx -> bond0 -> ethx
    
    will be dropped in the vlan path and not delivered to any
    packet handlers at all.  However,
    
    bond0 -> vlanx -> ethx
    
    and
    
    bond0 -> ethx
    
    will be delivered to handlers that match the exact dev,
    because the VLAN path checks the real_dev which is not a
    slave and netif_recv_skb() doesn't drop frames but only
    delivers them to exact matches.
    
    This patch adds a sk_buff flag which is used for tagging
    skbs that would previously been dropped and allows the
    skb to continue to skb_netif_recv().  Here we add
    logic to check for the deliver_no_wcard flag and if it
    is set only deliver to handlers that match exactly.  This
    makes both paths above consistent and gives pkt handlers
    a way to identify skbs that come from inactive slaves.
    Without this patch in some configurations skbs will be
    delivered to handlers with exact matches and in others
    be dropped out right in the vlan path.
    
    I have tested the following 4 configurations in failover modes
    and load balancing modes.
    
    # bond0 -> ethx
    
    # vlanx -> bond0 -> ethx
    
    # bond0 -> vlanx -> ethx
    
    # bond0 -> ethx
                |
      vlanx -> --
    Signed-off-by: default avatarJohn Fastabend <john.r.fastabend@intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    597a264b
dev.c 144 KB