diff options
author | Paul Jakma <paul@quagga.net> | 2010-04-15 08:11:51 +0100 |
---|---|---|
committer | Paul Jakma <paul@quagga.net> | 2010-12-08 17:13:19 +0000 |
commit | 4dd87df5af8a59174362e44f83df11f12457c8b4 (patch) | |
tree | bec3ba26fcf730d6348567ddd530e74846af824b | |
parent | dfbd5176ea863e378999c03314dc42adfdd4e424 (diff) |
ospfd: Remove oi field from LSA, have network_lsa_refresh look up when needed
* ospf_lsa.h: (struct ospf_lsa) remove oi pointer
* ospf_lsa.c: (ospf_network_lsa_refresh) instead of keeping a pointer, just
lookup the oi when it's needed. This decouples network LSA from oi lifetime
and avoids having to invalidate pointers in LSAs when an oi changes,
simplifying the code.
-rw-r--r-- | ospfd/ospf_lsa.c | 18 | ||||
-rw-r--r-- | ospfd/ospf_lsa.h | 3 |
2 files changed, 15 insertions, 6 deletions
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c index 7e71b5d7..842df49c 100644 --- a/ospfd/ospf_lsa.c +++ b/ospfd/ospf_lsa.c @@ -1045,7 +1045,6 @@ ospf_network_lsa_new (struct ospf_interface *oi) } new->area = oi->area; - new->oi = oi; SET_FLAG (new->flags, OSPF_LSA_SELF | OSPF_LSA_SELF_CHECKED); /* Copy LSA to store. */ @@ -1114,10 +1113,23 @@ ospf_network_lsa_refresh (struct ospf_lsa *lsa) struct ospf_area *area = lsa->area; struct ospf_lsa *new, *new2; struct ospf_if_params *oip; - struct ospf_interface *oi = lsa->oi; + struct ospf_interface *oi; assert (lsa->data); - + + /* Retrieve the oi for the network LSA */ + oi = ospf_if_lookup_by_local_addr (area->ospf, NULL, lsa->data->id); + if (oi == NULL) + { + if (IS_DEBUG_OSPF (lsa, LSA_GENERATE)) + { + zlog_debug ("LSA[Type%d:%s]: network-LSA refresh: " + "no oi found, ick, ignoring.", + lsa->data->type, inet_ntoa (lsa->data->id)); + ospf_lsa_header_dump (lsa->data); + } + return NULL; + } /* Delete LSA from neighbor retransmit-list. */ ospf_ls_retransmit_delete_nbr_area (area, lsa); diff --git a/ospfd/ospf_lsa.h b/ospfd/ospf_lsa.h index 0959a638..fee34708 100644 --- a/ospfd/ospf_lsa.h +++ b/ospfd/ospf_lsa.h @@ -114,9 +114,6 @@ struct ospf_lsa /* Refreshement List or Queue */ int refresh_list; - - /* For Type-9 Opaque-LSAs or Type-2 Network-LSAs */ - struct ospf_interface *oi; }; /* OSPF LSA Link Type. */ |