diff options
author | Paul Jakma <paul.jakma@sun.com> | 2006-08-30 18:47:37 +0000 |
---|---|---|
committer | Paul Jakma <paul.jakma@sun.com> | 2006-08-30 18:47:37 +0000 |
commit | b5aeb4410ae3722a5f331850acbc84c39e3fcd9f (patch) | |
tree | 7af84f1ffe17a5b1444f57f0cb5f0f34197f8837 | |
parent | c15deb1b7428a2baedfb615b1a41fe28d48c598c (diff) |
[ospfd] Fix assertion in DB-exchange fix, hit by ogier-db-ex-opt commit
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.
-rw-r--r-- | ospfd/ChangeLog | 8 | ||||
-rw-r--r-- | ospfd/ospf_packet.c | 34 |
2 files changed, 21 insertions, 21 deletions
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog index 0015ee6d..4da013a8 100644 --- a/ospfd/ChangeLog +++ b/ospfd/ChangeLog @@ -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 diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c index d7a35645..91527395 100644 --- a/ospfd/ospf_packet.c +++ b/ospfd/ospf_packet.c @@ -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; } |