kern/134931: [route] [fib] Route messages sent to all socket listeners regardless of setfib

Stanislav Svirid count at 211.ru
Mon May 25 10:10:02 UTC 2009


>Number:         134931
>Category:       kern
>Synopsis:       [route] [fib] Route messages sent to all socket listeners regardless of setfib
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon May 25 10:10:01 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator:     Stanislav Svirid
>Release:        FreeBSD vrf01.211.ru 7.2-RELEASE FreeBSD 7.2-RELEASE #3: Wed May 20 14:24:58 NOVST 2009     root at vrf01.211.ru:/usr/obj/usr/src/sys/VRFSPLITER  amd64
>Organization:
>Environment:
FreeBSD vrf01.211.ru 7.2-RELEASE FreeBSD 7.2-RELEASE #3: Wed May 20 14:24:58 NOVST 2009     root at vrf01.211.ru:/usr/obj/usr/src/sys/VRFSPLITER  amd64

>Description:
I have one router with 2 quagga running with different setfib.
First without setfib (0 i sdefault), second with setfib 1.

When quagga receive route from OSPF/BGP its install it into kernel.
Route installed in right FIB.
When route installed in FIB, kernel sends message into route socket.
Quagga listen routing socket and see ADD message and add route into internal tables as 'Kernel'.

For example,
quagga1# sh ip route 10.0.5.0
Routing entry for 10.0.5.0/24
  Known via "kernel", distance 0, metric 0, best
  * 89.189.190.185, via inet

Quagga1 see route as 'kernel', but there are no route in kernel default rt.
root at vrf01 ttyp4:~#netstat -rn | grep 10.0.5
root at vrf01 ttyp4:~#

But in FIB 1 route is present:
root at vrf01 ttyp4:~#setfib 1 netstat -rn | grep 10.0.5
10.0.5.0/24        89.189.190.185     UG1         0        0   inet
root at vrf01 ttyp4:~#

I think the problem is in listening routing socket, because 'route -n monitor' see all routing events regardless of setfib.

Experiment:
Run:
root at vrf01 ttyp4:~#setfib 1 route -n monitor

than in another session add route '192.168.0.0/24 via 127.0.0.1'
root at vrf01 ttyp5:~#route add 192.168.0.0/24 127.0.0.1
add net 192.168.0.0: gateway 127.0.0.1

And see, in "monitor" session appears:
got message of size 192 on Mon May 25 16:58:39 2009
RTM_ADD: Add Route: len 192, pid: 24923, seq 1, errno 0, flags:<UP,GATEWAY,DONE,STATIC>
locks:  inits: 
sockaddrs: <DST,GATEWAY,NETMASK>
 192.168.0.0 127.0.0.1 (0) 0 ffff ff

I think it's wrong, when route see messages from another fib ;)
>How-To-Repeat:
You must have compiled kernel with more than 1 FIB.
options         ROUTETABLES=2

buildkernel; install; reload.

In one session run:
setfib 1 route -n monitor

In another add route, for example:
route add 192.168.0.0/24 127.0.0.1

In monitor session you must see something like this:
got message of size 192 on Mon May 25 16:58:39 2009
RTM_ADD: Add Route: len 192, pid: 24923, seq 1, errno 0, flags:<UP,GATEWAY,DONE,STATIC>
locks:  inits: 
sockaddrs: <DST,GATEWAY,NETMASK>
 192.168.0.0 127.0.0.1 (0) 0 ffff ff

And its wrong ;)
>Fix:


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list