summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Jakma <paul@quagga.net>2010-04-15 08:11:51 +0100
committerPaul Jakma <paul@quagga.net>2010-12-08 17:13:19 +0000
commit4dd87df5af8a59174362e44f83df11f12457c8b4 (patch)
treebec3ba26fcf730d6348567ddd530e74846af824b
parentdfbd5176ea863e378999c03314dc42adfdd4e424 (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.c18
-rw-r--r--ospfd/ospf_lsa.h3
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. */