summaryrefslogtreecommitdiff
path: root/ripngd
diff options
context:
space:
mode:
authorpaul <paul>2003-04-19 00:11:28 +0000
committerpaul <paul>2003-04-19 00:11:28 +0000
commit5f37d86f837e666f7915ee6dc971e44e495d41f3 (patch)
treea31e657803f2600dd1c0aac533e2087de8055df2 /ripngd
parentc2191eaee5686cdcb54c5f26afffa4a029c691de (diff)
From: Israel Keys <ikeys@agile.tv>
Subject: [zebra 18677] zebra initialisation bug and patch Hi All, I have found a bug in zebra that prevents its routing table and interface database from being initialised properly. The problem occurs when a request is made via the netlink socket but the kernel produces a EWOULDBLOCK/EAGAIN when the result is trying to be retrieved via a recvmsg(). Zebra does not do anything about this and continues to function (with an empty routing table and interface list) as if nothing has happened. With no such information the routing protocol dosn't work! Two functions are called during the initialisation of Zebra: interface_lookup_netlink() and netlink_route_read() - obtaining the interfaces and routing table from the kernel respectively. These are the only time these functions are called. These functions, interface_lookup_netlink() and netlink_route_read(), use netlink_parse_info() to recieve the data from the netlink socket. The problem is, netlink_parse_info() returns (without error) when its call to recvmsg() results in an errno EWOULDBLOCK/EAGAIN. This behaviour is expected by other funtions calling netlink_parse_info() - netlink_parse_info is simply recalled at a later stage. However, on initialisation it is never recalled. Since zebra is expected to nothing else during initialisation it was easiest to temporarily change the netlink socket to BLOCK and wait indefinently until the kernel responds with the required information. Attached is a patch with these changes. Comments and questions are welcome. Please inform me if this patch is added to the Zebra source. --israel
Diffstat (limited to 'ripngd')
0 files changed, 0 insertions, 0 deletions