Enhance rc.d/netwait script to wait for late-attaching interfaces such as
authorian <ian@FreeBSD.org>
Sat, 26 Dec 2015 18:21:32 +0000 (18:21 +0000)
committerian <ian@FreeBSD.org>
Sat, 26 Dec 2015 18:21:32 +0000 (18:21 +0000)
commitd1bbd87d0b106b8d309620f9a73e410a3cf60cfc
tree37c977c62c3c5870174413654fa8a4461e0fb710
parent7fd50fe8b2d06dfc7f0f82ff4b021102f93f41cf
Enhance rc.d/netwait script to wait for late-attaching interfaces such as
USB NICs.

USB network hardware may not be enumerated and available when the rc.d
networking scripts run. Eventually the USB attachment completes and devd
events cause the network initialization to happen, but by then other rc.d
scripts have already failed, because services which depend on NETWORKING
(such as mountcritremote) may end up running before the network is actually
ready.

There is an existing netwait script, but because it is dependent on
NETWORKING it runs too late to prevent failure of some other rc
scripts. This change flips the order so that NETWORKING depends on netwait,
and netwait now depends on devd and routing (the former is needed to make
interfaces appear, and the latter is needed to run the ping tests in
netwait).

The netwait script used to be oriented primarily towards "as soon as any
host is reachable the network is fully functional", so you gave it a list of
IPs to try and you could optionally name an interface and it would wait for
carrier on that interface. That functionality still works the same, but now
you can provide a list of interfaces to wait for and it waits until each one
of them is available. The ping logic still completes as soon as the first IP
on the list responds.

These changes were submitted by Brenden Molloy <brendan+freebsd@bbqsrc.net>
in PR 205186, and lightly modified by me to allow a list of interfaces
instead of just one.

PR: 205186
Differential Revision: https://reviews.freebsd.org/D4608 (timeout w/o review)
etc/defaults/rc.conf
etc/rc.d/NETWORKING
etc/rc.d/netwait