[magma] MLDv2: editorial comments and questions
Erik Nordmark <Erik.Nordmark@sun.com> Tue, 18 February 2003 13:05 UTC
Received: from www1.ietf.org (ietf-mx.ietf.org [132.151.6.1]) by ietf.org (8.9.1a/8.9.1a) with ESMTP id IAA27210; Tue, 18 Feb 2003 08:05:39 -0500 (EST)
Received: from www1.ietf.org (localhost.localdomain [127.0.0.1]) by www1.ietf.org (8.11.6/8.11.6) with ESMTP id h1IDBcp25618; Tue, 18 Feb 2003 08:11:38 -0500
Received: from ietf.org (odin.ietf.org [132.151.1.176]) by www1.ietf.org (8.11.6/8.11.6) with ESMTP id h1ID8Ap25462 for <magma@optimus.ietf.org>; Tue, 18 Feb 2003 08:08:10 -0500
Received: from patan.sun.com (ietf-mx.ietf.org [132.151.6.1]) by ietf.org (8.9.1a/8.9.1a) with ESMTP id IAA27144 for <magma@ietf.org>; Tue, 18 Feb 2003 08:02:02 -0500 (EST)
Received: from bebop.France.Sun.COM ([129.157.174.15]) by patan.sun.com (8.9.3+Sun/8.9.3) with ESMTP id GAA24053 for <magma@ietf.org>; Tue, 18 Feb 2003 06:05:49 -0700 (MST)
Received: from lillen (lillen [129.157.212.23]) by bebop.France.Sun.COM (8.11.6+Sun/8.10.2/ENSMAIL, v2.2) with SMTP id h1ID5mP26589 for <magma@ietf.org>; Tue, 18 Feb 2003 14:05:48 +0100 (MET)
Date: Tue, 18 Feb 2003 14:02:06 +0100
From: Erik Nordmark <Erik.Nordmark@sun.com>
Reply-To: Erik Nordmark <Erik.Nordmark@sun.com>
To: magma@ietf.org
Message-ID: <Roam.SIMC.2.0.6.1045573326.32163.nordmark@bebop.france>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; CHARSET="US-ASCII"
Subject: [magma] MLDv2: editorial comments and questions
Sender: magma-admin@ietf.org
Errors-To: magma-admin@ietf.org
X-BeenThere: magma@ietf.org
X-Mailman-Version: 2.0.12
Precedence: bulk
List-Unsubscribe: <https://www1.ietf.org/mailman/listinfo/magma>, <mailto:magma-request@ietf.org?subject=unsubscribe>
List-Id: Multicast and Anycast Group Membership <magma.ietf.org>
List-Post: <mailto:magma@ietf.org>
List-Help: <mailto:magma-request@ietf.org?subject=help>
List-Subscribe: <https://www1.ietf.org/mailman/listinfo/magma>, <mailto:magma-request@ietf.org?subject=subscribe>
[Note that I'm still in xmit mode - making sure I type up all the comments and questions before I read the responses so far] Introduction: ------------- Several of the unclear aspects (such as do the routers send periodic general queries) below could be amelirotated by having an introduction section which actually introduces the workings of the protocol. It would be good if such a section presented this as well as - the fact that the routers do not track the membership of individual listeners (for scalability reasons) - the existence of state change reports as well as current status reports - the fact that there are 3 different types of v2 queries - the fact that a single (multicast) router on a link is elected the querier and it is the only node issuing queries - general queries are sent periodically - mc addr and source specific queries are sent it response to detecting state changes in a listener - the workings of the "supress" flag would be useful to explain at a high level - the assumption about robustness and fast leaves - the fact that MLD operates independently for each interface - all state is per interface Currently even with a good understanding of MLDv1 it is very hard to read this specification and get a good grasp of the protocol. In some cases it requires reverse engineering the overall operation of the protocol from some minute detailed rules in the bowels of the spec. This is not good. Even a new reader (that has never read MLDv1) should be able to get an overview of how the protocol works without having to read the defails. Minor issues: ------------- Section 2 has MUST requirements on the service interface for instance, "MUST NOT be less than 64 addresses per list". Why is it important for the protocol specification to place such requirements on the API? It seems out of place. There seems to be a section in 4.1 about "source address for queries" that is missing. Presumably, as in draft-ietf-mld-source, the query must be sent with a link-local source thus an unspecified source is not allowed. If not then the destination address rule in 4.1.14 would allow off-link queries. What is the motivation for 4.1.14 allowing unicast addresses? When I read this and appendix A.2 I thought there was some new "fast leave" scheme that involved targeting reports at individual nodes but there is no such thing. If the query to unicast is useful for e.g. debugging it would be good to say that in section 4.1.14. 4.2.13 says Routers MUST ignore a report with an unspecified source. This requires a rule that hosts only send such reports for link-local groups and some explanatory text in 4.1.13 that the purpose of such reports is to make MLD snooping switches see that the host is interested in the group. Otherwise the host can think it send a report for some non-ll group while the router ignored that report. Hence join latency before the host has assigned a link-local address would suffer. 5.2 doesn't make it specific what happens when a node receives a multicast address specific (or multicast address and source specific) query and the interface has no record for that group. It seems to say to schedule the multicast address timer but then not send the report when the timer fires. That seems suboptimal unless there is something I don't understand here. Is there a requirement that all queries (even for addresses which the node is not interested in) be retained until the timer fires? Is there some subtle ordering dependency that would make things fail if the listener compared the source list when the query was received it could report the wrong thing if its source list has changed while the timer was running? Section 6.2 specifies the "multicast address timer". As far as I understand the semantics of this timer is just the "exclude mode" timer. Or is its semantics more tricky than that? I think it would give a more comprehensible discussion if section 6.2 specified a separate "include source list" and "exclude source list" instead of having a single list and interpreting its content based on the source timer. An example of possible confusion shows up in 6.5 where it says source records. Source records whose timers are zero (from the previous EXCLUDE mode) are deleted. A source record could presumably have had its timer decrement to zero and without it being an EXCLUDE source record (yes, per section 6.2.3 such a source record should be removed, but the delete might not be immediate.) I realize this part of the protocol works even with this confusion, but this is one more thing which makes the protocol hard to understand. The rules for when a source record as well as a multicast record can be deleted is hidden in various rules e.g. in section 6.2.3. It would be cleared to be able to say in one place A multicast record in include mode with an empty source list carries no semantic information hence it can be deleted. Thus any time a record transitions to this state it is deleted by the router. and corresponding text for the source record. That would simply the Actions/Comments in the state tables. Section 6.2.2 says INCLUDE Timer >= 0 All listeners in INCLUDE mode. even though the text above says that the multicast address timer is not used (presumably never set, decremented, or fires) in INCLUDE mode. Thus it would make sense to say "Don't care" or "Not used" instead of "Timer >= 0". It would be much helpful if section 6.2.2 could say when the multicast address timer is started/restarted. I *think* this is each time a report is received in IS_EX or TO_EX state but I can't find that (and which value it entered in the timer) spelled out anywhere. The table in section 6.2.3 looks inconsistent to me. The two elements: INCLUDE TIMER == 0 Suggest to stop forwarding traffic from source and remove source record. If there are no more source records, delete multicast address record INCLUDE No source element Suggest to not forward traffic from source Presumably the two above are the same. When the source timer becomes zero in include mode, the individual source record can be deleted. And when all source records are deleted the multicast address record can be deleted. But the second item above does not state "and delete multicast address record". Is this just an editorial miss? Furthermore section 6.2.3 has: EXCLUDE TIMER == 0 Suggest to not forward traffic from source (DO NOT remove record) Which record is not to be removed? The source address record or the multicast address record? Section 6.4.2 and 6.6.2 talk about "Querier state" but this state on the router is never defined. I understand that is it the result of the querier election that sets the querier state, but I don't expect other readers to be that good at reading between the lines. Perhaps querier election and querier state should be defined early in section 6 instead of towards the end i.e. move 6.6.2 earlier? Section 6.6.1 and elsewhere talks about "Supress router-side processing flag". The only motivation and high-level explanation of this flag is in appendix B: o The S flag (Suppress Router-Side Processing) is included in queries in order to fix robustness issues. It would be useful for understanding if the issue and solution was explained in more detail at the higher level. I feel like I'm reading uncommented assembly code trying to deduct the programmers intent here! Section 6.6.2 talks of a "lower IPv6 address". I suspect some more detail would be useful - even for a 32 bit quantity we have byte-order issues thus how to compare a 128 bit quantity as an integer might be subject to different interpretations. Section 6.6.2 reads as the elected querier sends general queries but other routers might send other queries. I assume that the elected querier is the only node sending queries. Is this correct? If so it makes sense to append "as well as other queries." to the last sentence in the first paragraph. The second paragraph in 6.6.2 looks inconsistent with section 7.3.1. The former says that the router should automatically switch to MLDv1 queries if it hears a v1 query, but the latter talks about this being adminstratively assurred. At a minimum this is rather confusing. What should an implementation do? The description of detecting an old router in 7.2.1 seems rather complex and hard to read. I understand from section 8 that this is just a case of when an old query is received switch to old mode and (re)start a timer. if the timer fires switch to new mode but I can't parse that from the text in 7.2.1. (I suspect the complexity is a carry over from IGMPv3 which deals with 3 versions.) Saying "older" isn't needed - "v1" is more specific in the case of MLDv2. Same for section 7.3.2. Section 9 says that the use of the unspecified source address protects against off-link packets. This isn't true since there is nothing in any IPv6 specification that says that routers MUST NOT forward packets with an unspecified source address. Thus the security considerations section should mention the issue of how the protocol handles off-link reports with an unspecified source address. (The fact that such reports are ignored by the router means that this doesn't add any security hole - but the issue should be explained and documented. MLD snooping switches might have a security issue with off-link unspecified source reports though!) Editorial nits: --------------- Section 1 says: This document specifies Version 2 of MLD. The previous version of MLD became an Internet Standard and is specified in [RFC 2710]. In MLDv1 is a proposed standard and the above can be read as it being a standard. How about dropping "became and Internet Standard and"? Section 3.1: o If the requested filter mode is INCLUDE *and* the requested source list is empty, then the entry corresponding to the requested interface and multicast address is deleted if present. If no such entry is present, the request is ignored. I think "has no effect" is more accurate than "is ignored". For instance, some particular API might chose to return an error in such a case which doesn't sound like the request would be ignored. I don't think this specification should preclude there from being such an API. Section 3.2 mostly talks about the interface state but it also has this important note: but not on socket s2. Note that MLDv2 messages are not subject to source filtering and must always be processed by hosts and routers. Shouldn't this be specified more visibly somewhere else? Section 3.2 continues with Filtering of packets based upon a socket's multicast reception state is a new feature of this service interface. The previous service interface described no filtering based upon multicast listening state; rather, a Start Listening operation on a socket simply caused the node to start to listen to a multicast address on the given interface, and packets sent to that multicast address could be delivered to all sockets whether they had started to listen or not. The above doesn't match reality. While filtering based on the socket isn't required by any IETF standard (and I think requring it is the new thing) many implementations have some form of filtering. In some cases it is simple as in unless the socket has issued at least one add_membership type operation it will not receive any multicast packets (even if other sockets have joined the group). In other cases it might be full-fledged filtering of groups per socket. A possible fix is to just add "Requiring " before "Filtering of packets ...". Section 4: link-local IPv6 Source Address (or the unspecified address, if the node has not yet acquired such an address), an IPv6 Hop Limit of 1, It is the *interface* and not the *node* that needs to have a link-local address assigned. s/node/sending interface/ Same issue in section 4.2.13. The document seems inconsistent on whether the unspecified address can be used for v2 queries, but I think the intent is that they only be allowed on v2 reports. If so it makes sense to clarify the above sentence and also search for "unspecified" and make the other text consistent. Section 4.2.12 says: 1 MODE_IS_INCLUDE - indicates that the interface has a filter mode of INCLUDE for the specified multicast address. The Source Address [i] fields in this Multicast Address Record contain the interface's source list for the specified multicast address, if it is non-empty. This reads as if MODE_IS_INCLUDE reports are sent even if the source address list is empty, but that is not the case AFAICT. Thus it makes sense to clarify this to say that MODE_IS_INCLUDE is never sent with an empty list. Section 4.2.12 says: o A "Filter Mode Change Record" is sent by a node whenever a local invocation of IPv6MulticastListen causes a change of the filter mode (i.e., a change from INCLUDE to EXCLUDE, or from EXCLUDE to INCLUDE) of the interface-level state entry for a particular multicast address. The Record is included in a Report sent from the interface on which the change occurred. The Record Type of a Filter Mode Change Record may be one of the following two values: I makes it clear later, but it would be good to add "whether or not the source list changes at the same time" to the above. Section 4.2.12 says: Unrecognized Record Type values MUST be silently ignored. I assume this means more than just ignoring the type field when it isn't recognized. The question is whether it means that the whole report be ignored, or just the multicast address record with the unrecognized type. Which one is it? Section 5 says There are two types of events that trigger MLDv2 protocol actions on an interface: Presumably there is a set of timers that, when firing, trigger MLD protocol actions as well. It would make sense to list those timers here. Changing this means it makes sense to add a section 5.3 about interface timer firing and 5.4 about multicast address timer firing. Section 5: (Received MLD messages of types other than Query are silently ignored, except as required for interoperation with the earlier version of MLD.) Replace "earlier version of MLD" with MLDv1 and look for other occurances of "version" where the same thing applies. (I understand that this type of language makes sense for IGMP since there are two earlier versions.) Section 5.2: When a new Query with the Router Alert option arrives on an The "router alert" is checked above. Using the expression "valid query" throughout the section captures the validity checks at the beginning of the section. Section 6.2.2 says in the first paragraph kept per multicast address per attached link. but the "per attached link" doesn't appear in section 6.2.3 for the source timer which looks confusing. It would be better to say kept per multicast address record. Section 9.1: Change "MLDv2 receivers" to "MLDv2 listeners". Section 10. It would make sense to ask the IANA to assign a *link local scope* multicast address. It would make sense to say ICMPv6 instead of ICMP in this section as well. The specification potentially introduces new name spaces. At least the multicast address record type is such a name space. It would make sense to state this in the IANA considerations section. (I'm Assuming that the assignment of new types be restricted to standards action.) Section A.2 #1 made me believe that routers in this protocol would track membership per host which it clearly doesn't do. And doing it per host doesn't seem to be an improvement. For instance, asking a host whether it wants group X would still require a timeout since the listener does not respond to queries for groups in which it is not interested. So this argument is weak at best. What could be done without host supression is for the router to count the number of hosts interested in a particular group (at least for include mode - haven't thought about exclude mode) which makes it easier for the router to detect when it is likely that the last listener has unsubscribed without having to query for every leave. Appendix A.2 #2 seems to have an odd conclusion as the last sentence. Since MLDv2 mandates compatibility with MLDv1 and MLDv1 has host supression Thus I don't see how the snooping switches can be made simpler by removing anything at this point in time. In some future date when the v1 compatibility is removed that might be the case. A point that is missing is that in the precense of MLD snooping switches the utility of host supression is zero. That coupled with #3 and #4 seems to make a strong case for removing host supression. But #1 and the current #2 seems weak arguments at best. Appendix B Change "65,535 seconds" to either "65,535 milliseconds" or "65 seconds". Erik _______________________________________________ magma mailing list magma@ietf.org https://www1.ietf.org/mailman/listinfo/magma
- [magma] MLDv2: editorial comments and questions Erik Nordmark
- RE: [magma] MLDv2: editorial comments and questio… Rolland Vida
- RE: [magma] MLDv2: editorial comments and questio… Rolland Vida
- RE: [magma] MLDv2: editorial comments and questio… Rolland Vida
- RE: [magma] MLDv2: editorial comments and questio… Erik Nordmark
- RE: [magma] MLDv2: editorial comments and questio… Erik Nordmark
- RE: [magma] MLDv2: introduction Erik Nordmark
- RE: [magma] MLDv2: editorial comments and questio… Erik Nordmark
- RE: [magma] MLDv2: editorial comments and questio… Rolland Vida