Am Montag, 18. Dezember 2017 schrieb Didier Kryn: > Le 18/12/2017 à 11:42, Dr. Nikolaus Klepp a écrit : > > Am Montag, 18. Dezember 2017 schrieb Didier Kryn: > >> Le 18/12/2017 à 09:01, Dr. Nikolaus Klepp a écrit : > >>>>>>> Apply this patch to /lib/udev/ifupdown-hotplug-original. It changes > >>>>>>> line 78 from > >>>>>>> > >>>>>>> exec ifup --allow=hotplug $INTERFACE > >>>>>>> > >>>>>>> to > >>>>>>> > >>>>>>> if [ -z "${INTERFACE##eth[0-9]*}" ]; then > >>>>>>> if [ $(cat /sys/class/net/$INTERFACE/carrier) -eq 1 ]; then > >>>>>>> exec ifup --allow=hotplug $INTERFACE > >>>>>>> fi > >>>>>>> else > >>>>>>> exec ifup --allow=hotplug $INTERFACE > >>>>>>> fi > >>>>>>> > >>>>>>> > >>>>>>> Which hopefully brings up eth[0-9]* if the cable is plugged in. Most > >>>>>>> likely it would be a speed improvement if the lines "exec ifup > >>>>>>> --allow=hotplug $INTERFACE" are changed to "exec ifup --allow=hotplug > >>>>>>> $INTERFACE &", but this works for me. It won't work if your eth is > >>>>>>> not called eth[0-9]* :-) > >>>>>> > >>>>>>> Nik > >>>>>>> > >>>>>>> > >>>>> Just saw a typo in my mail: the file is "/lib/udev/ifupdown-hotplug" > >>>>> (not "/lib/udev/ifupdown-hotplug-original"). > >>>> Now it launches dhclient on eth0 right away, which incurs some > >>>> delay before it goes to background. Shorther than before, but still a > >>>> delay. > >>>> > >>>> Didier > >>> I think you tried the version without "&" at the end of "exec ifup > >>> --allow=hotplug $INTERFACE". Could you please edit the two lines (80 and > >>> 83) in "/lib/udev/ifupdown-hotplug" so that they say "exec ifup > >>> --allow=hotplug $INTERFACE &" - i.e. add the "&" at the end and try again? > >> I fact, my situation wasn't the same as the one you reported in the > >> first place. The message on the console was the following: > >> > >> Configure network interfaces...ifup: waiting for lock on > >> /run/network/ifstate.eth0 > >> This has now disapeared and I am dealing with waiting on DHCP for > >> an interface without any cable plugged in. > >> > >> I wondered if there was an interplay with ifplugd there. > >> > >> I tried disabling all interfaces in ifplugd and the result was the > >> same. > >> > >> Then I introduced some debug prints in ifupdown-hotplug to debug > >> the logic: > >> ... > >> printf 'ifupdown-hotplug invoked for interface %s\n' "$INTERFACE" > >> >/run/$INTERFACE.log; > >> > >> if [ -z "${INTERFACE##eth[0-9]*}" ]; then > >> if [ $(cat /sys/class/net/$INTERFACE/carrier) -eq 1 ]; then > >> printf 'Carrier detected; setting up.\n' > >> >>/run/$INTERFACE.log > >> exec ifup --allow=hotplug $INTERFACE & > >> else > >> printf 'No carrier; do not set up.\n' >>/run/$INTERFACE.log; > >> fi > >> else > >> printf 'Not an ethernet interface; setting up.\n' > >> >>/run/$INTERFACE.log; > >> exec ifup --allow=hotplug $INTERFACE & > >> fi > >> ... > >> > >> The result is as expected: > >> $ cat /run/eth0.log > >> ifupdown-hotplug invoked for interface eth0 > >> No carrier; do not set up. > >> > >> DHCPDISCOVER is probably launched by the caller of > >> ifupdown-hotplug. I tried to exit with return-code 1 in case the carrier > >> isn't detected, but this has no effect. > >> > >> Didier > > Well, yes, that's to expect, but does it also block the boot process? And > > do you get an IP adress, when, you plug in a cable later? > With ifplugd uninstalled, I get an ipv6 address on eth0 when I plug > a cable. This address persists after the cable is removed. After > re-installing ifplugd, as expected, I need to ifup/ifdown eth0 for the > situation to change and I get IPV6 and IPV4 addresses on eth0. > > I'm not sure I understand well what's happening with this network > initialization, but don't you think the most logical place to check for > carrier presence is just where dhclient is invoked? > > Didier
Hi! That is a good question. I think dhclient should not be called, when no cable is present. Looks like ifplugd is of different opinion. When I read the sources of ifplugd correctly, then the package installes a file "ifplugd.action". In this file line 27 says: [ "$2" = "up" ] && exec /sbin/ifup $1 Now change this line to if [ -z "${1##eth[0-9]*}" ]; then if [ $(cat /sys/class/net/$1/carrier) -eq 1 ]; then exec /sbin/ifup $1 fi fi Please try this (hope I have no typo). Nik -- Please do not email me anything that you are not comfortable also sharing with the NSA, CIA ... _______________________________________________ Dng mailing list Dng@lists.dyne.org https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng