[dpdk-dev] ixgbevf: support multicast packets from PF to VF

Dey, Souvik sodey at sonusnet.com
Thu Dec 8 23:07:00 CET 2016


Hi Wenzhuo,
                Now I am using rte_eth_dev_set_mc_addr_list to configure the PF with the list of mc_addr supported by the VF, but interestingly only 1 of the mc_addr works and for other mc_addr packets does not even come up to the VF/DPDK PMD.

PMD: ixgbe_update_mc_addr_list_vf(): ixgbe_update_mc_addr_list_vf
PMD: ixgbe_update_mc_addr_list_vf(): MC Addr Count = 5
PMD: ixgbe_mta_vector(): MC Addr0  = 0,MC Addr1  = 1,mc_filter_type =0
PMD: ixgbe_update_mc_addr_list_vf(): Hash value = 0x010
PMD: ixgbe_mta_vector(): MC Addr0  = 0,MC Addr1  = 33,mc_filter_type =0
PMD: ixgbe_update_mc_addr_list_vf(): Hash value = 0x210
PMD: ixgbe_mta_vector(): MC Addr0  = 0,MC Addr1  = 213,mc_filter_type =0
PMD: ixgbe_update_mc_addr_list_vf(): Hash value = 0xD50
PMD: ixgbe_mta_vector(): MC Addr0  = 0,MC Addr1  = 14,mc_filter_type =0
PMD: ixgbe_update_mc_addr_list_vf(): Hash value = 0x0E0
PMD: ixgbe_mta_vector(): MC Addr0  = 0,MC Addr1  = 78,mc_filter_type =0
PMD: ixgbe_update_mc_addr_list_vf(): Hash value = 0x4E0

In the above list only  the mc_aadr hash D50 works and the other 2 in RED fails to receive any multicast packets. Is there any other setting or reconfiguration that is required to be done (both in DPDK or on PF) to get this working all the configured MC_ADDRs ?

I am using 2.1 DPDK on the guest and kernel 4.4 ixgbe PF drivers on the host .

--
Regards,
Souvik

From: Lu, Wenzhuo [mailto:wenzhuo.lu at intel.com]
Sent: Monday, December 5, 2016 6:35 PM
To: Dey, Souvik <sodey at sonusnet.com>; dev at dpdk.org
Cc: Dai, Wei <wei.dai at intel.com>
Subject: RE: ixgbevf: support multicast packets from PF to VF

Hi Dey,
I'm confused.
rte_eth_allmulticast_enable means the port can receive all the multicast packets. In another word, it's multicast promiscuous mode.
rte_eth_dev_set_mc_addr_list means adding a series of multicast addresses to the filter, so the port can receive these specific multicast packets. It's not promiscuous.
During your test, I think only rte_eth_dev_set_mc_addr_list is working. rte_eth_allmulticast_enable has no effect.
As you mentioned the PF driver version, I'm afraid the problem is the PF.  When you call rte_eth_allmulticast_enable on VF, VF only sends a message to PF. PF need to take action. So you must have a PF which can support this feature.

From: Dey, Souvik [mailto:sodey at sonusnet.com]
Sent: Tuesday, December 6, 2016 3:01 AM
To: Lu, Wenzhuo <wenzhuo.lu at intel.com<mailto:wenzhuo.lu at intel.com>>; dev at dpdk.org<mailto:dev at dpdk.org>
Subject: RE: ixgbevf: support multicast packets from PF to VF

Hi Wenzhuo,

There is nothing set with the rte_eth_dev_set_mc_addr_list and we are trying to receive the NS packet which has the destination MAC set as 33 33 ff 00 00 14. Also what I saw is that the handling of allmulticast_enable message in the kernel has happened after 4.0 version and the PF drivers which earlier kernel version will not support this. How should handle those scenarios ?

In my case too I tried 2 experiments :

1.      Only set the rte_eth_allmulticast_enable from the DPDK app and I patched the ixgbevf_pmd with our patch. The function was returning SUCCESS but the NS packets were received in the application.

2.      Then along with rte_eth_allmulticast_enable, I used the rte_eth_dev_set_mc_addr_list to set the MAC 33 33 ff 00 00 14 from my app to the pmd. After this I was successfully receiving the NS packets. But then the bigger question is how to automate the addition of mc_addr in rte_eth_dev_set_mc_addr_list as in the kni we are currently not using the kni_net_set_rx_mode() function which is called by the net_device whenever the new mc_addr is assigned to the net_device.


--
Regards,
Souvik

From: Lu, Wenzhuo [mailto:wenzhuo.lu at intel.com]
Sent: Sunday, December 4, 2016 9:02 PM
To: Dey, Souvik <sodey at sonusnet.com<mailto:sodey at sonusnet.com>>; dev at dpdk.org<mailto:dev at dpdk.org>
Subject: RE: ixgbevf: support multicast packets from PF to VF

Hi Souvik,
To my opinion, rte_eth_dev_set_mc_addr_list has nothing to do with rte_eth_allmulticast_enable. rte_eth_allmulticast_enable is enough for the multicast packets.
I'm curious about the 1, what MAC addresses are set by rte_eth_dev_set_mc_addr_list? 2, What multicast packets are sent?
Thanks.



Best regards
Wenzhuo Lu

From: Dey, Souvik [mailto:sodey at sonusnet.com]
Sent: Saturday, December 3, 2016 1:28 AM
To: dev at dpdk.org<mailto:dev at dpdk.org>; Lu, Wenzhuo
Subject: RE: ixgbevf: support multicast packets from PF to VF

Adding wenzhuo.lu at intel.com<mailto:wenzhuo.lu at intel.com>

From: Dey, Souvik
Sent: Friday, December 2, 2016 12:27 PM
To: 'dev at dpdk.org' <dev at dpdk.org<mailto:dev at dpdk.org>>
Subject: ixgbevf: support multicast packets from PF to VF

Hi All,
                I am trying to support multicast packet over SRIOV using kernel PF + DPDK VF(ixgbevf) drivers for ipv6. I am currently using 2.1 DPDK and found that there was a patch in 16.04 for "ixgbe: support multicast promiscuous mode on VF". So I have backported the patch to the 2.1 DPDK but still multicast packets were not coming up to the DPDK app. Then I tried to enable the rte_eth_dev_set_mc_addr_list and with the the packets were coming up properly. Now I have some doubts :


1.      Do we have to use both rte_eth_dev_set_mc_addr_list and rte_eth_allmulticast_enable to get the multicast packets.

2.      How do we get the mc_addr_list dynamically as I don't see we are using the kni_net_set_rx_mode in rte_kni. Without this the DPDK app will not have any idea to update the mc_addr_list in the PF.

3.      Is there any other patches which I should be using to get this functionality working.

I am using : DPDK -2.1
Host kernel - 4.4 ( ubuntu)
Guest kernel - 3.2 (Debian)
Drivers - ixgbe ( for both pf and vf).


Thanks in advance for the help and support.

--
Regards,
Souvik


More information about the dev mailing list