]> git.puffer.fish Git - mirror/frr.git/commitdiff
[ospfd] Fix assertion in DB-exchange fix, hit by ogier-db-ex-opt commit
authorPaul Jakma <paul.jakma@sun.com>
Wed, 30 Aug 2006 18:47:37 +0000 (18:47 +0000)
committerPaul Jakma <paul.jakma@sun.com>
Wed, 30 Aug 2006 18:47:37 +0000 (18:47 +0000)
2006-08-28 Andy Gay <andy@andynet.net>

* ospf_packet.c: (ospf_make_db_desc) Assert added with More-bit
  fixes does not hold up with addition of Ogier DB-Exchange
  optimisation, which can empty the db-summary list in between
  sent DD packets. Remove assert, update More-bit always when
  in Exchange.

ospfd/ChangeLog
ospfd/ospf_packet.c

index 0015ee6df3937ea326bf21adc832fcbc106667f7..4da013a8c6c00d29bbd3169ca3dc909a4d9e5df3 100644 (file)
@@ -1,3 +1,11 @@
+2006-08-28 Andy Gay <andy@andynet.net>
+
+       * ospf_packet.c: (ospf_make_db_desc) Assert added with More-bit
+         fixes does not hold up with addition of Ogier DB-Exchange
+         optimisation, which can empty the db-summary list in between
+         sent DD packets. Remove assert, update More-bit always when
+         in Exchange.
+
 2006-08-27 J.J. Krabbendam <jkrabbendam@aimsys.nl>
 
        * ospfd.c: (ospf_finish_final) default redistribute should be
index d7a3564501b8562c031ceb7ee775eebe8a13640a..915273954aa6cb9818d6ca5da9a49650fe009f9b 100644 (file)
@@ -2712,25 +2712,9 @@ ospf_make_db_desc (struct ospf_interface *oi, struct ospf_neighbor *nbr,
   /* Set DD Sequence Number. */
   stream_putl (s, nbr->dd_seqnum);
 
+  /* shortcut unneeded walk of (empty) summary LSDBs */
   if (ospf_db_summary_isempty (nbr))
-    {
-      /* Sanity check:
-       *
-       * Must be here either:
-       * - Initial DBD (ospf_nsm.c)
-       *   - M must be set
-       * or
-       * - finishing Exchange, and DB-Summary list empty
-       *   - from ospf_db_desc_proc()
-       *   - M must not be set
-       */
-      if (nbr->state >= NSM_Exchange)
-       assert (!IS_SET_DD_M(nbr->dd_flags));
-      else
-        assert (IS_SET_DD_M(nbr->dd_flags));
-
-      return length;
-    }
+    goto empty;
 
   /* Describe LSA Header from Database Summary List. */
   lsdb = &nbr->db_sum;
@@ -2785,9 +2769,17 @@ ospf_make_db_desc (struct ospf_interface *oi, struct ospf_neighbor *nbr,
   /* Update 'More' bit */
   if (ospf_db_summary_isempty (nbr))
     {
-      UNSET_FLAG (nbr->dd_flags, OSPF_DD_FLAG_M);
-      /* Rewrite DD flags */
-      stream_putc_at (s, pp, nbr->dd_flags);
+empty:
+      if (nbr->state >= NSM_Exchange)
+        {
+          UNSET_FLAG (nbr->dd_flags, OSPF_DD_FLAG_M);
+          /* Rewrite DD flags */
+          stream_putc_at (s, pp, nbr->dd_flags);
+        }
+      else
+        {
+          assert (IS_SET_DD_M(nbr->dd_flags));
+        }
     }
   return length;
 }