lkml.org 
[lkml]   [2022]   [Jun]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.17 278/298] ixgbe: fix unexpected VLAN Rx in promisc mode on VF
    Date
    From: Olivier Matz <olivier.matz@6wind.com>

    commit 7bb0fb7c63df95d6027dc50d6af3bc3bbbc25483 upstream.

    When the promiscuous mode is enabled on a VF, the IXGBE_VMOLR_VPE
    bit (VLAN Promiscuous Enable) is set. This means that the VF will
    receive packets whose VLAN is not the same than the VLAN of the VF.

    For instance, in this situation:

    ┌────────┐ ┌────────┐ ┌────────┐
    │ │ │ │ │ │
    │ │ │ │ │ │
    │ VF0├────┤VF1 VF2├────┤VF3 │
    │ │ │ │ │ │
    └────────┘ └────────┘ └────────┘
    VM1 VM2 VM3

    vf 0: vlan 1000
    vf 1: vlan 1000
    vf 2: vlan 1001
    vf 3: vlan 1001

    If we tcpdump on VF3, we see all the packets, even those transmitted
    on vlan 1000.

    This behavior prevents to bridge VF1 and VF2 in VM2, because it will
    create a loop: packets transmitted on VF1 will be received by VF2 and
    vice-versa, and bridged again through the software bridge.

    This patch remove the activation of VLAN Promiscuous when a VF enables
    the promiscuous mode. However, the IXGBE_VMOLR_UPE bit (Unicast
    Promiscuous) is kept, so that a VF receives all packets that has the
    same VLAN, whatever the destination MAC address.

    Fixes: 8443c1a4b192 ("ixgbe, ixgbevf: Add new mbox API xcast mode")
    Cc: stable@vger.kernel.org
    Cc: Nicolas Dichtel <nicolas.dichtel@6wind.com>
    Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
    Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
    +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
    @@ -1181,9 +1181,9 @@ static int ixgbe_update_vf_xcast_mode(st
    return -EPERM;
    }

    - disable = 0;
    + disable = IXGBE_VMOLR_VPE;
    enable = IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE |
    - IXGBE_VMOLR_MPE | IXGBE_VMOLR_UPE | IXGBE_VMOLR_VPE;
    + IXGBE_VMOLR_MPE | IXGBE_VMOLR_UPE;
    break;
    default:
    return -EOPNOTSUPP;

    \
     
     \ /
      Last update: 2022-06-13 18:59    [W:4.099 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site