Ed Warnicke | cb9cada | 2015-12-08 15:45:58 -0700 | [diff] [blame] | 1 | Network Working Group S. Previdi, Ed. |
| 2 | Internet-Draft C. Filsfils |
| 3 | Intended status: Standards Track Cisco Systems, Inc. |
| 4 | Expires: June 12, 2015 B. Field |
| 5 | Comcast |
| 6 | I. Leung |
| 7 | Rogers Communications |
| 8 | December 9, 2014 |
| 9 | |
| 10 | |
| 11 | IPv6 Segment Routing Header (SRH) |
| 12 | draft-previdi-6man-segment-routing-header-05 |
| 13 | |
| 14 | Abstract |
| 15 | |
| 16 | Segment Routing (SR) allows a node to steer a packet through a |
| 17 | controlled set of instructions, called segments, by prepending a SR |
| 18 | header to the packet. A segment can represent any instruction, |
| 19 | topological or service-based. SR allows to enforce a flow through |
| 20 | any path (topological, or application/service based) while |
| 21 | maintaining per-flow state only at the ingress node to the SR domain. |
| 22 | |
| 23 | Segment Routing can be applied to the IPv6 data plane with the |
| 24 | addition of a new type of Routing Extension Header. This draft |
| 25 | describes the Segment Routing Extension Header Type and how it is |
| 26 | used by SR capable nodes. |
| 27 | |
| 28 | Requirements Language |
| 29 | |
| 30 | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", |
| 31 | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this |
| 32 | document are to be interpreted as described in RFC 2119 [RFC2119]. |
| 33 | |
| 34 | Status of This Memo |
| 35 | |
| 36 | This Internet-Draft is submitted in full conformance with the |
| 37 | provisions of BCP 78 and BCP 79. |
| 38 | |
| 39 | Internet-Drafts are working documents of the Internet Engineering |
| 40 | Task Force (IETF). Note that other groups may also distribute |
| 41 | working documents as Internet-Drafts. The list of current Internet- |
| 42 | Drafts is at http://datatracker.ietf.org/drafts/current/. |
| 43 | |
| 44 | Internet-Drafts are draft documents valid for a maximum of six months |
| 45 | and may be updated, replaced, or obsoleted by other documents at any |
| 46 | time. It is inappropriate to use Internet-Drafts as reference |
| 47 | material or to cite them other than as "work in progress." |
| 48 | |
| 49 | |
| 50 | |
| 51 | |
| 52 | Previdi, et al. Expires June 12, 2015 [Page 1] |
| 53 | |
| 54 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 55 | |
| 56 | |
| 57 | This Internet-Draft will expire on June 12, 2015. |
| 58 | |
| 59 | Copyright Notice |
| 60 | |
| 61 | Copyright (c) 2014 IETF Trust and the persons identified as the |
| 62 | document authors. All rights reserved. |
| 63 | |
| 64 | This document is subject to BCP 78 and the IETF Trust's Legal |
| 65 | Provisions Relating to IETF Documents |
| 66 | (http://trustee.ietf.org/license-info) in effect on the date of |
| 67 | publication of this document. Please review these documents |
| 68 | carefully, as they describe your rights and restrictions with respect |
| 69 | to this document. Code Components extracted from this document must |
| 70 | include Simplified BSD License text as described in Section 4.e of |
| 71 | the Trust Legal Provisions and are provided without warranty as |
| 72 | described in the Simplified BSD License. |
| 73 | |
| 74 | Table of Contents |
| 75 | |
| 76 | 1. Structure of this document . . . . . . . . . . . . . . . . . 3 |
| 77 | 2. Segment Routing Documents . . . . . . . . . . . . . . . . . . 3 |
| 78 | 3. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 |
| 79 | 3.1. Data Planes supporting Segment Routing . . . . . . . . . 4 |
| 80 | 3.2. Illustration . . . . . . . . . . . . . . . . . . . . . . 4 |
| 81 | 4. Abstract Routing Model . . . . . . . . . . . . . . . . . . . 7 |
| 82 | 4.1. Segment Routing Global Block (SRGB) . . . . . . . . . . . 8 |
| 83 | 4.2. Traffic Engineering with SR . . . . . . . . . . . . . . . 9 |
| 84 | 4.3. Segment Routing Database . . . . . . . . . . . . . . . . 10 |
| 85 | 5. IPv6 Instantiation of Segment Routing . . . . . . . . . . . . 10 |
| 86 | 5.1. Segment Identifiers (SIDs) and SRGB . . . . . . . . . . . 10 |
| 87 | 5.1.1. Node-SID . . . . . . . . . . . . . . . . . . . . . . 11 |
| 88 | 5.1.2. Adjacency-SID . . . . . . . . . . . . . . . . . . . . 11 |
| 89 | 5.2. Segment Routing Extension Header (SRH) . . . . . . . . . 11 |
| 90 | 5.2.1. SRH and RFC2460 behavior . . . . . . . . . . . . . . 15 |
| 91 | 6. SRH Procedures . . . . . . . . . . . . . . . . . . . . . . . 15 |
| 92 | 6.1. Segment Routing Operations . . . . . . . . . . . . . . . 15 |
| 93 | 6.2. Segment Routing Node Functions . . . . . . . . . . . . . 16 |
| 94 | 6.2.1. Ingress SR Node . . . . . . . . . . . . . . . . . . . 16 |
| 95 | 6.2.2. Transit Non-SR Capable Node . . . . . . . . . . . . . 18 |
| 96 | 6.2.3. SR Intra Segment Transit Node . . . . . . . . . . . . 18 |
| 97 | 6.2.4. SR Segment Endpoint Node . . . . . . . . . . . . . . 18 |
| 98 | 6.3. FRR Flag Settings . . . . . . . . . . . . . . . . . . . . 18 |
| 99 | 7. SR and Tunneling . . . . . . . . . . . . . . . . . . . . . . 18 |
| 100 | 8. Example Use Case . . . . . . . . . . . . . . . . . . . . . . 19 |
| 101 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 |
| 102 | 10. Manageability Considerations . . . . . . . . . . . . . . . . 21 |
| 103 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 21 |
| 104 | 12. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 21 |
| 105 | |
| 106 | |
| 107 | |
| 108 | Previdi, et al. Expires June 12, 2015 [Page 2] |
| 109 | |
| 110 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 111 | |
| 112 | |
| 113 | 13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 21 |
| 114 | 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 21 |
| 115 | 14.1. Normative References . . . . . . . . . . . . . . . . . . 21 |
| 116 | 14.2. Informative References . . . . . . . . . . . . . . . . . 21 |
| 117 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 22 |
| 118 | |
| 119 | 1. Structure of this document |
| 120 | |
| 121 | Section 3 gives an introduction on SR for IPv6 networks. |
| 122 | |
| 123 | Section 4 describes the Segment Routing abstract model. |
| 124 | |
| 125 | Section 5 defines the Segment Routing Header (SRH) allowing |
| 126 | instantiation of SR over IPv6 dataplane. |
| 127 | |
| 128 | Section 6 details the procedures of the Segment Routing Header. |
| 129 | |
| 130 | 2. Segment Routing Documents |
| 131 | |
| 132 | Segment Routing terminology is defined in |
| 133 | [I-D.filsfils-spring-segment-routing]. |
| 134 | |
| 135 | Segment Routing use cases are described in |
| 136 | [I-D.filsfils-spring-segment-routing-use-cases]. |
| 137 | |
| 138 | Segment Routing IPv6 use cases are described in |
| 139 | [I-D.ietf-spring-ipv6-use-cases]. |
| 140 | |
| 141 | Segment Routing protocol extensions are defined in |
| 142 | [I-D.ietf-isis-segment-routing-extensions], and |
| 143 | [I-D.psenak-ospf-segment-routing-ospfv3-extension]. |
| 144 | |
| 145 | The security mechanisms of the Segment Routing Header (SRH) are |
| 146 | described in [I-D.vyncke-6man-segment-routing-security]. |
| 147 | |
| 148 | 3. Introduction |
| 149 | |
| 150 | Segment Routing (SR), defined in |
| 151 | [I-D.filsfils-spring-segment-routing], allows a node to steer a |
| 152 | packet through a controlled set of instructions, called segments, by |
| 153 | prepending a SR header to the packet. A segment can represent any |
| 154 | instruction, topological or service-based. SR allows to enforce a |
| 155 | flow through any path (topological or service/application based) |
| 156 | while maintaining per-flow state only at the ingress node to the SR |
| 157 | domain. Segments can be derived from different components: IGP, BGP, |
| 158 | Services, Contexts, Locators, etc. The list of segment forming the |
| 159 | path is called the Segment List and is encoded in the packet header. |
| 160 | |
| 161 | |
| 162 | |
| 163 | |
| 164 | Previdi, et al. Expires June 12, 2015 [Page 3] |
| 165 | |
| 166 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 167 | |
| 168 | |
| 169 | SR allows the use of strict and loose source based routing paradigms |
| 170 | without requiring any additional signaling protocols in the |
| 171 | infrastructure hence delivering an excellent scalability property. |
| 172 | |
| 173 | The source based routing model described in |
| 174 | [I-D.filsfils-spring-segment-routing] is inherited from the ones |
| 175 | proposed by [RFC1940] and [RFC2460]. The source based routing model |
| 176 | offers the support for explicit routing capability. |
| 177 | |
| 178 | 3.1. Data Planes supporting Segment Routing |
| 179 | |
| 180 | Segment Routing (SR), can be instantiated over MPLS |
| 181 | ([I-D.filsfils-spring-segment-routing-mpls]) and IPv6. This document |
| 182 | defines its instantiation over the IPv6 data-plane based on the use- |
| 183 | cases defined in [I-D.ietf-spring-ipv6-use-cases]. |
| 184 | |
| 185 | Segment Routing for IPv6 (SR-IPv6) is required in networks where MPLS |
| 186 | data-plane is not used or, when combined with SR-MPLS, in networks |
| 187 | where MPLS is used in the core and IPv6 is used at the edge (home |
| 188 | networks, datacenters). |
| 189 | |
| 190 | This document defines a new type of Routing Header (originally |
| 191 | defined in [RFC2460]) called the Segment Routing Header (SRH) in |
| 192 | order to convey the Segment List in the packet header as defined in |
| 193 | [I-D.filsfils-spring-segment-routing]. Mechanisms through which |
| 194 | segment are known and advertised are outside the scope of this |
| 195 | document. |
| 196 | |
| 197 | 3.2. Illustration |
| 198 | |
| 199 | In the context of Figure 1 where all the links have the same IGP |
| 200 | cost, let us assume that a packet P enters the SR domain at an |
| 201 | ingress edge router I and that the operator requests the following |
| 202 | requirements for packet P: |
| 203 | |
| 204 | The local service S offered by node B must be applied to packet P. |
| 205 | |
| 206 | The links AB and CE cannot be used to transport the packet P. |
| 207 | |
| 208 | Any node N along the journey of the packet should be able to |
| 209 | determine where the packet P entered the SR domain and where it |
| 210 | will exit. The intermediate node should be able to determine the |
| 211 | paths from the ingress edge router to itself, and from itself to |
| 212 | the egress edge router. |
| 213 | |
| 214 | Per-flow State for packet P should only be created at the ingress |
| 215 | edge router. |
| 216 | |
| 217 | |
| 218 | |
| 219 | |
| 220 | Previdi, et al. Expires June 12, 2015 [Page 4] |
| 221 | |
| 222 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 223 | |
| 224 | |
| 225 | The operator can forbid, for security reasons, anyone outside the |
| 226 | operator domain to exploit its intra-domain SR capabilities. |
| 227 | |
| 228 | I---A---B---C---E |
| 229 | \ | / \ / |
| 230 | \ | / F |
| 231 | \|/ |
| 232 | D |
| 233 | |
| 234 | Figure 1: An illustration of SR properties |
| 235 | |
| 236 | All these properties may be realized by instructing the ingress SR |
| 237 | edge router I to push the following abstract SR header on the packet |
| 238 | P. |
| 239 | |
| 240 | +---------------------------------------------------------------+ |
| 241 | | | | |
| 242 | | Abstract SR Header | | |
| 243 | | | | |
| 244 | | {SD, SB, SS, SF, SE}, Ptr, SI, SE | Transported | |
| 245 | | ^ | | Packet | |
| 246 | | | | | P | |
| 247 | | +---------------------+ | | |
| 248 | | | | |
| 249 | +---------------------------------------------------------------+ |
| 250 | |
| 251 | Figure 2: Packet P at node I |
| 252 | |
| 253 | The abstract SR header contains a source route encoded as a list of |
| 254 | segments {SD, SB, SS, SF, SE}, a pointer (Ptr) and the identification |
| 255 | of the ingress and egress SR edge routers (segments SI and SE). |
| 256 | |
| 257 | A segment identifies a topological instruction or a service |
| 258 | instruction. A segment can either be global or local. The |
| 259 | instruction associated with a global segment is recognized and |
| 260 | executed by any SR-capable node in the domain. The instruction |
| 261 | associated with a local segment is only supported by the specific |
| 262 | node that originates it. |
| 263 | |
| 264 | Let us assume some IGP (i.e.: ISIS and OSPF) extensions to define a |
| 265 | "Node Segment" as a global instruction within the IGP domain to |
| 266 | forward a packet along the shortest path to the specified node. Let |
| 267 | us further assume that within the SR domain illustrated in Figure 1, |
| 268 | segments SI, SD, SB, SE and SF respectively identify IGP node |
| 269 | segments to I, D, B, E and F. |
| 270 | |
| 271 | Let us assume that node B identifies its local service S with local |
| 272 | segment SS. |
| 273 | |
| 274 | |
| 275 | |
| 276 | Previdi, et al. Expires June 12, 2015 [Page 5] |
| 277 | |
| 278 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 279 | |
| 280 | |
| 281 | With all of this in mind, let us describe the journey of the packet |
| 282 | P. |
| 283 | |
| 284 | The packet P reaches the ingress SR edge router. I pushes the SR |
| 285 | header illustrated in Figure 2 and sets the pointer to the first |
| 286 | segment of the list (SD). |
| 287 | |
| 288 | SD is an instruction recognized by all the nodes in the SR domain |
| 289 | which causes the packet to be forwarded along the shortest path to D. |
| 290 | |
| 291 | Once at D, the pointer is incremented and the next segment is |
| 292 | executed (SB). |
| 293 | |
| 294 | SB is an instruction recognized by all the nodes in the SR domain |
| 295 | which causes the packet to be forwarded along the shortest path to B. |
| 296 | |
| 297 | Once at B, the pointer is incremented and the next segment is |
| 298 | executed (SS). |
| 299 | |
| 300 | SS is an instruction only recognized by node B which causes the |
| 301 | packet to receive service S. |
| 302 | |
| 303 | Once the service applied, the next segment is executed (SF) which |
| 304 | causes the packet to be forwarded along the shortest path to F. |
| 305 | |
| 306 | Once at F, the pointer is incremented and the next segment is |
| 307 | executed (SE). |
| 308 | |
| 309 | SE is an instruction recognized by all the nodes in the SR domain |
| 310 | which causes the packet to be forwarded along the shortest path to E. |
| 311 | |
| 312 | E then removes the SR header and the packet continues its journey |
| 313 | outside the SR domain. |
| 314 | |
| 315 | All of the requirements are met. |
| 316 | |
| 317 | First, the packet P has not used links AB and CE: the shortest-path |
| 318 | from I to D is I-A-D, the shortest-path from D to B is D-B, the |
| 319 | shortest-path from B to F is B-C-F and the shortest-path from F to E |
| 320 | is F-E, hence the packet path through the SR domain is I-A-D-B-C-F-E |
| 321 | and the links AB and CE have been avoided. |
| 322 | |
| 323 | Second, the service S supported by B has been applied on packet P. |
| 324 | |
| 325 | Third, any node along the packet path is able to identify the service |
| 326 | and topological journey of the packet within the SR domain. For |
| 327 | example, node C receives the packet illustrated in Figure 3 and hence |
| 328 | is able to infer where the packet entered the SR domain (SI), how it |
| 329 | |
| 330 | |
| 331 | |
| 332 | Previdi, et al. Expires June 12, 2015 [Page 6] |
| 333 | |
| 334 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 335 | |
| 336 | |
| 337 | got up to itself {SD, SB, SS, SE}, where it will exit the SR domain |
| 338 | (SE) and how it will do so {SF, SE}. |
| 339 | |
| 340 | +---------------------------------------------------------------+ |
| 341 | | | | |
| 342 | | SR Header | | |
| 343 | | | | |
| 344 | | {SD, SB, SS, SF, SE}, Ptr, SI, SE | Transported | |
| 345 | | ^ | | Packet | |
| 346 | | | | | P | |
| 347 | | +--------+ | | |
| 348 | | | | |
| 349 | +---------------------------------------------------------------+ |
| 350 | |
| 351 | Figure 3: Packet P at node C |
| 352 | |
| 353 | Fourth, only node I maintains per-flow state for packet P. The |
| 354 | entire program of topological and service instructions to be executed |
| 355 | by the SR domain on packet P is encoded by the ingress edge router I |
| 356 | in the SR header in the form of a list of segments where each segment |
| 357 | identifies a specific instruction. No further per-flow state is |
| 358 | required along the packet path. The per-flow state is in the SR |
| 359 | header and travels with the packet. Intermediate nodes only hold |
| 360 | states related to the IGP global node segments and the local IGP |
| 361 | adjacency segments. These segments are not per-flow specific and |
| 362 | hence scale very well. Typically, an intermediate node would |
| 363 | maintain in the order of 100's to 1000's global node segments and in |
| 364 | the order of 10's to 100 of local adjacency segments. Typically the |
| 365 | SR IGP forwarding table is expected to be much less than 10000 |
| 366 | entries. |
| 367 | |
| 368 | Fifth, the SR header is inserted at the entrance to the domain and |
| 369 | removed at the exit of the operator domain. For security reasons, |
| 370 | the operator can forbid anyone outside its domain to use its intra- |
| 371 | domain SR capability. |
| 372 | |
| 373 | 4. Abstract Routing Model |
| 374 | |
| 375 | At the entrance of the SR domain, the ingress SR edge router pushes |
| 376 | the SR header on top of the packet. At the exit of the SR domain, |
| 377 | the egress SR edge router removes the SR header. |
| 378 | |
| 379 | The abstract SR header contains an ordered list of segments, a |
| 380 | pointer identifying the next segment to process and the |
| 381 | identifications of the ingress and egress SR edge routers on the path |
| 382 | of this packet. The pointer identifies the segment that MUST be used |
| 383 | by the receiving router to process the packet. This segment is |
| 384 | called the active segment. |
| 385 | |
| 386 | |
| 387 | |
| 388 | Previdi, et al. Expires June 12, 2015 [Page 7] |
| 389 | |
| 390 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 391 | |
| 392 | |
| 393 | A property of SR is that the entire source route of the packet, |
| 394 | including the identity of the ingress and egress edge routers is |
| 395 | always available with the packet. This allows for interesting |
| 396 | accounting and service applications. |
| 397 | |
| 398 | We define three SR-header operations: |
| 399 | |
| 400 | "PUSH": an SR header is pushed on an IP packet, or additional |
| 401 | segments are added at the head of the segment list. The pointer |
| 402 | is moved to the first entry of the added segments. |
| 403 | |
| 404 | "NEXT": the active segment is completed, the pointer is moved to |
| 405 | the next segment in the list. |
| 406 | |
| 407 | "CONTINUE": the active segment is not completed, the pointer is |
| 408 | left unchanged. |
| 409 | |
| 410 | In the future, other SR-header management operations may be defined. |
| 411 | |
| 412 | As the packet travels through the SR domain, the pointer is |
| 413 | incremented through the ordered list of segments and the source route |
| 414 | encoded by the SR ingress edge node is executed. |
| 415 | |
| 416 | A node processes an incoming packet according to the instruction |
| 417 | associated with the active segment. |
| 418 | |
| 419 | Any instruction might be associated with a segment: for example, an |
| 420 | intra-domain topological strict or loose forwarding instruction, a |
| 421 | service instruction, etc. |
| 422 | |
| 423 | At minimum, a segment instruction must define two elements: the |
| 424 | identity of the next-hop to forward the packet to (this could be the |
| 425 | same node or a context within the node) and which SR-header |
| 426 | management operation to execute. |
| 427 | |
| 428 | Each segment is known in the network through a Segment Identifier |
| 429 | (SID). The terms "segment" and "SID" are interchangeable. |
| 430 | |
| 431 | 4.1. Segment Routing Global Block (SRGB) |
| 432 | |
| 433 | In the SR abstract model, a segment is identified by a Segment |
| 434 | Routing Identifier (SID). The SR abstract model doesn't mandate a |
| 435 | specific format for the SID (IPv6 address or other formats). |
| 436 | |
| 437 | In Segment Routing IPv6 the SID is an IPv6 address. Therefore, the |
| 438 | SRGB is materialized by the global IPv6 address space which |
| 439 | represents the set of IPv6 routable addresses in the SR domain. The |
| 440 | following rules apply: |
| 441 | |
| 442 | |
| 443 | |
| 444 | Previdi, et al. Expires June 12, 2015 [Page 8] |
| 445 | |
| 446 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 447 | |
| 448 | |
| 449 | o Each node of the SR domain MUST be configured with the Segment |
| 450 | Routing Global Block (SRGB). |
| 451 | |
| 452 | o All global segments must be allocated from the SRGB. Any SR |
| 453 | capable node MUST be able to process any global segment advertised |
| 454 | by any other node within the SR domain. |
| 455 | |
| 456 | o Any segment outside the SRGB has a local significance and is |
| 457 | called a "local segment". An SR-capable node MUST be able to |
| 458 | process the local segments it originates. An SR-capable node MUST |
| 459 | NOT support the instruction associated with a local segment |
| 460 | originated by a remote node. |
| 461 | |
| 462 | 4.2. Traffic Engineering with SR |
| 463 | |
| 464 | An SR Traffic Engineering policy is composed of two elements: a flow |
| 465 | classification and a segment-list to prepend on the packets of the |
| 466 | flow. |
| 467 | |
| 468 | In SR, this per-flow state only exists at the ingress edge node where |
| 469 | the policy is defined and the SR header is pushed. |
| 470 | |
| 471 | It is outside the scope of the document to define the process that |
| 472 | leads to the instantiation at a node N of an SR Traffic Engineering |
| 473 | policy. |
| 474 | |
| 475 | [I-D.filsfils-spring-segment-routing-use-cases] illustrates various |
| 476 | alternatives: |
| 477 | |
| 478 | N is deriving this policy automatically (e.g. FRR). |
| 479 | |
| 480 | N is provisioned explicitly by the operator. |
| 481 | |
| 482 | N is provisioned by a controller or server (e.g.: SDN Controller). |
| 483 | |
| 484 | N is provisioned by the operator with a high-level policy which is |
| 485 | mapped into a path thanks to a local CSPF-based computation (e.g. |
| 486 | affinity/SRLG exclusion). |
| 487 | |
| 488 | N could also be provisioned by other means. |
| 489 | |
| 490 | [I-D.filsfils-spring-segment-routing-use-cases] explains why the |
| 491 | majority of use-cases require very short segment-lists, hence |
| 492 | minimizing the performance impact, if any, of inserting and |
| 493 | transporting the segment list. |
| 494 | |
| 495 | |
| 496 | |
| 497 | |
| 498 | |
| 499 | |
| 500 | Previdi, et al. Expires June 12, 2015 [Page 9] |
| 501 | |
| 502 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 503 | |
| 504 | |
| 505 | A SDN controller, which desires to instantiate at node N an SR |
| 506 | Traffic Engineering policy, collects the SR capability of node N such |
| 507 | as to ensure that the policy meets its capability. |
| 508 | |
| 509 | 4.3. Segment Routing Database |
| 510 | |
| 511 | The Segment routing Database (SRDB) is a set of entries where each |
| 512 | entry is identified by a SID. The instruction associated with each |
| 513 | entry at least defines the identity of the next-hop to which the |
| 514 | packet should be forwarded and what operation should be performed on |
| 515 | the SR header (PUSH, CONTINUE, NEXT). |
| 516 | |
| 517 | +---------+-----------+---------------------------------+ |
| 518 | | Segment | Next-Hop | SR Header operation | |
| 519 | +---------+-----------+---------------------------------+ |
| 520 | | Sk | M | CONTINUE | |
| 521 | | Sj | N | NEXT | |
| 522 | | Sl | NAT Srvc | NEXT | |
| 523 | | Sm | FW srvc | NEXT | |
| 524 | | Sn | Q | NEXT | |
| 525 | | etc. | etc. | etc. | |
| 526 | +---------+-----------+---------------------------------+ |
| 527 | |
| 528 | Figure 4: SR Database |
| 529 | |
| 530 | Each SR-capable node maintains its local SRDB. SRDB entries can |
| 531 | either derive from local policy or from protocol segment |
| 532 | advertisement. |
| 533 | |
| 534 | 5. IPv6 Instantiation of Segment Routing |
| 535 | |
| 536 | 5.1. Segment Identifiers (SIDs) and SRGB |
| 537 | |
| 538 | Segment Routing, as described in |
| 539 | [I-D.filsfils-spring-segment-routing], defines Node-SID and |
| 540 | Adjacency-SID. When SR is used over IPv6 data-plane the following |
| 541 | applies. |
| 542 | |
| 543 | The SRGB is the global IPv6 address space which represents the set of |
| 544 | IPv6 routable addresses in the SR domain. |
| 545 | |
| 546 | Node SIDs are IPv6 addresses part of the SRGB (i.e.: routable |
| 547 | addresses). Adjacency-SIDs are IPv6 addresses which may not be part |
| 548 | of the global IPv6 address space. |
| 549 | |
| 550 | |
| 551 | |
| 552 | |
| 553 | |
| 554 | |
| 555 | |
| 556 | Previdi, et al. Expires June 12, 2015 [Page 10] |
| 557 | |
| 558 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 559 | |
| 560 | |
| 561 | 5.1.1. Node-SID |
| 562 | |
| 563 | The Node-SID identifies a node. With SR-IPv6 the Node-SID is an IPv6 |
| 564 | prefix that the operator configured on the node and that is used as |
| 565 | the node identifier. Typically, in case of a router, this is the |
| 566 | IPv6 address of the node loopback interface. Therefore, SR-IPv6 does |
| 567 | not require any additional SID advertisement for the Node Segment. |
| 568 | The Node-SID is in fact the IPv6 address of the node. |
| 569 | |
| 570 | 5.1.2. Adjacency-SID |
| 571 | |
| 572 | In the SR architecture defined in |
| 573 | [I-D.filsfils-spring-segment-routing] the Adjacency-SID (or Adj-SID) |
| 574 | identifies a given interface and may be local or global (depending on |
| 575 | how it is advertised). A node may advertise one (or more) Adj-SIDs |
| 576 | allocated to a given interface so to force the forwarding of the |
| 577 | packet (when received with that particular Adj-SID) into the |
| 578 | interface regardless the routing entry for the packet destination. |
| 579 | The semantic of the Adj-SID is: |
| 580 | |
| 581 | Send out the packet to the interface this prefix is allocated to. |
| 582 | |
| 583 | When SR is applied to IPv6, any SID is in a global IPv6 address and |
| 584 | therefore, an Adj-SID has a global significance (i.e.: the IPv6 |
| 585 | address representing the SID is a global address). In other words, a |
| 586 | node that advertises the Adj-SID in the form of a global IPv6 address |
| 587 | representing the link/adjacency the packet has to be forwarded to, |
| 588 | will apply to the Adj-SID a global significance. |
| 589 | |
| 590 | Advertisement of Adj-SID may be done using multiple mechanisms among |
| 591 | which the ones described in ISIS and OSPF protocol extensions: |
| 592 | [I-D.ietf-isis-segment-routing-extensions] and |
| 593 | [I-D.psenak-ospf-segment-routing-ospfv3-extension]. The distinction |
| 594 | between local and global significance of the Adj-SID is given in the |
| 595 | encoding of the Adj-SID advertisement. |
| 596 | |
| 597 | 5.2. Segment Routing Extension Header (SRH) |
| 598 | |
| 599 | A new type of the Routing Header (originally defined in [RFC2460]) is |
| 600 | defined: the Segment Routing Header (SRH) which has a new Routing |
| 601 | Type, (suggested value 4) to be assigned by IANA. |
| 602 | |
| 603 | As an example, if an explicit path is to be constructed across a core |
| 604 | network running ISIS or OSPF, the segment list will contain SIDs |
| 605 | representing the nodes across the path (loose or strict) which, |
| 606 | usually, are the IPv6 loopback interface address of each node. If |
| 607 | the path is across service or application entities, the segment list |
| 608 | |
| 609 | |
| 610 | |
| 611 | |
| 612 | Previdi, et al. Expires June 12, 2015 [Page 11] |
| 613 | |
| 614 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 615 | |
| 616 | |
| 617 | contains the IPv6 addresses of these services or application |
| 618 | instances. |
| 619 | |
| 620 | The Segment Routing Header (SRH) is defined as follows: |
| 621 | |
| 622 | |
| 623 | 0 1 2 3 |
| 624 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
| 625 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 626 | | Next Header | Hdr Ext Len | Routing Type | Segments Left | |
| 627 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 628 | | First Segment | Flags | HMAC Key ID | |
| 629 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 630 | | | |
| 631 | | Segment List[0] (128 bits ipv6 address) | |
| 632 | | | |
| 633 | | | |
| 634 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 635 | | | |
| 636 | | | |
| 637 | ... |
| 638 | | | |
| 639 | | | |
| 640 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 641 | | | |
| 642 | | Segment List[n] (128 bits ipv6 address) | |
| 643 | | | |
| 644 | | | |
| 645 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 646 | | | |
| 647 | | Policy List[0] (optional) | |
| 648 | | | |
| 649 | | | |
| 650 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 651 | | | |
| 652 | | Policy List[1] (optional) | |
| 653 | | | |
| 654 | | | |
| 655 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 656 | | | |
| 657 | | Policy List[2] (optional) | |
| 658 | | | |
| 659 | | | |
| 660 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 661 | | | |
| 662 | | | |
| 663 | | | |
| 664 | | HMAC (256 bits) | |
| 665 | |
| 666 | |
| 667 | |
| 668 | Previdi, et al. Expires June 12, 2015 [Page 12] |
| 669 | |
| 670 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 671 | |
| 672 | |
| 673 | | (optional) | |
| 674 | | | |
| 675 | | | |
| 676 | | | |
| 677 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 678 | |
| 679 | where: |
| 680 | |
| 681 | o Next Header: 8-bit selector. Identifies the type of header |
| 682 | immediately following the SRH. |
| 683 | |
| 684 | o Hdr Ext Len: 8-bit unsigned integer, is the length of the SRH |
| 685 | header in 8-octet units, not including the first 8 octets. |
| 686 | |
| 687 | o Routing Type: TBD, to be assigned by IANA (suggested value: 4). |
| 688 | |
| 689 | o Segments Left. Defined in [RFC2460], it contains the index, in |
| 690 | the Segment List, of the next segment to inspect. Segments Left |
| 691 | is decremented at each segment and it is used as an index in the |
| 692 | segment list. |
| 693 | |
| 694 | o First Segment: offset in the SRH, not including the first 8 octets |
| 695 | and expressed in 16-octet units, pointing to the last element of |
| 696 | the segment list, which is in fact the first segment of the |
| 697 | segment routing path. |
| 698 | |
| 699 | o Flags: 16 bits of flags. Following flags are defined: |
| 700 | |
| 701 | 1 |
| 702 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 |
| 703 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 704 | |C|P|R|R| Policy Flags | |
| 705 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 706 | |
| 707 | C-flag: Clean-up flag. Set when the SRH has to be removed from |
| 708 | the packet when packet reaches the last segment. |
| 709 | |
| 710 | P-flag: Protected flag. Set when the packet has been rerouted |
| 711 | through FRR mechanism by a SR endpoint node. See Section 6.3 |
| 712 | for more details. |
| 713 | |
| 714 | R-flags. Reserved and for future use. |
| 715 | |
| 716 | Policy Flags. Define the type of the IPv6 addresses encoded |
| 717 | into the Policy List (see below). The following have been |
| 718 | defined: |
| 719 | |
| 720 | |
| 721 | |
| 722 | |
| 723 | |
| 724 | Previdi, et al. Expires June 12, 2015 [Page 13] |
| 725 | |
| 726 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 727 | |
| 728 | |
| 729 | Bits 4-6: determine the type of the first element after the |
| 730 | segment list. |
| 731 | |
| 732 | Bits 7-9: determine the type of the second element. |
| 733 | |
| 734 | Bits 10-12: determine the type of the third element. |
| 735 | |
| 736 | Bits 13-15: determine the type of the fourth element. |
| 737 | |
| 738 | The following values are used for the type: |
| 739 | |
| 740 | 0x0: Not present. If value is set to 0x0, it means the |
| 741 | element represented by these bits is not present. |
| 742 | |
| 743 | 0x1: SR Ingress. |
| 744 | |
| 745 | 0x2: SR Egress. |
| 746 | |
| 747 | 0x3: Original Source Address. |
| 748 | |
| 749 | o HMAC Key ID and HMAC field, and their use are defined in |
| 750 | [I-D.vyncke-6man-segment-routing-security]. |
| 751 | |
| 752 | o Segment List[n]: 128 bit IPv6 addresses representing the nth |
| 753 | segment in the Segment List. The Segment List is encoded starting |
| 754 | from the last segment of the path. I.e., the first element of the |
| 755 | segment list (Segment List [0]) contains the last segment of the |
| 756 | path while the last segment of the Segment List (Segment List[n]) |
| 757 | contains the first segment of the path. The index contained in |
| 758 | "Segments Left" identifies the current active segment. |
| 759 | |
| 760 | o Policy List. Optional addresses representing specific nodes in |
| 761 | the SR path such as: |
| 762 | |
| 763 | SR Ingress: a 128 bit generic identifier representing the |
| 764 | ingress in the SR domain (i.e.: it needs not to be a valid IPv6 |
| 765 | address). |
| 766 | |
| 767 | SR Egress: a 128 bit generic identifier representing the egress |
| 768 | in the SR domain (i.e.: it needs not to be a valid IPv6 |
| 769 | address). |
| 770 | |
| 771 | Original Source Address: IPv6 address originally present in the |
| 772 | SA field of the packet. |
| 773 | |
| 774 | The segments in the Policy List are encoded after the segment list |
| 775 | and they are optional. If none are in the SRH, all bits of the |
| 776 | Policy List Flags MUST be set to 0x0. |
| 777 | |
| 778 | |
| 779 | |
| 780 | Previdi, et al. Expires June 12, 2015 [Page 14] |
| 781 | |
| 782 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 783 | |
| 784 | |
| 785 | 5.2.1. SRH and RFC2460 behavior |
| 786 | |
| 787 | The SRH being a new type of the Routing Header, it also has the same |
| 788 | properties: |
| 789 | |
| 790 | SHOULD only appear once in the packet. |
| 791 | |
| 792 | Only the router whose address is in the DA field of the packet |
| 793 | header MUST inspect the SRH. |
| 794 | |
| 795 | Therefore, Segment Routing in IPv6 networks implies that the segment |
| 796 | identifier (i.e.: the IPv6 address of the segment) is moved into the |
| 797 | DA of the packet. |
| 798 | |
| 799 | The DA of the packet changes at each segment termination/completion |
| 800 | and therefore the original DA of the packet MUST be encoded as the |
| 801 | last segment of the path. |
| 802 | |
| 803 | As illustrated in Section 3.2, nodes that are within the path of a |
| 804 | segment will forward packets based on the DA of the packet without |
| 805 | inspecting the SRH. This ensures full interoperability between SR- |
| 806 | capable and non-SR-capable nodes. |
| 807 | |
| 808 | 6. SRH Procedures |
| 809 | |
| 810 | In this section we describe the different procedures on the SRH. |
| 811 | |
| 812 | 6.1. Segment Routing Operations |
| 813 | |
| 814 | When Segment Routing is instantiated over the IPv6 data plane the |
| 815 | following applies: |
| 816 | |
| 817 | o The segment list is encoded in the SRH. |
| 818 | |
| 819 | o The active segment is in the destination address of the packet. |
| 820 | |
| 821 | o The Segment Routing CONTINUE operation (as described in |
| 822 | [I-D.filsfils-spring-segment-routing]) is implemented as a |
| 823 | regular/plain IPv6 operation consisting of DA based forwarding. |
| 824 | |
| 825 | o The NEXT operation is implemented through the update of the DA |
| 826 | with the value represented by the Next Segment field in the SRH. |
| 827 | |
| 828 | o The PUSH operation is implemented through the insertion of the SRH |
| 829 | or the insertion of additional segments in the SRH segment list. |
| 830 | |
| 831 | |
| 832 | |
| 833 | |
| 834 | |
| 835 | |
| 836 | Previdi, et al. Expires June 12, 2015 [Page 15] |
| 837 | |
| 838 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 839 | |
| 840 | |
| 841 | 6.2. Segment Routing Node Functions |
| 842 | |
| 843 | SR packets are forwarded to segments endpoints (i.e.: nodes whose |
| 844 | address is in the DA field of the packet). The segment endpoint, |
| 845 | when receiving a SR packet destined to itself, does: |
| 846 | |
| 847 | o Inspect the SRH. |
| 848 | |
| 849 | o Determine the next active segment. |
| 850 | |
| 851 | o Update the Segments Left field (or, if requested, remove the SRH |
| 852 | from the packet). |
| 853 | |
| 854 | o Update the DA. |
| 855 | |
| 856 | o Send the packet to the next segment. |
| 857 | |
| 858 | The procedures applied to the SRH are related to the node function. |
| 859 | Following nodes functions are defined: |
| 860 | |
| 861 | Ingress SR Node. |
| 862 | |
| 863 | Transit Non-SR Node. |
| 864 | |
| 865 | Transit SR Intra Segment Node. |
| 866 | |
| 867 | SR Endpoint Node. |
| 868 | |
| 869 | 6.2.1. Ingress SR Node |
| 870 | |
| 871 | Ingress Node can be a router at the edge of the SR domain or a SR- |
| 872 | capable host. The ingress SR node may obtain the segment list by |
| 873 | either: |
| 874 | |
| 875 | Local path computation. |
| 876 | |
| 877 | Local configuration. |
| 878 | |
| 879 | Interaction with an SDN controller delivering the path as a |
| 880 | complete SRH. |
| 881 | |
| 882 | Any other mechanism (mechanisms through which the path is acquired |
| 883 | are outside the scope of this document). |
| 884 | |
| 885 | When creating the SRH (either at ingress node or in the SDN |
| 886 | controller) the following is done: |
| 887 | |
| 888 | Next Header and Hdr Ext Len fields are set according to [RFC2460]. |
| 889 | |
| 890 | |
| 891 | |
| 892 | Previdi, et al. Expires June 12, 2015 [Page 16] |
| 893 | |
| 894 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 895 | |
| 896 | |
| 897 | Routing Type field is set as TBD (SRH). |
| 898 | |
| 899 | The Segment List is built with the FIRST segment of the path |
| 900 | encoded in the LAST element of the Segment List. Subsequent |
| 901 | segments are encoded on top of the first segment. Finally, the |
| 902 | LAST segment of the path is encoded in the FIRST element of the |
| 903 | Segment List. In other words, the Segment List is encoded in the |
| 904 | reverse order of the path. |
| 905 | |
| 906 | The original DA of the packet is encoded as the last segment of |
| 907 | the path (encoded in the first element of the Segment List). |
| 908 | |
| 909 | the DA of the packet is set with the value of the first segment |
| 910 | (found in the last element of the segment list). |
| 911 | |
| 912 | the Segments Left field is set to n-1 where n is the number of |
| 913 | elements in the Segment List. |
| 914 | |
| 915 | The packet is sent out towards the first segment (i.e.: |
| 916 | represented in the packet DA). |
| 917 | |
| 918 | 6.2.1.1. Security at Ingress |
| 919 | |
| 920 | The procedures related to the Segment Routing security are detailed |
| 921 | in [I-D.vyncke-6man-segment-routing-security]. |
| 922 | |
| 923 | In the case where the SR domain boundaries are not under control of |
| 924 | the network operator (e.g.: when the SR domain edge is in a home |
| 925 | network), it is important to authenticate and validate the content of |
| 926 | any SRH being received by the network operator. In such case, the |
| 927 | security procedure described in |
| 928 | [I-D.vyncke-6man-segment-routing-security] is to be used. |
| 929 | |
| 930 | The ingress node (e.g.: the host in the home network) requests the |
| 931 | SRH from a control system (e.g.: an SDN controller) which delivers |
| 932 | the SRH with its HMAC signature on it. |
| 933 | |
| 934 | Then, the home network host can send out SR packets (with an SRH on |
| 935 | it) that will be validated at the ingress of the network operator |
| 936 | infrastructure. |
| 937 | |
| 938 | The ingress node of the network operator infrastructure, is |
| 939 | configured in order to validate the incoming SRH HMACs in order to |
| 940 | allow only packets having correct SRH according to their SA/DA |
| 941 | addresses. |
| 942 | |
| 943 | |
| 944 | |
| 945 | |
| 946 | |
| 947 | |
| 948 | Previdi, et al. Expires June 12, 2015 [Page 17] |
| 949 | |
| 950 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 951 | |
| 952 | |
| 953 | 6.2.2. Transit Non-SR Capable Node |
| 954 | |
| 955 | SR is interoperable with plain IPv6 forwarding. Any non SR-capable |
| 956 | node will forward SR packets solely based on the DA. There's no SRH |
| 957 | inspection. This ensures full interoperability between SR and non-SR |
| 958 | nodes. |
| 959 | |
| 960 | 6.2.3. SR Intra Segment Transit Node |
| 961 | |
| 962 | Only the node whose address is in DA inspects and processes the SRH |
| 963 | (according to [RFC2460]). An intra segment transit node is not in |
| 964 | the DA and its forwarding is based on DA and its SR-IPv6 FIB. |
| 965 | |
| 966 | 6.2.4. SR Segment Endpoint Node |
| 967 | |
| 968 | The SR segment endpoint node is the node whose address is in the DA. |
| 969 | The segment endpoint node inspects the SRH and does: |
| 970 | |
| 971 | 1. IF DA = myself (segment endpoint) |
| 972 | 2. IF Segments Left > 0 THEN |
| 973 | decrement Segments Left |
| 974 | update DA with Segment List[Segments Left] |
| 975 | 3. ELSE IF Segments List[Segments Left] <> DA THEN |
| 976 | update DA with Segments List[Segments Left] |
| 977 | IF Clean-up bit is set THEN remove the SRH |
| 978 | 4. ELSE give the packet to next PID (application) |
| 979 | End of processing. |
| 980 | 5. Forward the packet out |
| 981 | |
| 982 | 6.3. FRR Flag Settings |
| 983 | |
| 984 | A node supporting SR and doing Fast Reroute (as described in |
| 985 | [I-D.filsfils-spring-segment-routing-use-cases], when rerouting |
| 986 | packets through FRR mechanisms, SHOULD inspect the rerouted packet |
| 987 | header and look for the SRH. If the SRH is present, the rerouting |
| 988 | node SHOULD set the Protected bit on all rerouted packets. |
| 989 | |
| 990 | 7. SR and Tunneling |
| 991 | |
| 992 | Encapsulation can be realized in two different ways with SR-IPv6: |
| 993 | |
| 994 | Outer encapsulation. |
| 995 | |
| 996 | SRH with SA/DA original addresses. |
| 997 | |
| 998 | Outer encapsulation tunneling is the traditional method where an |
| 999 | additional IPv6 header is prepended to the packet. The original IPv6 |
| 1000 | header being encapsulated, everything is preserved and the packet is |
| 1001 | |
| 1002 | |
| 1003 | |
| 1004 | Previdi, et al. Expires June 12, 2015 [Page 18] |
| 1005 | |
| 1006 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 1007 | |
| 1008 | |
| 1009 | switched/routed according to the outer header (that could contain a |
| 1010 | SRH). |
| 1011 | |
| 1012 | SRH allows encoding both original SA and DA, hence an operator may |
| 1013 | decide to change the SA/DA at ingress and restore them at egress. |
| 1014 | This can be achieved without outer encapsulation, by changing SA/DA |
| 1015 | and encoding the original SA in the Policy List and in the original |
| 1016 | DA in the Segment List. |
| 1017 | |
| 1018 | 8. Example Use Case |
| 1019 | |
| 1020 | A more detailed description of use cases are available in |
| 1021 | [I-D.ietf-spring-ipv6-use-cases]. In this section, a simple SR-IPv6 |
| 1022 | example is illustrated. |
| 1023 | |
| 1024 | In the topology described in Figure 6 it is assumed an end-to-end SR |
| 1025 | deployment. Therefore SR is supported by all nodes from A to J. |
| 1026 | |
| 1027 | Home Network | Backbone | Datacenter |
| 1028 | | | |
| 1029 | | +---+ +---+ +---+ | +---+ | |
| 1030 | +---|---| C |---| D |---| E |---|---| I |---| |
| 1031 | | | +---+ +---+ +---+ | +---+ | |
| 1032 | | | | | | | | | +---+ |
| 1033 | +---+ +---+ | | | | | | |--| X | |
| 1034 | | A |---| B | | +---+ +---+ +---+ | +---+ | +---+ |
| 1035 | +---+ +---+ | | F |---| G |---| H |---|---| J |---| |
| 1036 | | +---+ +---+ +---+ | +---+ | |
| 1037 | | | |
| 1038 | | +-----------+ |
| 1039 | | SDN | |
| 1040 | | Orch/Ctlr | |
| 1041 | +-----------+ |
| 1042 | |
| 1043 | Figure 6: Sample SR topology |
| 1044 | |
| 1045 | The following workflow applies to packets sent by host A and destined |
| 1046 | to server X. |
| 1047 | |
| 1048 | |
| 1049 | |
| 1050 | |
| 1051 | |
| 1052 | |
| 1053 | |
| 1054 | |
| 1055 | |
| 1056 | |
| 1057 | |
| 1058 | |
| 1059 | |
| 1060 | Previdi, et al. Expires June 12, 2015 [Page 19] |
| 1061 | |
| 1062 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 1063 | |
| 1064 | |
| 1065 | . Host A sends a request for a path to server X to the SDN |
| 1066 | controller or orchestration system. |
| 1067 | |
| 1068 | . The SDN controller/orchestrator builds a SRH with: |
| 1069 | . Segment List: C, F, J, X |
| 1070 | . HMAC |
| 1071 | that satisfies the requirements expressed in the request |
| 1072 | by host A and based on policies applicable to host A. |
| 1073 | |
| 1074 | . Host A receives the SRH and insert it into the packet. |
| 1075 | The packet has now: |
| 1076 | . SA: A |
| 1077 | . DA: C |
| 1078 | . SRH with |
| 1079 | . SL: X, J, F, C |
| 1080 | . Segments Left: 3 (i.e.: Segment List size - 1) |
| 1081 | . PL: C (ingress), J (egress) |
| 1082 | Note that X is the last segment and C is the |
| 1083 | first segment (i.e.: the SL is encoded in the reverse |
| 1084 | path order). |
| 1085 | . HMAC |
| 1086 | |
| 1087 | . When packet arrives in C (first segment), C does: |
| 1088 | . Validate the HMAC of the SRH. |
| 1089 | . Decrement Segments Left by one: 2 |
| 1090 | . Update the DA with the next segment found in |
| 1091 | Segment List[2]. DA is set to F. |
| 1092 | . Forward the packet to F. |
| 1093 | |
| 1094 | . When packet arrives in F (second segment), F does: |
| 1095 | . Decrement Segments Left by one: 1 |
| 1096 | . Update the DA with the next segment found in |
| 1097 | Segment List[1]. DA is set to J. |
| 1098 | . Forward the packet to J. |
| 1099 | |
| 1100 | . Packet travels across G and H nodes which do plain |
| 1101 | IPv6 forwarding based on DA. No inspection of SRH needs |
| 1102 | to be done in these nodes. However, any SR capable node |
| 1103 | is allowed to set the Protected bit in case of FRR |
| 1104 | protection. |
| 1105 | |
| 1106 | . When packet arrives in J (third segment), J does: |
| 1107 | . Decrement Segments Left by one: 0 |
| 1108 | . Update the DA with the next segment found in |
| 1109 | Segment List[0]. DA is set to X. |
| 1110 | . If the cleanup bit is set, then node J will strip out |
| 1111 | the SRH from the packet. |
| 1112 | . Forward the packet to X. |
| 1113 | |
| 1114 | |
| 1115 | |
| 1116 | Previdi, et al. Expires June 12, 2015 [Page 20] |
| 1117 | |
| 1118 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 1119 | |
| 1120 | |
| 1121 | The packet arrives in the server that may or may not support SR. The |
| 1122 | return traffic, from server to host, may be sent using the same |
| 1123 | procedures. |
| 1124 | |
| 1125 | 9. IANA Considerations |
| 1126 | |
| 1127 | TBD |
| 1128 | |
| 1129 | 10. Manageability Considerations |
| 1130 | |
| 1131 | TBD |
| 1132 | |
| 1133 | 11. Security Considerations |
| 1134 | |
| 1135 | Security mechanisms applied to Segment Routing over IPv6 networks are |
| 1136 | detailed in [I-D.vyncke-6man-segment-routing-security]. |
| 1137 | |
| 1138 | 12. Contributors |
| 1139 | |
| 1140 | The authors would like to thank Dave Barach, John Leddy, John |
| 1141 | Brzozowski, Pierre Francois, Nagendra Kumar, Mark Townsley, Christian |
| 1142 | Martin, Roberta Maglione, Eric Vyncke, James Connolly, David Lebrun |
| 1143 | and Fred Baker for their contribution to this document. |
| 1144 | |
| 1145 | 13. Acknowledgements |
| 1146 | |
| 1147 | TBD |
| 1148 | |
| 1149 | 14. References |
| 1150 | |
| 1151 | 14.1. Normative References |
| 1152 | |
| 1153 | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate |
| 1154 | Requirement Levels", BCP 14, RFC 2119, March 1997. |
| 1155 | |
| 1156 | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 |
| 1157 | (IPv6) Specification", RFC 2460, December 1998. |
| 1158 | |
| 1159 | 14.2. Informative References |
| 1160 | |
| 1161 | [I-D.filsfils-spring-segment-routing] |
| 1162 | Filsfils, C., Previdi, S., Bashandy, A., Decraene, B., |
| 1163 | Litkowski, S., Horneffer, M., Milojevic, I., Shakir, R., |
| 1164 | Ytti, S., Henderickx, W., Tantsura, J., and E. Crabbe, |
| 1165 | "Segment Routing Architecture", draft-filsfils-spring- |
| 1166 | segment-routing-04 (work in progress), July 2014. |
| 1167 | |
| 1168 | |
| 1169 | |
| 1170 | |
| 1171 | |
| 1172 | Previdi, et al. Expires June 12, 2015 [Page 21] |
| 1173 | |
| 1174 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 1175 | |
| 1176 | |
| 1177 | [I-D.filsfils-spring-segment-routing-mpls] |
| 1178 | Filsfils, C., Previdi, S., Bashandy, A., Decraene, B., |
| 1179 | Litkowski, S., Horneffer, M., Milojevic, I., Shakir, R., |
| 1180 | Ytti, S., Henderickx, W., Tantsura, J., and E. Crabbe, |
| 1181 | "Segment Routing with MPLS data plane", draft-filsfils- |
| 1182 | spring-segment-routing-mpls-03 (work in progress), August |
| 1183 | 2014. |
| 1184 | |
| 1185 | [I-D.filsfils-spring-segment-routing-use-cases] |
| 1186 | Filsfils, C., Francois, P., Previdi, S., Decraene, B., |
| 1187 | Litkowski, S., Horneffer, M., Milojevic, I., Shakir, R., |
| 1188 | Ytti, S., Henderickx, W., Tantsura, J., Kini, S., and E. |
| 1189 | Crabbe, "Segment Routing Use Cases", draft-filsfils- |
| 1190 | spring-segment-routing-use-cases-01 (work in progress), |
| 1191 | October 2014. |
| 1192 | |
| 1193 | [I-D.ietf-isis-segment-routing-extensions] |
| 1194 | Previdi, S., Filsfils, C., Bashandy, A., Gredler, H., |
| 1195 | Litkowski, S., Decraene, B., and J. Tantsura, "IS-IS |
| 1196 | Extensions for Segment Routing", draft-ietf-isis-segment- |
| 1197 | routing-extensions-03 (work in progress), October 2014. |
| 1198 | |
| 1199 | [I-D.ietf-spring-ipv6-use-cases] |
| 1200 | Brzozowski, J., Leddy, J., Leung, I., Previdi, S., |
| 1201 | Townsley, W., Martin, C., Filsfils, C., and R. Maglione, |
| 1202 | "IPv6 SPRING Use Cases", draft-ietf-spring-ipv6-use- |
| 1203 | cases-03 (work in progress), November 2014. |
| 1204 | |
| 1205 | [I-D.psenak-ospf-segment-routing-ospfv3-extension] |
| 1206 | Psenak, P., Previdi, S., Filsfils, C., Gredler, H., |
| 1207 | Shakir, R., Henderickx, W., and J. Tantsura, "OSPFv3 |
| 1208 | Extensions for Segment Routing", draft-psenak-ospf- |
| 1209 | segment-routing-ospfv3-extension-02 (work in progress), |
| 1210 | July 2014. |
| 1211 | |
| 1212 | [I-D.vyncke-6man-segment-routing-security] |
| 1213 | Vyncke, E. and S. Previdi, "IPv6 Segment Routing Header |
| 1214 | (SRH) Security Considerations", July 2014. |
| 1215 | |
| 1216 | [RFC1940] Estrin, D., Li, T., Rekhter, Y., Varadhan, K., and D. |
| 1217 | Zappala, "Source Demand Routing: Packet Format and |
| 1218 | Forwarding Specification (Version 1)", RFC 1940, May 1996. |
| 1219 | |
| 1220 | Authors' Addresses |
| 1221 | |
| 1222 | |
| 1223 | |
| 1224 | |
| 1225 | |
| 1226 | |
| 1227 | |
| 1228 | Previdi, et al. Expires June 12, 2015 [Page 22] |
| 1229 | |
| 1230 | Internet-Draft IPv6 Segment Routing Header (SRH) December 2014 |
| 1231 | |
| 1232 | |
| 1233 | Stefano Previdi (editor) |
| 1234 | Cisco Systems, Inc. |
| 1235 | Via Del Serafico, 200 |
| 1236 | Rome 00142 |
| 1237 | Italy |
| 1238 | |
| 1239 | Email: sprevidi@cisco.com |
| 1240 | |
| 1241 | |
| 1242 | Clarence Filsfils |
| 1243 | Cisco Systems, Inc. |
| 1244 | Brussels |
| 1245 | BE |
| 1246 | |
| 1247 | Email: cfilsfil@cisco.com |
| 1248 | |
| 1249 | |
| 1250 | Brian Field |
| 1251 | Comcast |
| 1252 | 4100 East Dry Creek Road |
| 1253 | Centennial, CO 80122 |
| 1254 | US |
| 1255 | |
| 1256 | Email: Brian_Field@cable.comcast.com |
| 1257 | |
| 1258 | |
| 1259 | Ida Leung |
| 1260 | Rogers Communications |
| 1261 | 8200 Dixie Road |
| 1262 | Brampton, ON L6T 0C1 |
| 1263 | CA |
| 1264 | |
| 1265 | Email: Ida.Leung@rci.rogers.com |