networkd: report error if lease file cannot be loaded and ignore
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 6 Apr 2024 17:01:56 +0000 (19:01 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 8 Apr 2024 08:28:22 +0000 (17:28 +0900)
commitf50be1870d49465259d0c682680ec98dd0097be8
treeb3478c469a906fbbd8c10bb42d14e95d48ef58c1
parentef6bf96749c2b9e272e9909594fdae53ef683c29
networkd: report error if lease file cannot be loaded and ignore

On my system, networkd would report that interface ve-rawhide is "Failed"
without anything in the logs:
systemd-networkd[651095]: ve-rawhide: Trying to reconfigure the interface.
systemd-networkd[651095]: ve-rawhide: Gained IPv6LL
systemd-networkd[651095]: ve-rawhide: Link DOWN
systemd-networkd[651095]: ve-rawhide: Lost carrier
systemd-networkd[651095]: ve-rawhide: Configuring with /usr/lib/systemd/network/80-container-ve.network.
systemd-networkd[651095]: ve-rawhide: Link UP
systemd-networkd[651095]: ve-rawhide: Gained carrier
systemd-networkd[651095]: ve-rawhide: Failed

At debug level:
systemd-networkd[799993]: dhcp-server-lease/ve-rawhide:1:1: Missing object field 'Address'.

$ jq </var/lib/systemd/network/dhcp-server-lease/ve-rawhide
{
  "BootID": "5d86b34b98894322bfd4ae8443ce59b3",
  "Leases": [
    {
      "ClientId": [ ... ],
      "Address": [ 192, 168, 120, 179 ],
      "Hostname": "rawhide",
      "ExpirationUSec": 966046821158,
      "ExpirationRealtimeUSec": 1711203197266940
    }
  ]
}

I'm not sure why "Address" is missing, but anyway, in this case, we should ignore the
lease file rather than refusing to configure the interface. Also, warn at the point
where we know what the filename is.
src/network/networkd-address.c
src/network/networkd-dhcp-server.c