32-bit route(8) on amd64 host and jails

Sergey Kandaurov pluknet at gmail.com
Wed Sep 21 13:15:28 UTC 2011

On 21 September 2011 06:40, Devin Teske <devin.teske at fisglobal.com> wrote:
> I'm noticing that a 32-bit route(8) shows strange behaviour while running under an amd64 kernel (regardless of whether in the base-host -- utilizing /usr/lib32/libc.so.7 -- or in a jail and/or vimage -- 32-bit in nature; results are same).
> Executable runs fine, but you can't (a) set the default route or (b) view the default route (after successfully setting it with the amd64 build, of course).
> ASIDE: This is under 8.1-RELEASE.
> When attempting to set the default route, you get the following...
> root at kps0a / # route add -net default
> route: writing to routing socket: Invalid argument
> add net default: gateway Invalid argument
> Meanwhile, using the amd64 version, no issues.
> When attempting to view the default route, you get the following...
> root at kps0a / # route -n get default
>   route to: default
> destination: default
>       mask: default
>    gateway: default
>      flags: <UP,GATEWAY,DONE,STATIC>
>  recvpipe  sendpipe  ssthresh  rtt,msec    mtu        weight    expire
>       0         0         0         0         0         0  -1316570637
> It's the "gateway: default" that's out of place.

Currently, FreeBSD has a poor shape of rtsocket freebsd32 compatibility,
AFAIK only sysctl layer (sysctl_rtsock) is aware of it.
That means when a 32bit app writes some data to a routing socket,
kernel expects to receive it in the native ABI, and it doesn't work.


More information about the freebsd-amd64 mailing list