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.
This commit is contained in:
Paul Jakma 2010-04-15 08:11:51 +01:00
parent dfbd5176ea
commit 4dd87df5af
2 changed files with 15 additions and 6 deletions

View File

@ -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);

View File

@ -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. */