History

ixgbe: fix unexpected VLAN Rx in promisc mode on VF

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.

Olivier Matz committed 4 years ago

Commit 7bb0fb71 parent 803e9891 file · +2 −2Browse files

Unified · Split

drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c+2−2
@@ -1208,9 +1208,9 @@ static int ixgbe_update_vf_xcast_mode(struct ixgbe_adapter *adapter, · 1207 unmodified lines
1208 return -EPERM;1208 return -EPERM;
1209 }1209 }
1210 1210
1211 disable = 0;1211 disable = IXGBE_VMOLR_VPE;
1212 enable = IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE |1212 enable = IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE |
1213 IXGBE_VMOLR_MPE | IXGBE_VMOLR_UPE | IXGBE_VMOLR_VPE;1213 IXGBE_VMOLR_MPE | IXGBE_VMOLR_UPE;
1214 break;1214 break;
1215 default:1215 default:
1216 return -EOPNOTSUPP;1216 return -EOPNOTSUPP;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t