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

    pratikmaru

      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 */

                              e_warn(drv,

                                     "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;

                      break;

       

      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:

      uint32_t

      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

      3.10.0-514.el7.x86_64

       

      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

      expansion-rom-version:

      bus-info: 0000:81:00.0

      supports-statistics: yes

      supports-test: yes

      supports-eeprom-access: yes

      supports-register-dump: yes

      supports-priv-flags: yes

       

       

      Regards

      Pratik