[dpdk-dev] [RFT] net/netvsc: initialize link state
stephen at networkplumber.org
Fri Feb 7 17:12:04 CET 2020
On Fri, 07 Feb 2020 15:22:23 +0200
Mohammed Gamal <mgamal at redhat.com> wrote:
> On Thu, 2020-02-06 at 16:10 -0800, Stephen Hemminger wrote:
> > If application is using link state interrupt, the correct link state
> > needs to be filled in when device is started. This is similar to
> > how virtio updates link information.
> > Reported-by: Mohammed Gamal <mgamal at redhat.com>
> > Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
> > ---
> > This version marked RFT because am in airport without access to a
> > machine to test it.
> > drivers/net/netvsc/hn_ethdev.c | 4 ++++
> > 1 file changed, 4 insertions(+)
> > diff --git a/drivers/net/netvsc/hn_ethdev.c
> > b/drivers/net/netvsc/hn_ethdev.c
> > index c79f924379fe..564620748daf 100644
> > --- a/drivers/net/netvsc/hn_ethdev.c
> > +++ b/drivers/net/netvsc/hn_ethdev.c
> > @@ -823,6 +823,10 @@ hn_dev_start(struct rte_eth_dev *dev)
> > if (error)
> > hn_rndis_set_rxfilter(hv, 0);
> > + /* Initialize Link state */
> > + if (error == 0)
> > + hn_dev_link_update(dev, 0);
> > +
> > return error;
> > }
> I tested this and I always get the link status as UP, regardless of
> whether I start the interface on the guest in UP or DOWN state. Looking
> at hn_dev_link_update() code, I see that the link status depends on the
> NDIS status that the driver gets from the host if my understanding is
> The question is whether if I use 'ip li set dev $IF_NAME down' on the
> guest affects the status the host sees, or would the host set the state
> to NDIS_MEDIA_STATE_CONNECTED of the device is physcially connected
> regardless of what the guest tries to do?
Are you confused about admin state vs link state? Admin state is the
up/down state in software, and link state is the (virtual) hardware link
status. In traditional Linux, admin state is controlled by ip link
set up/down; in DPDK the admin state is implied by whether the DPDK
device is started or stopped. The link state for hardware devices is
determined by whether the hardware link has synchronized with the switch.
In virtual environments this is synchronized. In Linux link state
is reported as NOCARRIER (IFF_RUNNING). In DPDK it is reported in
via the link info get.
The device visible to the kernel is the accelerated networking (Mellanox)
device and is not related directly to the netvsc device.
To test link up/down is not easy on Azure. You would have to use Azure CLI
to disconnect the NIC from VM. On native Hyper-V you can test by
setting up a virtual switch with an external network device; then
unplug the network device.
More information about the dev