[Pce] draft-ietf-pce-multipath-25 ietf last call Tsvart review
Vidhi Goel via Datatracker <noreply@ietf.org> Thu, 28 May 2026 23:14 UTC
Return-Path: <noreply@ietf.org>
X-Original-To: pce@ietf.org
Delivered-To: pce@mail2.ietf.org
Received: from [10.244.11.174] (unknown [4.156.85.76]) by mail2.ietf.org (Postfix) with ESMTP id 661B4F703F52; Thu, 28 May 2026 16:14:39 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1780010079; bh=OdHXa44CLwqOfSBNUFNvkI+e5Qa0jb9KRsQ97Z9DFQs=; h=From:To:Cc:Subject:Reply-To:Date; b=XJe6+ezGVIGMaeSfZ/ymd8W8xu+2KInxQDPna/m9OyjaO9hgtbICoWzDbTxejyscY p7FCdnp9c4SAfAdXMbtDdphlPJir2egcqWc2EQB2dhjp2VcVhYfUcSUIdryX2s4rBD o6oz6EiHgLmHLwUDT6Iv27m+C/6PCJADW6/pjkvE=
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
From: Vidhi Goel via Datatracker <noreply@ietf.org>
To: tsv-art@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 12.65.2
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <178001007931.1415568.8584699699551492522@dt-datatracker-5b4c8598b5-4ztf9>
Date: Thu, 28 May 2026 16:14:39 -0700
Message-ID-Hash: 2YZWLXOWV3AYX2PVYQAFVPWFIDBU5IBN
X-Message-ID-Hash: 2YZWLXOWV3AYX2PVYQAFVPWFIDBU5IBN
X-MailFrom: noreply@ietf.org
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-pce.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: draft-ietf-pce-multipath.all@ietf.org, last-call@ietf.org, pce@ietf.org
X-Mailman-Version: 3.3.9rc6
Reply-To: Vidhi Goel <vidhi_goel@apple.com>
Subject: [Pce] draft-ietf-pce-multipath-25 ietf last call Tsvart review
List-Id: Path Computation Element <pce.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/pce/JSFybVZZpsJeHjRt0OUvKJY5kcw>
List-Archive: <https://mailarchive.ietf.org/arch/browse/pce>
List-Help: <mailto:pce-request@ietf.org?subject=help>
List-Owner: <mailto:pce-owner@ietf.org>
List-Post: <mailto:pce@ietf.org>
List-Subscribe: <mailto:pce-join@ietf.org>
List-Unsubscribe: <mailto:pce-leave@ietf.org>
Document: draft-ietf-pce-multipath Title: Path Computation Element Communication Protocol (PCEP) Extensions for Signaling Multipath Information Reviewer: Vidhi Goel Review result: Ready with Issues This document has been reviewed as part of the transport area review team's ongoing effort to review key IETF documents. These comments were written primarily for the transport area directors, but are copied to the document's authors and WG to allow them to address any issues raised and also to the IETF discussion list for information. When done at the time of IETF Last Call, the authors should consider this review as part of the last-call comments they receive. Please always CC tsv-art@ietf.org if you reply to or forward this review. and well-motivated, and the encoding fits cleanly into existing PCEP constructs. However, there are several normative inconsistencies, two important internal contradictions, an IANA registry omission, and transport-related guidance that should be added before publication. None are showstoppers, but the spec-level bugs (items M1–M4) should be fixed. --- ## Major issues (M) ### M1. Load-balancing ratio wording excludes the referent path Two places describe the traffic share using "all other", which in English excludes the path being described and therefore does not describe a valid distribution (the per-path fractions do not sum to 1). - §3.3 (Weight field): > "The fraction of flows that a specific ERO/RRO carries is derived > from the ratio of its weight to the sum of the weights of **all > other paths**: see Section 4.3 for details." - §4.3 step 3: > "The PCC derives the fraction of flows carried by a specific primary > path from the ratio of its weight to the sum of **all other > multipath weights**." Suggested rewording (matches RFC 9256 §2.11 and standard W-ECMP): - §3.3: > "The fraction of flows that a specific ERO/RRO carries is derived > from the ratio of its weight to the **sum of the weights of all > paths in the multipath (including this path)**: see Section 4.3 for > details." - §4.3 step 3: > "The PCC derives the fraction of flows carried by a specific primary > path from the ratio of its weight to the **sum of the weights of all > paths in the multipath**." ### M2. Contradiction on encoding "no opposite-direction path" - §3.4 (MULTIPATH-OPPDIR-PATH TLV, "Opposite Direction Path ID"): "If no opposite-direction path exists, then this field MUST be set to 0, a value reserved to indicate the absence of a Path ID." - §4.4 step 5: "For paths that have no opposite-direction counterpart, the MULTIPATH-OPPDIR-PATH TLV is **omitted** from the PATH-ATTRIB object." These two normative statements directly conflict — implementers cannot tell whether to omit the TLV or include it with ID=0. Appendix A.3 (POL1 CP2, Path ID=2; POL2 CP2, Path ID=2) actually exercises the "include with ID=0" form, contradicting §4.4 step 5. Pick one and align all three locations. ### M3. Wrong Error-Type for "Conflicting Path ID" - §4.2: "MUST send PCError message with **Error-Type = 1** ('Reception of an invalid object') and Error-Value = 38 ('Conflicting Path ID')." - §7.3 (IANA): allocation is under **Error-Type = 10** ("Reception of an invalid object"). Error-Type 1 in the IANA registry is "PCEP session establishment failure", not "Reception of an invalid object". The IANA table is correct; §4.2 should read "Error-Type = 10". ### M4. IANA registry for MULTIPATH-OPPDIR-PATH TLV flags is missing bit 13 §7.6 lists: ``` 0-12 Unassigned 14 L-flag: Link co-routed 15 N-flag: Node co-routed ``` Bit 13 is unaccounted for. Either extend "0-12" to "0-13" or add an explicit "13 | Unassigned" row. ### M5. RBNF in §5 updates RFC 8281 but the document does not formally update it §5 modifies `<PCE-initiated-lsp-instantiation>` from RFC 8281 (and the `<intended-path>` / `<actual-path>` productions from RFC 8231). Documents that change normative RBNF of an existing RFC should carry an explicit `Updates: 8231, 8281` clause in the front matter. If the WG intent is "extends but does not update", that should be stated and the RBNF changes should be framed as additive grammar for the new capability path. ### M6. No flow-affinity / reordering guidance (transport concern) §4.3 phrases the split as "fraction of **flows**", which implicitly assumes flow-preserving load-balancing (per-5-tuple hashing or similar). This is critical: per-packet striping across multiple Segment Lists in a Candidate Path will reorder TCP/QUIC and break performance. Recommend adding a normative SHOULD that PCC implementations preserve flow-to-path affinity when distributing traffic across paths within an LSP, and a non-normative note that per-packet load-balancing is harmful to transport-layer performance unless paths have near-identical RTT/MTU characteristics. ### M7. No discussion of asymmetric per-path properties Paths within a single LSP may have very different MTU, PMTU, latency, and loss characteristics. Two relevant operational hazards are not addressed: - **MTU/PMTU divergence:** flow-hashing across paths with different MTUs yields per-flow black-holes for the high-MTU packets that happen to be hashed onto the low-MTU path. PMTUD then becomes path-specific, which hashing breaks. Worth at least an Operational Consideration. - **Latency divergence:** advertising weighted ECMP across paths with very different one-way delay degrades transport performance regardless of flow affinity (head-of-line in shared queues, RTT estimation skew when paths rebalance, etc.). Worth a note. ### M8. Security Considerations is too thin for what this draft enables §8 only inherits considerations from the base PCEP RFCs. Multipath introduces specific new attack surfaces that should be called out: - **State amplification / DoS.** A misbehaving (or compromised) PCE can push an order-of-magnitude more LSP state into a PCC by maximizing multipath fan-out. The "Number of Multipaths = 0 (unlimited)" sentinel in §4.1.1 makes this worse. Recommend the spec require a non-zero configured cap by default and discourage the unlimited value in production. - **Traffic steering manipulation.** A compromised PCE can shape weighted-ECMP ratios to drive flows onto attacker-observed paths or congest a specific link. Worth one paragraph. - **Bidirectional mapping abuse.** Forged MULTIPATH-OPPDIR-PATH bindings can cause a PCC to install/monitor return paths that don't actually carry the return traffic, defeating BFD/PM described in §2.3. --- ## Minor / semantic issues (S) ### S1. Operational state of the LSP vs. per-path O field (§3.1) The 3-bit O field per path inherits RFC 8231 LSP-object semantics, but the draft never says how per-path O combines into the LSP-level O state. If 2 paths are UP and 1 is DOWN, is the LSP UP, DOWN, or some new "partially up" state? Either reference an existing rule or define one. ### S2. O-flag semantics in MULTIPATH-CAP LSP object (§4.1.1) The same bit is overloaded as both "I support reverse paths" (in OPEN) and "I want / am providing reverse path info" (in LSP object), and within the LSP-object use it conflates request and provision. Recommend explicitly stating the directional rule: PCC-sent bit = request, PCE-sent bit = provision, and clarify behavior when both peers set inconsistent values. ### S3. "Number of Multipaths" scope ambiguity (§4.1.1) The text describes the field as "how many forward primary multipaths the PCE can compute" — but doesn't state up front whether this is per-LSP or per-session. The later text makes it per-LSP. State this in the field definition. ### S4. Asymmetric error handling for over-cap signaling (§4.1.1) "If a PCC receives more paths than it advertised support for, it MUST send a PCError…" The reverse direction (PCE receiving more than its computed cap from a PCC PCRpt) is not specified. Make the rule symmetric or explicitly say it only applies in one direction and why. ### S5. Path ID ownership after delegation change (§4.2) "If the LSP is delegated to the PCE, then the PCE allocates the Path IDs. If the LSP is locally computed on the PCC, then the PCC allocates the Path IDs." What happens on delegation revocation or re-delegation — do Path IDs persist, get reallocated, or invalidated? Real implementations will hit this; please clarify. ### S6. Many-to-many vs. "symmetric" constraint (§4.4) §4.4 step 3 explicitly allows many-to-many opposite-direction mappings, while a few lines later: "When path A references path B as its opposite-direction path, path B MUST also reference path A." Both can coexist (each (A,B) edge appears in both directions), but the wording could be read as bijective. Add a sentence: "For each (A → B) reference, the reverse (B → A) reference MUST also be present; multiple such references per path are permitted." ### S7. "Informational only" reverse paths vs. §2.3 BFD/PM use - §3.1 R-flag: "Paths with this flag set serve only informational purpose to the PCC." - §2.3: reverse Segment Lists are used by PM/BFD to drive bidirectional liveness sessions. §2.3 makes the reverse path operationally load-bearing, not just informational. Soften §3.1 to "Reverse paths are not installed for forward-direction load-balancing; they MAY be used for purposes such as PM/BFD as described in §2.3." ### S8. Composite Candidate Path — no recursion-depth bound (§3.5) A Composite CP signals traffic recursively into other SR Policies on the same headend. Nothing in the draft bounds the recursion depth or specifies loop-detection behavior if policy A recurses into B and B recurses into A (directly or transitively). At minimum, an Operational Consideration acknowledging this is needed; a normative MUST-NOT against cycles would be stronger. ### S9. F-flag without C-flag has no defined semantics §4.1.1: "the F-flag MAY be set without the C-flag" for future use cases. There is no defined consumer of MULTIPATH-FORWARD-CLASS today outside Composite/Per-Flow CP. Either state that "F-only" today has no defined semantics (reserved for future use) or remove the allowance until a consumer exists. ### S10. Inconsistent terminology: "Reserved" vs "Flags" (§3.5.1 vs §7.7) In Figure 4 the area holding the T flag is labeled "Reserved", but §7.7 creates a "Flags in the MULTIPATH-FORWARD-CLASS TLV" registry covering bits 0–31. Either rename Figure 4's field to "Flags" (consistent with PATH-ATTRIB and OPPDIR-PATH TLVs) or rename the registry. ### S11. Normative vs informative reference classification [I-D.ietf-pce-sr-bidir-path] is listed as **normative**, but the MULTIPATH-OPPDIR-PATH TLV is defined **by this document**. The sr-bidir-path draft is a *consumer*, not a producer, of definitions used here. Unless implementing this document strictly requires reading sr-bidir-path, demote it to informative — that also avoids a downref dependency. ### S12. Capability presence on a single side (§4.1.1) "The PCC MUST NOT include this TLV in the LSP object if the TLV was not present in the OPEN objects of **both** PCEP peers." Good. But the inverse case isn't stated: if only one peer advertised in OPEN, what happens at message processing time on the unaware peer? Presumably the "Unexpected PATH-ATTRIB" error fires, but say so explicitly. ### S13. Appendix A.3 internal asymmetry POL1 has 2 Segment Lists in CP2 (one with reverse, one without), while POL2 CP2 only has 1 forward Segment List. The state-reports therefore include "reverse" PATH-ATTRIBs whose Opposite Direction Path ID = 0, which exercises the very ambiguity called out in M2. Once M2 is resolved the example should be regenerated to match. --- ## Nits / grammar / wording (N) (Line numbers from the html-rendered text; section numbers from the doc.) - **§1.2 ECMP / W-ECMP**: prefer hyphenated "Equal-Cost Multi-Path" and "Weighted Equal-Cost Multi-Path" (RFC 2992 spelling). - **§2.2**: "two paths, that can together carry 80 Gbps" — drop the comma; "that" introduces a restrictive clause. - **§2.2**: "have only 60 Gbps capacity" → "have only 60 Gbps of capacity each" (or "are limited to 60 Gbps"). - **§3.1**: "preceded by **an** PATH-ATTRIB object" → "**a** PATH-ATTRIB object" (article matches the consonant sound). - **§3.1**: "serve only informational purpose to the PCC" → "serve only an informational purpose for the PCC". - **§3.3 / §3.4 / §3.5.1 / §4.1.1** all open with "New X TLV is defined…" → "A new X TLV is defined…" (missing indefinite article). - **§3.3 / §3.4**: "Length (16 bits): 4 bytes." / "8 bytes." → IETF convention is "octets". RFC 5440 uses "octets" throughout. - **§3.4 N-flag**: "node co-routed with its opposite direction path, specified in this TLV" — comma turns the clause non-restrictive; either remove the comma or change to "specified by this TLV". - **§3.5**: "we make use of the COLOR TLV" → "this document makes use of the COLOR TLV". - **§3.5**: "An ERO MUST be included as per the existing RBNF, this ERO MUST contain no sub-objects." — comma splice; use a period or semicolon. - **§3.5.1**: "builds on top of the concept" → "builds on the concept". - **§4.1.1**: "From the PCC, the MULTIPATH-CAP TLV MAY also be present in the LSP object" → "The PCC MAY also include the MULTIPATH-CAP TLV in the LSP object". - **§4.2**: "MUST send PCError message" → "MUST send **a** PCError message". - **§4.2**: "across all these path types" → "across forward and reverse paths" (forward/reverse are roles, not types). - **§4.3**: "(un)equal load-balancing" → "equal or unequal load-balancing". - **§4.4**: "established **atomically**" — too strong a claim for a message-level operation; suggest "established in a single message exchange". - **§5**: "The RBNF of PCRpt and PCUpd messages, as defined in [RFC8231], **use** a combination…" → subject is "RBNF" (singular); should be "**uses**". - **§9.4** last bullet: missing trailing period. - **§6 Implementation Status**: the "Note to RFC Editor — remove" is present and correct, good. - **§3.1 Path ID** vs **§4.2 Value 0 semantics**: §3.1 describes Path ID without mentioning 0=unallocated. Add a sentence pointing forward to §4.2. --- ## Suggested edit order for the authors 1. Fix M1 (load-balancing ratio wording: "all other" → "all paths including this one") — single-word change, two locations. 2. Resolve M2 (TLV omission vs ID=0) — pick one rule and propagate to §3.4, §4.4, and Appendix A.3. 3. Fix M3 (Error-Type 1 → 10) — one-character fix. 4. Fix M4 (missing bit 13 in IANA registry). 5. Decide M5 (Updates: 8231, 8281 header) with the WG / AD. 6. Add a paragraph in §4.3 covering M6 (flow-affinity SHOULD). 7. Expand §8 (Security) and §9.6 (Operational) per M7 and M8.
- [Pce] draft-ietf-pce-multipath-25 ietf last call … Vidhi Goel via Datatracker
- [Pce] Re: draft-ietf-pce-multipath-25 ietf last c… Samuel Sidor (ssidor)
- [Pce] Re: draft-ietf-pce-multipath-25 ietf last c… Samuel Sidor (ssidor)
- [Pce] Re: [Tsv-art] draft-ietf-pce-multipath-25 i… Vidhi Goel
- [Pce] Re: [Tsv-art] draft-ietf-pce-multipath-25 i… Samuel Sidor (ssidor)