10 Replies Latest reply on Jul 31, 2017 1:34 AM by Intel Corporation

    Difference in DPDK and Native IXGBE driver support for 82599 NIC


      Hello All,


      We have been trying to make Unicast promiscuous mode work with RHEL7.3 with latest native ixgbe driver (ixgbe-5.1.3), but it seems that unicast promiscuous mode is not enabled for 82599 series nic cards in the native driver.

      I can see an explicit check in ixgbe_sriov.c code, where before enabling promiscuous mode, it checks if NIC card is equal(or lower) than 82599EB, it returns.


      Adding snippet below:

              case IXGBEVF_XCAST_MODE_PROMISC:

                      if (hw->mac.type <= ixgbe_mac_82599EB)

                              return -EOPNOTSUPP;



                      fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);

                      if (!(fctrl & IXGBE_FCTRL_UPE)) {

                              /* VF promisc requires PF in promisc */


                                     "Enabling VF promisc requires PF in promisc\n");

                              return -EPERM;




                      disable = 0;

                      enable = IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE |

                               IXGBE_VMOLR_MPE | IXGBE_VMOLR_UPE | IXGBE_VMOLR_VPE;



      But, when I see the corresponding code in DPDK16.11 version, I can see the support has been added for 82599 NICs family. The feature seems to have implemented using IXGBE_VMOLR_ROPE  flag.


      Relevant snippet from DPDK code:


      ixgbe_convert_vm_rx_mask_to_val(uint16_t rx_mask, uint32_t orig_val)


              uint32_t new_val = orig_val;


              if (rx_mask & ETH_VMDQ_ACCEPT_UNTAG)

                      new_val |= IXGBE_VMOLR_AUPE;

              if (rx_mask & ETH_VMDQ_ACCEPT_HASH_MC)

                      new_val |= IXGBE_VMOLR_ROMPE;

              if (rx_mask & ETH_VMDQ_ACCEPT_HASH_UC)

                      new_val |= IXGBE_VMOLR_ROPE;

              if (rx_mask & ETH_VMDQ_ACCEPT_BROADCAST)

                      new_val |= IXGBE_VMOLR_BAM;

              if (rx_mask & ETH_VMDQ_ACCEPT_MULTICAST)

                      new_val |= IXGBE_VMOLR_MPE;


              return new_val;




      So, can you please let us know, why such difference between supported NIC ? and can we also have similar functionality ported to the native ixgbe driver?


      Other setup details


      Kernel version

      # uname -r



      LSPCI output

      # lspci -nn | grep Ether | grep 82599

      81:00.0 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01)

      81:00.1 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01)

      81:10.0 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01)


      # ethtool -i eth2

      driver: ixgbe

      version: 5.1.3

      firmware-version: 0x61bd0001


      bus-info: 0000:81:00.0

      supports-statistics: yes

      supports-test: yes

      supports-eeprom-access: yes

      supports-register-dump: yes

      supports-priv-flags: yes