ifupdown-ng-waitif

An ifupdown-ng executor which blocks until the interface is actually running

git clone https://git.8pit.net/ifupdown-ng-waitif.git

commits

2022-07-31 README.md: Update status Sören Tempel
2022-07-09 Prefix verbose output with executor name Sören Tempel
2022-07-09 Default to a 30s timeout value, instead of blocking indefinitely Sören Tempel
2022-07-09 Add comment regarding root privileges Sören Tempel
2022-06-28 Improve verbose debug output regarding timeout Sören Tempel

Clone the repository to access all 50 commits.

Status

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.

Background

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.

Installation

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.

Usage

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.

Caveats

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.

License

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/.