Hi Adrian, Sorry for my delay. Please see my reply inline.
You can find the modifications and diff here: https://github.com/muzixing/IETF-PCEP-SRV6/commit/56834cd1b09eacee0ef48e874b48956438ae1333?diff=split Thanks, Cheng -----Original Message----- From: Adrian Farrel <adr...@olddog.co.uk> Sent: Tuesday, March 7, 2023 3:39 AM To: Cheng Li <c...@huawei.com>; julien.meu...@orange.com; pce@ietf.org Cc: Lizhenbin <lizhen...@huawei.com> Subject: RE: [Pce] WG Last Call for draft-ietf-pce-segment-routing-ipv6-15 > Many thanks for your comments, I have accepted most of the comments > from you, and would like to discuss with you about the rest. Please > see my reply inline. Great. Thanks, Cheng. Continuing the discussion in line. Snipped all of the resolved stuff. > Because we have a lots of comments. It may be good to address them by > several updates. So we can close completed comments and work on the > remain ones. Of course. I'm sure you can be relied on to keep track of what you still have to address. A === 4.1.1 If a PCEP speaker includes PST=3 (early allocated by IANA) in the PST List of the PATH-SETUP-TYPE-CAPABILITY TLV then it MUST also include the SRv6-PCE-CAPABILITY sub-TLV inside the PATH- SETUP-TYPE-CAPABILITY TLV. Two questions: a. What happens if PST=3 is present but SRv6-PCE-CAPABILITY is missing? [Cheng2] Please see https://datatracker.ietf.org/doc/html/draft-ietf-pce-segment-routing-ipv6-16#section-5.1 it will be treated as an error. " If a PCEP speaker receives a PATH-SETUP-TYPE-CAPABILITY TLV with a PST list containing PST=3, but the SRv6-PCE-CAPABILITY sub-TLV is absent, then the PCEP speaker MUST send a PCErr message with Error-Type = 10 (Reception of an invalid object) and Error-Value = 34 (Missing PCE-SRv6-CAPABILITY sub-TLV) and MUST then close the PCEP session. If a PCEP speaker receives a PATH-SETUP-TYPE-CAPABILITY TLV with an SRv6-PCE-CAPABILITY sub-TLV, but the PST list does not contain PST=3, then the PCEP speaker MUST ignore the SRv6-PCE-CAPABILITY sub-TLV. " b. What happens if SRv6-PCE-CAPABILITY is present, but PST=3 was not included? (You don't say that that is not allowed.) [Cheng2] See above, the TLV will be ignored. It's possible that a forward pointer to Section 5 is enough (I didn't cross-check this). [CL] It seems like we need to specify the details of error handling. [AF] Right! 3% of the function, 30% of the text ;-) --- 4.3.1 Flags A pointer to Section 9.2 would be useful. [CL] May not need to do so. Too many pointers I think. [AF] Well, OK. I won't insist. --- 4.3.1 What is the interaction between the L flag in the subobject header and the S bit in the Flags field? [CL] L flag is for loose path. S flag is saying that the SID value is absent. The PCC may allocate a value according to the NAI. [AF] I see... The 'L' Flag: Indicates whether the subobject represents a loose-hop (see [RFC3209]). If this flag is set to zero, a PCC MUST NOT overwrite the SID value present in the SRv6-ERO subobject. Otherwise, a PCC MAY expand or replace one or more SID values in the received SRv6-ERO based on its local policy. ...and... * S: When this bit is set to 1, the SRv6-SID value in the subobject body is absent. In this case, the PCC is responsible for choosing the SRv6-SID value, e.g., by looking up in the SR-DB using the NAI which, in this case, MUST be present in the subobject. If the S bit is set to 1 then F bit MUST be set to zero. How can you overwrite the SID value in the SRv6-ERO subobject if it is absent? [Cheng2]If the ERO subobject is absent, we can not overwrite it. We can overwrite it(Actually, it is not overwrite, because the value is not provided) only when the ERO subobject presents. The PCC will allocate a SID value for this ERO subobject according to the NAI or other info. --- 4.3.1 / 4.3.1.1 Figure 2 shows the "SID Structure" field as 32 bits, but Figure 3 is pretty clear that it is 64 bits. I think Figure 2 is broken. [AF] You didn't comment, but I think it is an easy fix. [Cheng2]Fixed, 64 bits. --- 4.4.1 Is the SRv6-SID field optional in the RRO subobject? The figure implies it must be present, and that would seem pretty reasonable for an RRO. But the text says all the fields are exactly as in the ERO, and the S flag seems to still have meaning. There is the same problem with the length of the SID structure field. [Cheng] I think you are right, it must be present. So we will not need S-flag any more. Let's see how to handle this. [AF] OK. Awaiting dsicussions. [Cheng2] It is optional. Though when the SID value is absent, it looks weird. But we can keep it as the same as ERO, which means we can unset S-bit if SRv6 SID value is required all the time. We can add "optional" in the figure to sync up with ERO. --- 5.1 If a PCE receives an SRv6-PCE-CAPABILITY sub-TLV with the X flag set to 1 then it MUST ignore any MSD-Type, MSD-Value fields and MUST assume that the sender can impose any length of SRH. Is that really "MUST assume" or just "may assume"? That would seem to be consistent with... However, if a PCE learns these via different means, e.g routing protocols, as specified in: [I-D.ietf-lsr-ospfv3-srv6-extensions]; [I-D.ietf-lsr-isis-srv6-extensions]; [I-D.ietf-idr-bgpls-srv6-ext], then it ignores the values in the SRv6-PCE-CAPABILITY sub-TLV. But there's a hole :-( If we follow the previous paragraph, the PCE may send an ERO with more SIDs than allowed by the MSD in the Open message (if the value learned from the IGP is a larger number. But... If a PCEP session is established with a non-zero SRv6 MSD value, and the PCC receives an SRv6 path containing more SIDs than specified in the SRv6 MSD value (based on the SRv6 MSD type), the PCC MUST send a PCErr message with Error-Type = 10 (Reception of an invalid object) and Error-Value = TBD1 (Unsupported number of SRv6-ERO subobjects). ...says that regardless of the MSD in the IGP, the PCC must reject an ERO that contains more SIDs that specified in the Open message. Furthermore, you have... If a PCC receives a list of SRv6 segments, and the number of SRv6 segments exceeds the SRv6 MSD that the PCC can impose on the packet (SRH), it MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-Value = TBD5 ("Unsupported number of SRv6-ERO subobjects") as per [RFC8664]. This last paragraph seems to cover all bases, so why not just use it? [Cheng] em, what do you mean just use it? [AF] I mean, rely only on that last paragraph and delete all of the other text that seems to be confused or contradictory. [Cheng2]Well, the previous paragraphs introduce the ways that the MSD value can be learned. The last paragraph state that how the PCC reacts when the number of SIDs exceeds the MSD. I think it is OK. --- 5.1 There seems to be a contradiction about the MSD 0 case. You have... If a PCE receives an SRv6-PCE-CAPABILITY sub-TLV with the X flag as set, and SRv6 MSD-Type or MSD-Value fields are set to zero then it is considered as an error and the PCE MUST respond with a PCErr message (Error-Type = 1 "PCEP session establishment failure" and Error-Value = 1 "reception of an invalid Open message or a non Open message."). [Cheng2] let's delete "to zero", because when X is set, no matter MSD-type fields MUST NOT be included, so it will be treated as an error. ...and... If a PCEP session is established with an SRv6 MSD value of zero, then the PCC MAY specify an SRv6 MSD for each path computation request that it sends to the PCE, by including a "maximum SID depth" metric object on the request similar to [RFC8664]. The first says you can't have a session with MSD 0, the second tells you how to act if you do. [CL] we need more discussion here. [AF] OK. Waiting. [Cheng2] See above, the case is about X =1, then no MSD TLV fields are included. This part talks about when X=0 and MSD=0, then PCE need to get the MSD value, so request the PCC to send the MSD to PCE in path computation request msg. --- 5.1 The N flag, X flag and (MSD-Type,MSD-Value) pair inside the SRv6-PCE- CAPABILITY sub-TLV are meaningful only in the Open message sent from a PCC to a PCE. As such, a PCE MUST set the flags to zero and not include any (MSD-Type,MSD-Value) pair in the SRv6-PCE-CAPABILITY sub- TLV in an outbound message to a PCC. Similarly, a PCC MUST ignore N,X flag and any (MSD-Type,MSD-Value) pair received from a PCE. If a PCE receives multiple SRv6-PCE-CAPABILITY sub-TLVs in an Open message, it processes only the first sub-TLV received. How does this work when the session is between two PCEs? [CL]Will we use it for two PCEs? [AF] Well, PCEs are allowed to talk to each other using PCEP. I guess, in that case, you would model one PCE being client and the other server, but it is possible that the roles get reversed for different path setups. [AF] I think that, you can cover this by using... The N flag, X flag and (MSD-Type,MSD-Value) pair inside the SRv6-PCE- CAPABILITY sub-TLV are meaningful only in the Open message sent to a PCE. As such, the flags MUST be set to zero and a (MSD-Type,MSD-Value) pair MUST NOT be present in the SRv6-PCE-CAPABILITY sub-TLV in an Open message sent to a PCC. Similarly, a PCC MUST ignore N,X flag and any (MSD-Type,MSD-Value) pair in a received Open message. If a PCE receives multiple SRv6-PCE-CAPABILITY sub-TLVs in an Open message, it processes only the first sub-TLV received. [Cheng2] Agree. --- 5.2.1 I find the following... * If NT=0, the F bit MUST be 1, the S bit MUST be zero and the Length MUST be 24. So, NT=0, F=1, S=1 is an error. Then... If a PCC finds that the NT field, Length field, S bit, F bit, and T bit are not consistent, it MUST consider the entire ERO invalid and MUST send a PCErr message with Error-Type = 10 ("Reception of an invalid object") and Error-Value = 11 ("Malformed object"). But... If a PCC receives an SRv6-ERO subobject in which the S and F bits are both set to 1 (that is, both the SID and NAI are absent), it MUST consider the entire ERO invalid and send a PCErr message with Error- Type = 10 ("Reception of an invalid object") and Error-value = TBD3 ("Both SID and NAI are absent in the SRv6-ERO subobject"). Two error messages for the same error? [CL] further discussion. [AF] OK. Waiting. [Cheng2]The first paragraph is mainly for all the cases of Malformed objects. The second paragraph is specifically for Both SID and NAI are absent. --- 5.2.1 If a PCC receives an SRv6-ERO subobject in which the S bit is set to 1 and the F bit is set to zero (that is, the SID is absent and the NAI is present), but the PCC does not support NAI resolution, it MUST consider the entire ERO invalid and send a PCErr message with Error- Type = 4 ("Not supported object") and Error-value = 4 ("Unsupported parameter"). This is good. But it seems harsh for the poor PCE. How was the PCE supposed to know that the PCC didn't support NAI resolution? [CL] further discussion. [AF] OK. Waiting. [Cheng2] Well, this is only for the case that the PCC does not support NAI resolution. It just tells the PCE that it does not support. Then the PCE may send some ERO with SID value then. It is not required for a PCE to know this before sending the ERO. --- 5.2.2 There is nothing wrong with what is written here, but it may be very helpful to PCC implementations if you make it clear that the SID list in an SRH is arranged in the reverse order to the ERO subobject list. [CL] further discussion. [AF] OK. Waiting [Cheng2]yes reverse. But it may be OK here, because the PCC will put the SIDs in the right order into the SRH, it knows which one is the first SID. --- 5.3 Here, too, it would be really helpful to be absolutely clear about the order of subobjects, and to compare this to the order of the SIDs in the SRH. [CL] further discussion. [AF] OK. Waiting [Cheng2]I think the problem comes from SRH not PCEP. Because PCEP tells the PCC the SID list in the right order by ERO, and it is recorded in the RRO in the same way. But it may be inserted in the reverse way in the SRH only because of the encoding rules of SRH. --- 5.3 RFC 8664 makes some wise observations about how a PCC constructs an RRO (how can it know?) and suggests that the mechanisms are out of scope of the RFC. I suggest you look at that text and write something similar here. [CL] further discussion. [AF] OK. Waiting [Cheng2] RFC8664 says "A PCC MUST order the SR-RRO subobjects such that the first subobject relative to the beginning of the RRO identifies the first segment visited by the SR-TE LSP, and the last subobject identifies the final segment of the SR-TE LSP, that is, its endpoint." I think this may be good enough. Any suggestions? --- 6. No mention of RFC 8253? [CL] further discussion. [AF] OK. Waiting [Cheng2] Since we think no further security risks are introduced, it may be ok to not exclusive list all the related RFCs? It is OK to me to mention this RFC. But it is ok to me to keep the text. --- 7.4 I thought Endpoint Behavior and SID Structure were new to this document and provided the potential for (future) verification? [CL] further discussion. [AF] OK. Waiting [Cheng2]Any suggestions here? --- 9.1 Isn't the RRO in PCEP the "Reported Route Object"? [CL] I have the same remember with yours, but it is Record Route Object. Weird. [AF] I think the Object Class (8) is "Reported Route Object" and the Object Type (1) is "Recorded Route" https://www.rfc-editor.org/rfc/rfc5440.html#section-7.10 [Cheng2]Agree, fixed --- 9.1 I'm trying to find the document that makes the variation from RFC 5440 for the definition of "PCEP only" ERO and RRO subobjects. I understand why you want to do this, but what you are doing is contrary to RFC 5440. I see that RFC 8664 dodged this by "forgetting" to mark the SR-ERO and SR-RRO subobjects as "PCEP only". I have started a separate thread on this on the mailing list and have copied TEAS because this seems to need some small administrative work to fix it up. [CL] further discussion. See the discussion in ML, and update accordingly. [AF] OK. Waiting [Cheng2]Any update here? --- 9.2 You need to tell IANA how many bits can be allocated. Otherwise they may try to allocate bit 12 to the next request. [CL] well, I added '12-bit' in text to tell that explicitly. [AF] Perfect _______________________________________________ Pce mailing list Pce@ietf.org https://www.ietf.org/mailman/listinfo/pce