]> git.proxmox.com Git - mirror_frr.git/blobdiff - doc/developer/ospf-sr.rst
Merge pull request #7572 from idryzhov/ospf6-cleanup
[mirror_frr.git] / doc / developer / ospf-sr.rst
index 3f8b549df3098c3de968f629b55363991a12a9eb..efe9b1b12f9aac37394d0cd67c5be4b94011b755 100644 (file)
@@ -1,8 +1,7 @@
 OSPF Segment Routing
 ====================
 
-This is an EXPERIMENTAL support of draft
-`draft-ietf-ospf-segment-routing-extensions-24`.
+This is an EXPERIMENTAL support of `RFC 8665`.
 DON'T use it for production network.
 
 Supported Features
@@ -10,28 +9,29 @@ Supported Features
 
 * Automatic computation of Primary and Backup Adjacency SID with
   Cisco experimental remote IP address
-* SRGB configuration
+* SRGB & SRLB configuration
 * Prefix configuration for Node SID with optional NO-PHP flag (Linux
   kernel support both mode)
 * Node MSD configuration (with Linux Kernel >= 4.10 a maximum of 32 labels
   could be stack)
 * Automatic provisioning of MPLS table
+* Equal Cost Multi-Path (ECMP)
 * Static route configuration with label stack up to 32 labels
 
 Interoperability
 ----------------
 
 * Tested on various topology including point-to-point and LAN interfaces
-  in a mix of Free Range Routing instance and Cisco IOS-XR 6.0.x
+  in a mix of FRRouting instance and Cisco IOS-XR 6.0.x
 * Check OSPF LSA conformity with latest wireshark release 2.5.0-rc
 
 Implementation details
 ----------------------
 
 Concepts
-~~~~~~~~
+^^^^^^^^
 
-Segment Routing used 3 differents OPAQUE LSA in OSPF to carry the various
+Segment Routing used 3 different OPAQUE LSA in OSPF to carry the various
 information:
 
 * **Router Information:** flood the Segment Routing capabilities of the node.
@@ -40,14 +40,14 @@ information:
 * **Extended Link:** flood the Adjaceny and Lan Adjacency Segment Identifier
 * **Extended Prefix:** flood the Prefix Segment Identifier
 
-The implementation follow previous TE and Router Information codes. It used the
+The implementation follows previous TE and Router Information codes. It used the
 OPAQUE LSA functions defined in ospf_opaque.[c,h] as well as the OSPF API. This
 latter is mandatory for the implementation as it provides the Callback to
 Segment Routing functions (see below) when an Extended Link / Prefix or Router
 Information LSA s are received.
 
 Overview
-~~~~~~~~
+^^^^^^^^
 
 Following files where modified or added:
 
@@ -71,7 +71,7 @@ The figure below shows the relation between the various files:
   (4.0.0.0), Extended Prefix (7.0.0.X) and Link (8.0.0.X) by ospf_ri.c,
   respectively ospf_ext.c.
 * ospf_ri.c send back to ospf_sr.c received Router Information LSA and update
-  Self Router Information LSA with paramters provided by ospf_sr.c i.e. SRGB
+  Self Router Information LSA with parameters provided by ospf_sr.c i.e. SRGB
   and MSD. It use ospf_opaque.c functions to send/received these Opaque LSAs.
 * ospf_ext.c send back to ospf_sr.c received Extended Prefix and Link Opaque
   LSA and send self Extended Prefix and Link Opaque LSA through ospf_opaque.c
@@ -113,7 +113,7 @@ The figure below shows the relation between the various files:
       Figure 1: Overview of Segment Routing interaction
 
 Module interactions
-~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^
 
 To process incoming LSA, the code is based on the capability to call `hook()`
 functions when LSA are inserted or delete to / from the LSDB and the
@@ -129,8 +129,8 @@ Opaque LSA it is the `ospf_opaque_lsa_install_hook()`.  For deletion, it is
 Note that incoming LSA which is already present in the LSDB will be inserted
 after the old instance of this LSA remove from the LSDB. Thus, after the first
 time, each incoming LSA will trigger a `delete` following by an `install`. This
-is not very helpfull to handle real LSA deletion. In fact, LSA deletion is done
-by Flushing LSA i.e. flood LSA after seting its age to MAX_AGE. Then, a garbage
+is not very helpful to handle real LSA deletion. In fact, LSA deletion is done
+by Flushing LSA i.e. flood LSA after setting its age to MAX_AGE. Then, a garbage
 function has the role to remove all LSA with `age == MAX_AGE` in the LSDB. So,
 to handle LSA Flush, the best is to look to the LSA age to determine if it is
 an installation or a future deletion i.e. the flushed LSA is first store in the
@@ -144,10 +144,10 @@ introduced. When this command is activated, function
 `ospf_router_info_update_sr()` is called to indicate to Router Information
 process that Segment Routing TLVs must be flood. Same function is called to
 modify the Segment Routing Global Block (SRGB) and Maximum Stack Depth (MSD)
-TLV. Only Shortest Path First (SPF) Algorithm is supported, so no possiblity
+TLV. Only Shortest Path First (SPF) Algorithm is supported, so no possibility
 to modify this TLV is offer by the code.
 
-When Opaque LSA Tyep 4 i.e. Router Information are stored in LSDB, function
+When Opaque LSA Type 4 i.e. Router Information are stored in LSDB, function
 `ospf_opaque_lsa_install_hook()` will call the previously registered function
 `ospf_router_info_lsa_update()`. In turn, the function will simply trigger
 `ospf_sr_ri_lsa_update()` or `ospf_sr_ri_lsa_delete` in function of the LSA
@@ -159,8 +159,8 @@ Extended Link Prefix LSAs
 ^^^^^^^^^^^^^^^^^^^^^^^^^
 
 Like for Router Information, Segment Routing is activate at the Extended
-Link/Prefix level with new `segment-routing on` command. This trigger
-automtically the flooding of Extended Link LSA for all ospf interface where
+Link/Prefix level with new `segment-routing on` command. This triggers
+automatically the flooding of Extended Link LSA for all ospf interfaces where
 adjacency is full. For Extended Prefix LSA, the new CLI command
 `segment-routing prefix ...` will trigger the flooding of Prefix SID
 TLV/SubTLVs.
@@ -186,7 +186,7 @@ Configuration
 -------------
 
 Linux Kernel
-~~~~~~~~~~~~
+^^^^^^^^^^^^
 
 In order to use OSPF Segment Routing, you must setup MPLS data plane. Up to
 know, only Linux Kernel version >= 4.5 is supported.
@@ -231,7 +231,7 @@ especially the `lo` one. For that purpose, disable RP filtering with:
    sysctl -w net.ipv4.conf.lo.rp_filter=0
 
 OSPFd
-~~~~~
+^^^^^
 
 Here it is a simple example of configuration to enable Segment Routing. Note
 that `opaque capability` and `router information` must be set to activate
@@ -243,19 +243,19 @@ Routing.
    router ospf
     ospf router-id 192.168.1.11
     capability opaque
-     mpls-te on
-     mpls-te router-address 192.168.1.11
-    router-info area 0.0.0.0
     segment-routing on
     segment-routing global-block 10000 19999
+    segment-routing local-block 5000 5999
     segment-routing node-msd 8
     segment-routing prefix 192.168.1.11/32 index 1100
 
-The first segment-routing statement enable it. The Second one set the SRGB,
-third line the MSD and finally, set the Prefix SID index for a given prefix.
+The first segment-routing statement enables it. The second and third one set
+the SRGB and SRLB respectively, fourth line the MSD and finally, set the
+Prefix SID index for a given prefix.
+
 Note that only prefix of Loopback interface could be configured with a Prefix
 SID. It is possible to add `no-php-flag` at the end of the prefix command to
-disbale Penultimate Hop Popping. This advertises peers that they MUST NOT pop
+disable Penultimate Hop Popping. This advertises to peers that they MUST NOT pop
 the MPLS label prior to sending the packet.
 
 Known limitations
@@ -265,9 +265,6 @@ Known limitations
 * Only single Area is supported. ABR is not yet supported
 * Only SPF algorithm is supported
 * Extended Prefix Range is not supported
-* MPLS table are not flush at startup. Thus, restarting zebra process is
-  mandatory to remove old MPLS entries in the data plane after a crash of
-  ospfd daemon
 * With NO Penultimate Hop Popping, it is not possible to express a Segment
   Path with an Adjacency SID due to the impossibility for the Linux Kernel to
   perform double POP instruction.