IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready

Hello,

I have my custom console image running, and during boot I start my script (after multi-user.target) inside which the IP address of the board is assigned.

I removed connman, and the network is just managed by systemd-networkd (no DHCP is enabled and no static addresses are assigned inside /etc/systemd/network).

Inside my script I execute the following:

ip addr flush dev eth0     
ip link set eth0 up      
ip addr add 192.168.10.2/24 brd + dev eth0

What I see is, as soon as I issue the “ip link set eth0 up”, I get the message:

[   97.613817] fec 2188000.ethernet eth0: Freescale FEC PHY driver [Micrel KSZ9031 Gigabit PHY] (mii_bus:phy_addr=21880)          
[   97.629471] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready                                                           
apalis-imx6-misa:~$ [  104.438233] fec 2188000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx              
[  104.446302] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready 

Is it the expected behaviour ? This “IPv6 eth0: link is not ready” only happens once, after boot, the first time I issue “ip link set eth0 up”.

The same happens if I remove the above commands from my script, and even if I wait minutes after boot, as soon as I issue “ip link set eth0 up”, the “IPv6 eth0: link is not ready” shows up.

It also looks like that the “ip link set eth0 up” automatically assigns an inet6 address:

4: eth0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000                   
    link/ether 00:14:2d:4d:bf:3e brd ff:ff:ff:ff:ff:ff                                                                  
    inet6 fe80::214:2dff:fe4d:bf3e/64 scope link                                                                        
       valid_lft forever preferred_lft forever   

while the inet address is only assigned after I issue “ip addr add 192.168.10.2/24 brd + dev eth0”:

4: eth0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000                   
    link/ether 00:14:2d:4d:bf:3e brd ff:ff:ff:ff:ff:ff                                                                  
    inet 192.168.10.2/24 brd 192.168.10.255 scope global eth0                                                           
       valid_lft forever preferred_lft forever                                                                          
    inet6 fe80::214:2dff:fe4d:bf3e/64 scope link                                                                        
       valid_lft forever preferred_lft forever  

Is it the expected behaviour ?

Thank you,
Nicola

Hi Nicola

Is it the expected behaviour ?

Yes.

This “IPv6 eth0: link is not ready” only happens once, after boot, the first time I issue “ip link set eth0 up”.

I guess that is not true. If you taking the link down and up again you will get the same ‘eth0: link is not ready’, 'IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready ', ‘IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready’ sequence. So that happens on each state change from down to up.

It also looks like that the “ip link set eth0 up” automatically assigns an inet6 address

Yes. This is a locally auto assigned ‘link local’ address. Note that it it is constructed from the MAC address.
i.e. 00:14:2d:4d:bf:3e gets an additional ‘2’ set in the first byte and fffe is inserted between the 3rd and 4th byte.
→ 214:2dff:fe4d:bf3e.

while the inet address is only assigned after I issue “ip addr add 192.168.10.2/24 brd + dev eth0”:

IPv4 addresses only appear once they have been explicitely assigned, either statically or by dhcp or by whatever other mechanisms exists.

Max

Hello Max,

thank you very much for the explanation.

Nicola