ntpd couldn't resolve host name on system boot

Jeremy Chadwick freebsd at jdc.parodius.com
Tue Oct 25 12:51:10 UTC 2011


On Tue, Oct 25, 2011 at 11:20:12AM +0200, Paul Schenkeveld wrote:
> On Mon, Oct 24, 2011 at 06:03:27PM -0700, Jeremy Chadwick wrote:
> > The one shortcoming of netwait is that it doesn't support waiting for
> > multiple NICs.  Some people have dual-homed environments where they
> > really would like to wait for both, say, em0 and em1, to come up and be
> > functional before any more scripts are started.  I left that as a
> > project for someone else, but it's something that should be added given
> > its importance.
> 
> How would you like to see multiple interfaces implemented:
> 
>   - All interfaces must be up at the same time
>   - Probe interfaces one by one, proceed to the next when an interface
>     up or bail out when any interface stays down until the loop times
>     out

1) Each interface should be checked in the order specified.
2) Each ping probe should be done using that interface (ping -I).
3) In the case of success, the next interface should be checked (e.g. go
back to step #1 but for the next interface defined.
4) In the case of failure, output a message on-screen (similar to what
we already do) and continue on with the next interface check.

So I imagine the variables for this would need to become something like:

netwait_em0_ip="4.2.2.1 4.2.2.2"
netwait_em1_ip="192.168.1.1 192.168.1.2"

You get the idea -- think ifconfig_* in style.

> Another shortcoming: ipv6 support...
> 
> The patch below adds ipv6.
> 
> One caveat, ping6 is used if a word in netwait_ip contains at least a
> colon so hostnames in netwait_ip are always pinged using ipv4.
>
> {snip}

Others will need to test IPv6 support -- I do not use it/have it
available.

It's a matter of opinion, but for IPv6 hosts/addresses, there should be
a separate variable, probably netwait_ipv6 (or netwait_XXX_ipv6 if you
go with the above ideal).  The problem is that our existing ipv6
variables in rc.conf all conform with ipv6_*, so I'm not sure what
people prefer.  But then maybe the netwait_ip variable should be named
netwait_*_ipv4...  I'll let others hash this out, but I would prefer the
former, since then you end up with something like this:

netwait_em0_ipv4="4.2.2.1 4.2.2.2"
netwait_em0_ipv6="fe80::202:b3ff:fe1e:8329"

(And in this case you would want to test IPv4 connectivity *as well* as
IPv6; two separate IP layers, thus both be tested separately; e.g. if
4.2.2.1 responds, don't just consider em0 working necessarily, because
there may be daemons that are IPv6-centric that depend on packets flowing
through em0.  Those using tunnel brokers, however, probably won't
benefit from this since netwait starts before such brokers/daemons).

You get the idea.

The problem is that this breaks the existing variable syntax and will
upset a lot of existing users.  Hmm...  Not sure about this one.  Gosh,
I could really go either way.

One final point, regarding ping6:

ping6 lacks the -t argument that ping has.  This is bad bad bad.  In
fact, I have to state up front that adding IPv6 support **should not**
be done to this script until ping6 supports -t.  I cannot stress this
enough.  The -t 1 piece is *very* important for proper behaviour.  The
nuances of the flag often come as a surprise to people.  I can look at
the ping code to figure out how -t works internally and probably submit
a patch for ping6 that does this, but of course I have no way to test
it.  :-)

IPv6 support is something that others will need to work on in general
though -- I do not use it, so others are better-suited.

-- 
| Jeremy Chadwick                                jdc at parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                   Mountain View, CA, US |
| Making life hard for others since 1977.               PGP 4BD6C0CB |



More information about the freebsd-stable mailing list