Hi Dan, We use KNI device exactly the same way you described – with IP addresses, routing, etc. And we also faced the same problem of having the actual link status in Linux kernel.
There is a special callback for link state management in net_device_ops for soft-devices like KNI called ndo_change_carrier. Current KNI driver implements it already, you just need to write to /sys/class/net/<iface>/carrier to change link status. Right now we implement it on application side, but I think it'll be good to have this in rte_kni API. Here is our implementation: static int linux_set_carrier(const char *name, int status) { char path[64]; const char *carrier = status ? "1" : "0"; int fd, ret; sprintf(path, "/sys/devices/virtual/net/%s/carrier", name); fd = open(path, O_WRONLY); if (fd == -1) { return -errno; } ret = write(fd, carrier, 2); if (ret == -1) { close(fd); return -errno; } close(fd); return 0; } Best regards, Igor On Thu, Aug 30, 2018 at 2:10 AM, Stephen Hemminger < step...@networkplumber.org> wrote: > On Wed, 29 Aug 2018 19:41:23 -0300 > Dan Gora <d...@adax.com> wrote: > > > On Wed, Aug 29, 2018 at 7:12 PM, Dan Gora <d...@adax.com> wrote: > > > On Wed, Aug 29, 2018 at 7:00 PM, Stephen Hemminger > > > <step...@networkplumber.org> wrote: > > >>> >> Add a new API function to KNI, rte_kni_update_link() to allow DPDK > > >>> >> applications to update the link state for the KNI network > interfaces > > >>> >> in the linux kernel. > > >>> >> > > >>> >> Note that the default carrier state is set to off when the > interface > > >>> >> is opened. > > >>> >> > > >>> >> Signed-off-by: Dan Gora <d...@adax.com> > > >>> > > > >>> > Do you really need a special ioctl for this? > > >>> > There is already ability to set link state via sysfs or netlink. > > >>> > > >>> I think yes.. AFAIK sysfs does not constitute a stable API; > > >> > > >> It is a stable API on Linux. > > > > > > > Actually this does not seem to be completely true... > > > > From Documentation/admin-guide/sysfs-rules.rst: > > > > Rules on how to access information in sysfs > > =========================================== > > > > The kernel-exported sysfs exports internal kernel implementation details > > and depends on internal kernel structures and layout. It is agreed upon > > by the kernel developers that the Linux kernel does not provide a stable > > internal API. Therefore, there are aspects of the sysfs interface that > > may not be stable across kernel releases. > > > > <snip> > > > > - devices are only "devices" > > There is no such thing like class-, bus-, physical devices, > > interfaces, and such that you can rely on in userspace. Everything is > > just simply a "device". Class-, bus-, physical, ... types are just > > kernel implementation details which should not be expected by > > applications that look for devices in sysfs. > > > > The properties of a device are: > > > > - devpath (``/devices/pci0000:00/0000:00:1d.1/usb2/2-2/2-2:1.0``) > > <snip> > > > > - kernel name (``sda``, ``tty``, ``0000:00:1f.2``, ...) > > <snip> > > > > - subsystem (``block``, ``tty``, ``pci``, ...) > > <snip> > > > > - driver (``tg3``, ``ata_piix``, ``uhci_hcd``) > > <snip> > > > > - attributes > > <snip> > > > > Everything else is just a kernel driver-core implementation detail > > that should not be assumed to be stable across kernel releases. > > Network device sysfs is stable. No one ever got around to putting it in > documentation > I wouldn't worry, once anything in /sys/class/net is added it is not going > to change without major breakage in many many tools. >