summaryrefslogtreecommitdiff
path: root/zebra
diff options
context:
space:
mode:
Diffstat (limited to 'zebra')
-rw-r--r--zebra/rt_socket.c57
1 files changed, 31 insertions, 26 deletions
diff --git a/zebra/rt_socket.c b/zebra/rt_socket.c
index 0cdb0aca..b06c586a 100644
--- a/zebra/rt_socket.c
+++ b/zebra/rt_socket.c
@@ -96,6 +96,11 @@ kernel_rtm_ipv4 (int cmd, struct prefix *p, struct rib *rib, int family)
{
gate = 0;
+ /*
+ * XXX We need to refrain from kernel operations in some cases,
+ * but this if statement seems overly cautious - what about
+ * other than ADD and DELETE?
+ */
if ((cmd == RTM_ADD
&& CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE))
|| (cmd == RTM_DELETE
@@ -127,14 +132,14 @@ kernel_rtm_ipv4 (int cmd, struct prefix *p, struct rib *rib, int family)
|| nexthop->type == NEXTHOP_TYPE_IFNAME
|| nexthop->type == NEXTHOP_TYPE_IPV4_IFINDEX)
ifindex = nexthop->ifindex;
- if (nexthop->type == NEXTHOP_TYPE_BLACKHOLE)
- {
- struct in_addr loopback;
- loopback.s_addr = htonl (INADDR_LOOPBACK);
- sin_gate.sin_addr = loopback;
- gate = 1;
- }
- }
+ if (nexthop->type == NEXTHOP_TYPE_BLACKHOLE)
+ {
+ struct in_addr loopback;
+ loopback.s_addr = htonl (INADDR_LOOPBACK);
+ sin_gate.sin_addr = loopback;
+ gate = 1;
+ }
+ }
if (gate && p->prefixlen == 32)
mask = NULL;
@@ -148,27 +153,27 @@ kernel_rtm_ipv4 (int cmd, struct prefix *p, struct rib *rib, int family)
mask = &sin_mask;
}
- error = rtm_write (cmd,
- (union sockunion *)&sin_dest,
- (union sockunion *)mask,
- gate ? (union sockunion *)&sin_gate : NULL,
- ifindex,
- rib->flags,
- rib->metric);
+ error = rtm_write (cmd,
+ (union sockunion *)&sin_dest,
+ (union sockunion *)mask,
+ gate ? (union sockunion *)&sin_gate : NULL,
+ ifindex,
+ rib->flags,
+ rib->metric);
#if 0
- if (error)
- {
- zlog_info ("kernel_rtm_ipv4(): nexthop %d add error=%d.",
- nexthop_num, error);
- }
+ if (error)
+ {
+ zlog_info ("kernel_rtm_ipv4(): nexthop %d add error=%d.",
+ nexthop_num, error);
+ }
#endif
- if (error == 0)
- {
- nexthop_num++;
- if (cmd == RTM_ADD)
- SET_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB);
- }
+ if (error == 0)
+ {
+ nexthop_num++;
+ if (cmd == RTM_ADD)
+ SET_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB);
+ }
}
}