This software integrates ifupdown-ng with netlink link state detection via libmnl. I use this software myself and I am presently not aware of any bugs with the implemented functionality.
ifupdown-ng is a re-implementation of the ifup
and ifdown
commands provided by Debian and BusyBox.
These commands configure network interfaces according to the /etc/network/interfaces
configuration file.
Interface configuration is split into multiple phases.
For each phase, different executors are run.
For example, a DHCP client may be run as an executor in the up
phase.
Unfortunately, ifupdown-ng doesn't check the interface link state before running executors of the up
phase.
As such, executors which require the link to be up (e.g. the DHCP executor) usually retry requests in a configured interval until the requests succeed.
As it turns out, choosing an appropriate interval is difficult.
Inspired by bncm-waitif, this repository provides an executor which blocks until the interface state is changed to running by the Linux netlink subsystem.
In order to build this software, install the following dependencies:
Afterwards, run the following commands:
$ make
# make install
Refer to the GNUmakefile
regarding available configuration variables.
In order to use this executor, add a use waitif
declaration to your interface configuration in /etc/network/interfaces
.
For example:
iface wlan0
use waitif
use dhcp
In this case, the waitif
executor will block in the up
phase until the interface switched to the IFF_RUNNING
state.
Afterwards, the dhcp
executor is run and it will hopefully be able to retrieve a lease immediately.
By default, the waitif
executor will wait for up to 30 seconds for the interface to come up.
If the interface doesn't change to IFF_RUNNING
within this timespan, then the waitif
executor exits with EXIT_FAILURE
.
It is possible to configure a different timeout value using waitif-timeout
, for example:
iface wlan0
waitif-timeout 10
use waitif
use dhcp
The waitif-timeout
keyword specifies a timeout in seconds, the timeout can be set to zero to wait indefinitely.
ifupdown-ng currently does not stop executing executors of a given phase if one of them fails.
As such, if the waitif
up executor fails (e.g. due to a timeout) ifupdown-ng will still attempt to retrieve a DCHP lease.
See: ifupdown-ng#179.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.