Ballot for draft-ietf-pim-gaap
Discuss
Yes
No Objection
No Record
Summary: Has 5 DISCUSSes. Has enough positions to pass once DISCUSS positions are resolved.
# Andy Newton, ART AD, comments for draft-ietf-pim-gaap-20 CC @anewton1998 * line numbers: - https://author-tools.ietf.org/api/idnits?url=https://www.ietf.org/archive/id/draft-ietf-pim-gaap-20.txt&submitcheck=True * comment syntax: - https://github.com/mnot/ietf-comments/blob/main/format.md * "Handling Ballot Positions": - https://ietf.org/about/groups/iesg/statements/handling-ballot-positions/ ## Thanks to the Reviewers Thanks to Murray Kucherawy for the ARTART review. ## Discuss As noted in https://www.ietf.org/blog/handling-iesg-ballot-positions/, a DISCUSS ballot is just a request to have a discussion on the following topics. All of my DISCUSSes come from Murray Kucherawy's ARTART review, and I did not seem them addressed so I am raising this DISCUSS. ### Type Value The Claim message type of 0 is reserved and 1 is defined in this document. The type appears to be a 4-bit value. Are the other types reserved? Is there suppose to be an IANA registry for them? 237 At this time, there is a single message called the Claim message with 238 type value 1. Type value of 0 is reserved. Claim messages are sent 239 to the GAAP Group Address (see Section 2), a well-known multicast 240 address allocated by IANA (see Section 9), distinct from the 241 addresses GAAP allocates for applications. The Claim message is sent 242 in a UDP checksummed packet where the source port is ephemeral and 243 chosen by the sender and the destination port is a well-known port 244 allocated by IANA. GAAP can work behind NAT and firewall devices as 245 long as the GAAP destination port is permitted through filters. 247 0 1 2 3 248 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 249 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 250 |Type=1 | Reserved | Record Count | 251 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 252 | 0xAAAAAAAA Marker | 253 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 254 | IPv4 Multicast Group Address | \ 255 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ 256 | | R 257 | IPv6 Multicast | e 258 | Group Address | c 259 | | o 260 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ r 261 | Timestamp | d 262 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / 263 | Group Name ... | / 264 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / 265 | ... |/ 266 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ### MUST in IANA Considerations 1 This block in the IANA considerations section contains BCP14 language. See the IESG statement on BCP14 language: https://datatracker.ietf.org/doc/statement-iesg-statement-on-clarifying-the-use-of-bcp-14-key-words/ In this case, the normative language are instructions to implementers and not to IANA, so this statement should go in a place in the doc that is more likely to be read by implementers. 875 IANA will create one multicast address from the IPv4 Internetwork 876 Control Block 224.0.1.x [RFC5771] and one multicast address from the 877 IPv6 Variable Scope Multicast Addresses Block FF0X::TBD for the 878 operation of the GAAP protocol. The registry description field 879 should indicate "GAAP". GAAP control messages sent to these 880 addresses are intended to reach all GAAP nodes within an 881 administrative domain rather than being confined to a single link; 882 consistent with that, the IPv4 address comes from the Internetwork 883 Control Block rather than the Local Network Control Block, and 884 implementations MUST use an admin-local or organization-local IPv6 885 scope (not link-local scope) when selecting the scope value X for the 886 IPv6 address, so that control messages can be forwarded beyond a 887 single link when the deployment requires it. ### MUST in IANA Considerations 2 It is unclear to me to whom this MUST applies. Does it apply to IANA? Does it apply to the RFC Editor? Regardless, it should not be in the IANA considerations section. 891 IANA will create two multicast address ranges for the GAAP protocol 892 to allocate application-use addresses from. For IPv4, a /10 block in 893 a new registry range is requested. The size follows from the hash- 894 based allocation model in Section 6: a larger host portion within the 895 block, combined with the up to 4 candidate addresses per group name 896 (see "Acceptable Group Hash List" in Section 2), keeps collisions 897 infrequent enough that a GAAP node rarely needs to fall back past its 898 first candidate address. As the draft has previously noted, because 899 a /10 is nonetheless a large portion of the IPv4 multicast space, 900 this size warrants specific attention from IETF and IANA before 901 allocation, and the WG welcomes further discussion of the appropriate 902 block size, including analysis of collision probability at expected 903 deployment scales. For IPv6, a /32 block in a new registry range is 904 being requested, sized to match the 32-bit Group ID used directly in 905 the hash-based derivation in Section 6; the larger IPv6 multicast 906 address space makes collision probability far less of a concern than 907 for IPv4. This allocation MUST come from the Dynamic Multicast Group 908 IDs registry defined in 909 [I-D.ietf-pim-updt-ipv6-dyn-mcast-addr-grp-id], and publication of 910 this document as an RFC is dependent on that registry existing; see 911 the Normative References. 913 Registry Name: GAAP IPv4 Allocation Range 914 Registration Procedure: IETF Review 916 Registry Name: GAAP IPv6 Allocation Range 917 Registration Procedure: IETF Review 919 For IPv6 multicast addresses, the GAAP application allocation range 920 should be in the new "Dynamic Multicast Group IDs" registry requested 921 by [I-D.ietf-pim-updt-ipv6-dyn-mcast-addr-grp-id]. This new registry 922 requests the division of the 32-bit group ID range 0xA0000000 through 923 0xAFFFFFFF. The GAAP allocation range should come out of this 32-bit 924 range.
# Éric Vyncke INT AD comments for draft-ietf-pim-gaap-20 CC @evyncke Thank you for the work put into this document. I find the idea so simple, but possibly not that scalable due to the collisions. Please find below some blocking DISCUSS points (easy to address), some non-blocking COMMENT points/nits (replies would be appreciated even if only for my own education). Special thanks to Stig Venaas for the shepherd's write-up including the WG consensus and the justification of the intended status. I hope that this review helps to improve the document, Regards, -éric Note: this ballot comments follow the Markdown syntax of https://github.com/mnot/ietf-comments/tree/main, i.e., they can be processed by a tool to create github issues. ## DISCUSS (blocking) As noted in https://datatracker.ietf.org/doc/statement-iesg-handling-ballot-positions-20220121/, a DISCUSS ballot is a request to have a discussion on the points below; I really think that the document would be improved with a change here, but can be convinced otherwise. ### ASCII-only group name As the group names are likely to appear on a human UI, the group name must allow for non-ASCII, i.e., something like UTF-8 is required (of course, the null-terminated string probably do not work anymore). ### Well-known GAAP port In section 4, there is `destination port is a well-known port allocated by IANA` and I agree with the IANA expert review `I recommend this be revised to use the multicast application port number assigned per draft-ietf-intarea-multicast-application-port. That draft recognizes that multicast services are already sufficiently differentiated by IP address and thus assigning new port numbers for multicast services is not necessary.`. I.e., there is no need to have a specific UDP port. Therefore section 9.1 must be removed. ### Section 4 There is no specification about how to implement `the Marker field is used to indicate to a receiver that the packet may be encrypted. ` as this field has a fixed value and is never encrypted. ### Section 9.3 Several unrelated issues on this section (this was to be expected ;-) by the authors of course). Please give IANA some indication about the IPV4 range to be used. It seems that https://www.iana.org/assignments/multicast-addresses#multicast-addresses-9 have still a lot of available /8, i.e., should GAAP use a /10 out of one /8 ? There is still a lof of available mcast IPv4 addresses as opposed to IPv4 unicast address, so, this is a problem for the wealthy. Please split this section into one for IPv4 and one for IPv6, this will be clearer and easier to process. The actual semantic of `This new registry requests the division of the 32-bit group ID range 0xA0000000 through 0xAFFFFFFF.` is unclear to me. Finally, please use RFC 10028.
## COMMENTS (non-blocking) ### Ketan's DISCUSS I support most of Ketan DISCUSS issues, notably using TBD1 / TBD2 for the mcast groups through the text. ### Section 4 Suggest to move the time comparison specification outside of the field description. The BCP14 SHOULD must have guidance about when they can be bypassed or what are the consequences of bypassing them. ### Section 6.1 Strongly suggest to use either lower-case or upper-case of the group name. Please use <CODE> elements for the pseudo code. I wonder the usefulness of `low_bits = hash & 0xffffffff` as it is further masked with `(low_bits & GAAP_V[46]_MASK)`. Python will complain about `if (collision == False): return(group_address)` indentation ;-) ### Section 6.3 Just wondering what happens if the 2 partioned networks used a "+1" for one and "+2" for the other... Will this be detected as well and will everyone converge ? ## NITS (non-blocking / cosmetic) ### Use of SVG graphics To make a much nicer HTML rendering, suggest using the aasvg tool to generate SVG graphics. It is worth a try especially if the I-D uses the Kramdown file format ;-)
Thanks to the authors and the WG for their work on this document. Note: Both the discussion points and comments are provided inline in the idnits output of v20. Lookout for the <EoRv20> tag at the end to ensure you are seeing the full review. <discuss-1> No suppression in the event of collision Section 6.2 558 When the timer expires, a Claim message is sent. Suppression is per 559 group address: receivers of a Claim message for a given group address 560 who have their own timer running for that same group address reset 561 that timer, thereby suppressing sending their own Claim message for 562 it; timers for other group addresses the node is claiming are 563 unaffected. This allows only a single GAAP node that is using the 564 group address to keep claiming the group is still in use. A collision is, by this document's own definition at lines 546-549, the same group address allocated to two different group names. The suppression rule above is keyed on the group address and says nothing about the group name. Read as written, a node using address X for name A, on receiving a Claim for X carrying name B, has its own timer running for that same group address, so it resets that timer and thereby suppresses the very message the new node is waiting for. The new node hears nothing within its window and starts using the colliding address. Two implementations will diverge on whether the suppression rule or the collision rule governs. Suggest: When the timer expires, a Claim message is sent. Suppression is per (group name, group address) pair: a receiver of a Claim message that carries both the same group address and the same group name as one the receiver is claiming resets its own timer for that pair, thereby suppressing its own Claim for it. A Claim message that carries the same group address with a different group name is a collision and MUST NOT suppress the receiver's timer; the receiver processes it per Section 6.1 and responds as described below. Timers for other group addresses the node is claiming are unaffected. <discuss-2> Computation of the hash Section 2 and Section 6.1 177 Hashed Value: is the output of a SHA-256 [RFC6234] hash function 178 where the low order 32-bits are used to produce a network layer 179 multicast group address that is unique among the group names in 180 use. 479 hash = sha256(group_name) 480 low_bits = hash & 0xffffffff SHA-256 produces a 32-octet string, not an integer, and RFC 6234 defines no integer interpretation of it. Neither "the low order 32 bits" nor the masking operation in the pseudocode says precisely enough which four octets are taken or in what order they are assembled. Implementations that choose differently derive different addresses from the same group name and never rendezvous - no error, no collision detected, silent failure. Everything in GAAP rests on this one mapping being identical everywhere. Suggest: Hashed Value: the group name is hashed with SHA-256 as specified in Section 4.1 of [RFC6234], producing a 32-octet message digest. Number the octets of that digest from 0 to 31, octet 0 being the first octet output by the algorithm and octet 31 the last. The Hashed Value is the 32-bit unsigned integer formed from the last four octets of the digest, taken in network byte order: digest octet 28 is the most significant octet, octet 29 the next, octet 30 the next, and octet 31 the least significant. Which four octets are used is the authors' choice; saying which is the requirement. One other related bit: state the hash input exactly. Section 4 makes the on-wire Group Name null-terminated without saying whether the terminating null is part of the hash input. <discuss-3> Timestamp - ahead or before or both ? Section 4, the normative home: 327 disciplined source for the Timestamp where available. A 328 Timestamp that appears to be more than a small, locally 329 configured skew allowance ahead of the receiver's own clock 330 SHOULD be treated with the same tie-breaking rule as an equal 331 timestamp rather than assumed to win outright, since it may 332 result from a misconfigured or unsynchronized clock (including 333 a clock that has not yet been set after boot, which typically 334 reads a value far in the past or at zero). Section 8, a different rule: 836 from it. A Timestamp that appears to be more than a small, 837 locally configured skew allowance ahead of, or behind, the 838 receiver's own clock SHOULD be treated with the same tie-breaking 839 rule as an equal timestamp rather than assumed to win or lose 840 outright, since it may result from a misconfigured or 841 unsynchronized clock, including a clock that has not yet been set 842 after boot, which typically reads a value far in the past or at 843 zero and would otherwise win every collision it is party to. Section 6.3 sends the reader to Section 4: 596 fixed. The group address with the earliest Timestamp is used to 597 determine who keeps the collided group address, using the same 598 comparison and tie-breaking rule defined in Section 4 for equal or 599 skewed Timestamps. Arbitration is earliest-wins (lines 526-530), so the problematic direction is behind - and Section 4 covers only ahead, naming the unset-clock case in a parenthesis without handling it. An implementer follows Section 4 and Section 6.3, which are the specification sections; only Section 8 carries the working rule. Suggest: please make Section 4's rule symmetric - "ahead of, or behind, the receiver's own clock" - and reduce Section 8's paragraph to a cross-reference plus the attack rationale. <discuss-4> Same marker for encrypted and unencrypted? Section 4 and Section 8 283 0xAAAAAAAA. If it is not, the packet is dropped. The Marker 284 field is used to indicate to a receiver that the packet may be 285 encrypted. See Section 8 for details on encrypting GAAP 286 messages. When encryption is used, the Type, Reserved, and 287 Record Count fields, together with the Marker field itself, 288 remain in cleartext so the receiver can identify the packet as 289 GAAP and detect the encrypted condition before attempting 290 decryption; the record data that follows the Marker (addresses, 291 Timestamp, and Group Name) is encrypted. 769 embedded devices with different configurations. The message Marker 770 is always sent in cleartext as 0xAAAAAAAA (see Section 4) and is used 771 by the receiver to identify the packet as GAAP before determining 772 whether the following record data is encrypted. 791 senders sharing that key. A receiver configured with a shared key 792 MUST reject an unencrypted Claim message rather than process it, to 793 prevent downgrade to the unauthenticated base mode. The Marker is a constant - 0xAAAAAAAA in both modes, as line 770 says - so it carries no information about whether the record data is encrypted, yet lines 284 and 288-290 give it that job. Type, Reserved and Record Count are the only other cleartext fields and none of them is defined for this, so there is no encryption indication anywhere in the header. The MUST at line 792 therefore places a requirement on a discrimination the receiver cannot make, and the stated protection against downgrade to the unauthenticated base mode does not exist. Two ways (that come to my mind) to address and I prefer the first: 1) Signal it. Allocate one bit of the 20-bit Reserved field as an "E" flag, set by the sender when the record data is encrypted, and define receiver behaviour for each combination of (E flag, key configured). This needs a registry for the Reserved bits - see discuss-9. 2) Make it configuration. State that encryption is a deployment-wide configuration, that a receiver processes according to its own configuration, and that a mixed deployment does not interoperate - then delete lines 284 and 288-290. Either way, please correct the Marker description: it is a format check for a well-known-port UDP listener, as Section 8 already says at lines 787-789. <discuss-5> Unclear scope and applicability - Routed multicast admin domain OR IP subnet/LAN domain Abstract: 15 pronounced "gap" as in "mind the gap"). The base allocation protocol 16 requires no centralized service and minimal configuration, although 17 deployments using encryption or administrative scoping may require 18 configuration. Section 7, positioning: 649 GAAP is intended for zeroconf and unmanaged or loosely managed 650 deployment scenarios, such as those described in [RFC10019], where 651 applications need a group address without relying on centralized 652 configuration or provisioning. Section 7, requirements: 741 GAAP requires the underlying network to support IP multicast group 742 membership (IGMP/MLD) and ASM-capable multicast routing/forwarding 743 (e.g., PIM-SM) for delivery of Claim messages. 747 address has been allocated and claimed via GAAP. In IPv4 deployments 748 using PIM-SM, the Rendezvous Point(s) serving the GAAP Group Address 749 and the GAAP IPv4 allocation range need to be configured to support 750 the full range described in Section 9, since a GAAP node may allocate 751 any address within it. A PIM-SM RP is a centralized service and a single point of failure, and covering the GAAP range with RP mappings is administrator configuration - against RFC 10019's REQ-2, REQ-3 and REQ-6, and against the Abstract at lines 16-17. Section 9.2 pulls the same way by requiring an admin-local or organization-local IPv6 control scope so that Claims can cross links (lines 884-887). It is not clear if the document is describing two deployments and which properties are being asserted for which. Is GAAP intended for a single link or IP subnet, or for a routed multicast administrative domain? If the former, the zeroconf framing and "requires no centralized service" hold, no RP is involved, and lines 741-751 describe a case that is out of scope rather than a requirement - please say so and scope Section 7 accordingly. If the latter, the deployment depends on the domain's ASM routing including RP coverage of the GAAP range, that coverage is administrator configuration, and the zeroconf property does not hold - please say so, correct the Abstract, and state what the relationship to RFC 10019 then is. If both are intended, please state each separately with the properties that apply to it. The answer also determines which IPv6 address formats a GAAP address may take (discuss-7), whether a globally scoped IPv4 range is needed at all, and how wide the first experiment should be. <discuss-6> An unrecoverable error for which operator is not alerted Section 6.1 510 # All 4 candidate addresses (see "Acceptable Group Hash 511 # List" in Section 2) collided. gaap.allocate() returns 512 # an error to the calling application; the application 513 # MAY retry later or select a different group name. 514 return(None) 516 If all 4 candidate addresses for a group name collide, the GAAP API 517 returns an error to the application, as shown above. GAAP does not 518 define automatic retry behavior in this case, since retrying with the 519 same group name would deterministically produce the same 4 candidate 520 addresses. The failure is permanent for that group name in that domain, and the only remedy offered is "select a different group name" - which every participating node must also do, out of band, with no coordination mechanism. Is that ok for embedded devices with a compiled-in name? Nothing surfaces the condition either - Section 7 asks implementations to expose local claim state (lines 691-693) but says nothing about an exhausted name. Please require the condition to be logged and exposed through the local management interface Section 7 already asks for - at minimum the group name, the four contested addresses and the claimants - so that the failure is diagnosable rather than silent. Separately, the document should say what a deployment is expected to do when this happens, rather than leaving "select a different group name" as the whole answer; what that should be is for the authors and the WG. Was this case discussed? The text reads as though it was noticed and then accepted without a remedy. <discuss-7> Questions on derivation of IPv6 Group Addresses Section 6.1 and Section 9.3 494 For IPv6, the resulting 128-bit group address is a multicast address 495 per [RFC4291] with the flags and scope bits fixed by the IANA- 496 assigned GAAP_V6_BASE (see Section 9) and the 32-bit Group ID placed 497 in the low-order 32 bits, matching the low-order 32 bits produced by 498 the hash. No other bits of the address vary. 903 deployment scales. For IPv6, a /32 block in a new registry range is 904 being requested, sized to match the 32-bit Group ID used directly in 905 the hash-based derivation in Section 6; the larger IPv6 multicast 906 address space makes collision probability far less of a concern than 907 for IPv4. This seems internally contradictory. Section 9.3 asks for the IPv6 range out of the "Dynamic Multicast Group IDs" registry, whose entries are sub-ranges of the 32-bit group ID. If the GAAP range is a sub-range, only the bits below its prefix are available, and line 498's "no other bits of the address vary" is unachievable. The pseudocode names a GAAP_V6_MASK (line 490, and prose at lines 476-477) that line 498 then contradicts, leaving an implementer with two mutually exclusive statements of the same derivation. There is also a routing consequence. Fixing the whole 96-bit prefix means a GAAP IPv6 address can be neither an RFC 3306 unicast-prefix-based address nor an RFC 3956 embedded-RP address, both of which use bits 32-95 - and embedded-RP is the dominant way IPv6 ASM RP discovery is done. Every deploying domain would then need a globally agreed static or BSR-learned RP mapping for the one fixed GAAP prefix. That is unstated, and it is also inconsistent with taking the range from a group ID registry, whose premise is that the prefix varies per deployment. How much it matters depends on the answer to discuss-5. Suggested replacement: For IPv6, GAAP derives only the group ID. The group ID is formed by placing the low-order bits of the Hashed Value into the host portion of the GAAP group ID range, in the same manner as the IPv4 derivation in this section. The remaining bits of the multicast address - flags, scope, and, where the RFC 3306 or RFC 3956 formats are in use, the embedded prefix or Rendezvous Point information - are determined by the deployment and are outside the scope of this document, other than the scope constraint in Section 9.2. Please also state how many hash bits the chosen group ID range leaves available, and which address formats a GAAP IPv6 address may take. How the range is obtained is discuss-8. <discuss-8> Issues with IANA Considerations Disclaimer: I faced serious challenges in deciphering this and it is possible that I have misunderstood; this section needs quite a lot of work. Section 9 None of the three IANA requests in this section can be executed as written, and the section conflates creating a registry with assigning from one. Lets go over the points one by one: (a) The section contradicts itself about the kind of action requested. 853 IANA is requested to make the following assignments in existing 854 registries: 858 IANA will create one UDP port number for the GAAP protocol, 875 IANA will create one multicast address from the IPv4 Internetwork 876 Control Block 224.0.1.x [RFC5771] and one multicast address from the 877 IPv6 Variable Scope Multicast Addresses Block FF0X::TBD for the 878 operation of the GAAP protocol. The registry description field 879 should indicate "GAAP". 891 IANA will create two multicast address ranges for the GAAP protocol 892 to allocate application-use addresses from. 913 Registry Name: GAAP IPv4 Allocation Range 914 Registration Procedure: IETF Review 916 Registry Name: GAAP IPv6 Allocation Range 917 Registration Procedure: IETF Review The lead-in says assignments in existing registries; every sub-section then says IANA "will create"; and lines 913-917 create two registries with registration procedures. Three different kinds of action - creating a registry, assigning a value, reserving a range - are conflated, and IANA cannot act on "will create one UDP port number". Line 878's singular "the registry description field" covers two different registries. The two registries are the clearest case: nothing registers anything in them and nothing could, because GAAP addresses are derived at run time rather than assigned. A registry with a registration procedure and no possible registrant is not an IANA action. (b) Section 9.3 contains one IPv6 allocation, described three incompatible ways. Section 9.3 requests two things, not three: one IPv4 range and one IPv6 range. Line 891 says two multicast address ranges; IPv4 follows at lines 892-893 and IPv6 at lines 903-907. The IPv6 one is then constrained twice, in two paragraphs separated by the registry-creation lines, neither adding a request the other does not: 907 for IPv4. This allocation MUST come from the Dynamic Multicast Group 908 IDs registry defined in 909 [I-D.ietf-pim-updt-ipv6-dyn-mcast-addr-grp-id], and publication of 910 this document as an RFC is dependent on that registry existing; see 911 the Normative References. 919 For IPv6 multicast addresses, the GAAP application allocation range 920 should be in the new "Dynamic Multicast Group IDs" registry requested 921 by [I-D.ietf-pim-updt-ipv6-dyn-mcast-addr-grp-id]. This new registry 922 requests the division of the 32-bit group ID range 0xA0000000 through 923 0xAFFFFFFF. The GAAP allocation range should come out of this 32-bit 924 range. What makes it read as more than one request is that the single allocation is described three incompatible ways: 1) Line 154: "TBD2/32" - an IPv6 address prefix of length 32, fixing 32 bits and leaving 96 to vary. 153 address [RFC4291]. The application allocation range is TBD1/10 154 for IPv4 and TBD2/32 for IPv6. 2) Lines 903-905: "a /32 block ... sized to match the 32-bit Group ID" - the same notation meaning the opposite: 96 bits fixed, 32 varying, that is, a /96. 3) Lines 922-924: a sub-range within 0xA0000000-0xAFFFFFFF - 28 bits wide, not 32, and called "this 32-bit range" in the same sentence. Only (3) corresponds to anything the "Dynamic Multicast Group IDs" registry could hold, and it is the reading that contradicts Section 6.1 (discuss-7). No width is ever actually requested. (c) The IPv6 allocation cannot be made from that registry. The referenced draft was published as RFC 10028 (Proposed Standard, August 2026). Its IANA Considerations record that IANA has created the "Dynamic Multicast Group IDs" registry in the "IPv6 Multicast Address Space" registry group, and that the "Standards Action" registration policy is required to update it. This document is Experimental, so IANA cannot make the assignment. Separately, 0xA0000000-0xAFFFFFFF is not a division that RFC 10028 made. (d) The IPv4 /10 has no available source block, and the size is left unresolved. 892 to allocate application-use addresses from. For IPv4, a /10 block in 893 a new registry range is requested. The size follows from the hash- 894 based allocation model in Section 6: a larger host portion within the 895 block, combined with the up to 4 candidate addresses per group name 896 (see "Acceptable Group Hash List" in Section 2), keeps collisions 897 infrequent enough that a GAAP node rarely needs to fall back past its 898 first candidate address. As the draft has previously noted, because 899 a /10 is nonetheless a large portion of the IPv4 multicast space, 900 this size warrants specific attention from IETF and IANA before 901 allocation, and the WG welcomes further discussion of the appropriate 902 block size, including analysis of collision probability at expected 903 deployment scales. No source block is named, and RFC 5771 leaves none available. RFC 5771's table accounts for 224.0.0.0/4 in full; everything is assigned or RESERVED, and of the RESERVED space RFC 5771 states that "Applications MUST NOT use addressing in the IANA reserved blocks." A /10 therefore requires reclassifying part of a RESERVED block - an IETF action updating BCP 51, not an IANA assignment. RFC 5771 also addresses a request of this size directly: where a very large number of addresses is required, the assignment is to be staged, with later stages made only after the earlier ones are fully used. A /10 is 4,194,304 addresses in one step, for a protocol with no deployment. The justification also carries no arithmetic, and the document concedes the question is open. Lines 898-903 say the size warrants attention before allocation and that the WG welcomes further discussion - in the text of a document at IESG evaluation! (e) The UDP port request is incomplete 858 IANA will create one UDP port number for the GAAP protocol, 859 registered per the Service Name and Transport Protocol Port Number 860 Registry guidance in [RFC6335]: 866 |gaap |TBD |udp | GAAP Control |IESG |IETF |draft- | 867 | | | | Packets | |Chair |ietf-pim-| 868 | | | | | | |gaap | The required RFC 6335 fields are present. Three gaps: the range is not stated (System, User or Dynamic Ports, which have different procedures); no justification is given, where RFC 6335 requires an explanation of why Dynamic Ports are unsuitable and, for a System Port, why User Ports are too; and the Reference column carries the draft name rather than [RFCXXXX]. The ports expert has recorded an objection on the Datatracker, recommending instead the multicast application port number assigned by draft-ietf-intarea-multicast-application-port, on the grounds that multicast services are already sufficiently differentiated by IP address and so do not need their own port assignments. I concur with the expert. GAAP is asking for two well-known multicast addresses of its own in Section 9.2; once a receiver has joined the GAAP group, the destination address identifies the traffic and the port adds no demultiplexing. Section 4's firewall argument does not apply, because the well-known group address is at least as good a filter key. RFC 6335 treats ports as scarce and requiring justification, and a permanent assignment to an experiment - while the IETF standardizes a shared mechanism for exactly this case - is hard to justify. (f) A BCP 14 keyword, and an implementation requirement, inside the IANA section. 907 for IPv4. This allocation MUST come from the Dynamic Multicast Group 908 IDs registry defined in A BCP 14 keyword in IANA Considerations, where everything already reads as MUST-level to IANA. The sentence is wrong on the substance per (c) in any case. 884 implementations MUST use an admin-local or organization-local IPv6 885 scope (not link-local scope) when selecting the scope value X for the 886 IPv6 address, so that control messages can be forwarded beyond a 887 single link when the deployment requires it. This is not an IANA instruction: it is a requirement on implementations inside an address assignment request. It is normative protocol behaviour and belongs in Section 4 or Section 6, where it would be reviewed as specification. Same class as discuss-10. Suggested way forward. Rewrite Section 9 so that each sub-section states one action in a form IANA can execute, and so that nothing depends on a request that cannot be granted. - Correct the lead-in at lines 853-854 once the list below is settled. - Delete lines 913-917. - Section 9.1 (port). Preferred: withdraw the assignment request and state that the experiment uses a port number assigned by draft-ietf-intarea-multicast-application-port. - Section 9.2 (control addresses). Restate as assignment requests - "IANA is requested to assign one IPv4 multicast address from the Internetwork Control Block (224.0.1.0/24) and one IPv6 multicast address ..."; line 876's "224.0.1.x" should read 224.0.1.0/24. Move lines 884-887 out per (f). - Section 9.3, IPv6. Remove the allocation request. State that GAAP, as an Experimental protocol, uses group IDs from within the Experimental Use range 0xFE000000-0xFEFFFFFF assigned by [RFC10028] - which says that "The Experimental Use range may be used for experimentation with new dynamic allocation protocols" - and that no IANA action is required. Do not name a specific value or sub-range: the range is not assignable, GAAP is not its only possible user, and the sub-range in use must be coordinated among those running the experiment. State that coordination requirement, state how many group ID bits the chosen sub-range must leave free for the derivation (discuss-7), and name the transition to a permanent assignment as an exit criterion. Correct line 154 to match and drop the "/32 block" and "this 32-bit range" language per (b). - Section 9.3, IPv4 - is a /10 needed at all? I am not sure if that is even wise for something experimental. - Present each table as it will appear in the registry, with a reference column pointing at this document. <discuss-9> IANA considerations without any registry for the protocol itself? 237 At this time, there is a single message called the Claim message with 238 type value 1. Type value of 0 is reserved. 274 Reserved: MUST be set to zero by the sender and ignored by the 275 receiver. "At this time" states the expectation of further message types, yet there is no registry for the remaining 14 values of the 4-bit Type field, so a future document has no way to obtain one. The 20-bit Reserved field has the same gap, and the preferred fix for discuss-4 needs to allocate a bit from it. Separately, Section 4 defines discard behaviour for a bad Marker, a zero-length group name and a Record Count mismatch, but not for an unrecognized Type. Suggested new Section 9.4: IANA is requested to create the "GAAP Message Types" registry in a new "Group Address Allocation Protocol (GAAP)" registry group. The registration policy is IETF Review. Each entry contains a Value (a 4-bit unsigned integer), a Name, and a Reference. The initial contents are: Value Name Reference 0 Reserved [RFCXXXX] 1 Claim [RFCXXXX] 2-15 Unassigned Please also add to Section 4: "A receiver that does not recognize the Type value MUST discard the message without further processing." If discuss-4 is fixed by a header flag, add a companion registry for the Reserved bits. <discuss-10> Normative protocol behavior and implementation aspects in Operational Considerations Section 7 707 GAAP implementations are expected to follow the UDP usage guidelines 708 in [RFC8085]. A sender SHOULD keep a multi-record Claim message 709 small enough to avoid IP fragmentation on the path, and SHOULD limit 710 the total UDP payload of a Claim message to 1232 octets so that it 711 fits within the 1280-octet IPv6 minimum MTU without fragmentation 712 (this bounds the number of records per message well below the maximum 713 Record Count of 255 when Group Names are long); the UDP checksum MUST 714 be enabled and verified, and a receiver MUST validate the Marker and 715 message length (the received UDP payload length as reported by the 716 UDP header) before further processing a packet, discarding malformed 717 packets as described in Section 4. The periodic and jittered Claim 718 timer described in Section 6 already bounds the sending rate of a 719 well-behaved node; implementations SHOULD additionally rate-limit 720 processing of received Claim messages per source to bound the cost of 721 handling a misbehaving or malicious sender (see also Section 8). 727 vector; implementations SHOULD nonetheless avoid generating a 728 response larger than the triggering message. GAAP Claim messages, 729 whether for the well-known GAAP Group Address or for application 730 group addresses, are intended for delivery within the scope implied 731 by the multicast group address used (see Section 9) and 732 implementations SHOULD set the IPv4 TTL or IPv6 Hop Limit 733 consistently with that scope rather than defaulting to a large value. Most of this is specification, not operational guidance. Sending and receiving rules belong in Section 4 or Section 6, where they would be read as requirements. Suggested moves: lines 713-717 (checksum, Marker and length validation, malformed discard) into Section 4 beside the existing malformed-message rules at lines 355-362; lines 708-713 (message sizing) into Section 4 as a sending rule or into a new Section 6.5; lines 717-721 (receive rate limiting) and 728-733 (TTL/Hop Limit) into Section 6. That leaves Section 7 with deployment scope, coexistence, RP requirements and monitoring guidance.
Following are some comments on this document: 136 2. Definition of Terms <minor> "GAAP node", the term in almost every normative sentence in Section 6, is not included. Please add it, and say whether it is a host, a process or a library instance - Section 6.4's rule about multiple local applications sharing a group name depends on it. 170 "acceptable" for a group name. They are calculated using the 171 SHA-256 hash function on 1 of 4 character strings: "<group-name>", 172 "<group-name>+1", "<group-name>+2", or "<group-name>+3". 504 for append in ["+1", "+2", "+3"]: 505 hash = sha256(group_name + append) <major> A group name is "an ASCII string" with no excluded characters, so "my-audio-group+1" is a legal group name and its first candidate is the same hash input, and so the same address, as the second candidate of "my-audio-group". Suggested replacement for the Acceptable Group Hash List definition: There are 4 hashed values regarded as "acceptable" for a group name. Each is computed by hashing a single octet, whose value is 0, 1, 2 or 3, followed immediately by the octets of the group name. The octet value 0 gives the first candidate address, 1 the second, and so on. These 4 hashes are the only candidate group addresses a GAAP node will ever try for a given group name; a GAAP node MUST NOT run the hash on any other input for this group name. The Section 6.1 pseudocode needs the same change. This also answers the question of the terminating null raised in my DISCUSS on the derivation, since the input becomes an octet sequence rather than a string. 213 * The GAAP node waits one periodic Claim interval (see Section 6, 214 roughly 1 minute) after sending its initial Claim message. If no 215 colliding Claim message is received from another GAAP node within 216 that window, the application can start using the group address. 536 name, group address, and timestamp. If the group address collides 537 with other GAAP nodes already using the address, one of the nodes 538 will send a Claim message to notify the colliding node that it needs 539 to allocate a new group address. 555 multi-record Claim message. The periodic Claim message is sent by 556 setting a periodic timer to a random value in the range 60 to 66 557 seconds (a base of 1 minute, plus jitter of 0 to 10% of 1 minute). <major> The claimant waits roughly 60 seconds; the defender's timer runs 60 to 66 seconds. An immediate triggered response is defined only for the same-name-different-hash case at lines 570-576; for an ordinary collision, lines 537-539 give no timing at all. So the defender's next Claim can be up to 66 seconds away and the claimant starts using a colliding address. Widening the wait to 66 seconds does not fix it - if the defender was itself suppressed by a third party the delay is unbounded, and per my first DISCUSS point it may be suppressed by the claimant's own message. Suggested addition, requiring an immediate triggered Claim on receipt of a colliding Claim, damped as in the next comment: On receiving a Claim message carrying a group address it is currently claiming with a different group name, a GAAP node MUST send a Claim message for that group address after a random delay uniformly distributed in [0, 1] second, rather than waiting for its periodic timer, unless it receives an equivalent Claim from another node during that delay, in which case it suppresses its own. The claimant's wait would then be stated as a small multiple of that bound rather than as "one periodic Claim interval". 223 * Claim messages are sent periodically. They are sent by a single 224 node using a delay-timer suppression mechanism similar to IGMP 225 [RFC1112]. See Section 6 for details. <nit> RFC 1112 specifies IGMPv1. Report suppression is IGMPv2, RFC 2236; IGMPv3, RFC 3376, removed it. Please cite the right specification. (The missing random delay is a separate comment below.) 242 in a UDP checksummed packet where the source port is ephemeral and 243 chosen by the sender and the destination port is a well-known port 244 allocated by IANA. GAAP can work behind NAT and firewall devices as 245 long as the GAAP destination port is permitted through filters. <major> The firewall half of this is fine. Claim messages go to a multicast destination address, and IPv4 NAT does not translate or forward multicast in any standard way, so the NAT half states a property NAT does not have and attaches a condition that has nothing to do with NAT. If any translation is on the path, two mechanisms break silently: the source address breaks collision tie-breaking and it keys the bad-actor list in Section 8. s/NAT and firewall devices/firewall devices If something specific about NAT is meant, please state the topology and what happens to the source-address-dependent mechanisms across it. 250 |Type=1 | Reserved | Record Count | <major> Type is 4 bits, Reserved 20 and Record Count 8. None of those widths appears in the field descriptions at lines 272-291, only in the figure, which is not guaranteed to render or to be accessible. Please state the width in each field description. 318 Timestamp comparison: Timestamps are compared using serial number 319 arithmetic [RFC1982] so that a single wraparound of the 32-bit 320 counter (in the year 2106) does not by itself cause incorrect 321 ordering. <minor> Section 3.2 of RFC 1982 notes that there are pairs of values s1 and s2 that are not equal but where neither is greater nor less than the other. With SERIAL_BITS = 32 that is a difference of exactly 2^31, and it is reachable: an unset clock reads 0, and 2^31 seconds after the epoch is 2038-01-19, so from 2038 the comparison against a correct clock is first undefined and then inverted. Suggested addition: "If two Timestamps are neither less than nor greater than one another under [RFC1982] comparison, they are treated as equal for the purposes of collision arbitration and the source-address tie-break applies." It is also worth stating that a Timestamp of 0 is treated as an unset clock and always loses the tie-break. 325 source address wins the collision. GAAP nodes are not required 326 to have synchronized clocks, but SHOULD use a monotonic or NTP- 327 disciplined source for the Timestamp where available. A <major> "Where available" makes this self-satisfying: nothing on the wire distinguishes compliance from non-compliance, and no consequence is stated. Please lowercase it, or restate: "GAAP nodes are not required to have synchronized clocks. Where a monotonic or NTP-disciplined clock source is available, it is preferable to use it for the Timestamp." The substantive protection against a bad clock is the timestamp skew point in my DISCUSS. 570 way to know a prior collision occurred. Any one existing node 571 already using a later hash in the list for that group name responds 572 with its own Claim message, sent immediately rather than waiting for 573 its periodic timer, carrying the group address it is already using 574 and its (earlier) Timestamp; if more than one existing node responds, 575 the new node processes the first valid response it receives and MAY 576 discard duplicates. 581 If the triggered Claim is lost in transit, the new node continues to 582 periodically re-claim the first hash; the existing node will observe 583 the unsuppressed Claim on its own next periodic timer expiry (or 584 trigger again immediately on receipt of the new node's repeated 585 Claim) and retransmit its response, so the state converges without a 586 bound on the number of retries. <major> Every node claiming that name responds at once; "if more than one existing node responds" acknowledges the implosion without preventing it. IGMP report suppression, cited as the model, works because responders wait a random delay and cancel on hearing another's report - GAAP has the cancellation without the delay, so at the moment it matters every responder transmits. Please add the random response delay and suppression per the previous comment, and state a maximum triggered-Claim rate per group address per node - one per second, for example. 574 and its (earlier) Timestamp; if more than one existing node responds, 575 the new node processes the first valid response it receives and MAY 576 discard duplicates. On receiving that triggered Claim, the new GAAP 577 node MUST yield, since the existing node's Timestamp is earlier, and 578 switch to using the same group address the existing node is claiming 579 rather than allocating a new one; the new node's own Claim for the 580 first hash is then withdrawn implicitly by no longer being refreshed. <major> "MUST yield, since the existing node's Timestamp is earlier" assumes the conclusion. Clocks are explicitly not synchronized (lines 325-327), so a new node whose clock is behind carries the earlier Timestamp, and the document does not say what happens then. Both nodes believe they won, and because the two addresses differ this is not a collision under the document's own definition, so nothing ever resolves it: the group name is permanently split across two addresses. The two-partitions-converge reasoning at lines 520-524 does not cover this, since it addresses same-name-same-address. Suggested way to specify convergence without reference to clocks, since for one group name there is no correctness reason to prefer either address: For a given group name, a GAAP node that receives a Claim message carrying that group name with a group address appearing earlier in the Acceptable Group Hash List than the address it is itself claiming continues to claim its own address and MUST send a triggered Claim. A node that receives a Claim carrying its group name with an address appearing later in the list MUST yield and switch to that address. Timestamps are not used for this comparison. 625 GAAP is published as Experimental because decentralized hash-based 626 multicast group address allocation has not been deployed. The 627 experiment aims to determine whether the collision detection and 628 resolution mechanisms defined in this document are sufficient for 629 practical deployments and what collision rates occur in networks of 630 varying scale. The experiment is considered complete when 631 operational experience demonstrates the protocol is suitable for 632 Standards Track or when fundamental limitations are identified that 633 require a revision. <major> This paragraph in Operational Considerations, is the only description of the experiment anywhere. Neither the Abstract nor the Introduction says the protocol specified is Experimental. And it is the wrong section: why GAAP is Experimental, what the experiment is and when it ends are statements about the document's status, not operational guidance for a deployment. Suggestion: 1) State the status in the Abstract and the Introduction - one sentence each: the Abstract that the document defines an experimental protocol, the Introduction why, pointing at the new section below. 2) Move the experiment discussion out of Operational Considerations into its own section with a title that says what it is - "Rationale for Experimental Status", or similar. Lines 625-633 move there, with the scalability material at lines 734-739 that is really about what the experiment should find out. I leave it to the authors to add anything further. Also worth considering: a narrower first experiment confined to a single link or subnet would exercise the derivation, collision detection and suppression - where every open question is - without ASM/RP infrastructure, without a /10, and without the inter-domain scope questions. That addresses with my DISCUSS on the intended scope. 657 GAAP is expected to operate within a single administrative domain and 658 this document does not define behavior for GAAP Claim messages 659 crossing administrative domain boundaries. <minor> If GAAP operates within one administrative domain and defines no cross-domain behaviour, its addresses need not be globally unique or globally scoped. RFC 2365 already reserves 239.0.0.0/10, 239.64.0.0/10 and 239.128.0.0/10 as unassigned and available for expansion of the Organization Local Scope - the requested unit exactly - and RFC 5771 records that the Administratively Scoped Block needs no IANA assignment policy. That consumes no globally scoped space and needs no reclassification of an RFC 5771 RESERVED block, which is the obstacle the /10 request currently hits. I may be missing how the WG weighed this. So, should the IPv4 allocation come from within 239.0.0.0/8 given lines 657-659, and if not, what deployment requires globally scoped GAAP addresses? The authors and the WG will need to decide this. 722 Because GAAP messages are small requests that do not trigger a 723 disproportionately large response, and Claim messages are sent to a 724 multicast group rather than reflected to a spoofed unicast target, 725 GAAP is not expected to be useful as a reflection or amplification 726 vector; implementations SHOULD nonetheless avoid generating a 727 response larger than the triggering message. <major> The preceding clauses establish that GAAP generates no disproportionate response. A triggered Claim carries whatever records the responder is claiming, which is unrelated to the size of the message that triggered it, so no implementation action can either comply with or violate this. Please drop the clause, or restate it as design intent without a keyword. 777 An open-source GAAP implementation exists where ChaCha20 [RFC7539] is 778 used to encrypt GAAP messages. 782 implementation's key management procedure is a simple shared key that 783 is configured with the application. <major> Two security-relevant claims about a specific implementation - that it uses ChaCha20, and that its key management is a configured shared key - with no reference or URL, so neither is verifiable. The shepherd writeup meanwhile relies on this, recording that there is an open source implementation referenced in the document as satisfying the implementation question; the document references nothing. Please do not refer to an implementation that is not identified. The substantive point can be made without attributing it: ChaCha20 [RFC8439] without a message authentication code has been used to encrypt GAAP messages. Deployments choosing an encryption mechanism SHOULD prefer an Authenticated Encryption with Associated Data (AEAD) construction such as ChaCha20-Poly1305 [RFC8439], which additionally authenticates the message, over ChaCha20 alone. Where a shared key is configured with the application, key management is a deployment responsibility; see below. If the authors want to describe an implementation, that belongs in an implementation report - not as an unattributed claim inside Security Considerations. 785 Deployments enabling encryption MUST use a mechanism that provides 786 both confidentiality and integrity, such as an AEAD construction 787 (e.g., ChaCha20-Poly1305); using ChaCha20 without a message 788 authentication code is NOT RECOMMENDED, since the Marker functions 789 only as a format check and not as an integrity check. <major> Please move [RFC8439] to the normative references. 819 * Even when an encrypted channel is used, a bad actor could be 820 claiming a group address not derived from one of the group name 821 inputs used for the Acceptable Group Hash List (see Definition of 822 Terms section). Cooperating nodes should ignore such messages and 823 not try to send Claim messages to correct the bad actor node. 824 Note that a bad actor can spoof the source address of another 825 node's Claim message, so source-address based mitigations are 826 best-effort. Implementations SHOULD bound the size of the bad- 827 actor list and treat entries as advisory hints rather than 828 authoritative state, since source addresses in Claim messages can 829 be spoofed. 831 * A bad actor could send an invalid timestamp giving it tie-breaking 832 priority when a group address collision occurs. If the group 833 address has been prior claimed by another node with a timestamp 834 earlier than the invalid timestamp, cooperating nodes should put 835 the bad actor node on a bad-actor list and ignore future messages 836 from it. A Timestamp that appears to be more than a small, 837 locally configured skew allowance ahead of, or behind, the 838 receiver's own clock SHOULD be treated with the same tie-breaking 839 rule as an equal timestamp rather than assumed to win or lose 840 outright, since it may result from a misconfigured or 841 unsynchronized clock, including a clock that has not yet been set 842 after boot, which typically reads a value far in the past or at 843 zero and would otherwise win every collision it is party to. 845 * A bad actor could send messages too often and is not adhering to 846 the random delay or periodic timer procedures in this document. 847 When this occurs, cooperating nodes should start ignoring messages 848 from the bad actor node and not reset or cancel timers, or send 849 triggered Claim messages <major> These bad-actor-list bullets specify what a node does on receiving certain messages - protocol behaviour, written with lowercase "should" - inside Security Considerations. That content should move to Section 6 with the threat rationale left in Section 8, or be stated plainly as advice rather than as behaviour. 930 [I-D.ietf-pim-updt-ipv6-dyn-mcast-addr-grp-id] 931 Karstens, N., Farinacci, D., and M. McBride, "Updates to 932 Dynamic IPv6 Multicast Address Group IDs", Work in 933 Progress, Internet-Draft, draft-ietf-pim-updt-ipv6-dyn- 934 mcast-addr-grp-id-13, 10 March 2026, 935 <https://datatracker.ietf.org/doc/html/draft-ietf-pim- 936 updt-ipv6-dyn-mcast-addr-grp-id-13>. <minor> This has been published as RFC 10028 - this requires some other text updates that reference it. 1038 [RFC7539] Nir, Y. and A. Langley, "ChaCha20 and Poly1305 for IETF 1039 Protocols", RFC 7539, DOI 10.17487/RFC7539, May 2015, 1040 <https://www.rfc-editor.org/info/rfc7539>. 1042 [RFC8439] Nir, Y. and A. Langley, "ChaCha20 and Poly1305 for IETF 1043 Protocols", RFC 8439, DOI 10.17487/RFC8439, June 2018, 1044 <https://www.rfc-editor.org/info/rfc8439>. <minor> RFC 7539 is obsoleted by RFC 8439. RFC 8439 defines ChaCha20 as well as ChaCha20-Poly1305, so the single citation at line 777 can simply move? <EoRv20>
# IESG review of draft-ietf-pim-gaap-20 CC @MikeBishop ## Discuss ### Section 4, paragraph 10 Multiple "fields" in this section do not appear to describe actual fields in the record. (Address Field Usage, Timestamp Comparison, Multi-Record Parsing) The layout will be misleading in the extreme. This is perhaps editorial, yet critical enough to interop that I believe it rises to DISCUSS level. ### Section 5, paragraph 1 ``` The GAAP API has the following API calls a multicast application will use. A multicast application imports the library before using it in its code logic. This section documents a python library. The ``` This is the specification of a protocol. The protocol is not a Python library, and almost certainly does not have API calls. I strongly recommend removing the API definition, or moving it to an appendix as an illustration of how one might integrate this protocol. What I think you intend to show here is the protocol's abstract data model -- the things that it needs from the layer above in order to drive its own processes. ### Section 8, paragraph 3 ``` Deployments enabling encryption MUST use a mechanism that provides both confidentiality and integrity, such as an AEAD construction (e.g., ChaCha20-Poly1305); using ChaCha20 without a message authentication code is NOT RECOMMENDED, since the Marker functions only as a format check and not as an integrity check. ``` This is inconsistent in multiple ways. First: Encryption is optional, but if you enable it, it MUST have certain properties? How is encryption with only one of these properties worse than no encryption? Second: If you MUST have both properties, how is using something that provides only one of them NOT RECOMMENDED (=> SHOULD NOT)? That's a mismatch of requirement levels.
## Comments
I support Andy's, Eric's, and Ketan's DISCUSS positions.
### Section 1, paragraph 1
```
that it can run within a library a multicast application compiles
into its executable binary.
```
Surely the method of compilation is irrelevant to the protocol? I'd stop at
saying it's lightweight, so it's feasible even in constrained environments.
### Section 3, paragraph 6
```
* The GAAP node waits one periodic Claim interval (see Section 6,
roughly 1 minute) after sending its initial Claim message. If no
```
This surprised me. In network terms, one minute seems like an eternity to
determine whether a particular address is usable. With retries, it may be as
long as four minutes before an error is returned. I'd have expected at least a
faster timer and probing all four candidates in ~parallel before selecting one.
### Section 4, paragraph 0
```
addresses GAAP allocates for applications. The Claim message is sent
in a UDP checksummed packet where the source port is ephemeral and
chosen by the sender and the destination port is a well-known port
```
If the source port is chosen by the sender, why does it need to be ephemeral? Is
there any technical reason for that, or does it just work out that way in a
given implementation?
## Nits
All comments below are about very minor potential issues that you may choose to
address in some way - or ignore - as you see fit. Some were flagged by
automated tools (via https://github.com/larseggert/ietf-reviewtool), so there
will likely be some false positives. There is no need to let me know what you
did with these suggestions.
### Typos
#### Section 1, paragraph 3
```
- the past, they include SAP [RFC2974], SDP [RFC4566], mDNS [RFC6762],
- ^
+ the past; they include SAP [RFC2974], SDP [RFC4566], mDNS [RFC6762],
+ ^
```
### Section 1, paragraph 1
```
GAAP is a possible solution to the issues described in problem
statement [RFC10019].
```
Either add "the" (before "problem statement") or just drop "problem statement"
and point to the RFC.
### Section 2, paragraph 1
Thanks for a thorough Terminology section. These are half-way between
embedded in a sentence ("Group Name is...") and a definition list ("Group Name:
An ASCII string..."). Consider dropping the "is" and going fully to the
definition list.
### Section 4, paragraph 1
```
type value 1. Type value of 0 is reserved. Claim messages are sent
```
Drop the "of" for consistency with the previous sentence.
### Outdated references
Document references `draft-ietf-pim-updt-ipv6-dyn-mcast-addr-grp-id`, but that
has been published as `RFC10028`.
Document references `draft-ietf-pim-zeroconf-mcast-addr-alloc-ps`, but that has
been published as `RFC10019`.
Reference `[RFC4566]` to `RFC4566`, which was obsoleted by `RFC8866` (this may
be on purpose).
### Grammar/style
#### Section 5.1, paragraph 4 and Section 5.4, paragraph 2
```
never outside it. The following pseudo-code illustrates the functionality, w
^^^^^^^^^^^
```
```
solve a collision, the following pseudo-code will illustrate how 3 more attem
^^^^^^^^^^^
```
This word is normally spelled as one.
## Notes
This review is in the ["IETF Comments" Markdown format][ICMF]. You can use the
[`ietf-comments` tool][ICT] to automatically convert this review into
individual GitHub issues. Review generated by the [`ietf-reviewtool`][IRT].
[ICMF]: https://github.com/mnot/ietf-comments/blob/main/format.md
[ICT]: https://github.com/mnot/ietf-comments
[IRT]: https://github.com/larseggert/ietf-reviewtool
** Section 4 and 8. These sections makes reference to the possibility of “encrypting GAAP messages”. -- Section 8, “The message Marker is always sent in cleartext as 0xAAAAAAAA (see Section 4) and is used by the receiver to identify the packet as GAAP before determining whether the following record data is encrypted.” How is a determination make that “record data” is encrypted”? -- Section 8, “Deployments choosing an encryption mechanism SHOULD prefer an Authenticated Encryption with Associated Data (AEAD) construction …” How is an encryption scheme added to the GAP message? There appears to be no way to add additional fields. For example, where would an authentication tag go? -- If GAAP messages are encrypted, how does the message format currently defined in Section 4 change? -- How are basic keying activities handled if the GAAP protocol provides no means to identify keys? I appreciate that they are defined as out of scope but is that realistic for anything but the most trivial deployment? ** Section 5.1-5.4 have “CODE” blocks and the text implies that there is a normative API. -- Please provide a reference to the formal programming/specification language being used? -- Which parts of this text are normative? ** Section 9.3 For IPv6 multicast addresses, the GAAP application allocation range should be in the new "Dynamic Multicast Group IDs" registry requested by [I-D.ietf-pim-updt-ipv6-dyn-mcast-addr-grp-id]. This new registry requests the division of the 32-bit group ID range 0xA0000000 through 0xAFFFFFFF. The GAAP allocation range should come out of this 32-bit range. I believe the registry in question is https://www.iana.org/assignments/ipv6-multicast-addresses#dynamic-multicast-group-ids and the guiding document is https://datatracker.ietf.org/doc/html/rfc10028. This document is requesting allocation from a range (0x90000000-0xEFFFFFFF) whose registration policy is “Standards Action”. As an experimental status document, this would not be permitted. See Section 4.9 of RFC8126.
Thank you to Meral Shirazipour for the GENART review. ** Section 9.3 As the draft has previously noted, because a /10 is nonetheless a large portion of the IPv4 multicast space, this size warrants specific attention from IETF and IANA before allocation, and the WG welcomes further discussion of the appropriate block size, including analysis of collision probability at expected deployment scales. Thanks for raising this issue. I have the same concern especially since this document has experiment status. What is the scale that motivates the /10?
Hi Dino and Mike, Thank you for the effort put into this document. Also, thanks to Bo Wu for the OPSDIR review and the authors for engaging and taking care of that review. # I have already reviewed an early version of this document. The authors kindly addressed the comments raised then in in -13: https://mailarchive.ietf.org/arch/msg/mboned/Suc5biakiQUe64Y9CMkEbYAGt4k/. # The simulation details shared with mboned are useful to help assess the requested prefix size: https://mailarchive.ietf.org/arch/msg/mboned/GFmpLiVlE_UJZP6my0HuAuY8AXQ/. # The terminology section incudes normative behavior that I think is better consolidated in the main spec. Likewise, I don't think the use of normative language in the overview section is adequate here. # Encrypted/Unencrypted traffic As the same port number is used, maybe consider a more deterministic approach for disambiguating both (distinct markers, for example). # On Timestamp Please double check that you are following the recommendation in Section 3 of RFC8877. # Name Delimiter The current approach relies on the terminating null to identify a name. I wonder whether using a more explicit approach (that is, encode the name length) would be better. # Grouping Claims vs. individual claim Is there any guidance that can be provided to include multiple records vs sending claims with a single record? # There is a risk that under some conditions (massive reboots, power outage, etc.) that an avalanche of Claim messages are sent by hosts. Maybe add a mention how the design protext against such overload. # Internal implementation details The description includes details that are internal to an implementation. I wonder whether this is really needed in the spec. An example of such details is: CURRENT: A multicast application imports the library before using it in its code logic. # Follow RFC5952 recommendations for representing IPv6 addresses. For example, use the lower-case in this part: CURRENT: IANA will create one multicast address from the IPv4 Internetwork Control Block 224.0.1.x [RFC5771] and one multicast address from the IPv6 Variable Scope Multicast Addresses Block FF0X::TBD for the operation of the GAAP protocol # Please make sure the IANA allocation (TBD1/TBD2) cited in the main doc are also called as such in the IANA considerations. Cheers, Med