OSPFD 2.0 Bug fixes
This page briefly describes each of the bug fixes made to
the OSPFD 2.0 implementation. The base 2.0 sources can
be retrieved as a
gzipped tar file.
For each bug fix a
is included that can be used to update the source
distribution using the
patch utility. To apply a patch,
change to the top-level directory of your ospfd distribution,
and then type
patch -Np1 < patch_file, where
is one of the patches contained in this directory.
Patches must be applied in order. They were produced using
diff -Nabur old_dir new_dir.
You can download the entire 2.x release in one gzipped tar
file by clicking
OSPFD 2.0 Patch listing
Two separate fixes. First, we prevent forwarding addresses
on directly attached but unadvertised subnets from being resolved,
which allows static routes with these next hops to be installed
in the kernel routing table and advertised in AS-external-LSAs
with forwarding address set to 0.0.0.0. Second, we reference
iff they are non-zero.
Changes in preparation for the implementation of the hitless
OSPF restart scheme described in
(a) Added the ability to detect routing table entries left
in the kernel from previous ospfd runs; these are called remnants.
ospfd calls the system interface routine
OspfSysCalls::upload_remnants() to request that it
be notified of all remnants. Each remnant is then passed to ospfd
in a call to the API routine
whereupon ospfd deletes the remnant if it is no longer valid.
(b) Have the simulated ospfds keep their own copy of the routing
table, where it can persist over ospfd restarts. (c) Implement
a restart menu tab in the ospf simulator.
Since host routes are (a) advertised in other than their
configured area if their configured area has no active real
interfaces and (b) have been implemented as a (pseudo) interface,
we have to remove an interface from all areas' interface maps
when the interface is deleted.
An implementation of the latest OSPF Hitless Restart specification
All support implemented in the common code, and a port to the OSPF
simulator is also supplied. To execute a hitless restart of a simulated
Router->Hitless Restart and click on the desired router.
After the router has prepared for hitless restart it will log a message
"Hitless restart preparation complete". At that time, selecting
Router->Hitless Restart and clicking on the router a second
time will restart the router in hitless restart mode. When hitless
restart is completed, a message "Exiting hitless restart" will be
logged along with a success or failure indication.
In addition, the following features were added, and bugs were fixed:
The ability to display link-local Opaque-LSAs from ospfd_browser.
A bug fix to the link-local Opaque-LSA handling, which would previously
cause the router to crash when parsing such LSAs (
Fix a crash that could occur when a down interface is advertised
due to MinLSInterval (
More bug fixes involving the (re)advertising of host routes when the
connections to their area go away or are restored (
Don't send Hellos at the slower polled rate until a full window
of Hellos have been sent. This fix applies to demand circuits only.
Stop timers when they are destroyed (
Two bug fixes related to memory allocation/deallocation.
Changes required to get the Linux port and simulator working under
RedHat 7.1 (Linux 2.4). Also, two fixes dealing with deferred LSAs. The first
fixes a problem where the router would mistakenly defer a received
self-originated LSA for up to 30 minutes. The second fixes a crash when
a deferred LSA still references a broadcast/NBMA network that has since
been deleted from the router's configuration.
Three unrelated bug fixes: a) Interfaces can now be identified
in the ospfd config file by name (e.g., "eth0", "tunl1", etc.) instead
of IP address. This allows configuration of unnumbered interfaces, including
IP-in-IP tunnels, b) Fix
OSPF::schedule_refresh() so that LSA reorigination
will never corrupt the age bins (Exercise 6.2), and c) Fix the
cost reported for routing table entries in the ospfd monitor interface.
Completed coding that allows the MOSPF implementation to use the
Linux kernel mrouted support, thereby turning a Linux machine into a MOSPF
router. The mrouted support is not quite enough to implement
a full MOSPF router though. In particular, you don't get support
for a) NBMA interfaces, b) unnumbered interfaces, or c) multiple
point-to-point links between a single pair of MOSPF routers. However,
if you are just using LAN interfaces and IPIP tunnels, everything
should work fine. One note on supporting IPIP tunnels: ospfd doesn't
create them. You have to create them manually using
and admin them up using
/sbin/ifconfig. Then they can be
referred to be name (e.g., "tunl1") in the ospfd configuration file.
Two patches to MOSPF. The first fixes a crash that occurred when
an IGMP message was received on a non-MOSPF interface. The second
allows the MOSPF router to monitor IGMP membership on all MOSPF
interfaces, instead of the previous behavior which monitored group
membership only on broadcast subnets. If you want to monitor
group membership but you don't want OSPF packets exchanged on an interface,
configured the interface as passive.
Fix to the Linux routing table interface. Must set TOS to 0 in
netlink messages, or else kernels with TOS enabled
CONFIG_IP_ROUTE_TOS) will install multiple routing
table entries with random TOS assignments. Thanks to Elwyn Davies
for pointing this out.
More MOSPF patches. Allow IGMP to be run over interfaces other
than broadcast interfaces. However, in order to enable IGMP
on these other interface types in the Linux port, must include
igmp interface command for each interface in
/etc/ospfd.conf. Also, the following MOSPF fixes,
courtesy of Marc Castejon: (a) Join 126.96.36.199, so that we
can receive IGMP leave messages, (b) Fix Last Member Query processing and
(c) ignore MaxAge group-membership-LSAs in multicast path calculation.
Two unrelated changes. The first is to the logic which keeps
the ospfd routing tabl;e in synch with the Linux kernel's forwarding
table. When the last address is deleted from an interface, the Linux
kernel silently deletes all forwarding entries going over the
interface. The Linux port of ospfd has now been changed so that
deletion of the last address is treated as an interface down event,
which causes ospfd to also delete the forwarding entries. The second
change affects the advertisement of point-to-point links. We key on the
interface mask configured for the link. If the mask is 0 or all ones, we
advertise the neighbor's IP address (the previous behavior). Otherwise,
we advertise a stub link for the entire subnet. In addition, the code
will now advertise subnets for tunnels, whereas before tunnels were
always treated as unnumbered links.
When deleting an area or interface, must make sure that the
associated LSAs are deleted also, but you don't have to reflood
them. Previously they could hang around if you weren't allowed to
garbage collect the MaxAge LSAs (for example, one ore more
neighbors were in Database Exchange state), causing the router to crash.
Implementation of the changes in the latest version
of the OSPF Hitless Restart draft
Two unrelated bug fixes. First, reparse any remaining network-LSAs
whose Link State ID match the LSA being deleted, as described
on page 91 of OSPF Complete Implementation -- this was one of those
rare occasions where the documentation was mor up-to-date
than the code. Second, make routers with DR priority of 0 respond
to the first Hello from a DR-eligible router, otherwise these
adjacencies would never come up. Added the
configuration command to the simulator so that you can now test
differing DR priorities.
Bug fixes to the NBMA/Point-to-MultiPoint Hello logic. Code
now sends Hellos at the correct rate depending on neighbor state.
Previously, would not send hellos to NBMA neighbor that transitioned
to Down state (should send at the reduced rate of PollInterval).