Wolfgang Solfrank has explained the problem with router discovery
in `routed` in a way I can understand.
Let's assume that the configured preference of the interface is 5.
This gets converted to 0x80000005 through the use of the UNSIGN_PREF
macro. Later on, this value gets put into the PREF macro, which
compares it against the interface metric(s) (let's assume those
values to be 0 for now). Of course the 0x80000005, cast to int,
is much less than 0, so the clamping rule is triggered, which
gives us a value of 1. This is then converted via SIGN_PREF into
0x80000001 and put into the message. Certainly, this isn't what
was intended.
The most significant [fix] involves so called "remote" interfaces
configured in the kludge file to with what appear to be colliding
networks. Edward Mascarenhas <eddiem@vihar.engr.sgi.com> found
the problem and the fix, and I think has tested it in the SGI
network.
- Add some prototypes and definitions for types as necessary,
wrapped in __NetBSD__ to maintain portability.
- Explicit size types in structures that go out the wire.
- RCS id police.