summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhasso <hasso>2004-03-18 19:18:33 +0000
committerhasso <hasso>2004-03-18 19:18:33 +0000
commit0d85b9958d6db05fb9d81afbee96332f142654bd (patch)
treefb0f35cb44254bdfd9b2d907800b1ec513bfc232
parentf1d92e17ab5f1475018e353ce72e94ebe7a81a44 (diff)
Amir's fix case where opaque capability is switched "ON -> OFF -> ON".
[quagga-dev 843]
-rw-r--r--ospfd/ChangeLog6
-rw-r--r--ospfd/ospf_opaque.c27
2 files changed, 27 insertions, 6 deletions
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog
index 3ec877f5..ca9dd04d 100644
--- a/ospfd/ChangeLog
+++ b/ospfd/ChangeLog
@@ -1,3 +1,9 @@
+2004-03-18 Amir Guindehi <amir@datacore.ch>
+
+ * ospf_opaque.c: Attempt to correct the incorrect behavior of
+ Quagga's ospfd in the special situation that a node's opaque
+ capability has changed as "ON -> OFF -> ON". [quagga-dev 843].
+
2004-02-19 Sowmini Varadhan <sowmini.varadhan@sun.com>
* ospf_abr.c: (ospf_abr_update_aggregate) UNH 3.12b,c, address range
diff --git a/ospfd/ospf_opaque.c b/ospfd/ospf_opaque.c
index f1fe783c..636839c0 100644
--- a/ospfd/ospf_opaque.c
+++ b/ospfd/ospf_opaque.c
@@ -1385,10 +1385,15 @@ ospf_opaque_lsa_originate_schedule (struct ospf_interface *oi, int *delay0)
{
for (node = listhead (oi->opaque_lsa_self); node; nextnode (node))
{
+ /*
+ * removed the test for
+ * (! list_isempty (oipt->id_list)) * Handler is already active. *
+ * because opaque cababilities ON -> OFF -> ON result in list_isempty (oipt->id_list)
+ * not being empty.
+ */
if ((oipt = getdata (node)) == NULL /* Something wrong? */
|| oipt->t_opaque_lsa_self != NULL /* Waiting for a thread call. */
- || oipt->status == PROC_SUSPEND /* Cannot originate now. */
- || ! list_isempty (oipt->id_list)) /* Handler is already active. */
+ || oipt->status == PROC_SUSPEND) /* Cannot originate now. */
continue;
ospf_opaque_lsa_reoriginate_schedule ((void *) oi,
@@ -1401,10 +1406,15 @@ ospf_opaque_lsa_originate_schedule (struct ospf_interface *oi, int *delay0)
{
for (node = listhead (area->opaque_lsa_self); node; nextnode (node))
{
+ /*
+ * removed the test for
+ * (! list_isempty (oipt->id_list)) * Handler is already active. *
+ * because opaque cababilities ON -> OFF -> ON result in list_isempty (oipt->id_list)
+ * not being empty.
+ */
if ((oipt = getdata (node)) == NULL /* Something wrong? */
|| oipt->t_opaque_lsa_self != NULL /* Waiting for a thread call. */
- || oipt->status == PROC_SUSPEND /* Cannot originate now. */
- || ! list_isempty (oipt->id_list)) /* Handler is already active. */
+ || oipt->status == PROC_SUSPEND) /* Cannot originate now. */
continue;
ospf_opaque_lsa_reoriginate_schedule ((void *) area,
@@ -1417,10 +1427,15 @@ ospf_opaque_lsa_originate_schedule (struct ospf_interface *oi, int *delay0)
{
for (node = listhead (top->opaque_lsa_self); node; nextnode (node))
{
+ /*
+ * removed the test for
+ * (! list_isempty (oipt->id_list)) * Handler is already active. *
+ * because opaque cababilities ON -> OFF -> ON result in list_isempty (oipt->id_list)
+ * not being empty.
+ */
if ((oipt = getdata (node)) == NULL /* Something wrong? */
|| oipt->t_opaque_lsa_self != NULL /* Waiting for a thread call. */
- || oipt->status == PROC_SUSPEND /* Cannot originate now. */
- || ! list_isempty (oipt->id_list)) /* Handler is already active. */
+ || oipt->status == PROC_SUSPEND) /* Cannot originate now. */
continue;
ospf_opaque_lsa_reoriginate_schedule ((void *) top,