systemd networking is ignoring network configuration file on boot
3
votes
3
answers
4171
views
I have an embedded linux system compiled with Yocto, using systemd. I have a network configuration file at
/etc/systemd/network/20-wired.network
. The contents of that file are:
[Match]
Name=eth0
[Network]
Address=192.168.5.40/24
Gateway=192.168.5.1
DNS=192.168.5.1
However, when I reboot my machine, the eth0 interface is successfully configured using DHCP instead of assigning the static IP address. The a
command shows:
2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000
link/ether f8:dc:7a:3c:27:82 brd ff:ff:ff:ff:ff:ff
inet 10.1.1.223/16 brd 10.1.255.255 scope global dynamic noprefixroute eth0
valid_lft 85898sec preferred_lft 85898sec
inet6 fe80::43ec:fd39:e1c0:3c05/64 scope link noprefixroute
valid_lft forever preferred_lft forever
However, if I then wait 5 seconds or so after boot, and do a restart systemd-networkd
the system will usually be configured correctly like so:
2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000
link/ether f8:dc:7a:3c:27:82 brd ff:ff:ff:ff:ff:ff
inet 192.168.5.40/24 brd 192.168.5.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::43ec:fd39:e1c0:3c05/64 scope link noprefixroute
valid_lft forever preferred_lft forever
Lastly, with the right timing on the restart of the network service, I can seemingly even get this result (both the intended static address and the unwanted DHCP address):
2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000
link/ether f8:dc:7a:3c:27:82 brd ff:ff:ff:ff:ff:ff
inet 192.168.5.40/24 brd 192.168.5.255 scope global eth0
valid_lft forever preferred_lft forever
inet 10.1.1.223/16 brd 10.1.255.255 scope global dynamic noprefixroute eth0
valid_lft 86246sec preferred_lft 86246sec
inet6 fe80::43ec:fd39:e1c0:3c05/64 scope link noprefixroute
valid_lft forever preferred_lft forever
Does anyone know what is going on here or how to debug this? Is there something obvious wrong with my configuration?
status systemd-networkd
shows the following immediately after boot (specifically after network-online.target):
* systemd-networkd.service - Network Service
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
Active: activating (start) since Tue 2021-07-20 12:58:52 UTC; 65ms ago
TriggeredBy: * systemd-networkd.socket
Docs: man:systemd-networkd.service(8)
Main PID: 282 ((networkd))
Tasks: 1 (limit: 3576)
Memory: 416.0K
CGroup: /system.slice/systemd-networkd.service
`-282 (networkd)
Some number of seconds later it looks like this:
* systemd-networkd.service - Network Service
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-07-20 12:58:52 UTC; 3min 20s ago
TriggeredBy: * systemd-networkd.socket
Docs: man:systemd-networkd.service(8)
Main PID: 282 (systemd-network)
Status: "Processing requests..."
Tasks: 1 (limit: 3576)
Memory: 2.0M
CGroup: /system.slice/systemd-networkd.service
`-282 /lib/systemd/systemd-networkd
So it looks like the service is still "activating" when the network-online.target services run. I'm not sure what that means, though, or if it's a problem.
Asked by Dave
(91 rep)
Jul 19, 2021, 08:40 PM
Last activity: Aug 1, 2025, 03:12 AM
Last activity: Aug 1, 2025, 03:12 AM