There's a fundamental difference between OpenBSD and FreeBSD's respective 
networking. Specifically, the kernel routing table. In OpenBSD, it is possible 
to have multiple routes to the same destination, and are differentiated by 
priority. This capability does not exist in FreeBSD.

Let me just get right into the details by outlining a functioning OpenBSD 
system, and where FreeBSD's issues are.

This is my example ospfd.conf,

01| router-id 0.0.0.1
02| redistribute connected
03| redistribute static
04| area 0.0.0.0 {
05|         interface vlan1
06| }

Below is output from `netstat -rn' taken form an OpenBSD machine before the 
OpenOSPFd process was started. The 192.168.11.0/24 network is used to exchange 
OSPF information with its neighbours. 192.168.12.0/24 is a connected network to 
this host. 192.168.13.0/24 is one hop away (via 192.168.11.2, its only 
neighbour).

07| Destination        Gateway            Flags   Refs      Use   Mtu  Prio 
Iface
08| 127/8              127.0.0.1          UGRS       0        0 33160     8 lo0
09| 127.0.0.1          127.0.0.1          UH         1        0 33160     4 lo0
10| 192.168.11/24      link#5             UC         0        0     -     4 
vlan1
11| 192.168.12/24      link#6             UC         0        0     -     4 
vlan2
12| 224/4              127.0.0.1          URS        0        0 33160     8 lo0

And this is `netstat -rn' taken after OpenOSPFd finished negotiating with its 
neighbour,

13| Destination        Gateway            Flags   Refs      Use   Mtu  Prio 
Iface
14| 127/8              127.0.0.1          UGRS       0        0 33160     8 lo0
15| 127.0.0.1          127.0.0.1          UH         1        0 33160     4 lo0
16| 192.168.11/24      link#5             UC         2        0     -     4 
vlan1
17| 192.168.11/24      192.168.11.1       UG         0        0     -    32 
vlan1
18| 192.168.11.1       00:50:56:96:00:89  UHLc       1        0     -     4 lo0
19| 192.168.11.2       00:50:56:96:00:90  UHLc       2        7     -     4 
vlan1
20| 192.168.12/24      link#6             UC         0        0     -     4 
vlan2
21| 192.168.13/24      192.168.11.2       UG         0        0     -    32 
vlan1
22| 224/4              127.0.0.1          URS        0        0 33160     8 lo0

Notice there are multiple entries for 192.168.11.0/24 (line #16-17). Line #17 
was added by ospfd.

Before continuing, I'm going to paste the equivalent information on FreeBSD's 
side, so that we can better compare. Below is `netstat -rn' taken before ospfd 
is started,

23| Destination        Gateway            Flags    Refs      Use  Netif Expire
24| 127.0.0.1          link#3             UH          0      139    lo0
25| 192.168.11.0/24    link#1             U           0        0    em0
26| 192.168.11.1       link#1             UHS         0        0    lo0
27| 192.168.12.0/24    link#9             U           0        0 em0_vl
28| 192.168.12.1       link#9             UHS         0        0    lo0

And this is `netstat -rn' taken after OpenOSPFd finished negotiating with its 
neighbour,

29| Destination        Gateway            Flags    Refs      Use  Netif Expire
30| 127.0.0.1          link#3             UH          0      147    lo0
31| 192.168.11.0/24    192.168.1.1        U           1        6    em0
32| 192.168.11.1       link#1             UHS         0        0    lo0
33| 192.168.12.0/24    link#9             U           0        0 em0_vl
34| 192.168.12.1       link#9             UHS         0        0    lo0
35| 192.168.13.0/24    192.168.1.2        UG          0        0    em0
36| 192.168.13.1/32    192.168.1.2        UG          0        0    em0

Notice there's only one entry for 192.168.11.0/24 (line #25 got replaced with 
line #31).

And that's really the cruft of the issue: in FreeBSD you can only have the one 
network route, whereas in OpenBSD, you can have multiple. When a neighbour goes 
away in FreeBSD, the 192.168.11.0/24 route gets deleted. In OpenBSD, there's no 
negative impact, since there are multiple routes to the same network. Using our 
example, line #10 still exists as line #16 in OpenBSD, line #25 gets deleted 
and line #31 gets created in FreeBSD.

This isn't really a bug, it's more a difference in capabilities between 
FreeBSD's and OpenBSD's respective networking. OpenOSPFd doesn't seem to have 
any special considerations for FreeBSD.

The Fix / Workaround
--------------------

The concept is simple: create an IP alias where the network overlaps the 
existing IP/network.
In our example, 192.168.11.0/24 is used to exchange OSPF information. Create an 
alias of 192.168.10.1/23. That way when the 192.168.11.0/24 route gets deleted, 
the systems will be accessible to each other over the 192.168.10.0/23 route. In 
order for this to work as expected, you'll need to make a couple changes to 
your ospfd.conf file.

This is the original ospfd.conf file taken from the FreeBSD system,

37| router-id 0.0.0.1
38| redistribute connected
39| redistribute static
40| area 0.0.0.0 {
41|         interface em0
42| }

And this is what it looks like after adding the IP alias,

43| router-id 0.0.0.1
44| no redistribute 192.168.10.0/23
45| redistribute connected
46| redistribute static
47| area 0.0.0.0 {
48|         interface em0:192.168.11.1
49| }

The `no distribute' is critical.

Could people share their comments and experiences with OpenOSPFd on FreeBSD?


_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"

Reply via email to