Hi All, I am using "Ethernet Controller X710 for 10GbE SFP+" SRIOV NIC card on the host with 8 VFs. Out of these VFs two VFs are associated with a VM, one VF is bound to Linux kernel driver i40evf and another is bound to dpdk pmd i.e. igb_uio. when there is a link fault on the hardware nic, the fault is not detected for the VF that is bound to dpdk. Instead it is detecting medium change from 10GBase-SR to 100BASE-TXFD. Is there any configuration, that will allow me to detect the link state on hardware NIC in the VM ? Basically I want to get the Link change notification on the dpdk application in VM. I tried to register for the link state change interrupt but the "rte_eth_dev_configure" fails with error code -22 I believe link-state auto actually means replicate PF link-state to VF Current Config : [root at ironman <https://dpdk.org/ml/listinfo/dev> tmp]# ip link show p2p2 34: p2p2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff vf 0 MAC xx:xx:xx:xx:xx:01, spoof checking on, link-state auto, trust off vf 1 MAC xx:xx:xx:xx:xx:02, spoof checking on, link-state auto, trust off vf 2 MAC xx:xx:xx:xx:xx:03, spoof checking on, link-state auto, trust off vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off vf 4 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off vf 5 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off vf 6 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off vf 7 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off Regards, Tushar
I think the IX710 device doesn't support the Link Change Interrupt. I have
enabled the debug traces and I could see following in the messages
Jan 10 02:07:53 <hostname> packet-forwarding[1518]: rte_eth_dev_configure:
driver net_i40e_vf does not support lsc
Also I could verify that the virtual function bound to kernel (i.e. i40evf
) is able to detect the link failure in the PF.
Tushar
On Wed, Jan 10, 2018 at 12:18 PM, Tushar Mulkar <tusharmulkar@gmail.com>
wrote:
> Hi All,
>
> I am using "Ethernet Controller X710 for 10GbE SFP+" SRIOV NIC card on
> the host with 8 VFs. Out of these VFs two VFs are associated with a VM, one
> VF is bound to Linux kernel driver i40evf and another is bound to dpdk pmd
> i.e. igb_uio.
> when there is a link fault on the hardware nic, the fault is not
> detected for the VF that is bound to dpdk. Instead it is detecting medium
> change from 10GBase-SR to 100BASE-TXFD. Is there any configuration, that
> will allow me to detect the link state on hardware NIC in the VM ?
>
> Basically I want to get the Link change notification on the dpdk
> application in VM.
>
> I tried to register for the link state change interrupt but the
> "rte_eth_dev_configure" fails with error code -22
>
> I believe link-state auto actually means replicate PF link-state to VF
> Current Config :
>
>
> [root at ironman <https://dpdk.org/ml/listinfo/dev> tmp]# ip link show p2p2
> 34: p2p2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP
> mode DEFAULT qlen 1000
> link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
> vf 0 MAC xx:xx:xx:xx:xx:01, spoof checking on, link-state auto, trust off
> vf 1 MAC xx:xx:xx:xx:xx:02, spoof checking on, link-state auto, trust off
> vf 2 MAC xx:xx:xx:xx:xx:03, spoof checking on, link-state auto, trust off
> vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off
> vf 4 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off
> vf 5 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off
> vf 6 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off
> vf 7 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off
>
>
> Regards,
> Tushar
>
>
Hi All, So finally I am able to find the issue. Actually in dpdk i40evf driver, the way link up/down is propagated is not working for me. Below change set worked for me. diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 87a760796..0389f4bfa 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -2235,13 +2235,13 @@ i40evf_dev_link_update(struct rte_eth_dev *dev, new_link.link_speed = ETH_SPEED_NUM_100M; break; } + /* full duplex only */ new_link.link_duplex = ETH_LINK_FULL_DUPLEX; - new_link.link_status = vf->link_up ? ETH_LINK_UP : - ETH_LINK_DOWN; + new_link.link_status = (vf->link_up & true) ? ETH_LINK_UP : + ETH_LINK_DOWN; i40evf_dev_atomic_write_link_status(dev, &new_link); - return 0; } On Wed, Jan 10, 2018 at 4:14 PM, Tushar Mulkar <tusharmulkar@gmail.com> wrote: > I think the IX710 device doesn't support the Link Change Interrupt. I have > enabled the debug traces and I could see following in the messages > > > Jan 10 02:07:53 <hostname> packet-forwarding[1518]: > rte_eth_dev_configure: driver net_i40e_vf does not support lsc > > > Also I could verify that the virtual function bound to kernel (i.e. i40evf > ) is able to detect the link failure in the PF. > > > Tushar > > > > On Wed, Jan 10, 2018 at 12:18 PM, Tushar Mulkar <tusharmulkar@gmail.com> > wrote: > >> Hi All, >> >> I am using "Ethernet Controller X710 for 10GbE SFP+" SRIOV NIC card on >> the host with 8 VFs. Out of these VFs two VFs are associated with a VM, one >> VF is bound to Linux kernel driver i40evf and another is bound to dpdk pmd >> i.e. igb_uio. >> when there is a link fault on the hardware nic, the fault is not >> detected for the VF that is bound to dpdk. Instead it is detecting medium >> change from 10GBase-SR to 100BASE-TXFD. Is there any configuration, that >> will allow me to detect the link state on hardware NIC in the VM ? >> >> Basically I want to get the Link change notification on the dpdk >> application in VM. >> >> I tried to register for the link state change interrupt but the >> "rte_eth_dev_configure" fails with error code -22 >> >> I believe link-state auto actually means replicate PF link-state to VF >> Current Config : >> >> >> [root at ironman <https://dpdk.org/ml/listinfo/dev> tmp]# ip link show p2p2 >> 34: p2p2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP >> mode DEFAULT qlen 1000 >> link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff >> vf 0 MAC xx:xx:xx:xx:xx:01, spoof checking on, link-state auto, trust off >> vf 1 MAC xx:xx:xx:xx:xx:02, spoof checking on, link-state auto, trust off >> vf 2 MAC xx:xx:xx:xx:xx:03, spoof checking on, link-state auto, trust off >> vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off >> vf 4 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off >> vf 5 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off >> vf 6 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off >> vf 7 MAC 00:00:00:00:00:00, spoof checking on, link-state auto, trust off >> >> >> Regards, >> Tushar >> >> >
> From: users [mailto:users-bounces@dpdk.org] On Behalf Of Tushar Mulkar > Sent: Thursday, January 11, 2018 1:55 PM > To: users@dpdk.org > Subject: Re: [dpdk-users] PF link status is not getting detected correctly > by dpdk driver in VM > > Hi All, Hi! > So finally I am able to find the issue. Actually in dpdk i40evf driver, > the way link up/down is propagated is not working for me. Below change set > worked for me. Please send a patch to dev@dpdk.org (http://dpdk.org/doc/guides/contributing/patches.html) In the commit message, please describe the issue a bit more, and how the patch fixes it. Also add a "signoff" so it can be accepted into the DPDK source. Also CC the i40e maintainers to bring it to their attention. From the MAINTAINERS file, i40e heading: Beilei Xing <beilei.xing@intel.com> Qi Zhang <qi.z.zhang@intel.com> Regards, -Harry > diff --git a/drivers/net/i40e/i40e_ethdev_vf.c > b/drivers/net/i40e/i40e_ethdev_vf.c > index 87a760796..0389f4bfa 100644 > --- a/drivers/net/i40e/i40e_ethdev_vf.c > +++ b/drivers/net/i40e/i40e_ethdev_vf.c > @@ -2235,13 +2235,13 @@ i40evf_dev_link_update(struct rte_eth_dev *dev, > new_link.link_speed = ETH_SPEED_NUM_100M; > break; > } > + > /* full duplex only */ > new_link.link_duplex = ETH_LINK_FULL_DUPLEX; > - new_link.link_status = vf->link_up ? ETH_LINK_UP : > - ETH_LINK_DOWN; > + new_link.link_status = (vf->link_up & true) ? ETH_LINK_UP : > + ETH_LINK_DOWN; > > i40evf_dev_atomic_write_link_status(dev, &new_link); > - > return 0; > } > > <snip>