ospfd: Update Traffic Engineering support
These patches update original code to RFC3630 (OSPF-TE) and add support of
RFC5392 (Inter-AS v2) & RFC7471 (TE metric extensions) and partial support
of RFC6827 (ASON - GMPLS).
* ospfd/ospf_dump.[c,h]: Add new dump functions for Traffic Engineering
* ospfd/ospf_opaque.[c,h]: Add new TLV code points for RFC5392
* ospfd/ospf_packet.c: Update checking of OSPF_OPTION
* ospfd/ospf_vty.[c,h]: Update ospf_str2area_id
* ospfd/ospf_zebra.c: Add new function ospf_interface_link_params() to get
Link Parameters information from the interface to populate Traffic
Engineering metrics
* ospfd/ospfd.[c,h]: Update OSPF_OPTION flags (T -> MT and new DN)
* ospfd/ospf_te.[c,h]: Major modifications to update the code to new
link parameters structure and new RFCs
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
diff --git a/ospfd/ospf_opaque.c b/ospfd/ospf_opaque.c
index 988a2e5..6b069c8 100644
--- a/ospfd/ospf_opaque.c
+++ b/ospfd/ospf_opaque.c
@@ -213,6 +213,9 @@
case OPAQUE_TYPE_GRACE_LSA:
name = "Grace-LSA";
break;
+ case OPAQUE_TYPE_INTER_AS_LSA:
+ name = "Inter-AS TE-v2 LSA";
+ break;
default:
if (OPAQUE_TYPE_RANGE_UNASSIGNED (opaque_type))
name = "Unassigned";
@@ -1973,6 +1976,7 @@
struct opaque_info_per_type *oipt;
struct opaque_info_per_id *oipi;
struct ospf_lsa *lsa;
+ struct ospf *top;
int delay;
if ((oipt = lookup_opaque_info_by_type (lsa0)) == NULL
@@ -2004,7 +2008,10 @@
ospf_ls_retransmit_delete_nbr_area (lsa->area, lsa);
break;
case OSPF_OPAQUE_AS_LSA:
- ospf_ls_retransmit_delete_nbr_as (lsa0->area->ospf, lsa);
+ top = ospf_lookup ();
+ if ((lsa0->area != NULL) && (lsa0->area->ospf != NULL))
+ top = lsa0->area->ospf;
+ ospf_ls_retransmit_delete_nbr_as (top, lsa);
break;
default:
zlog_warn ("ospf_opaque_lsa_refresh_schedule: Unexpected LSA-type(%u)", lsa->data->type);
@@ -2049,6 +2056,9 @@
struct opaque_info_per_type *oipt;
struct opaque_info_per_id *oipi;
struct ospf_lsa *lsa;
+ struct ospf *top;
+
+ top = ospf_lookup ();
if ((oipt = lookup_opaque_info_by_type (lsa0)) == NULL
|| (oipi = lookup_opaque_info_by_id (oipt, lsa0)) == NULL)
@@ -2072,7 +2082,9 @@
ospf_ls_retransmit_delete_nbr_area (lsa->area, lsa);
break;
case OSPF_OPAQUE_AS_LSA:
- ospf_ls_retransmit_delete_nbr_as (lsa0->area->ospf, lsa);
+ if ((lsa0->area != NULL) && (lsa0->area->ospf != NULL))
+ top = lsa0->area->ospf;
+ ospf_ls_retransmit_delete_nbr_as (top, lsa);
break;
default:
zlog_warn ("ospf_opaque_lsa_flush_schedule: Unexpected LSA-type(%u)", lsa->data->type);
@@ -2096,7 +2108,7 @@
zlog_debug ("Schedule Type-%u Opaque-LSA to FLUSH: [opaque-type=%u, opaque-id=%x]", lsa->data->type, GET_OPAQUE_TYPE (ntohl (lsa->data->id.s_addr)), GET_OPAQUE_ID (ntohl (lsa->data->id.s_addr)));
/* This lsa will be flushed and removed eventually. */
- ospf_lsa_flush (lsa0->area->ospf, lsa);
+ ospf_lsa_flush (top, lsa);
out:
return;