]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Fixes a bug related to implicit backbone on ABR.
authorOndrej Zajicek <santiago@crfreenet.org>
Wed, 10 Nov 2010 15:43:11 +0000 (16:43 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Wed, 10 Nov 2010 15:43:11 +0000 (16:43 +0100)
proto/ospf/ospf.c
proto/ospf/ospf.h
proto/ospf/topology.c

index a9dc1deed6ce89586d4386ddeabb575465f96f36..a2a38f4b1b5907d41550d22c4d24e897c84e24c9 100644 (file)
@@ -205,6 +205,7 @@ ospf_start(struct proto *p)
     oa = mb_allocz(p->pool, sizeof(struct ospf_area));
     add_tail(&po->area_list, NODE oa);
     po->areano++;
+    oa->ac = NULL;
     oa->stub = 0;
     oa->areaid = 0;
     oa->rt = NULL;
index 1ae83c1c8d67ae1a12dc1fc449a68b77c70a0c46..34b0545279338b117a0db8aca7339288d6fe6651 100644 (file)
@@ -701,7 +701,7 @@ struct ospf_area
 {
   node n;
   u32 areaid;
-  struct ospf_area_config *ac; /* Related area config */
+  struct ospf_area_config *ac; /* Related area config, might be NULL */
   int origrt;                  /* Rt lsa origination scheduled? */
   struct top_hash_entry *rt;   /* My own router LSA */
   struct top_hash_entry *pxr_lsa; /* Originated prefix LSA */
index 16a066763de63a725489f1f7568785b8908b1a6b..1ea1df1bcdf4ab4356da74f792633fe0c7f8e334 100644 (file)
@@ -157,6 +157,9 @@ get_seqnum(struct top_hash_entry *en)
 static int
 configured_stubnet(struct ospf_area *oa, struct ifa *a)
 {
+  if (!oa->ac)
+    return 0;
+
   struct ospf_stubnet_config *sn;
   WALK_LIST(sn, oa->ac->stubnet_list)
     {
@@ -309,8 +312,9 @@ originate_rt_lsa_body(struct ospf_area *oa, u16 *length)
   }
 
   struct ospf_stubnet_config *sn;
-  WALK_LIST(sn, oa->ac->stubnet_list)
-    if (!sn->hidden)
+  if (oa->ac)
+    WALK_LIST(sn, oa->ac->stubnet_list)
+      if (!sn->hidden)
       {
        ln = lsab_alloc(po, sizeof(struct ospf_lsa_rt_link));
        ln->type = LSART_STUB;
@@ -1197,7 +1201,7 @@ originate_prefix_rt_lsa_body(struct ospf_area *oa, u16 *length)
 
   /* If there are some configured vlinks, add some global address,
      which will be used as a vlink endpoint. */
-  if (!EMPTY_LIST(oa->ac->vlink_list) && !host_addr && vlink_addr)
+  if (oa->ac && !EMPTY_LIST(oa->ac->vlink_list) && !host_addr && vlink_addr)
   {
     put_ipv6_prefix(lsab_alloc(po, IPV6_PREFIX_SPACE(MAX_PREFIX_LENGTH)),
                    vlink_addr->ip, MAX_PREFIX_LENGTH, OPT_PX_LA, 0);
@@ -1205,8 +1209,9 @@ originate_prefix_rt_lsa_body(struct ospf_area *oa, u16 *length)
   }
 
   struct ospf_stubnet_config *sn;
-  WALK_LIST(sn, oa->ac->stubnet_list)
-    if (!sn->hidden)
+  if (oa->ac)
+    WALK_LIST(sn, oa->ac->stubnet_list)
+      if (!sn->hidden)
       {
        flags = (sn->px.len < MAX_PREFIX_LENGTH) ? 0 : OPT_PX_LA;
        put_ipv6_prefix(lsab_alloc(po, IPV6_PREFIX_SPACE(sn->px.len)),