We start with eth0 being down localhost:~# ip addr show 1: lo: <LOOPBACK> mtu 65536 qdisc noqueue state DOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether ce:f6:d7:0c:78:00 brd ff:ff:ff:ff:ff:ff 3: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000 link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff 4: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1 link/sit 0.0.0.0 brd 0.0.0.0 We set eth0up, and it gets an IPv6 link local address localhost:~# ip link set dev eth0 up && ip addr show 1: lo: <LOOPBACK> mtu 65536 qdisc noqueue state DOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether ce:f6:d7:0c:78:00 brd ff:ff:ff:ff:ff:ff 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff inet6 fe80::5054:ff:fe12:3456/64 scope link valid_lft forever preferred_lft forever 4: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1 link/sit 0.0.0.0 brd 0.0.0.0 Now if we get an IPv4 via udhcp, the IPv6 link local address gets deleted: localhost:~# udhcpc -i eth0 udhcpc (v1.24.2) started Sending discover... Sending discover... Sending select for 192.168.10.76... Lease of 192.168.10.76 obtained, lease time 43200 localhost:~# ip addr show 1: lo: <LOOPBACK> mtu 65536 qdisc noqueue state DOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether ce:f6:d7:0c:78:00 brd ff:ff:ff:ff:ff:ff 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff inet 192.168.10.76/24 brd 192.168.10.255 scope global eth0 valid_lft forever preferred_lft forever
udhcpc itself does not change network configuration. Changes, if any, are done by *udhcpc script* Usage: udhcpc [-fbqvaRB] [-t N] [-T SEC] [-A SEC/-n] [-i IFACE] [-s PROG] [-p PIDFILE] [-oC] [-r IP] [-V VENDOR] [-F NAME] [-x OPT:VAL]... [-O OPT]... -i,--interface IFACE Interface to use (default eth0) -s,--script PROG Run PROG at DHCP events (default /usr/share/udhcpc/default.script) See that -s PROG option? That's the script name. If you run "udhcpc -i eth0" as you show (without -s), then it uses default script. What happens depends on what is in that default script. Show it.
Sorry for having missed this... The issue lies in /usr/share/udhcpc/default.script indeed which calls this function: deconfig() { ip addr flush dev $interface } That script if from Alpine Linux so I'll close this ticket.
Created attachment 6876 [details] alpine linux default.script Attaching the faulty script in case anyone is interested in the future.