• E
    vlan: allow nested vlan_do_receive() · 6a32e4f9
    Eric Dumazet 提交于
    commit 2425717b (net: allow vlan traffic to be received under bond)
    broke ARP processing on vlan on top of bonding.
    
           +-------+
    eth0 --| bond0 |---bond0.103
    eth1 --|       |
           +-------+
    
    52870.115435: skb_gro_reset_offset <-napi_gro_receive
    52870.115435: dev_gro_receive <-napi_gro_receive
    52870.115435: napi_skb_finish <-napi_gro_receive
    52870.115435: netif_receive_skb <-napi_skb_finish
    52870.115435: get_rps_cpu <-netif_receive_skb
    52870.115435: __netif_receive_skb <-netif_receive_skb
    52870.115436: vlan_do_receive <-__netif_receive_skb
    52870.115436: bond_handle_frame <-__netif_receive_skb
    52870.115436: vlan_do_receive <-__netif_receive_skb
    52870.115436: arp_rcv <-__netif_receive_skb
    52870.115436: kfree_skb <-arp_rcv
    
    Packet is dropped in arp_rcv() because its pkt_type was set to
    PACKET_OTHERHOST in the first vlan_do_receive() call, since no eth0.103
    exists.
    
    We really need to change pkt_type only if no more rx_handler is about to
    be called for the packet.
    Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
    Reviewed-by: NJiri Pirko <jpirko@redhat.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    6a32e4f9
if_vlan.h 9.6 KB