]> git.proxmox.com Git - mirror_frr.git/commitdiff
Bugzilla #384.
authorGreg Troxel <gdt@fnord.ir.bbn.com>
Thu, 2 Aug 2007 14:07:07 +0000 (14:07 +0000)
committerGreg Troxel <gdt@fnord.ir.bbn.com>
Thu, 2 Aug 2007 14:07:07 +0000 (14:07 +0000)
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
zebra/rt_socket.c

index ab6688c67943422f8c15d2401ac25db30de852c7..b7f2e725d9cf62ef08f7db7de2205a0877d7c50f 100644 (file)
@@ -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
index 0182fbd682860036bee7938c3492f73a7cdfc36b..0cdb0aca2b8a1503752635b343f3ff094e43ac67 100644 (file)
@@ -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. */