123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- From d71ea65270408a45e4bec036671ec73b24b994b4 Mon Sep 17 00:00:00 2001
- From: Paul Jakma <paul@quagga.net>
- Date: Tue, 22 Mar 2011 15:23:55 +0000
- Subject: [PATCH 1/1] ospfd: Compile fix for opaque support
- * ospfd: Refresher logic cleanup broke OSPF opaque, which does its own thing
- with regard to refresher logic and which also, in the protocol, requires
- implementations to keep state of which OI an LSA is received on (rather
- than providing information in the LSA to allow it to be looked up - as
- other LSAs requiring such assocation were careful to do).
- * ospf_lsa.h: (struct ospf_interface) Add back the pointer to oi, but only
- for type-9 now.
- * ospf_nsm.c: (ospf_db_summary_add) check the oi actually exists first -
- doesn't obviate the need for opaque to ensure oi pointers get cleaned up
- when ospf_interfaces disappear.
- * ospf_opaque.{c,h}: (ospf_opaque_functab,ospf_opaque_lsa_refresh) Refresher
- LSA functions now need to return the LSA to the general refresh logic,
- to indicate whether the LSA was refreshed.
- ---
- ospfd/ospf_lsa.h | 3 +++
- ospfd/ospf_nsm.c | 2 +-
- ospfd/ospf_opaque.c | 13 +++++++------
- ospfd/ospf_opaque.h | 4 ++--
- 4 files changed, 13 insertions(+), 9 deletions(-)
- diff --git a/ospfd/ospf_lsa.h b/ospfd/ospf_lsa.h
- index fee3470..72e2f8a 100644
- --- a/ospfd/ospf_lsa.h
- +++ b/ospfd/ospf_lsa.h
- @@ -114,6 +114,9 @@ struct ospf_lsa
-
- /* Refreshement List or Queue */
- int refresh_list;
- +
- + /* For Type-9 Opaque-LSAs */
- + struct ospf_interface *oi;
- };
-
- /* OSPF LSA Link Type. */
- diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c
- index 279d2a0..cbc3171 100644
- --- a/ospfd/ospf_nsm.c
- +++ b/ospfd/ospf_nsm.c
- @@ -216,7 +216,7 @@ ospf_db_summary_add (struct ospf_neighbor *nbr, struct ospf_lsa *lsa)
- {
- case OSPF_OPAQUE_LINK_LSA:
- /* Exclude type-9 LSAs that does not have the same "oi" with "nbr". */
- - if (lsa->oi != nbr->oi)
- + if (nbr->oi && ospf_if_exists (lsa->oi) != nbr->oi)
- return 0;
- break;
- case OSPF_OPAQUE_AREA_LSA:
- diff --git a/ospfd/ospf_opaque.c b/ospfd/ospf_opaque.c
- index 6e90011..aa126e1 100644
- --- a/ospfd/ospf_opaque.c
- +++ b/ospfd/ospf_opaque.c
- @@ -251,7 +251,7 @@ struct ospf_opaque_functab
- void (* config_write_debug )(struct vty *vty);
- void (* show_opaque_info )(struct vty *vty, struct ospf_lsa *lsa);
- int (* lsa_originator)(void *arg);
- - void (* lsa_refresher )(struct ospf_lsa *lsa);
- + struct ospf_lsa *(* lsa_refresher )(struct ospf_lsa *lsa);
- int (* new_lsa_hook)(struct ospf_lsa *lsa);
- int (* del_lsa_hook)(struct ospf_lsa *lsa);
- };
- @@ -354,7 +354,7 @@ ospf_register_opaque_functab (
- void (* config_write_debug )(struct vty *vty),
- void (* show_opaque_info )(struct vty *vty, struct ospf_lsa *lsa),
- int (* lsa_originator)(void *arg),
- - void (* lsa_refresher )(struct ospf_lsa *lsa),
- + struct ospf_lsa *(* lsa_refresher )(struct ospf_lsa *lsa),
- int (* new_lsa_hook)(struct ospf_lsa *lsa),
- int (* del_lsa_hook)(struct ospf_lsa *lsa))
- {
- @@ -1608,12 +1608,13 @@ out:
- return new;
- }
-
- -void
- +struct ospf_lsa *
- ospf_opaque_lsa_refresh (struct ospf_lsa *lsa)
- {
- struct ospf *ospf;
- struct ospf_opaque_functab *functab;
- -
- + struct ospf_lsa *new = NULL;
- +
- ospf = ospf_lookup ();
-
- if ((functab = ospf_opaque_functab_lookup (lsa)) == NULL
- @@ -1633,9 +1634,9 @@ ospf_opaque_lsa_refresh (struct ospf_lsa *lsa)
- ospf_lsa_flush (ospf, lsa);
- }
- else
- - (* functab->lsa_refresher)(lsa);
- + new = (* functab->lsa_refresher)(lsa);
-
- - return;
- + return new;
- }
-
- /*------------------------------------------------------------------------*
- diff --git a/ospfd/ospf_opaque.h b/ospfd/ospf_opaque.h
- index f49fe46..2273064 100644
- --- a/ospfd/ospf_opaque.h
- +++ b/ospfd/ospf_opaque.h
- @@ -120,7 +120,7 @@ ospf_register_opaque_functab (
- void (* config_write_debug )(struct vty *vty),
- void (* show_opaque_info )(struct vty *vty, struct ospf_lsa *lsa),
- int (* lsa_originator)(void *arg),
- - void (* lsa_refresher )(struct ospf_lsa *lsa),
- + struct ospf_lsa *(* lsa_refresher )(struct ospf_lsa *lsa),
- int (* new_lsa_hook)(struct ospf_lsa *lsa),
- int (* del_lsa_hook)(struct ospf_lsa *lsa)
- );
- @@ -143,7 +143,7 @@ extern void ospf_opaque_lsa_originate_schedule (struct ospf_interface *oi,
- int *init_delay);
- extern struct ospf_lsa *ospf_opaque_lsa_install (struct ospf_lsa *,
- int rt_recalc);
- -extern void ospf_opaque_lsa_refresh (struct ospf_lsa *lsa);
- +extern struct ospf_lsa *ospf_opaque_lsa_refresh (struct ospf_lsa *lsa);
-
- extern void ospf_opaque_lsa_reoriginate_schedule (void *lsa_type_dependent,
- u_char lsa_type,
- --
- 1.7.4
|