diff options
-rw-r--r-- | zebra/ChangeLog | 6 | ||||
-rw-r--r-- | zebra/rt_socket.c | 15 |
2 files changed, 13 insertions, 8 deletions
diff --git a/zebra/ChangeLog b/zebra/ChangeLog index ab6688c6..b7f2e725 100644 --- a/zebra/ChangeLog +++ b/zebra/ChangeLog @@ -1,3 +1,9 @@ +2007-08-02 Denis Ovsienko + + * rt_socket.c (kernel_rtm_ipv4): Only call rtm_write when changes + are intended. Don't set FIB flag on failed additions (such as + occur with multiple paths. + 2007-06-25 Denis Ovsienko * zebra_rib.c: (rib_add_ipv4_multipath) Loop through RIB diff --git a/zebra/rt_socket.c b/zebra/rt_socket.c index 0182fbd6..0cdb0aca 100644 --- a/zebra/rt_socket.c +++ b/zebra/rt_socket.c @@ -99,9 +99,7 @@ kernel_rtm_ipv4 (int cmd, struct prefix *p, struct rib *rib, int family) if ((cmd == RTM_ADD && CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE)) || (cmd == RTM_DELETE -#if 0 && CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB) -#endif )) { if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_RECURSIVE)) @@ -138,9 +136,6 @@ kernel_rtm_ipv4 (int cmd, struct prefix *p, struct rib *rib, int family) } } - if (cmd == RTM_ADD) - SET_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB); - if (gate && p->prefixlen == 32) mask = NULL; else @@ -152,7 +147,6 @@ kernel_rtm_ipv4 (int cmd, struct prefix *p, struct rib *rib, int family) #endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */ mask = &sin_mask; } - } error = rtm_write (cmd, (union sockunion *)&sin_dest, @@ -169,8 +163,13 @@ kernel_rtm_ipv4 (int cmd, struct prefix *p, struct rib *rib, int family) nexthop_num, error); } #endif - - nexthop_num++; + if (error == 0) + { + nexthop_num++; + if (cmd == RTM_ADD) + SET_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB); + } + } } /* If there is no useful nexthop then return. */ |