config: fix feature for enabling service only when interface RUNNING
authorChristian Marangi <ansuelsmth@gmail.com>
Tue, 28 Mar 2023 22:16:46 +0000 (00:16 +0200)
committerChristian Marangi <ansuelsmth@gmail.com>
Mon, 3 Apr 2023 19:19:18 +0000 (21:19 +0200)
commit4b38e6b5bb967f0ee2e378a9016a5adaaa90eba5
treebe8c4fc6ca39a2d4ef512090cceaeb5c069e0f95
parent29c934d7ab98ca0b5da0e3757b885a1d3c19a2f4
config: fix feature for enabling service only when interface RUNNING

With ba30afcfec0a26ce4bcd96ea4d687c498b0ba4df it was found that odhcpd
service are setup even if an interface had no connection and was not
running. The commit introduced the change but required more fixup for
the feature to work correctly.

The close_interface() remove the interface from the avl list and this
cause the interface to be missing later in the code flow.
The intention of the commit was to just disable the service and enable
them later when the interface is correctly set to running with the flag
IFF_RUNNING.

Change the logic and introduce a new function reload_servies() that will
check IFF_RUNNING and enable or disable odhcp services.

This function is called on odhcpd_reload() for each interface. In
odhcpd_reload() also restore the original pattern with calling
close_interface() only when the interface is not inuse for odhcp.

Also call reload_services() on the single interface when a RTM_NEWLINK
event is fired reacting to a link change of an odhcp interface and
enabling the services if IFF_RUNNING is set.

Fixes ba30afcfec0a ("config: skip interface setup if interface not IFF_RUNNING")
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
src/config.c
src/netlink.c
src/odhcpd.h