diff options
| -rw-r--r-- | ospfd/ospf_lsa.h | 3 | ||||
| -rw-r--r-- | ospfd/ospf_nsm.c | 2 | ||||
| -rw-r--r-- | ospfd/ospf_opaque.c | 13 | ||||
| -rw-r--r-- | 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 fee34708..72e2f8a5 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 279d2a01..cbc31716 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 6e90011e..aa126e19 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 f49fe460..22730645 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,  | 
