From f76594a2e32f7e7be3de09b1af92c1d8426a059b Mon Sep 17 00:00:00 2001 From: Greg Troxel Date: Thu, 2 Aug 2007 14:07:07 +0000 Subject: Bugzilla #384. 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. http://bugzilla.quagga.net/attachment.cgi?id=235&action=view --- zebra/ChangeLog | 6 ++++++ zebra/rt_socket.c | 15 +++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) (limited to 'zebra') 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. */ -- cgit v1.2.1