[spring] Alvaro Retana's Discuss on draft-ietf-spring-srv6-network-programming-20: (with DISCUSS and COMMENT)
Alvaro Retana via Datatracker <noreply@ietf.org> Wed, 23 September 2020 20:57 UTC
Return-Path: <noreply@ietf.org>
X-Original-To: spring@ietf.org
Delivered-To: spring@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 62F203A150A; Wed, 23 Sep 2020 13:57:57 -0700 (PDT)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
From: Alvaro Retana via Datatracker <noreply@ietf.org>
To: The IESG <iesg@ietf.org>
Cc: draft-ietf-spring-srv6-network-programming@ietf.org, spring-chairs@ietf.org, spring@ietf.org, Bruno Decraene <bruno.decraene@orange.com>, Joel Halpern <jmh@joelhalpern.com>
X-Test-IDTracker: no
X-IETF-IDTracker: 7.17.0
Auto-Submitted: auto-generated
Precedence: bulk
Reply-To: Alvaro Retana <aretana.ietf@gmail.com>
Message-ID: <160089467694.11025.16329903730475278493@ietfa.amsl.com>
Date: Wed, 23 Sep 2020 13:57:57 -0700
Archived-At: <https://mailarchive.ietf.org/arch/msg/spring/gKVohDrEdHdmTVLVeYE9_JW1V30>
Subject: [spring] Alvaro Retana's Discuss on draft-ietf-spring-srv6-network-programming-20: (with DISCUSS and COMMENT)
X-BeenThere: spring@ietf.org
X-Mailman-Version: 2.1.29
List-Id: "Source Packet Routing in NetworkinG \(SPRING\)" <spring.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/spring>, <mailto:spring-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/spring/>
List-Post: <mailto:spring@ietf.org>
List-Help: <mailto:spring-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/spring>, <mailto:spring-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 23 Sep 2020 20:57:57 -0000
Alvaro Retana has entered the following ballot position for draft-ietf-spring-srv6-network-programming-20: Discuss When responding, please keep the subject line intact and reply to all email addresses included in the To and CC lines. (Feel free to cut this introductory paragraph, however.) Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html for more information about IESG DISCUSS and COMMENT positions. The document, along with other ballot positions, can be found here: https://datatracker.ietf.org/doc/draft-ietf-spring-srv6-network-programming/ ---------------------------------------------------------------------- DISCUSS: ---------------------------------------------------------------------- I am balloting DISCUSS because I find the document unclear and lacking proper technical details around significant functionality, as reflected in my first 3 points. The fourth point is related to the registration policy (which doesn't match the definition in rfc8126), and my last point is for the IESG to consider. (1) Pseudocode and normative behavior The use of pseudocode was chosen as the mechanism to specify behavior, as explained in §4: An implementation of the pseudocode is compliant as long as the externally observable wire protocol is as described by the pseudocode. Clarity in the pseudocode is essential because it is used to determine compliance. Several places need improvement: (1a) In §4.1/§4.13/§4.15, the pseudocode is missing an ELSE after S04, to include the error conditions if SL != 0. A check for an error condition when SL is decremented is also needed. As written, the pseudocode could process the packet (SL == 0) *and* send an ICMP time exceeded message... :-( I'm using as a reference the pseudocode in §4.3.1.1/rfc8754, which includes the same initial statement. (1b) It would be nice if the behavior in §4.1.1 were also specified using pseudocode. As written, I am not sure if the intent is to process any upper-layer header or only specific ones. Is the objective for this operation to be similar to the one in §4.3.1.2/rfc8754? Please be specific on what is meant by "allowed by local configuration". [Note: this point by itself is not DISCUSS-worthy, but §4.1.1 is used, for different reasons, in some of the other items I point to below. That is why I include it here.] (1c) §4.4/§4.6: S01 of the second piece of pseudocode is an instruction for processing a non-IPv6 upper header. However, earlier in that section, it is specified that the SID "is associated with one or more L3 IPv6 adjacencies/an IPv6 FIB table". How can the upper header not be IPv6 if the specification explicitly says it has to be? (1d) §4.5/§4.7 have the same issue but related to IPv4. (1e) §4.9 also has the same issue when it specifies that "End.DX2 SID...is associated with one outgoing interface I", but allows for the processing of non-ethernet payloads which could then be forwarded through a different outgoing interface. (1f) §4.11/§4.12 allows the processing of non-ethernet payloads, which will not be "associated with an L2 Table T" as described. (2) §4.12 describes the only behavior that can carry an ARG. I don't understand how it works: Arg.FE2 is encoded in the SID as an (k*x)-bit value. These bits represent a list of up to k OIFs, each identified with an x-bit value. Values k and x are defined on a per End.DT2M SID basis. The interface identifier 0 indicates an empty entry in the interface list. Let's assume a router has 10 possible OIFs, and the operator uses 4-bit values to identify them; then, the ARG would take 40 bits of the SID. Is that how the math works? Assuming my interpretation is correct, for 20 OIFs and 5-bit values we would need 100 bits. Considering the examples in §3.2, where a /64 is allocated to a router, this behavior wouldn't have enough bits! I realize that maybe a better encoding would be to use a 20-bit field, each representing an interface. However, there would still be a limit of < 64 OIFs. Am I missing something? I'm trying to ultimately get to the fact that there are limits to this behavior, but they are not described in the document. Please clearly explain any limitations and any possible workaround. (3) The description of the flavors in §4.16 is also unclear. The section starts with this introduction: The PSP, USP and USD flavors are variants of the End, End.X and End.T behaviors. For each of these behaviors these flavors MAY be supported for a SID either individually or in combinations. By being "variants", I interpret that the behavior is different than what is specified in §4.1. (3a) Some of the behaviors, as listed in Table 4, include an indication of the flavors. How are the values interpreted? For example, the Table lists 8 different behaviors related to End: | 1 | 0x0001 | End (no PSP, no USP) | [This.ID] | | 2 | 0x0002 | End with PSP | [This.ID] | | 3 | 0x0003 | End with USP | [This.ID] | | 4 | 0x0004 | End with PSP&USP | [This.ID] | ... | 28 | 0x001C | End with USD | [This.ID] | | 29 | 0x001D | End with PSP&USD | [This.ID] | | 30 | 0x001E | End with USP&USD | [This.ID] | | 31 | 0x001F | End with PSP, USP & USD | [This.ID] | Is value 1 what is specified in §4.1? Or does it include USD, which is not explicitly excluded)? (3b) If a behavior with more than one flavor is signaled, how should the receiving node determine which one to apply? I guess that the application of behaviors 4 or 29 depends on the number of SLs -- the expected behavior should be clearly specified. (3c) Is it assumed that all nodes support all behaviors? Are there mandatory to implement behaviors? Should the behavior be advertised before it is used? (3d) §4.16.1.2: When a SID of PSP-flavor is processed at a non-penultimate SR Segment Endpoint Node, the PSP behavior is not performed as described in the pseudocode below since Segments Left would not be zero. For example, for the End behavior, I'm assuming that behavior 1 is performed instead of 2 (or 4, or 29, or 31) if SL != 0. Should this be done even if the node did not advertise the non-PSP flavor? If the node is not known to support the PSP flavor, should it be an error to receive a packet requesting that behavior? If only the PSP flavor is advertised, can the Source assume that the node also supports the non-PSP flavor? [BTW, I'm asking about advertisement because §4.16.1.1 makes the statement that the nodes "advertise the SIDs instantiated on them via control plane protocols as described in Section 9". Even though §9 talks about control plane protocols are "not necessary for an SDN control plane" because "one expects the controller to explicitly provision the SIDs".] (3e) §4.16.2 describes the USP flavor, which is one where the endpoint consumes the packet by processing the next header. I don't understand how the outcome due to the extended process is different from the original one in §4.1. Can you please explain? It seems to me that the externally observable result is the same. I have the same question about the USD flavor and the externally observable behavior related to §4.1. In general, the observable behavior of §4.1, USP, and USD seem the same to me. The next two points are related. (3f) §4.16.3 describes the USD flavor, which assumes that the decapsulation results in a packet that can be forwarded. Can the FIB lookup result in a local destination? (3g) Does the USD flavor mean that, for the End behavior (as described in §4.1), the action of "process the next header in the packet" cannot result in a forwarded packet? Same question for the USP behavior? (3h) The last paragraph in §4.16.3: An implementation that supports the USD flavor in conjunction with the USP flavor MAY optimize the packet processing by first looking whether the conditions for the USD flavor are met, in which case it can proceed with USD processing else do USP processing. What are the "conditions for the USD flavor"? As far as I can tell from the document, the only condition is for the specific behavior to be signaled. What else? Going back to the questions above... When is the option to optimize possible? Does a specific behavior have to be used? Behavior 30 (End with USP&USD)? Or can it also optimize if behavior 3 (End with USP) is signaled? (4) §10.2 creates a new registry with an "FCFS" registration procedure. I am assuming that this is the same as the "First Come First Served" (no abbreviation!) policy from rfc8126; please add a reference if that is the case. The description used is not the same as what rfc8126 specifies: - "Requests for allocation...must include a...preferably also a brief description of how the value will be used." Using "preferably" indicates that a description is optional. However, it is not optional in rfc8126. - "...brief description...may be provided with a reference to an Internet Draft or an RFC or in some other documentation that is permanently and readily available." There is no such requirement in rfc8126. For example, the "Specification Required" policy requires "a permanent and readily available public specification". Is that what you want instead? (5) This point is for the IESG to discuss. §4.16.1.2: The End, End.X and End.T behaviors with PSP do not contravene Section 4 of [RFC8200] because the destination address of the incoming packet is the address of the node executing the behavior. The spring WG's interpretation of rfc8200 was a central point in the appeal presented against the WG consensus on this document. The text above, I believe, reflects that consensus. However, given that the document relies on the spring WG's interpretation of rfc8200, I think it would be better if the text is explicit. Suggestion: to add at the end of the paragraph> This conclusion represents the consensus interpretation of the spring WG. ---------------------------------------------------------------------- COMMENT: ---------------------------------------------------------------------- (1) §3.1: An SRv6 endpoint behavior MAY require additional information for its processing (e.g. related to the flow or service). This information may be encoded in the ARG bits of the SID. The sentence is simply stating a fact, not a normative behavior. s/MAY/may (2) All the examples in §3.2 have a /48 prefix allocated to the SRv6 deployment (and then /64s per node). Is it possible to start with a different SRv6 infrastructure allocation, a /64, or /96 maybe? If so, please include an example. If not, please explain any limitations. (3) §4 starts by saying that "Each FIB entry indicates the behavior associated with a SID instance and its parameters." But the previous section (§3.3. SID Reachability) says that "node N would advertise IPv6 prefix(es) matching the LOC parts covering its SIDs or shorter-mask prefix" (not the behavior). IOW, §3.3 sets the expectation of an advertisement covering just the LOC, but §4 seems to expect entries that cover the LOC+FUNC. Which one is correct? In the end, it may not matter which entry is in the FIB, as long as the SID is reachable. However, the specification of the behavior feels sloppy. (4) §4.9/§4.10: For the S04 step, perhaps decompose it into individual actions (similar to S04-S06 in §4.7). (5) §4.11/§4.12 "S05. Learn the exposed MAC Source Address..." The note related to this step says that in "EVPN, the learning...is done via the control plane"...but here it is done via the data plane. What, if any, is the effect on EVPN operation? Are there issues with learning conflicting information from different sources? It seems to me that it could be relatively easy to spoof the source and create unexpected entries in the L2 table. Please point to the EVPN documents where this type of operation is considered. (6) §4.10/§4.11/§4.12 don't have references to the example applications mentioned. Please add Informative references. (7) §4.13/§4.15 instantiate a Binding SID, but only in the case where SL != 0. What about the case where a Binding SID wouldn't require an extra encapsulation (SL == 0)? Is there a reason that it is not supported in this document? (8) §5.1: I'm assuming that the last line in this section (the one starting with S03) should be proceeded by "Note:". (9) §5.1: "The H.Encaps behavior is valid for any kind of Layer-3 traffic." While it may be used for any kind of traffic, I'm assuming that there will be a policy that determines which traffic is encapsulated using a specific SRv6 policy, right? Please be specific about that. (10) §5.3: "Ethernet [IEEE.802.3_2012]" Please use the reference when Ethernet is first used in the document. [I have the same question as Rob related to the version of the 802.3 spec.] (11) §5.3: "...MUST remove the preamble or frame check sequence (FCS) from the Ethernet frame upon encapsulation and the decapsulating node MUST regenerate the preamble or FCS before forwarding Ethernet frame." Which one? The preamble can be easily recreated by the receiver, while removing the FCS may be more problematic -- even if the FCS is not checked in transit, it seems that it would be important to carry it. In any case, the real question here is: why use "or"? Is it left at the discretion of the encapsulating node? Are there any considerations when selecting? (12) All the headend behaviors (§5) include this text: The push of the SRH MAY be omitted when the SRv6 Policy only contains one segment and there is no need to use any flag, tag or TLV. If the endpoint behavior indicates the PSP or USP flavors, what should the receiver do? Clearly there is no SRH to pop. Is this an error or should the receiver simply ignore the flavor? (13) §6: "counter...for traffic that matched that SID and was processed correctly" Does "processed correctly" include when the result being an ICMP error message? Or should those be counted separately? (14) §7: I'm guessing that "flow-based hash" and "load-balancing hash" are the same thing, is that correct? It would be nice to use consistent terminology. (15) §8: A rogue node inside the SR domain may (on purpose) signal the wrong behavior for a flow, which may result in the delivery of the traffic to the wrong destination (potentially including destinations outside the domain), among other things. Note that this action is possible even if the rogue node is authenticated and authorized to generate an SRH. I didn't find this threat mentioned in rfc8402/rfc8754. (16) §9.4: I'm not sure what the purpose of §9 is, as a whole. But the summary in §9.4 puzzles me more; what is the intent? Does Table 1 indicate that, for example, an IGP implementation should not advertise the End.B6.Encaps behavior? Does Table 2 indicate that only BGP-LS should signal the ability to H.Encaps.L2? I am confused about the value/intent because the text clearly says that the control plane is outside the scope of this document. (17) [nits] s/an network operator/a network operator s/one billionth and one millionth of the assigned address space/one billionth and one millionth of the available address space s/packet's header Section 7/packet's header (Section 7)/g s/bundle(LAG)/bundle (LAG) Please expand LAG.
- [spring] Alvaro Retana's Discuss on draft-ietf-sp… Alvaro Retana via Datatracker
- Re: [spring] Alvaro Retana's Discuss on draft-iet… Erik Kline
- Re: [spring] Alvaro Retana's Discuss on draft-iet… li_zhenqiang@hotmail.com
- Re: [spring] Alvaro Retana's Discuss on draft-iet… Pablo Camarillo (pcamaril)
- Re: [spring] Alvaro Retana's Discuss on draft-iet… Martin Vigoureux
- Re: [spring] Alvaro Retana's Discuss on draft-iet… Fernando Gont
- Re: [spring] Alvaro Retana's Discuss on draft-iet… Pablo Camarillo (pcamaril)
- Re: [spring] Alvaro Retana's Discuss on draft-iet… Alvaro Retana
- Re: [spring] Alvaro Retana's Discuss on draft-iet… Pablo Camarillo (pcamaril)
- Re: [spring] Alvaro Retana's Discuss on draft-iet… Fernando Gont
- Re: [spring] Alvaro Retana's Discuss on draft-iet… Fernando Gont
- Re: [spring] draft-ietf-spring-srv6-network-progr… Joel M. Halpern
- Re: [spring] draft-ietf-spring-srv6-network-progr… Fernando Gont
- Re: [spring] draft-ietf-spring-srv6-network-progr… Joel M. Halpern
- Re: [spring] Alvaro Retana's Discuss on draft-iet… Alvaro Retana
- Re: [spring] Alvaro Retana's Discuss on draft-iet… Joel M. Halpern
- Re: [spring] Alvaro Retana's Discuss on draft-iet… Pablo Camarillo (pcamaril)
- Re: [spring] Alvaro Retana's Discuss on draft-iet… Alvaro Retana