idnits 2.17.00 (12 Aug 2021) /tmp/idnits24426/draft-geng-msr6-traffic-engineering-01.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 8 instances of too long lines in the document, the longest one being 10 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The document seems to lack the recommended RFC 2119 boilerplate, even if it appears to use RFC 2119 keywords -- however, there's a paragraph with a matching beginning. Boilerplate error? (The document does seem to have the reference to RFC 2119 which the ID-Checklist requires). -- The document date (7 March 2022) is 68 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Missing Reference: 'Pointer' is mentioned on line 330, but not defined == Missing Reference: 'Pointer 2' is mentioned on line 337, but not defined -- Looks like a reference, but probably isn't: '0' on line 469 -- Looks like a reference, but probably isn't: '1' on line 471 -- Looks like a reference, but probably isn't: '2' on line 596 -- Looks like a reference, but probably isn't: '3' on line 594 -- Looks like a reference, but probably isn't: '4' on line 575 -- Looks like a reference, but probably isn't: '5' on line 597 == Unused Reference: 'I-D.geng-bier-ipv6-inter-domain' is defined on line 651, but no explicit reference was found in the text == Unused Reference: 'I-D.ietf-bier-ping' is defined on line 659, but no explicit reference was found in the text == Unused Reference: 'I-D.xie-bier-ipv6-mvpn' is defined on line 666, but no explicit reference was found in the text == Unused Reference: 'RFC4301' is defined on line 679, but no explicit reference was found in the text == Unused Reference: 'RFC4302' is defined on line 683, but no explicit reference was found in the text == Unused Reference: 'RFC4303' is defined on line 687, but no explicit reference was found in the text == Unused Reference: 'RFC5374' is defined on line 691, but no explicit reference was found in the text == Unused Reference: 'RFC7296' is defined on line 696, but no explicit reference was found in the text == Unused Reference: 'RFC8296' is defined on line 712, but no explicit reference was found in the text == Unused Reference: 'RFC8754' is defined on line 723, but no explicit reference was found in the text ** Downref: Normative reference to an Informational draft: draft-cheng-spring-ipv6-msr-design-consideration (ref. 'I-D.cheng-spring-ipv6-msr-design-consideration') Summary: 2 errors (**), 0 flaws (~~), 13 warnings (==), 7 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group X. Geng 3 Internet-Draft Z. Li 4 Intended status: Standards Track J. Xie 5 Expires: 8 September 2022 Huawei Technologies 6 7 March 2022 8 IPv6 Multicast Source Routing Traffic Engineering 9 draft-geng-msr6-traffic-engineering-01 11 Abstract 13 This document defines 2 new types of segment: End.RL and End.RL.X , 14 and the corresponding packet processing procedures over the IPv6 data 15 plane for the MSR6(Multicast Source Routing over IPv6) TE solutions. 17 Requirements Language 19 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 20 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 21 document are to be interpreted as described in RFC 2119 [RFC2119].Ro 23 Status of This Memo 25 This Internet-Draft is submitted in full conformance with the 26 provisions of BCP 78 and BCP 79. 28 Internet-Drafts are working documents of the Internet Engineering 29 Task Force (IETF). Note that other groups may also distribute 30 working documents as Internet-Drafts. The list of current Internet- 31 Drafts is at https://datatracker.ietf.org/drafts/current/. 33 Internet-Drafts are draft documents valid for a maximum of six months 34 and may be updated, replaced, or obsoleted by other documents at any 35 time. It is inappropriate to use Internet-Drafts as reference 36 material or to cite them other than as "work in progress." 38 This Internet-Draft will expire on 8 September 2022. 40 Copyright Notice 42 Copyright (c) 2022 IETF Trust and the persons identified as the 43 document authors. All rights reserved. 45 This document is subject to BCP 78 and the IETF Trust's Legal 46 Provisions Relating to IETF Documents (https://trustee.ietf.org/ 47 license-info) in effect on the date of publication of this document. 48 Please review these documents carefully, as they describe your rights 49 and restrictions with respect to this document. Code Components 50 extracted from this document must include Revised BSD License text as 51 described in Section 4.e of the Trust Legal Provisions and are 52 provided without warranty as described in the Revised BSD License. 54 Table of Contents 56 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 57 2. Terminologies . . . . . . . . . . . . . . . . . . . . . . . . 3 58 3. MSR6 Explicit Routing . . . . . . . . . . . . . . . . . . . . 4 59 4. MSR6 SID Definition . . . . . . . . . . . . . . . . . . . . . 4 60 5. MSR6 Endpoint Behaviors . . . . . . . . . . . . . . . . . . . 5 61 5.1. End.RL: MSR6 Endpoint Replication List . . . . . . . . . 5 62 5.2. End.RL.X: MSR6 L3 Cross-Connect . . . . . . . . . . . . . 7 63 6. Multicast Routing Header . . . . . . . . . . . . . . . . . . 8 64 7. MSR6 Compression . . . . . . . . . . . . . . . . . . . . . . 10 65 7.1. MSR6 Requirement for Compression . . . . . . . . . . . . 10 66 7.2. Compressed MRH6 . . . . . . . . . . . . . . . . . . . . . 11 67 8. Illustration . . . . . . . . . . . . . . . . . . . . . . . . 12 68 8.1. MSR6 Illustration: End.RL . . . . . . . . . . . . . . . . 13 69 8.2. MSR6 Illustration: End.RL.X . . . . . . . . . . . . . . . 14 70 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 71 10. Security Considerations . . . . . . . . . . . . . . . . . . . 15 72 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 15 73 12. Normative References . . . . . . . . . . . . . . . . . . . . 15 74 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 17 76 1. Introduction 78 Segment Routing ([RFC8402]) leverages the mechanism of source 79 routing. An ingress node steers a packet through an ordered list of 80 instructions, called "segments". Each one of these instructions 81 represents a function to be implemented at a specific location in the 82 network. A function is locally defined on the node where it is 83 executed. Network Programming combines Segment Routing functions to 84 achieve a networking objective that goes beyond mere packet routing. 85 [RFC8986] defines the SRv6 Network Programming concept and specifies 86 the main Segment Routing behaviors and network programming functions. 88 Bit Index Explicit Replication (BIER) [RFC8279] is an architecture 89 that provides optimal multicast forwarding without requiring a 90 protocol for explicitly building multicast distribution trees or per- 91 flow state maintained by intermediate routers. When a multicast data 92 packet enters BIER forwarding domain, the ingress node encapsulates 93 the packet with a bitstring, each bitposition of which presents the 94 egress nodes. To forward the packet to a given set of egress nodes, 95 the bits corresponding to those egress nodes are set in the 96 bitstring. The intermediate nodes in the BIER domain replicate and 97 forward the packet based on the bitstring.The mechanism of forwarding 98 a packet based on bitstring of BIER are specified in [RFC8279]. 100 An IPv6 based multicast source routing (MSR6) solution is defined in 101 [I-D.cheng-spring-ipv6-msr-design-consideration], which leverages the 102 benefits of source routing over IPv6 data plane to provide simplified 103 multicast TE and BE service in an IPv6 network without unnecessary 104 multicast tree status and complex control plane protocols. MSR6 105 needs to reuse the advantages of SRv6 and BIER to implement source 106 routing. 108 MSR6 has two basic modes of forwarding: one is based on Shortest Path 109 First(SPF), which is called MSR6 BE mode; the other is based on 110 traffic engineered, which is called MSR6 TE mode. This document 111 defines 2 new types of segment: End.RL and End.RL.X , and the 112 corresponding packet processing procedures over the IPv6 data plane 113 for the MSR6 TE solutions. 115 2. Terminologies 117 MSR6: Multicast Source Routing over IPv6, defined in 118 [I-D.cheng-spring-ipv6-msr-design-consideration]. 120 MRH: Multicast Routing Header, a new type of Routing Header which is 121 used for MSR6. 123 Multicast domain: A set of network device which could provide P2MP 124 multicast transport. In this document, the multicast domain is an 125 MSR domain, where every nodes support the capability of MSR6. 127 Root Node: Root node is the beginning point of a multicast tree and 128 also the initiation node of a multicast tunnel. It encapsulates the 129 packet with a multicast header. The type of the encapsulation 130 depends on the routing protocol used in the multicast domain. For 131 MSR6 TE, the encapsulation is MSR6 TE header, which is an IPv6 header 132 with MRH. 134 Replication Endpoint: the intermediate node of a multicast tree, 135 which replicates packet and forwards the packet to the downstream 136 nodes. For MSR6, the Replication Node is called Replication Endpoint 137 which can be indicated by the MSR6 Segment and replicate packets 138 according to the multicast source routing information encapsulation 139 in the MSR6 header of the packet. 141 Leaf Node: Leaf node is the end point of a multicast tree and also 142 the decapsulation node of a multicast tunnel. It decapsulates the 143 multicast header in the packet and forwards the packet based on 144 overlay encapsulation. 146 Parent Node: The parent node is the node that does the packet 147 replication, corresponding to the concept of a child node. 149 Child Node: The child node is the downstream node that will receive 150 the packet which has been replicated ,corresponding to the concept of 151 a parent node. 153 3. MSR6 Explicit Routing 155 In order to implement MSR6 TE, the nodes and links along the path 156 must be explicitly specified in the packet. 158 In SRv6, the segment list is suitable for source route of unicast 159 path, which is P2P and could be presented by the data structure of a 160 chain with a pointer; In the Segment Routing Header(SRH), the segment 161 list is the chain, and the segment left is the pointer. But for the 162 multicast, the path of multicast service is a tree, and can not be 163 presented by data structure in a one-dimensional array. So this 164 document introduces new segment to present node/link in a multicast 165 tree and introduce structure information in the segment to indicate 166 the parent-child relationship during multicast replication. And all 167 the nodes/links along the multicast tree can be encoded into the 168 segment list. 170 In a multicast tree, when the packet is replicated from one node to 171 multiple downstream nodes, parent-child relationship is built up 172 between these nodes. MRH is supposed to encode the nodes along the 173 P2MP path and also the parent-child relationship between them. 175 4. MSR6 SID Definition 177 As defined in [RFC8402], an Segment Identifier is an IPv6 address 178 explicitly associated with the segment. When an SRv6 SID is in the 179 Destination Address field of an IPv6 header of a packet, it is routed 180 through transit nodes in an IPv6 network as an IPv6 address. 182 MSR6 Segment Identifier complies with the definition of the Segment 183 Identifier in [RFC8402]. Following the specification in RFC8986, an 184 MSR6 SID is consisting of LOC:FUNCT:ARG. Locator could be 185 represented as B:N, B is the MSR6 segment block(IPv6 prefix allocated 186 for MSR6 segment by the operator) and N is the identifier of the node 187 instantiating the SID. The MSR6 locator is routable and leads to the 188 node which instantiates the SID; Function is the identification of a 189 local behavior bound to the MSR6 SID; Argument is the additional 190 information requested by the function. 192 Typical MSR6 functions and arguments are defined in the following 193 sections. 195 5. MSR6 Endpoint Behaviors 197 5.1. End.RL: MSR6 Endpoint Replication List 199 End.RL SID is one of the basic MSR6 SID as an extension of End SID 200 defined in RFC8986. 202 The encoding of segment list which is composed of End.RL SIDs follow 203 the rules: 205 * There MUST be an End.RL SID for each Replication Endpoint in the 206 multicast tree 208 * The End.RL SIDs, which represent child nodes that have the same 209 parent node, MUST be arranged consecutively in the segment list 211 * The End.RL SID for a parent node MUST indicate the position of the 212 End.RL SIDs for the child nodes 214 There are 2 arguments for each End.RL SID: 216 * "Replication number" is used for indicating how many times the 217 parent node is supposed to execute replication 219 * "Pointer" is used for indicating the position of End.RL SID for 220 the first child node in the segment list; 222 When the packet is received by an Replication Endpoint and the DA of 223 this packet is a local SID with the function of End.RL, the packet 224 will be replicated based on the "replication number". The DA of the 225 1st replicated packet is replaced by the SL="pointer" and the value 226 of Segment Left is set to "pointer"; the DA of the 2nd replicated 227 packet is replaced by the SL="pointer -1" and the value of Segment 228 Left is set to "pointer-1". The packet is sent out based on the 229 updated DA. Repeat the operation untill all the replicated packets 230 are sent out. 232 The replication node does the following when the DA of the packet is 233 a local End.RL SID. 235 S01. When an MRH is processed { 236 S02. If (Segments Left == 0 or Replication Number==Pointer==0) { 237 S03. Stop processing the MRH, and proceed to process the next 238 header in the packet, whose type is identified by 239 the Next Header field in the routing header. 240 S04. } 241 S05. If (IPv6 Hop Limit <= 1) { 242 S06. Send an ICMP Time Exceeded message to the Source Address 243 with Code 0 (Hop limit exceeded in transit), 244 interrupt packet processing, and discard the packet. 245 S07. } 246 S08. max_LE = (Hdr Ext Len / 2) - 1 247 S09. If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) { 248 S10. Send an ICMP Parameter Problem to the Source Address 249 with Code 0 (Erroneous header field encountered) 250 and Pointer set to the Segments Left field, 251 interrupt packet processing, and discard the packet. 252 S11. } 253 S12. Decrement IPv6 Hop Limit by 1 254 S13. Replicate the packet based on the "replication number" in the 255 argument of the SID 256 S14. Set the Segment Left of the 1st replicated packet to "Pointer" in 257 the argument of the SID 258 S15. Update IPv6 DA with Segment List[Pointer] 259 respectively in each replicated packet 260 S16. Submit the packet to the egress IPv6 FIB lookup for 261 transmission to the new destination 262 S17. Repeat S14-S17 with "Pointer+n"(n=the number of packets which have 263 been updated) untill all the packets are transmitted to based 264 on the updated DA 265 R18. } 267 5.2. End.RL.X: MSR6 L3 Cross-Connect 269 End.RL.X SID is one of the basic MSR6 SID as an extension of End.X 270 SID defined in RFC8986. 272 The encoding of segment list which is composed of End.RL.X SIDs 273 follow the rules: 275 * There MUST be an End.RL.X SID for each downstream link connected 276 to a Replication Endpoint in the multicast tree 278 * The End.RL.X SIDs corresponding to downstream links of the same 279 Replication Endpoint MUST be arranged consecutively in the segment 280 list 282 * The End.RL.X SID for a parent node MUST indicate the position of 283 the End.RL.X SIDs for the child nodes 285 There are 2 arguments for each End.RL SID: 287 * "Replication number" is used for indicating how many times the 288 existing node is supposed to execute replication 290 * "Pointer" is used for indicating the position of End.RL.X SID for 291 the first downstream link of the child node in the segment list; 293 When the packet is received by a Replication Endpoint and the DA of 294 this packet is a local SID with the function of End.RL.X, the packet 295 will be replicated based on the "replication number". The DA of the 296 1st replicated packet is replaced by the Segment List[ pointer ] and 297 the value of Segment Left is set to "pointer"; The packet is sent out 298 through the link indicated by the SID. the DA of the 2nd replicated 299 packet is replaced by the Segment List [SL +1] and the value of 300 Segment Left is set to "SL+1"; The DA of the 2nd packet is replaced 301 by the Segment List [ pointer2 ] (pointer2 is the argument in the 302 Segment List [SL+1]) and the value of Segment Left is set to 303 "pointer2"; The packet is sent out through the link indicated by the 304 SID; Repeat the operation untill all the replicated packets are sent 305 out through the indicated links. 307 S01. When an MRH is processed { 308 S02. If (Segments Left == 0 or Replication Number==Pointer==0) { 309 S03. Stop processing the MRH, and proceed to process the next 310 header in the packet, whose type is identified by 311 the Next Header field in the routing header. 312 S04. } 313 S05. If (IPv6 Hop Limit <= 1) { 314 S06. Send an ICMP Time Exceeded message to the Source Address 315 with Code 0 (Hop limit exceeded in transit), 316 interrupt packet processing, and discard the packet. 317 S07. } 318 S08. max_LE = (Hdr Ext Len / 2) - 1 319 S09. If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) { 320 S10. Send an ICMP Parameter Problem to the Source Address 321 with Code 0 (Erroneous header field encountered) 322 and Pointer set to the Segments Left field, 323 interrupt packet processing, and discard the packet. 324 S11. } 325 S12. Decrement IPv6 Hop Limit by 1 326 S13. Replicate the packet based on the "replication number" in the 327 argument of the SID 328 S14. Set the Segment Left of the 1st replicated packet to "Pointer" in 329 the argument of the SID 330 S15. Update IPv6 DA with Segment List[Pointer] 331 S16. Transmit the packet through the indicated link 332 S17. Set the Segment Left of the 2nd replicated packet to "Segment Left+1" in 333 the argument of the SID 334 S18. Update IPv6 DA with Segment List[Segment Left+1] 335 S19. Set the Segment Left of the 2nd replicated packet to "Pointer 2" in 336 the argument of the updated SID 337 S20. Update IPv6 DA with Segment List[Pointer 2] 338 S21. Transmit the packet through the indicated link 339 S22. Repeat S17-S21 with "Pointer+n"(n=the number of packets which have 340 been updated) untill all the packets are transmitted to based 341 on the updated DA 342 R23. } 344 6. Multicast Routing Header 346 A new type of Routing Header is defined as follows for MSR6 Traffic 347 Engineering called Multicast Routing Header(MRH). 349 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 350 | Next Header | Hdr Ext Len | Routing Type | Segments Left | 351 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 352 | MRH Sub-Type | Reserved | 353 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 354 | | 355 | M-SID[0] | 356 | | 357 | | 358 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 359 | | 360 | M-SID[1] | 361 | | 362 | | 363 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 364 | | 365 | ... | 366 | | 367 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 368 | | 369 | M-SID[n] | 370 | | 371 | | 372 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 373 // // 374 // Optional Type Length Value objects (variable) // 375 // // 376 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 378 Next Header: Defined in [RFC8200], section 4.4. 380 Hdr Ext Len: Defined in [RFC8200], section 4.4. 382 Routing Type: Allocated by IANA. 384 Segments Left: Defined in [RFC8200], section 4.4. 386 MRH Sub-type: 8-bit identifier of the sub-type. The value of sub- 387 type is supposed to be assigned by IANA. 389 Optional Type Length Value objects: TLV is used to carry other type 390 of information that is not suitable to indicated in the segment list. 392 The formart of M-SID defined in this document is shown in the 393 following figure: 395 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 396 | | 397 | Locator | 398 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 399 | Function | 400 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 401 | Replication number | Pointer | 402 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 404 It includes: 406 Locator: could represented as B:N where B is the MRH segment block 407 (IPv6 prefix allocated for MRH segment by the operator) and N is the 408 identifier of the node instantiating the SID. When the locator part 409 of the MRH segment is routable, it leads to the node, which 410 instantiates the SID. 412 Function: an identification of a local behavior bound to the MRH. 413 Replication is default behavior for any MRH segment, which doesn't 414 need function indication. 416 Replication number is used for indicating how many times the existing 417 node is supposed to excute replication 419 Pointer is used for indicating the position of MSR6 SID for the child 420 node; 422 Segments for the group of child nodes which belong to the same parent 423 node MUST be encoded together in the segment list. So Pointer and 424 replication number could determine the upper bound and lower bound of 425 the value range of segment left for the child nodes. 427 The destination address of the packet is the IPv6 address of the 428 existing Replication Endpoint. The next header of the IPv6 header 429 points to a Routing Header and the type of the routing header is MRH 430 Type. 432 7. MSR6 Compression 434 7.1. MSR6 Requirement for Compression 436 Different from unicast, MSR is designed for an explicit multicast 437 tree rather than a p2p path: the former contains more nodes than the 438 latter generally. So the header overhead is one of the key challenge 439 for MSR6, which limits the scalability and the potential deployment 440 scenario. 442 There are some SRH compression solutions under discussion in IETF. 443 These solutions could also be used for MSR6 with modification. 445 7.2. Compressed MRH6 447 The compressed MRH6 is designed as follows: 449 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 450 | Version | Traffic Class | Flow Label | 451 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 452 | Payload Length | Next=43 | Hop Limit | 453 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 454 | | 455 | Source Address | 456 | | 457 | | 458 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 459 | | 460 | Common Prefix | 461 | | 462 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 463 | M-SID [x] | 464 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 465 | Next Header | Hdr Ext Len | Routing Type | Segments Left | 466 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 467 | MRH Type=2 | Reserved | 468 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 469 | M-SID[0] | 470 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 471 | M-SID[1] | 472 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 473 | ... | 474 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 475 | M-SID[n] | 476 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 478 Each M-SID in the MRH is shown in the following figure: 480 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 481 | Node-ID | Function | Rp Nm |Pointer| 482 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 484 It includes: 486 Node ID: is the identifier of the node instantiating the SID. Common 487 Profix and Node ID together form a routable IPv6 address 488 Function: an identification of a local behavior bound to the MRH. 489 Replication is default behavior for any MRH segment, which doesn't 490 need function indication. 492 Arguments: follow the definition in section 6, including replication 493 number and pointer. 495 The processing process is: 497 The destination address of the packet is the IPv6 address of the 498 existing Replication Endpoint. The next header of the IPv6 header 499 points to a Routing Header and the type of the routing header is MRH 500 Type 2. The Replication Endpoint is supposed to 502 * Find the next groups of segments in the MRH which present the 503 child nodes of the existing Replication Endpoint with Pointer-1 504 and Pointer-2; 506 * Replicate the packet based on the number of child nodes, which is 507 the replication number; 509 * Replace the SID part of IPv6 destination address with the 510 corresponding child node's segment in order for each replicated 511 packet; 513 * Update the segment left field of each replicated packet based on 514 the location child node's segment; 516 * Forward the packet to the output port based on the FIB with the 517 existing destination address as an entry; 519 8. Illustration 521 In order to 522 +---+ 523 +--| D | 524 +---+ B1 +---+ 525 +--| B |----| 526 | +---+ B2 +---+ 527 +---+ A1 +--| E | 528 | A |----| +---+ 529 +---+ | +--| F | 530 A2 +---+ C1 +---+ 531 +--| C |----| 532 +---+ C2 +---+ 533 +--| G | 534 +---+ 535 |-->MSR-R<--|->MSR End<-|-->MSR-L<--| 537 MSR-R: MSR6 Root Node, including Node A; 539 MSR End: MSR6 Replication Endpoint, including Node B and C; 541 MSR-L: MSR6 Leaf Nodes, including Node D, E, F, G; 543 8.1. MSR6 Illustration: End.RL 545 In node A, the packet is encapsulated the packet with an IPv6 header 546 carrying an MRH. The segment list in the MRH is as follows. The 547 destination address of the IPv6 header is the 1st SID in the segment 548 list, which is the local SID of node A. Based on the End.RL behavior 549 defined in section 5.1, the packet is replicated to 2 (Replication 550 Number+1=1+1=2) packets. In the 1st packet, the Segment Left is set 551 to 2 and DA is replaced by Segment List[2]; In the 2nd packet, the 552 Segment Left is set to 3 and DA is replaced by Segment List[3]; The 553 packets are routed to the node B and node C respectively. 555 +----------------------------------------+ 556 | Loc:A | Fun:End.RL | Rp-Nm:1 | P:2 | 557 +----------------------------------------+ 558 | Loc:B | Fun:End.RL | Rp-Nm:1 | P:4 | 559 +----------------------------------------+ 560 | Loc:C | Fun:End.RL | Rp-Nm:1 | P:6 | 561 +----------------------------------------+ 562 | Loc:D | Fun:End.RL | Rp-Nm:0 | P:0 | 563 +----------------------------------------+ 564 | Loc:E | Fun:End.RL | Rp-Nm:0 | P:0 | 565 +----------------------------------------+ 566 | Loc:F | Fun:End.RL | Rp-Nm:0 | P:0 | 567 +----------------------------------------+ 568 | Loc:G | Fun:End.RL | Rp-Nm:0 | P:0 | 569 +----------------------------------------+ 571 In MSR6 Replication Endpoint B, the destination address of the IPv6 572 header is the local SID of node B. Based on the End.RL behavior 573 defined in section 5.1, the packet is replicated to 2 (Replication 574 Number+1=1+1=2) packets. In the 1st packet, the Segment Left is set 575 to 4 and DA is replaced by Segment List[4]; In the 2nd packet, the 576 Segment Left is set to 5 and DA is replaced by Segment List[5]; The 577 packets are routed to the node D and node E respectively. 579 In MSR Endpoint C, the process is similar. 581 In MSRE D, the destination address of the IPv6 header is the local 582 SID of node D. Based on the End.RL behavior defined in section 5.1, 583 when replication number=0, node D stops processing the MRH and 584 continues to process the next header in the packet. 586 8.2. MSR6 Illustration: End.RL.X 588 In node A, the packet is encapsulated the packet with an IPv6 header 589 carrying an MRH. The segment list in the MRH is as follows. The 590 destination address of the IPv6 header is the local SID of node A. 591 Based on the End.RL.X behavior defined in section 5.2, the packet is 592 replicated to 2 (Replication Number+1=1+1=2) packets. In the 1st 593 packet, the Segment Left is set to 3 and DA is replaced by Segment 594 List[3] and send the packet based on the specified adjacency A1; In 595 the 2nd packet, the Segment Left is set to 2 and DA is replaced by 596 Segment List[2]; Based on the arguments in the updated DA, the 597 Segment Left is set to 5 and DA is replaced by Segment List[5] and 598 send the packet based on the specified adjacency A2; 600 +-----------------------------------------+ 601 | Loc:A1 | Fun:End.RL.X| Rp-Nm:1 | P:3 | 602 +-----------------------------------------+ 603 | Loc:A2 | Fun:End.RL.X| Rp-Nm:0 | P:5 | 604 +-----------------------------------------+ 605 | Loc:B1 | Fun:End.RL.X| Rp-Nm:1 | P:0 | 606 +-----------------------------------------+ 607 | Loc:B2 | Fun:End.RL.X| Rp-Nm:0 | P:0 | 608 +-----------------------------------------+ 609 | Loc:C1 | Fun:End.RL.X| Rp-Nm:1 | P:0 | 610 +-----------------------------------------+ 611 | Loc:C2 | Fun:End.RL.X| Rp-Nm:0 | P:0 | 612 +-----------------------------------------+ 614 In node B, the packet is encapsulated the packet with an IPv6 header 615 carrying an MRH. The segment list in the MRH is as follows. The 616 destination address of the IPv6 header is the local SID of node B. 617 Based on the End.RL.X behavior defined in section 5.2, the packet is 618 replicated to 2 (Replication Number+1=1+1=2) packets. In the 1st 619 packet, the DA is replaced by the corresponding leaf stored in the 620 node and send the packet based on the specified adjacency B1; In the 621 2nd packet, the DA is replaced by the corresponding leaf stored in 622 the node and send the packet based on the specified adjacency B2; 624 In MSR Endpoint C, the process is similar. 626 In MSRE D, the destination address of the IPv6 header is the local 627 SID of node D. Node D stops processing the MRH, and begin to process 628 the next header in the packet. 630 9. IANA Considerations 632 This document makes no request of IANA. 634 Note to RFC Editor: this section may be removed on publication as an 635 RFC. 637 10. Security Considerations 639 11. Acknowledgements 641 12. Normative References 643 [I-D.cheng-spring-ipv6-msr-design-consideration] 644 Cheng, W., Mishra, G., Li, Z., Wang, A., Qin, Z., and C. 645 Fan, "Design Consideration of IPv6 Multicast Source 646 Routing (MSR6)", Work in Progress, Internet-Draft, draft- 647 cheng-spring-ipv6-msr-design-consideration-01, 25 October 648 2021, . 651 [I-D.geng-bier-ipv6-inter-domain] 652 Geng, L., Xie, J., McBride, M., Yan, G., and X. Geng, 653 "Inter-Domain Multicast Deployment using BIERv6", Work in 654 Progress, Internet-Draft, draft-geng-bier-ipv6-inter- 655 domain-02, 27 October 2020, 656 . 659 [I-D.ietf-bier-ping] 660 Kumar, N., Pignataro, C., Akiya, N., Zheng, L., Chen, M., 661 and G. Mirsky, "BIER Ping and Trace", Work in Progress, 662 Internet-Draft, draft-ietf-bier-ping-07, 11 May 2020, 663 . 666 [I-D.xie-bier-ipv6-mvpn] 667 Xie, J., McBride, M., Dhanaraj, S., Geng, L., and G. 668 Mishra, "Use of BIER IPv6 Encapsulation (BIERv6) for 669 Multicast VPN in IPv6 networks", Work in Progress, 670 Internet-Draft, draft-xie-bier-ipv6-mvpn-03, 10 October 671 2020, . 674 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 675 Requirement Levels", BCP 14, RFC 2119, 676 DOI 10.17487/RFC2119, March 1997, 677 . 679 [RFC4301] Kent, S. and K. Seo, "Security Architecture for the 680 Internet Protocol", RFC 4301, DOI 10.17487/RFC4301, 681 December 2005, . 683 [RFC4302] Kent, S., "IP Authentication Header", RFC 4302, 684 DOI 10.17487/RFC4302, December 2005, 685 . 687 [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", 688 RFC 4303, DOI 10.17487/RFC4303, December 2005, 689 . 691 [RFC5374] Weis, B., Gross, G., and D. Ignjatic, "Multicast 692 Extensions to the Security Architecture for the Internet 693 Protocol", RFC 5374, DOI 10.17487/RFC5374, November 2008, 694 . 696 [RFC7296] Kaufman, C., Hoffman, P., Nir, Y., Eronen, P., and T. 697 Kivinen, "Internet Key Exchange Protocol Version 2 698 (IKEv2)", STD 79, RFC 7296, DOI 10.17487/RFC7296, October 699 2014, . 701 [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 702 (IPv6) Specification", STD 86, RFC 8200, 703 DOI 10.17487/RFC8200, July 2017, 704 . 706 [RFC8279] Wijnands, IJ., Ed., Rosen, E., Ed., Dolganow, A., 707 Przygienda, T., and S. Aldrin, "Multicast Using Bit Index 708 Explicit Replication (BIER)", RFC 8279, 709 DOI 10.17487/RFC8279, November 2017, 710 . 712 [RFC8296] Wijnands, IJ., Ed., Rosen, E., Ed., Dolganow, A., 713 Tantsura, J., Aldrin, S., and I. Meilik, "Encapsulation 714 for Bit Index Explicit Replication (BIER) in MPLS and Non- 715 MPLS Networks", RFC 8296, DOI 10.17487/RFC8296, January 716 2018, . 718 [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., 719 Decraene, B., Litkowski, S., and R. Shakir, "Segment 720 Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, 721 July 2018, . 723 [RFC8754] Filsfils, C., Ed., Dukes, D., Ed., Previdi, S., Leddy, J., 724 Matsushima, S., and D. Voyer, "IPv6 Segment Routing Header 725 (SRH)", RFC 8754, DOI 10.17487/RFC8754, March 2020, 726 . 728 [RFC8986] Filsfils, C., Ed., Camarillo, P., Ed., Leddy, J., Voyer, 729 D., Matsushima, S., and Z. Li, "Segment Routing over IPv6 730 (SRv6) Network Programming", RFC 8986, 731 DOI 10.17487/RFC8986, February 2021, 732 . 734 Authors' Addresses 736 Xuesong Geng 737 Huawei Technologies 738 Email: gengxuesong@huawei.com 740 Zhenbin Li 741 Huawei Technologies 742 Email: lizhenbin@huawei.com 744 Jingrong Xie 745 Huawei Technologies 746 Email: xiejingrong@huawei.com