Udev does not rename usb ethernet device
Solution 1
Try the following rule to do the renaming part. Feel free to modify things to get your scripts running:
SUBSYSTEM=="net", ACTION=="add", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee2", NAME="hallo"
This rule is derived from that one.
If that does not work then you should watch out for udev rules that were created by your system automatically. For example, my Debian system uses the following rule to manage the wifi interface (the rule quoted here is a bit tweaked, see below):
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="c0:f8:da:03:c1:a8", NAME="wlan2"
Note the MAC address c0:f8:da:03:c1:a8
that was inserted. Maybe something similar helps you to create your custom rule that renames your device accordingly.
Edit: Second rule provided above is now essentially cut down to the one mentioned here (as also noted by Tom Yan down in the comments).
Solution 2
Note that this answer doesn't solve my problem of Udev rule not getting triggered. However since my original goal was to get a consistent ethernet device name when I plug it in into different ports, this solution does it's job.
It turns out Udev overrides my configuration, so I simply disabled it's network rules:
# ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
Now my device is named usb0
all the time. See Revert to_traditional device names.
Related videos on Youtube
Comments
-
Babken Vardanyan over 1 year
I'm using Arch Linux, Udev v234, SystemD v234.11-8.
I have a laptop which runs Arch Linux, and a Nexus 5 android phone which catches WiFi signal better than my laptop. I want my laptop to automatically connect to the internet when I plug in the phone through USB tethering. For this to work I have tried a few things:
I have created this (and the only) udev rule in
/etc/udev/rules.d/99-nexus-plugged.rules
:#!/bin/sh ACTION=="add", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee2", IMPORT="/lib/udev/rename_netiface %k hello", RUN+="/home/babken/test/adb-enable-tethering"
I expect udev to rename my device to
hello
, but it still creates a random name. What am I doing wrong?I know this rule is matching because my script gets executed.
I have created 2 udev rules. First one is for enabling USB tethering by remoting into my phone and enabling tethering:
#!/bin/sh SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee*", RUN+="/home/babken/test/adb-enable-tethering"
Second rule should rename the ethernet name from random name of
enp0setc
tohello
:#!/bin/sh SUBSYSTEM=="net", ACTION=="add", KERNEL=="enp0s29u1u2", ATTR{address}=="6a:e7:28:13:45:f7", NAME="hello", RUN+="/bin/touch /tmp/hello"
This second rule does not even get triggered, it does not create
/tmp/hello
file.Interestingly enough if I run
udevadm test /sys/class/net/enp0s29u1u2
this second rule DOES get triggered and my device DOES rename tohello
. But not when I unplug/replug my phone. Why does this rule not trigger then?
I always reload udev rules by running
sudo udevadm control --reload
after making changes to udev rules.Here are my journalctl logs when I plug in the device:
Aug 25 15:41:44 lenovo-laptop kernel: usb 2-1.2: new high-speed USB device number 38 using ehci-pci Aug 25 15:41:49 lenovo-laptop kernel: usb 2-1.2: USB disconnect, device number 38 Aug 25 15:41:49 lenovo-laptop kernel: usb 2-1.2: new high-speed USB device number 39 using ehci-pci Aug 25 15:41:49 lenovo-laptop kernel: rndis_host 2-1.2:1.0 usb0: register 'rndis_host' at usb-0000:00:1d.0-1.2, RNDIS device, c6:d5:df:ba:ba:4d Aug 25 15:41:50 lenovo-laptop systemd-udevd[20464]: Process '/home/babken/test/adb-enable-tethering' failed with exit code 1. Aug 25 15:41:50 lenovo-laptop systemd-udevd[20710]: Process '/home/babken/test/adb-enable-tethering' failed with exit code 1. Aug 25 15:41:50 lenovo-laptop mtp-probe[20778]: checking bus 2, device 39: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2" Aug 25 15:41:50 lenovo-laptop mtp-probe[20778]: bus: 2, device: 39 was not an MTP device Aug 25 15:41:50 lenovo-laptop systemd-udevd[20464]: link_config: autonegotiation is unset or enabled, the speed and duplex are not writable. Aug 25 15:41:50 lenovo-laptop kernel: rndis_host 2-1.2:1.0 enp0s29u1u2: renamed from usb0 Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: waiting for carrier Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: waiting for carrier Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: carrier acquired Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: IAID 28:13:45:f7 Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: adding address fe80::5f59:ada0:7eae:987b Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: soliciting an IPv6 router Aug 25 15:41:50 lenovo-laptop ifplugd(enp0s29u1u2)[12486]: Link beat detected. Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: rebinding lease of 192.168.42.150 Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: probing address 192.168.42.150/24 Aug 25 15:41:51 lenovo-laptop ifplugd(enp0s29u1u2)[12486]: Executing '/etc/ifplugd/ifplugd.action enp0s29u1u2 up'. Aug 25 15:41:51 lenovo-laptop ifplugd(enp0s29u1u2)[12486]: Program executed successfully. Aug 25 15:41:56 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: leased 192.168.42.150 for 3600 seconds Aug 25 15:41:56 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: adding route to 192.168.42.0/24 Aug 25 15:41:56 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: adding default route via 192.168.42.129 Aug 25 15:42:03 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: no IPv6 Routers available
Output of
udevadm info -a /sys/class/net/enp0s29u1u2
:Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/net/enp0s29u1u2': KERNEL=="enp0s29u1u2" SUBSYSTEM=="net" DRIVER=="" ATTR{addr_assign_type}=="3" ATTR{addr_len}=="6" ATTR{address}=="6a:e7:28:13:45:f7" ATTR{broadcast}=="ff:ff:ff:ff:ff:ff" ATTR{carrier}=="1" ATTR{carrier_changes}=="0" ATTR{dev_id}=="0x0" ATTR{dev_port}=="0" ATTR{dormant}=="0" ATTR{flags}=="0x1003" ATTR{gro_flush_timeout}=="0" ATTR{ifalias}=="" ATTR{ifindex}=="36" ATTR{iflink}=="36" ATTR{link_mode}=="0" ATTR{mtu}=="1500" ATTR{name_assign_type}=="4" ATTR{netdev_group}=="0" ATTR{operstate}=="unknown" ATTR{proto_down}=="0" ATTR{tx_queue_len}=="1000" ATTR{type}=="1" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0': KERNELS=="2-1.2:1.0" SUBSYSTEMS=="usb" DRIVERS=="rndis_host" ATTRS{authorized}=="1" ATTRS{bAlternateSetting}==" 0" ATTRS{bInterfaceClass}=="e0" ATTRS{bInterfaceNumber}=="00" ATTRS{bInterfaceProtocol}=="03" ATTRS{bInterfaceSubClass}=="01" ATTRS{bNumEndpoints}=="01" ATTRS{iad_bFirstInterface}=="00" ATTRS{iad_bFunctionClass}=="e0" ATTRS{iad_bFunctionProtocol}=="03" ATTRS{iad_bFunctionSubClass}=="01" ATTRS{iad_bInterfaceCount}=="02" ATTRS{interface}=="RNDIS Communications Control" ATTRS{supports_autosuspend}=="1" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2': KERNELS=="2-1.2" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{authorized}=="1" ATTRS{avoid_reset_quirk}=="0" ATTRS{bConfigurationValue}=="1" ATTRS{bDeviceClass}=="ef" ATTRS{bDeviceProtocol}=="01" ATTRS{bDeviceSubClass}=="02" ATTRS{bMaxPacketSize0}=="64" ATTRS{bMaxPower}=="500mA" ATTRS{bNumConfigurations}=="1" ATTRS{bNumInterfaces}==" 3" ATTRS{bcdDevice}=="0232" ATTRS{bmAttributes}=="80" ATTRS{busnum}=="2" ATTRS{configuration}=="" ATTRS{devnum}=="68" ATTRS{devpath}=="1.2" ATTRS{idProduct}=="4ee4" ATTRS{idVendor}=="18d1" ATTRS{ltm_capable}=="no" ATTRS{manufacturer}=="LGE" ATTRS{maxchild}=="0" ATTRS{product}=="Nexus 5" ATTRS{quirks}=="0x0" ATTRS{removable}=="removable" ATTRS{serial}=="0831bd3b21320609" ATTRS{speed}=="480" ATTRS{urbnum}=="685" ATTRS{version}==" 2.00" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1': KERNELS=="2-1" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{authorized}=="1" ATTRS{avoid_reset_quirk}=="0" ATTRS{bConfigurationValue}=="1" ATTRS{bDeviceClass}=="09" ATTRS{bDeviceProtocol}=="01" ATTRS{bDeviceSubClass}=="00" ATTRS{bMaxPacketSize0}=="64" ATTRS{bMaxPower}=="0mA" ATTRS{bNumConfigurations}=="1" ATTRS{bNumInterfaces}==" 1" ATTRS{bcdDevice}=="0000" ATTRS{bmAttributes}=="e0" ATTRS{busnum}=="2" ATTRS{configuration}=="" ATTRS{devnum}=="2" ATTRS{devpath}=="1" ATTRS{idProduct}=="0024" ATTRS{idVendor}=="8087" ATTRS{ltm_capable}=="no" ATTRS{maxchild}=="6" ATTRS{quirks}=="0x0" ATTRS{removable}=="fixed" ATTRS{speed}=="480" ATTRS{urbnum}=="152578" ATTRS{version}==" 2.00" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2': KERNELS=="usb2" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{authorized}=="1" ATTRS{authorized_default}=="1" ATTRS{avoid_reset_quirk}=="0" ATTRS{bConfigurationValue}=="1" ATTRS{bDeviceClass}=="09" ATTRS{bDeviceProtocol}=="00" ATTRS{bDeviceSubClass}=="00" ATTRS{bMaxPacketSize0}=="64" ATTRS{bMaxPower}=="0mA" ATTRS{bNumConfigurations}=="1" ATTRS{bNumInterfaces}==" 1" ATTRS{bcdDevice}=="0412" ATTRS{bmAttributes}=="e0" ATTRS{busnum}=="2" ATTRS{configuration}=="" ATTRS{devnum}=="1" ATTRS{devpath}=="0" ATTRS{idProduct}=="0002" ATTRS{idVendor}=="1d6b" ATTRS{interface_authorized_default}=="1" ATTRS{ltm_capable}=="no" ATTRS{manufacturer}=="Linux 4.12.8-2-ARCH ehci_hcd" ATTRS{maxchild}=="2" ATTRS{product}=="EHCI Host Controller" ATTRS{quirks}=="0x0" ATTRS{removable}=="unknown" ATTRS{serial}=="0000:00:1d.0" ATTRS{speed}=="480" ATTRS{urbnum}=="27919" ATTRS{version}==" 2.00" looking at parent device '/devices/pci0000:00/0000:00:1d.0': KERNELS=="0000:00:1d.0" SUBSYSTEMS=="pci" DRIVERS=="ehci-pci" ATTRS{broken_parity_status}=="0" ATTRS{class}=="0x0c0320" ATTRS{companion}=="" ATTRS{consistent_dma_mask_bits}=="32" ATTRS{d3cold_allowed}=="1" ATTRS{device}=="0x1c26" ATTRS{dma_mask_bits}=="32" ATTRS{driver_override}=="(null)" ATTRS{enable}=="1" ATTRS{irq}=="23" ATTRS{local_cpulist}=="0-3" ATTRS{local_cpus}=="0f" ATTRS{msi_bus}=="1" ATTRS{numa_node}=="-1" ATTRS{revision}=="0x05" ATTRS{subsystem_device}=="0x3975" ATTRS{subsystem_vendor}=="0x17aa" ATTRS{uframe_periodic_max}=="100" ATTRS{vendor}=="0x8086" looking at parent device '/devices/pci0000:00': KERNELS=="pci0000:00" SUBSYSTEMS=="" DRIVERS==""
-
fragwürdig over 6 yearsI don't understand: Is your script supposed to do the renaming or do you want udev to do the renaming? If your script is supposed to do so, then provide it, please.
-
Tom Yan over 6 yearsYou specified a
%k
in theIMPORT
but you have only "upward" matches (ones with "S") in the udev rule. How is udev suppose to know which kernel name you are referring to? -
Babken Vardanyan over 6 years@fragwürdig Udev is supposed to do the renaming with
IMPORT=
command. -
Babken Vardanyan over 6 years@TomYan I don't know I am new to udev.
-
Babken Vardanyan over 6 yearsThat didn't work. I guess because this is a android usb device which creates a child ethernet device which has subsystem="usb". I updated original post with details. I have also tried with subsystem="usb" and that didn't work either.
-
Tom Yan over 6 years@BabkenVardanyan No. Note that
SUBSYSTEM
is not the same asSUBSYSTEMS
. Same case forATTR
/ATTRS
. Simply put,SUBSYSTEM=="net", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee2"
means "match a net device that is under the device18d1:4ee2
. You can addSUBSYSTEMS=="usb", DRIVERS=="usb"
(note theS
es) to make it it more precise I suppose, though it may not be necessary; since the device you want to match is the net interface, soSUBSYSTEM=="net"
(noS
) is correct. -
Tom Yan over 6 years@BabkenVardanyan from your udevadm info output, apparently you made a mistake. It's
ATTRS{idProduct}=="4ee4"
, but notATTRS{idProduct}=="4ee2"
-
Tom Yan over 6 years@BabkenVardanyan well you can use a glob for that case I think (
4ee*
). It might even be alright to omit the idProduct match. -
Tom Yan over 6 yearsI am a bit unsure about the second rule in the answer btw. Some of the matches seems pointless and potentially problematic. I would probably trim it to this (and adapt to the OP's case) :
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="6a:e7:28:13:45:f7", NAME="hello"
(optionally addingKERNEL=="enp0s29u1u2"
) -
Babken Vardanyan over 6 years@TomYan OK I figured I need 2 rules, one to enable tethering and "plug in" the ethernet interface:
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee*", RUN+="/home/babken/test/adb-enable-tethering"
(which works) and the second one to rename the ethernet interface:SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="6a:e7:28:13:45:f7", NAME="hello", RUN+="/bin/touch /tmp/hello"
but my second rule is not getting triggered, even though my mac address is right. What am I doing wrong? -
Tom Yan over 6 years@BabkenVardanyan Not sure. So no
/tmp/hello
created? (Doeswhich touch
give you/bin/touch
?) What if you addKERNEL=="enp0s29u1u2"
orKERNEL=="en*"
? -
Babken Vardanyan over 6 years@TomYan No
/tmp/hello
is not created and yes/bin/touch
exists. Interestingly enough when I runudevadm test /sys/class/net/enp0s29u1u2
it does rename device tohello
. I have tried this second rule per your suggestion (also withen*
) and it doesn't trigger:SUBSYSTEM=="net", ACTION=="add", KERNEL=="enp0s29u1u2", ATTR{address}=="6a:e7:28:13:45:f7", NAME="hello", RUN+="/bin/touch /tmp/hello"
. -
Babken Vardanyan over 6 years@TomYan I have added these and other findings to my original post.