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. */  | 
