<div style="font-family: Arial; font-size: 14px;"><p><span style="font-family: Tahoma, sans-serif;">Hello Andrei!</span><br>
<br><span style="font-family: Tahoma, sans-serif;">
I'm French, thank you for helping me out! You helped me to make progress!</span><br>
<br><span style="font-family: Tahoma, sans-serif;">
Your proposition worked and I found 2 other solutions. Unfortunately, I still think it's a bug. Here’s the details with some questions if you have time:</span><br>
<br><span style="font-family: Tahoma, sans-serif;">
“Add”, without renaming:</span><br></p><blockquote style="border-color: rgb(200, 200, 200); border-left: 3px solid rgb(200, 200, 200); padding-left: 10px; color: rgb(102, 102, 102);"><span style="font-family: Tahoma, sans-serif;">
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="...", TAG+="systemd", ENV{SYSTEMD_WANTS}="test.service"</span><br></blockquote><span style="font-family: Tahoma, sans-serif;">
# udevadm monitor | grep -F '(net)'</span><br><blockquote style="border-color: rgb(200, 200, 200); border-left: 3px solid rgb(200, 200, 200); padding-left: 10px; color: rgb(102, 102, 102);"><span style="font-family: Tahoma, sans-serif;">
KERNEL[17484.646799] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/net/wlan1 (net)</span><br><span style="font-family: Tahoma, sans-serif;">
UDEV  [17484.695897] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/net/wlan1 (net)</span><br></blockquote>
<br><span style="font-family: Tahoma, sans-serif;">
“Add”, with renaming:</span><br><blockquote style="border-color: rgb(200, 200, 200); border-left: 3px solid rgb(200, 200, 200); padding-left: 10px; color: rgb(102, 102, 102);"><span style="font-family: Tahoma, sans-serif;">
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="...", NAME="mywifi", TAG+="systemd", ENV{SYSTEMD_WANTS}="test.service"</span><br></blockquote><span style="font-family: Tahoma, sans-serif;">
# udevadm monitor | grep -F '(net)'</span><br><blockquote style="border-color: rgb(200, 200, 200); border-left: 3px solid rgb(200, 200, 200); padding-left: 10px; color: rgb(102, 102, 102);"><span style="font-family: Tahoma, sans-serif;">
KERNEL[17653.052434] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/net/wlan1 (net)</span><br><span style="font-family: Tahoma, sans-serif;">
KERNEL[17653.088350] move     /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/net/mywifi (net)</span><br><span style="font-family: Tahoma, sans-serif;">
UDEV  [17653.116958] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/net/mywifi (net)</span><br><span style="font-family: Tahoma, sans-serif;">
UDEV  [17653.179020] move     /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/net/mywifi (net)</span><br></blockquote>
<br><span style="font-family: Tahoma, sans-serif;">
Would it be because of the “move” event?</span><br>
<br><span style="font-family: Tahoma, sans-serif;">
Thank you, using ACTION!="remove" as you suggested works (both with and without rename).</span><br><span style="font-family: Tahoma, sans-serif;">
Is there a documentation I need to read? Because I do not understand the real difference between ACTION==”add” and ACTION!=”remove”. With “remove”, I even imagined it would be triggered multiples time, i.e. when it adds, binds and changes. But it got triggered once (what I wanted). Why? When there is an “add” and “move” event, it’s like !=”remove”, so why the service isn’t triggered twice?</span><br>
<br><span style="font-family: Tahoma, sans-serif;">
You said “rename results in addition uevent which wipes out previous udev device state including SYTSEMD_WANTS”. Are you saying that if there is the “add” event, and then quickly after the “move” event, the “add” event get wiped out? The question is then: why RUN=”/bin/touch /tmp/workiiing” works and is not wiped out? Perhaps it wipes only the ENV?</span><br><span style="font-family: Tahoma, sans-serif;">
How could I see what you called the "udev device state"? to know if it's actually been wiped out.</span><br><span style="font-family: Tahoma, sans-serif;">
Where did you learn the use of ACTION!="remove" a better practice? It works, but sounds odd? The software should be developed to make “add” work, no?</span><br>
<br><span style="font-family: Tahoma, sans-serif;">
With the “add” rule, running the following command helped me to better see what’s happening:</span><br><span style="font-family: Tahoma, sans-serif;">
# udevadm –udev –property</span><br><blockquote style="border-color: rgb(200, 200, 200); border-left: 3px solid rgb(200, 200, 200); padding-left: 10px; color: rgb(102, 102, 102);"><span style="font-family: Tahoma, sans-serif;">
UDEV  [24613.969783] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/net/mywifi (net)</span><br><span style="font-family: Tahoma, sans-serif;">
ACTION=add</span><br><span style="font-family: Tahoma, sans-serif;">
SYSTEMD_WANTS=test.service</span><br><span style="font-family: Tahoma, sans-serif;">
TAGS=:systemd:</span><br></blockquote>
<br><blockquote style="border-color: rgb(200, 200, 200); border-left: 3px solid rgb(200, 200, 200); padding-left: 10px; color: rgb(102, 102, 102);"><span style="font-family: Tahoma, sans-serif;">
UDEV  [24614.026461] move     /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/net/mywifi (net)</span><br><span style="font-family: Tahoma, sans-serif;">
ACTION=move</span><br><span style="font-family: Tahoma, sans-serif;">
TAGS=:systemd:</span><br></blockquote>
<br><span style="font-family: Tahoma, sans-serif;">
I noticed “SYSTEMD_WANTS=test.service” got removed from the “move” event.</span><br><span style="font-family: Tahoma, sans-serif;">
The proper solution would be that the “move” event inherit the properties. How to do that? To my opinion, systemd-udev’s code should be updated so that properties are not erased when renaming. What do you think?</span><br>
<br><span style="font-family: Tahoma, sans-serif;">
Since I was not so convinced by the mysterious use of ACTION!=”remove”, I had an idea.</span><br><span style="font-family: Tahoma, sans-serif;">
I notice a common output. Renaming or not, it prints the same:</span><br><blockquote style="border-color: rgb(200, 200, 200); border-left: 3px solid rgb(200, 200, 200); padding-left: 10px; color: rgb(102, 102, 102);"><span style="font-family: Tahoma, sans-serif;">
UDEV  [18194.419026] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3 (usb)</span><br><span style="font-family: Tahoma, sans-serif;">
UDEV  [18194.424387] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0 (usb)</span><br><span style="font-family: Tahoma, sans-serif;">
UDEV  [18194.494285] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0 (usb)</span><br><span style="font-family: Tahoma, sans-serif;">
UDEV  [18194.514986] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-3 (usb)</span><br></blockquote>
<br><span style="font-family: Tahoma, sans-serif;">
So I put a rule for that parent device instead:</span><br><span style="font-family: Tahoma, sans-serif;">
# udevadm info --attribute-walk /sys/devices/pci0000\:00/0000\:00\:14.0/usb1/1-3/ | less</span><br><span style="font-family: Tahoma, sans-serif;">
And I end up with these two rules:</span><br><blockquote style="border-color: rgb(200, 200, 200); border-left: 3px solid rgb(200, 200, 200); padding-left: 10px; color: rgb(102, 102, 102);"><span style="font-family: Tahoma, sans-serif;">
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="...", NAME="mywifi”</span><br><span style="font-family: Tahoma, sans-serif;">
SUBSYSTEM=="usb", ACTION=="bind", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}==</span><br><span style="font-family: Tahoma, sans-serif;">   "xxxx", ATTRS{idProduct}=="xxxx", TAG+="systemd", ENV{SYSTEMD_WANTS}="test.service"</span><br></blockquote>
<br><span style="font-family: Tahoma, sans-serif;">
And it also works. The problem is that I’ll need to pass the name of the interface to the service and start wpa_supplicant, so that solution is not elegant. It should be triggered by the “mywifi” device and not a parent device.</span><br>
<br><span style="font-family: Tahoma, sans-serif;">
Another solution is:</span><br><blockquote style="border-color: rgb(200, 200, 200); border-left: 3px solid rgb(200, 200, 200); padding-left: 10px; color: rgb(102, 102, 102);"><span style="font-family: Tahoma, sans-serif;">
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="...", NAME="mywifi"</span><br><span style="font-family: Tahoma, sans-serif;">
SUBSYSTEM=="net", ACTION=="move", ATTR{address}=="...", TAG+="systemd", ENV{SYSTEMD_WANTS}="test.service"</span><br></blockquote><span style="font-family: Tahoma, sans-serif;">
Maybe more elegant?</span><br><span style="font-family: Tahoma, sans-serif;">
I don’t exactly know when the “move” event would be triggered. I guess it’s driver specific. And there are no documentation about it. Sounds stable enough. But still, do renaming an interface should erase its properties (e.g. ENV{SYSTEMD_WANTS})? Isn’t that a systemd-udev bug?</span><br>
<p></p><p>Thank you,</p><p>Charles<br>
<br><span style="font-family: Tahoma, sans-serif;">
</span><br>

</p><div class="protonmail_signature_block" style="font-family: Arial; font-size: 14px;">
    <div class="protonmail_signature_block-user protonmail_signature_block-empty">
        <div><br></div>
    </div>
    
            <div class="protonmail_signature_block-proton">
        Sent with <a target="_blank" href="https://proton.me/" rel="noopener noreferrer">Proton Mail</a> secure email.
    </div>
</div>
<br>
<br>
------- Original Message -------<br>
On Monday, August 29th, 2022 at 3:19 PM, Andrei Borzenkov <a href="mailto:arvidjaar@gmail.com">arvidjaar@gmail.com</a> wrote:<p></p>
<p><br>
</p>
<blockquote>
<p>On 28.08.2022 23:35, Charles wrote:</p>
<blockquote>
<p>Hello,</p>
<p>Adding NAME="mywifi" to an udev rule causes the SYSTEMD_WANTS service to not be executed. Removing NAME="mywifi" and the service is executed. How come?</p>
<blockquote>
<p>/etc/udev/rules.d/10-network.rules<br>
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="...", TAG+="systemd", ENV{SYSTEMD_WANTS}="test.service"</p>
</blockquote>
<p>/etc/systemd/system/test.service</p>
<blockquote>
<p>[Service]<br>
Type=simple<br>
ExecStart=/bin/echo %n started!</p>
</blockquote>
<p>First try, it works:<br>
I type:</p>
<blockquote>
<p># journalctl -f -u test.service</p>
</blockquote>
<p>I plug the USB Wi-Fi device and it prints:</p>
<blockquote>
<p>"test.service started!"</p>
</blockquote>
<p>Note that ip link show returns wlan1.</p>
<p>Now I add NAME="mywifi" which gives:</p>
<blockquote>
<p>/etc/udev/rules.d/10-network.rules<br>
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="...", NAME="mywifi", TAG+="systemd", ENV{SYSTEMD_WANTS}="test.service"</p>
</blockquote>
<p>I plug the USB Wi-Fi device and it prints nothing.<br>
Note that ip link show returns mywifi.<br>
I remove NAME="mywifi" and it prints "test.service started!" again.</p>
</blockquote>
<p>My best guess is that rename results in addition uevent which wipes out<br>
previous udev device state including SYTSEMD_WANTS. Try "udevadm<br>
monitor" to see the difference.</p>
<p>General consensus is that you should use</p>
<p>ACTION!="remove"</p>
<p>instead of explicit</p>
<p>ACTION=="add"</p>
<p>unless you really want different rules for different uevents.</p>
<blockquote>
<p>I really do not understand. When using RUN, it works all the time. SYSTEMD_WANTS seems to work only when the interface is not renamed. I tried also to rename it with a .link file, it got renamed but the service is still not triggered.</p>
<p>Hope you can help me out.<br>
Thanks in advance for your time,<br>
Charles</p>
<p>Sent with Proton Mail secure email.</p>
</blockquote>
</blockquote></div>