diff options
| author | Olivier Dugeon <olivier.dugeon@orange.com> | 2018-01-18 19:11:11 +0100 | 
|---|---|---|
| committer | Olivier Dugeon <olivier.dugeon@orange.com> | 2018-01-18 19:11:11 +0100 | 
| commit | cf9b9f77f638923f5a44fdd14ce2725631ffa526 (patch) | |
| tree | 70b0b5c8181c23a4fd8faf5750e80083a422c728 /ospfd/ospf_opaque.c | |
| parent | b782607f7f2125dd0e5789d5744cc97baf03b0e6 (diff) | |
OSPFD: Add Experimental Segment Routing support
This is an implementation of draft-ietf-ospf-segment-routing-extensions-24
and RFC7684 for Extended Link & Prefix Opaque LSA.
Look to doc/OSPF_SR.rst for implementation details & known limitations.
New files:
 - ospfd/ospf_sr.h: Segment Routing structure definition (SubTLVs + SRDB)
 - ospfd/ospf_sr.c: Main functions for Segment Routing support
 - ospfd/ospf_ext.h: TLVs and SubTLVs definition for RFC7684
 - ospfd/ospf_ext.c: RFC7684 Extended Link / Prefix implementation
 - doc/OSPF-SRr.rst: Documentation
Modified Files:
 - doc/ospfd.texi: Add new Segment Routing CLI command definition
 - lib/command.h: Add new string command for Segment Routing CLI
 - lib/mpls.h: Add default value for SRGB
 - lib/route_types.txt: Add new OSPF Segment Routing route type
 - ospfd/ospf_dump.[c,h]: Add OSPF SR debug
 - ospfd/ospf_memory.[c,h]: Add new Segment Routing memory type
 - ospfd/ospf_opaque.[c,h]: Add ospf_sr_init() starting function
 - ospfd/ospf_ri.c: Add new functions to Set/Get Segment Routing TLVs
Add new ospf_router_info_lsa_upadte() to send Opaque LSA to ospf_sr.c()
 - ospfd/ospf_ri.h: Add new Router Information SR SubTLVs
 - ospfd/ospf_spf.c: Add new scheduler when running SPF to trigger
update of NHLFE
 - ospfd/ospfd.h: Add new thread for Segment Routing scheduler
 - ospfd/subdir.am: Add new files
 - vtysh/Makefile.am: Add new ospf_sr.c file for vtysh
 - zebra/kernel_netlink.c: Add new OSPF_SR route type
 - zebra/rt_netlink.[c,h]: Add new OSPF_SR route type
 - zebra/zebra_mpls.h: Add new OSPF_SR route type
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Diffstat (limited to 'ospfd/ospf_opaque.c')
| -rw-r--r-- | ospfd/ospf_opaque.c | 25 | 
1 files changed, 22 insertions, 3 deletions
diff --git a/ospfd/ospf_opaque.c b/ospfd/ospf_opaque.c index 6f9da92542..292d5e8186 100644 --- a/ospfd/ospf_opaque.c +++ b/ospfd/ospf_opaque.c @@ -50,6 +50,10 @@  #include "ospfd/ospf_route.h"  #include "ospfd/ospf_ase.h"  #include "ospfd/ospf_zebra.h" +#include "ospfd/ospf_te.h" +#include "ospfd/ospf_sr.h" +#include "ospfd/ospf_ri.h" +#include "ospfd/ospf_ext.h"  DEFINE_MTYPE_STATIC(OSPFD, OSPF_OPAQUE_FUNCTAB, "OSPF opaque function table")  DEFINE_MTYPE_STATIC(OSPFD, OPAQUE_INFO_PER_TYPE, "OSPF opaque per-type info") @@ -59,9 +63,6 @@ DEFINE_MTYPE_STATIC(OSPFD, OPAQUE_INFO_PER_ID, "OSPF opaque per-ID info")   * Followings are initialize/terminate functions for Opaque-LSAs handling.   *------------------------------------------------------------------------*/ -#include "ospfd/ospf_te.h" -#include "ospfd/ospf_ri.h" -  #ifdef SUPPORT_OSPF_API  int ospf_apiserver_init(void);  void ospf_apiserver_term(void); @@ -85,9 +86,17 @@ void ospf_opaque_init(void)  	if (ospf_mpls_te_init() != 0)  		exit(1); +	/* Segment Routing init */ +	if (ospf_sr_init() != 0) +		exit(1); +  	if (ospf_router_info_init() != 0)  		exit(1); +	/* Force Extended Prefix/Link to Type 10 */ +	if (ospf_ext_init() != 0) +		exit(1); +  #ifdef SUPPORT_OSPF_API  	if ((ospf_apiserver_enable) && (ospf_apiserver_init() != 0))  		exit(1); @@ -102,6 +111,10 @@ void ospf_opaque_term(void)  	ospf_router_info_term(); +	ospf_ext_term(); + +	ospf_sr_term(); +  #ifdef SUPPORT_OSPF_API  	ospf_apiserver_term();  #endif /* SUPPORT_OSPF_API */ @@ -209,6 +222,12 @@ static const char *ospf_opaque_type_name(u_char opaque_type)  	case OPAQUE_TYPE_ROUTER_INFORMATION_LSA:  		name = "Router Information LSA";  		break; +	case OPAQUE_TYPE_EXTENDED_PREFIX_LSA: +		name = "Extended Prefix Opaque LSA"; +		break; +	case OPAQUE_TYPE_EXTENDED_LINK_LSA: +		name = "Extended Link Opaque LSA"; +		break;  	default:  		if (OPAQUE_TYPE_RANGE_UNASSIGNED(opaque_type))  			name = "Unassigned";  | 
