Subject: [RTG-DIR] RtgDir review: draft-ietf-homenet-hncp-07.txt

From: Thomas Clausen <[email-masked]>
Date: Tue, 21 Jul 2015 14:48:10 +0200

[Apologies for the after-WGLC review]

Hello,
I have been selected as the Routing Directorate reviewer for this draft. The Routing Directorate seeks to review all routing or routing-related drafts as they pass through IETF last call and IESG review, and sometimes on special request. The purpose of the review is to provide assistance to the Routing ADs. For more information about the Routing Directorate, please see http://trac.tools.ietf.org/area/rtg/trac/wiki/RtgDir
Although these comments are primarily for the use of the Routing ADs, it would be helpful if you could consider them along with any other IETF Last Call comments that you receive, and strive to resolve them through discussion or by updating the draft.

Document: draft-ietf-homenet-hncp-07.txt
Reviewer: Thomas Heide Clausen
Review Date: July 21, 2015
IETF LC End Date: <review just after WGLC>
Intended Status: Standards Track

Summary: 
	o	I have significant concerns about this document and recommend 
		that the Routing ADs discuss these issues further with the authors.
	
Comments:
		
	o	This document is a profile for and specialization of 
		draft-ietf-homenet-dncp, and
		has a normative dependency on that document. Note that I produced a
		RTG-DIR review of draft-ietf-homenet-dncp with several suggestions a
		short while ago, to which the authors recently responded with an updated
		document. I have not had a chance to review that update, and iterate
		with the authors, yet. I also note a RTG-DIR review by Les Ginsberg, 
		as well as several points raised by Juliusz Chroboczek on the topic of
		draft-ietf-homenet-dncp, the resolution of which I believe may impact
		draft-ietf-homenet-hncp somewhat significantly. 
		
		This is one reason for my summary (above) of "Significant concerns..."
		-- before this document can be processed, draft-ietf-homenet-dncp should
		be squared off. It is not, however, the only reason

	o	As a general comment, the document would do well with a good editorial
		overhaul to bring consistency in language usage, consistency in 2119
		terminology, coherence in defined terms and their definition, document
		structure, etc.
		
	o	Related to this, I found that the lack of a terminology section was 
		unfortunate, and ended up -- for helping my own reading of the document
		--  making a napkin-terminology to refer to as I walked through the doc.
		(FWIW, I personally prefer the 2119-paragraph to be part of a
		terminology section, although that is a minor issue / personal
		preference). The words I'd suggest including, and defining, would be:
		
			o	Node -- is that a router, a host, or both? Again, I was 
					given to understand that HOMENET did not want to redefine
					host behavior, and so I believe that the right term would
					be router?
					
			o	Privat Link - Common Link -- If you *insist* on having these
					concepts, then they definitely need a clear-cut definition
					here ; I would prefer, though, to not have those concepts.

			o	External Interface
			o	Internal Interface
			o	Border
			o	Border router
			
		You "import" a lot of terminology from DNCP and from  
		[I-D.ietf-homenet-prefix-assignment], and I found myself constantly
		hunting through to figure out which terminology was from where. Suggest
		adding a paragraph to the terminology section (assuming you make one)
		which recapitulates something like:
		
			"Additionally, this document uses terminology from DNCP,  
			 specificially the terms XXX, YYY, ZZZ are to be interpreted as 
			 described therein.
			
			 This document also uses terminology from
			 [I-D.ietf-homenet-prefix-assignment], specifically the terms WWW,
			 UUU, QQQ are to be interpreted as described therein".
			 
		Reason being: when I came across a term (say "Shared Link"), I wanted 
		to make sure that I understood what that was. So I went to the 
		terminology section. Well, there was none. So I went to grep through
		this document. Didn't really find a definition. So I started looking
		through the references to see if there might be something that made
		sense. Fortunately, my guess of what I-D to check first was right, but
		it still was more work than it should have been.			

Major Issues:

	o	I made this very same comment to draft-ietf-homenet-dncp, as I am going
		to make here. 
		
		The introduction does not read well; it contains parts of something that
	 	could be considered as part of an applicability statement (without it
	 	being called out as such, and without forming a complete applicability
		statement), and does not actually introduce the protocol. Reading just 
		the introduction and the abstract, it is very obscure what HNCP is 
		actually accomplishing, and why one would chose to use HNCP. 
		
		It does, however, transpire that "whatever it is", it imposes a src-dst
		routing protocol -- although, that is actually at odds with the claim 
		(from the Abstract) that the use of HNCP allows "...seamless use of a 
		routing protocol."  ... given that, afaik, no standardized src-dst
		routing protocols currently exist.
		
		As I recommended for DNCP (hey, at least I'm being somewhat
		consistent...) I suggest that a proper introduction consisting of three
		parts would be beneficial: (i) what this document is, (ii) what doing
		HNCP actually gets you, and (iii) the operating conditions under which
		HNCP is applicable.
				
		I am calling this out as a major issue, since I believe that it is
		not just editorial, but is a matter of scoping this document correctly,
		and in particular not falling into the trap of "claiming applicability
		where it's not".	

	o	4. Common Links
	
		From the document:
		
		   "HNCP uses the concept of Common Links for some of its applications.
		    A Common Link usually refers to a link layer broadcast domain with
		    certain properties and is used, e.g., to determine where prefixes
		    should be assigned or which neighboring nodes participate in the
		    election of a DHCP(v6) server.  The Common Link is computed
		    separately for each local interface, and it always contains the
		    local interface.  Additionally, if the local interface is not in
		    ad-hoc mode, it also contains the set of interfaces that are
		    bidirectionally reachable from the given local interface, i.e. every
		    remote interface of a remote node meeting all of the following
		    requirements:"

		Several issues here:
		
			0)	"refers to a link layer broadcast domain" -- sounds like a
				"full broadcast link" or "something that looks like an Ethernet"
			1)	"some of its applications" -- what are those?
			2)	"usually refers to a ..." -- so, that means that there are 
				situations where you use it to refer to something else, then? 
				Please don't do that....
			3)	"is computed seperately for each local interface" -- wait, in
				0) it was defined in terms of physical properties, now it is 
				something which is computed?
			4)	"which neighboring nodes participate in the election of a
				DHCP(v6) server" -- is that a hidden requirement that slid in,
				that DHCP(v6) servers are part of the architecture? SLAAC is
				out, then? Is that a conscious architectural decision?
				
				Now, I actually read in section 5, bullet number 2 that "if
				an interface can receive a delegated prefix by running a
				DHCPv6 client on the interface, it must be considered
				external". So, at least, if a "common link" connects "internal
				interfaces" then if DHCPv6 servers are active on a common
				link, then this imposes constraints on what these DHCPv6 
				servers are allowed to serve ... This *really* merits being
				called out, the relationship DNCP-DHCP is murky, at best.
				
			5)	"if the local interface is not in ad-hoc mode" -- haaaaang on,
				if we are talking about an 802.11/WiFi interface, "ad hoc mode” 
				does not result in links that look like in 0) ....not at all, actually.	
				
			6)	"if the local interface is not in ad-hoc mode" -- I am not sure
				that this is actually "the right term" nor that it is
				universally understood. At least, I have personally had a heck
				of a time conveying what that meant when charaterizing a link — 
				especually within the IETF"
				
			7)	Reading forward in the document, there's something more on that
				in section 5 on page 6 where the document talks about an "ad hoc
				category", and where it actually says something about 
				"transitivity properties" -- specifically that it is not 
				assumed, then a reference to section 4 is given as-if there was
				any further discussion on this point.

			8)	"set of interfaces that are bidirectionally reachable from the
				given  local interface" -- I take it that this means that the below 
				specifies a part of a protocol (HELLO protocol), which only run 
				over "ad hoc interface types"?

		If "yes" to 8), then I would recommend that you define the interface
		types, and their behaviors, completely -- both what characteristics you
		expect from the interface (and "ad hoc mode" is not sufficient...), and
		what behaviors you exhibit across them. You have, in this text, half-way
		defined "broadcast link type" and half-way defined a "non-transitive
		non-reflexive link type"
		
		Also, I really do not understand the choice of "Common Link" as section
		header, and as a term. How is that definition different from "an IP
		link"? Are the protocol mechanisms that you provide for what you call
		"ad hoc mode" providing something which looks like an IP limk to "the
		rest of the protocol", etc.
		
		I am afraid that I do not understand what a common link is. Are you 
		trying to define a link model?
		
	o	3. DNCP Profile
		The document reads:
		
			"A node implementing HNCP
	         SHOULD generate and use a random node identifier.  If using a
	         random node identifier and there is a node identifier collision,
	         the node MUST immediately generate and use a new random node
		     identifier which is not used by any other node."
		     
		Awesome, but that raises two questions:
			1)	How does a node detect identifier collision? 
			2)	How does a node generate an identifier which is not used by any 
				other node?
		
		It would seem that if 2) is actually possible, then a colission should
		never ever happen.
		Also, if 1) and 2) are done "by this protocol", put in a forward
		reference to where the corresponding mechanisms exist. Or if done by
		DNCP or something else, stick in a reference.
		
		As it is, it reads a little like:
			"...and then some magic happens, and then poppies and pink unicorns"

		;)
		
		The document reads:
		
			"o  HNCP nodes use the following Trickle parameters:

      			-	k SHOULD be 1, as the timer reset when data is updated and
    	        	further retransmissions should handle packet loss."
    	        
		I am wondering what the justification for "k=1" is here? Actually, I can
		infer what it is: the topology in a homenet is constituted by
		full-broadcast Ethernet links, with the assumption that "if one station
		receives a transmission, all stations on the link received the
		transmission" -- if so, then this is actually part of the applicability 
		statement for HNCP: "MUST only be used on Ethernet-like links and MUST
		NOT be used on non-transitive, non-reflexive, or on lossy, links".
		
		If this interpretation is correct, then you probably should explain
		yourself --  for once, I am mostly in agreement with the use of a
		SHOULD.
		
		One question, however: for a router with multiple interface, do you run
		the Trickle algorithm per interface? Would probably merit clarification.
		If it is already said in DNCP (I do not recall if it is, and couldn't
		immediately find it), perhaps a reminder and a pointer would be good?
		
	o	Section 4 & 5
		The document seems to define a set of interface types and link types,
		but without any clear relationship between them -- and, worse, without
		any discussion of what characterize each, what behaviors are exhibited
		over each, and what impacts on the system/network behavior and
		performance each has. Further, the definitions of the different
		interface/link types are incomplete, and seem tied to (without naming 
		explicitly) specific L2's...hinted at, but not actually referenced.
	
	o	Section 5
	
		The document reads:
		   "HNCP router's interfaces are either internal, external or of a
 		    different category derived from the internal one."
 		    
		So, this text tells me that there are n different categories of
		interface, where n>=2 -- but does not tell me what defines those
		different interface categories, or what the actual value for n is. Nor
		does this tell me if I should expect different behaviors across these
		interfaces, or not.
		
		Could the document be more specific?
		
		The text goes on:
			"It is suitable for both IPv4 and IPv6 (single or dual-stack) and 
			 determines whether an HNCP interface is internal, external, or 
			 uses another fixed category."
			 
		So what's "another fixed category"? Is that different from "a different
		category  derived from the internal one" discussed earlier? Again, what
		behaviors to expect, exhibit, across these?
		
		With that being said, I would really recommend that the document defines
		what a border is, in this context. How do I identify it, what
		characterizes a boarder (which perhaps falls off from "what
		characterizes an internal and external interface).
		
		I assume that "internal interface" means "internal to the Internet"
		whereas "external" means "external to the internet, i.e., part of the
		homenet" -- right? Of course, I am yanking your chain here, but you must
		define precisely what these mean. External and Internal are relative
		terms...
		
		On that, reading through the algorithm that you give, eseentially you
		define as "external" anything on which a DHCPv4 or DHCPv6-PD server
		answers, correct? Other than having a hard time reconciling that with 
		issue 4 under "common links" in Major Issues, that does seem to assume
		an architectural choice which imposes constraints ("thou shalt not run
		a DHCP server inside a homenet whilst running HNCP") which, at least,
		needs to be called out in the applicability statement for HNCP, and
		probably even merits more global discussion and decision by the WG? 
		
		But wait, then below the algorithm I read this:
			
			"In order to avoid conflicts between border discovery and HNCP
			routers running DHCPv4...."
		
		...and then, requirements that such routers must include a User-Class
		string. That actually means that the specified algorithm is incorrect
		-- underspecified: the algorithm must capture the "...unless an
		User-Class string of .... is included", where appropriate.		

		Sure, with efforts of the "...I thought this over, and I am sure that
		the authors must have meant XXXX", it's probably possible to implement
		but I'd much prefer to have the document tell me what to implement,
		rather than have it tell me to guess.
		
		The last paragraph in section 5 is hugely important: that is where the
		normative behavior for each interface category is detailed - but, I
		think, only part of the normative behavior is actually specified
		therein. This is relative to what I mentioned earlier, that for an
		interface/link type/category, it would be helpful to have specified
		precisely (i) how to determine if a given interface/link falls within
		it,  (ii) what precise behaviors to expect over than interface/link.

	o	Section 6
		Related to my last comment above to section 5, section 6 brings out
		"border routers" -- which is not actually defined in the document. 
		Some specific behavior is specified for a "border router" and that
		brings me to expecting to see:
		
			o	A precise definition of when a router is, or is not, a 
				border router (given a router, how do I determine if I
				should configure it to exhibit that "specific behavior"
				
			o	A precise and complete definition of which behaviors a
				"border router", once identified, should expect and exhibit.
		
		The current text does not do that. Again, I could perhaps try to guess,
		but for a document aiming for std.track, I really should not have to.

	o	Section 6.1
			"Each HNCP router MAY obtain external connection information from
			 one or more sources, e.g., DHCPv6-PD [RFC3633], NETCONF [RFC6241]
			 or static configuration.  This section specifies how such
			 information is encoded and advertised."

		What is "connection information"? Do you mean "prefixes, addresses, 
		routing information, DNS resolvers" and such?  Or does it mean "bitrate,
		error rate, propagation delay"? Or something else? Again, I could
		probably guess, and might even get it right, but in a std.track document
		I really shouldn't have to.

			"o  MAY contain at most one DHCPv6 Data TLV and at most one DHCPv4	
		        Data TLV encoding options associated with the External
		        Connection but MUST NOT contain more than one of each otherwise
		        the External Connection TLV MUST be ignored.

		     o  MAY contain other TLVs for future use.  Such additional TLVs
		     	MUST be ignored."

		Several comments to that specifically, and to the TLV description in
		general (please apply also to the other signals/TLVs as 
		appropriate, the comments to this TLV description / bullet apply through
		section 6):
		
			0)	You define a TLV "EXTERNAL-CONNECTION", within which you have
				other TLVs, correct? Would it not be clearer if those "other
				TLVs" be called "sub-TLVs" and that term used systematically,
				so as to distinguish them from the top-level DNCP TLVs.
				
				I note that you then set up "sub-sub TLVs" such as "Prefix
				Domain". So that means that we'll see:
				
					o	An EXTERNAL-CONNECTION TLV, containing
						o	A DELEGATED-PREFIX TLV, containing
							o	A PREFIX-DOMAIN TLV
							
				Correct?

				The first question that springs to mind is one of IANA
				registries. Are you setting up, for each TLV type, a new
				registry for sub-TLV-types? Or, are all TLV types out of one
				global space?
				
				More importantly, if out of a global TLV type space, what
				happens if, say, a "PREFIX-DOMAIN" TLV is received outside of 
				a "DELEGATED-PREFIX" TLV? Is that valid? Should it be? What
				behavior should I, as an implementer, exhibit if I receive
				that?
				
				This, really, is a question about what the context for
				processing each (sub)TLV os, or should be, which is not
				specified in the document. It is also related to issue 2) below.

			1)	I would suggest a phrasing such as:
				"MAY contain at most one ... and at most one DHCPv4 ... with
				 the external connection."
				  
			2)	The second part of the first bullet:
					"MUST not contain more than one ... MUST be ignored"
				
				That should, IMO, be a generic comment for all (sub)-TLVs, and 
				brought forward to section 6.0 or 6.1, for example some
				wordsmithing on:
				
					"Any received TLV, which does not satisfy the requirements
					 specified in the below, MUST be silently discarded, and
					 MUST be ignored for processing.
					 
				More to the point, these TLVs (and (sub-)TLVs) are speicified as 
				being in a specific order, or at least in a specific hierarchy
				(TLV within another TLV) on transmission. What are the
				constraints on their processing? At what point shall I discard
				information based on it being received "out of place" (such as
				a "DELEGATED-PREFIX" TLV not contained in an 
				"EXTERNAL-CONNECTIVITY" TLV)?
				
			3)	This leads to a general question: are all the constraints on
				the sub-TLVs contained in this TLV completely specified?
				
				I would actually like to see a check-list of "constraints" that
				I could implement checks for, both when generating and
				processing protocol messages.

			4)	Generally, to the fields in the TLVs, I do not see the encoding,
				(unsigned/signed, endianness, ...) stipulated. Rather important
				for interoperability, this MUST be clarified.
						
			5)	I am generally not a great fan of having some constraints in the
				picture (such as the length >= 9) and some in the text (such as
				"MUST NOT have more than n occurences of FOOBAR"). 
			
			6)	"May contain other TLVs or future use" -- sure, but then you go
				on to say "these MUST be ignored". Strictly speaking, that means
				that you can't "future use" them either. How about:
					
					"May contain TLVs of other type, for future use. For the 
					 purporse of the processing specified in this document, 
					 such TLVs of unknown TLV type MUST be ignored".
					 
				Note the subtlty here: "unknown TLV types" -- what does that
				mean? We're actually back at the IANA/hierarchical/sub-TLV 
				discussion. Assuming that you have just one, flat IANA registry,
				such as you actually have. An EXTERNAL-CONNECTIVITY TLV sure is
				a "known TLV Type". If you get a DELEGATED-PREFIX TLV containing
				an EXTERNAL-CONNECTIVITY TLV, is that valid, or must that be
				ignored?
				
				So, with the current set-up of IANA registries, the "unknown TLV 
				types" is not the right phrase.
				
				My preference in this sort of situation is actually to set up
				hierarchical IANA registries:
				
					o	DNCP sets up the top-level TLV type registry.
					o	HNCP specifies (from within that regitry) the
						EXTERNAL-CONNECTIVITY TLV type, which:
							o	Sets up a new registry for sub-TLV types
							o	Allocates the DELEGATED-PREFIX from that new
								registry
					
					(and so on).
				
				What it does is to set up a context in which "unknown TLV type"
				(and such) means something -- and also solves the rest of the
				processing context comments above
				
				Alternatively, sure, you could put something like:

					"May contain TLVs of other type, for future use. For the 
					 purporse of the processing specified in this document, 
					 TLVs of types other than FOO, BAR, FOOBAR, and GNYF type
					 MUST be ignored".
				
				IMO this is less flexible and leads to more repetition.

	o	Section 6.1.2
	
		The document reads:
		
			"Valid Lifetime:   The time in seconds the delegated prefix is 
			 valid. The value is relative to the point in time the Node-Data TLV
			 was last published.  It MUST be updated whenever the node
			 republishes  its Node-Data TLV."
      
      	I just can't parse that. Well, I can, but what I get doesn't make
      	sense to me:
      	
	      	"relative to the point in time the Node-Data TLV was last published" 
	      	
	    So,  I publish a NODE-DATA TLV. Must I now remember when I did that, say, 
	    at t0, and then next time I publish a NODE-DATA TLV include (t-t0) as Valid 
	    Lifetime? That does look like what the text says, but it also
	    doesn't sound like a "Vaid Lifetime". Given the name of the field, 
	    Lifetime, I would expect it to mean "Upon receiving this TLV, please
	    consider the information valid for this much time" -- but, that's not what the text says.	

		Same comment applies to Preferred Lifetime

		Also, from this section:
		
			"*  Zero or more Prefix Domain TLVs.  In absence of any such TLV
         		the prefix is assumed to be generated by an HNCP-router and for
		        internal use only."

		Could gain from being a little more specific: what is "internal use
		only" (internal to whom?) -- related to my previous comment about
		definition of External/Internal. Also "use" -- do you mean that "this
		prefix MUST NOT be leaked externally, i.e., addresses from within this 
		prefix MUST NOT be used as a source address for traffic outside the
		homenet? If so, does this mean that you allow a homenet router to grab
		any odd global prefix and treat as private? Or, is this a matter of
		simply reflecting the already existing "don't route 192.168/16" (and 
		equiv.) rules?
		
		Either way, that needs to be clarified.
		
	o	6.2.1
		
			"All HNCP nodes running the prefix assignment algorithm MUST use the	
	 	    following parameters:"
	 	    
		First, I think that an element of clarification would be good. These
		parameters, where are they from? Do they come from
		[I-D.ietf-homenet-prefix-assignment], are they in that specification
		given as "optional" (so that one might get the idea to not use them),
		or?
		
		Second, is it the parameters - or their values - that must be used?
		
		This goes a little bit deeper; I think that what you are doing here is,
		in part, to specify "which values to assign to the different parameters
		from [I-D.ietf-homenet-prefix-assignment]" -- although that document 
		is not particularly clear on which parameters form the interface to HNCP
		and to other protocols.
		
		But, the question is, what does it mean to "MUST use the following 
		parameters" here? I can see that using these terms/definitions in
		the description of HNCP makes sense, but that does not a "MUST use 
		the following parameters" make. 

		So, I simply do not understand what you intend with 6.2.1.			

	o	Section 6.2.2, 6.3, etc....
	
		This links in with previous comments regarding the hierarchy and
		location of protocol elements. The TLVs defined herin, are they
		"top level TLVs" or are they sub-TLVs, to be carried within another TLV?
		And, what's the context of their processing.
		
		This point is particularly obscure since the protocol does not act
		symmetric nor consistent here: 
		
			o	it defines an "EXTERNAL-CONNECTION" TLV (which really
				is what other protocols would call a "messagge") which
				carries  sub-TLVs that have to do with describing "EXTERNAL
				CONNECTIONS".
		
			o	But, for Prefix Assignments, it does, as far as I can tell,
				not define a "PREFIX-ASSIGNMENT" message (apologies, TLV)
				which contains the related sub-TLVs
				
		I would like to see this through through -- ideally, re-engineered to
		be homogenous and consistent, but (at the very strict minimum) called
		out and explained clearly.
	
	o	6.2.3.  Making New Assignments

		   "Whenever the Prefix Assignment Algorithm subroutine is run on a
   			Common Link and whenever a new prefix may be assigned (case 1 of the
		    subroutine), the decision of whether the assignment of a new prefix
		    is desired MUST follow these rules:		"
		    
		Hold on there for a second:
		
			1)	What is "the Prefix Assignment Algorithm subroutine"? Throw a
				citation into [I-D.ietf-homenet-prefix-assignment] here, so 
				the random reader knows what you're talking about -- and, a 
				section reference, also.
			 
			2) 	This is exacerbated by the fact that the descripton pointing to
			 	"case 1 of the subroutine".
			 	I guess that that correspinds to "bullet number 1" on page 9
			 	in [I-D.ietf-homenet-prefix-assignment], but in a proposed 
			 	standard, guessing should not be needed.
			 	
			3)	<general rant> 
				That aside, subroutines are programming constructs, not
				specification elements. Just out of spite, I'll go implement
				HNCP using GOTO's instead of "subroutines"
				</general rant>
				
			4)	I notice that sometimes this is called the "Distributed Prefix
				Assignment Algorithm", at other times "prefix assignment algorithm”, 
				then "Prefix Assignment Algorithm subroutine", etc.
				
					o	Are they all the same?
					o	If yes, then why are they written, and capitalized,
						differently?
					o	If no, then what're the differences between them?

	 	Next, the document reads:
		
			"If the Delegated Prefix TLV contains a DHCPv4 or DHCPv6 Data TLV,
		         and the meaning of one of the DHCP options is not understood by
      			 the HNCP router, the creation of a new prefix is not desired.
	      		 This rule applies to TLVs inside Delegated Prefix TLVs but not to
      			 those inside External Connection TLVs."

		What does "is not desired" mean?
		
			"...a new prefix MUST NOT be created?"
			"...a new prefix SHOULD NOT be created?"
			"...a new prefix MAY be created, but is not necessary?"
			
		The document reads:
		
			"If the remaining preferred lifetime of the prefix is 0 and there
			     is another delegated prefix of the same IP version used for prefix
			     assignment with a non-null preferred lifetime, the creation of a
			     new prefix is not desired."
		     
		Suggest replacing "non-null" by "non-zero" -- but, beyond that, what
		does "is not desired" mean?
		
		Same comment for the next paragraph:
		
			"Otherwise, the creation of a new prefix is desired"

		Am I right in reading these three paragraphs as:
			
				1)	If <condition1> then new prefix MUST NOT be created
				2)	if <condition2> then new prefix MUST NOT be created
				3)	Otherwise, if <condition 3> then new prefix MUST be created

		That is how the text reads, which begs the question:
		
			Is it possible for <condition1>, <condition2>, and <condtion3>
			to all not be satisfied, and what happens in that case?
      
		I *think* that this is a case of underspecification, or at least where
		it looks like there's a case of underspecification.

	o	6.2.4:
			"MUST create an appropriate route ..."
			
		What's "an appropriate route"?
		Do you mean "install entry into the routing table", or do you mean to
		launch a routing process to discover, calculate, or otherwise obtain
		that route?
		Do you need the entire path, or just the "next hop towards ..."?
		
	o	6.2.6
			"When an HNCP router receives a request for prefix delegation ..."
			
		OK, how does a HNCP router receive such a request? Grepping through the
		document fpr "request" I see no protocol signals that correspond to
		this.
		
		Then, this:
			"The assigned prefixes MUST NOT be given to clients"
			
		made me wonder what a "client" is. I see DHCPv6/v4 client used,
		occasionally, and in other places I see just "client" -- is this
		intentionally, and, if so, what is a "client"?
		
	o	6.3
		
			"Nodes MAY, at any time, try to reserve a new address from any
		     applied Assigned Prefix"
		
		What is an "applied Assigned Prefix". Given capitalization, it is an
		"Assigned Prefix" that is applied somewhere, I suppose, but where and
		to what?

		The document reads:
		
			For any assigned prefix for which SLAAC cannot be used, the first
		    quarter of the addresses are reserved for routers HNCP based address
		    assignments, whereas the last three quarters are left to the DHCPv6
		    (resp.  DHCPv4) elected router (Section 10 specifies the DHCP server
		    election process).  For instance, if the prefix 192.0.2.0/24 is
		    assigned and applied to a Common Link, addresses included in
		    192.0.2.0/26 are reserved for HNCP nodes and the remaining addresses
		    are reserved for the elected DHCPv4 server.
		    
		Why "the first quarter"? It seems a rather arbitrary value? Is it known
		to be enough/too much/too little?
		
			"HNCP routers assign themselves addresses using the Node Address
			TLV"

		OK, but...do they send that TLV to themselves? Or do they send it to
		someone else, or ...?
		Part of the answer to this question is embedded in the text below the
		picture in section 6.3, but not all -- and, I believe, this is potentially another problem of more global scope.
		
		Generally, for each message (or TLV) it's good to know how it is formatted, but it's fantastic to know also how it's generated and
		how it is processed. I fali to find that (through and through) in this
		document, and that makes it harder to implement.
		
		Would it be possible to do something like this, (generally, for the TLV
		types defined?):
		
			Section X. FOOBAR TLVs
				<description>
				
			Section X.1 Generation
				A FOOBAR TLV is generated when a, b, c happens.
				
				When generating a FOOBAR TLV, its content is determined as
				follows....
		
			Section X.2 Processing
				On receiving a FOOBAR TLV, take the following steps ...
				
		That would also be the place (in X.1) to state where
		to put information (for example, when a TLV must be inside another TLV)
		or constraints on processing (X.2) for example if a TLV is invalid 
		unless if contained inside another TLV.
		
	o	9 Securing Third-Party Protocols
	
		I take issue with the below:
		
			"Pre-shared keys (PSKs) are often required to secure IGPs and other
			 protocols which lack support for asymmetric security."

		Pre-shared keys are chosen, in some scenarios and for whatever reasons,
		regardless of the capacity of the underlaying protocols -- even when
		the protocol(s) (IGP or otherwise) are fully capable of and completely
		supports assymetric security. Please address this by a less broad claim
		for when PSK are used.
		
		But, I wonder, reading this section as a whole: you generate, and 
		distribute through HNCP, a PSK? So all it takes to get access to said
		key is to sit by and passively listen to traffic for a bit? That does strike me as a dangerous option to have...reading the security
		considerations section, there seems to be nothing securing HNCP against
		eavesdropping -- or, if there is, that's not called out.
		
		I note that the security considerations of DNCP start out by saying:
		
			"If specified in the DNCP profile, either DTLS [RFC6347] or TLS
	  	    [RFC5246] may be used to authenticate and encrypt either some (if
		    specified optional in the profile), or all unicast traffic"		
		
		And, section 3 of HNCP states:
		
		   o  HNCP unicast traffic SHOULD be secured using DTLS [RFC6347] as
		      described in DNCP if exchanged over unsecured links.  UDP on port
		      HNCP-DTLS-PORT is used for this purpose.  A node implementing HNCP
		      security MUST support the DNCP Pre-Shared Key method, SHOULD
		      support the DNCP Certificate Based Trust Consensus and MAY support
		      the PKI-based trust method.
		      
		Note the "SHOULD" and the conditonals "unsecured links" (not sure
		what this would be, precisely). I do not know anything meaningful about
		DTLS, but I would imagine that sking the SEC-DIR folks about its use
		would make sense.
		
		All that said...sadly, in many conditions and scenarios "getting 
		security to work is hard" and in a home scenario the choice (to minimize
		the amount of support calls, ...) it would not be hard to imagine either 
		turning OFF or using lowest-common-denominator security.
		
		Say "nothing" over an Ethernet "because physical access required", and
		WEP for WiFi (yes, people still do that) and then declare links "not
		unsecured" and therfore consider it legitimate to not implement the SHOULD.
		
		Effectively, what I fear here is that if HNCP "proposes to share PSKs"
		then a (slightly naive) process might actually trust those PSKs to be
		useful for security -- which, in fact, they are not since they can be
		exposed by simple eavesdropping?

		I'd really like a bullet-proof guarantee that any shared PSKs can't have
		been (easily) eavesdropped on -- or, would ratehr that HNCP does not 
		tempt the use of compromized PSKs.
		
	o Section 10
		What's the solution if the message format changes? For example, that the
		type field needs to grow/shrink? 
		
		I've mentioned this in my DNCP review, but I strongly believe that it is
		required to have versioning also capture "the frame format", and not
		just the "payload".

Minor Issues:

	o	General comments:
	
			o	I recommend using "non-zero" when referring to numerical values,
				and not "non-null"

	o	Abstract

   		Questions: is it clear what "naming" referres to? Is it "name resolution"?
   			Idem for "network borders", do you configure those, or discover those? 
   			
   		Routing-specific question here:
   			What does "seamless use of a routing protocol" mean? That any IP
   			routing protocol can be used unmodified? I *think* that that's not
   			the case, given that the use-case that is often trotted for homenet
   			includes a multi-homed home - and the introduction says as much so
   			the abstract probably should reflect that.

		How about somehting like this for the abstract:
		
			"This document describes the Home Networking Control Protocol
			(HNCP), an extensible configuration protocol and a set of requirements for home network devices. HNCP is described as a
			profile of and extension to the Distributed Node Consensus Protocol (DNCP).  HNCP enables automated configuration of addresses, name
			resolution, discovery of network borders, and the use of any
			src-dest-routing capable routing protocol.

	o	Introduction
			"HNCP synchronizes state across a small site in order to allow..."
			
		What precisely is a "small site"? Can we qualify that in terms of, say, 
		number of routers?
		
			"The protocol enables use of border discovery"
		
		I am not sure that I understand what this means -- in which way is 
		border discovery *enabled*? Or, do you mean "This protocol discovers
		borders"? Or something else?
		
			"naming and other services across multiple links."
		
		So, the first paragraph teaches me that HNCP is applicable somewhere not
		too big -- but, of course,  I do not know what exactly that is -- , and
		it does "some stuff, and other services" -- but, of course,  I do not
		know what those are, or how they are characterized. That's a little
		imprecise for an introduction.
		
		Suggest being extremely precise. Something like:
			HNCP "Synchronizes state" by way of [dncp], and specifies and uses
			state for providing the following network services:
				o	FOO
				o	BAR
				o	FOOBAR
		
			All specified in this document. Additionally, HNCP enables other
			services, characterized by ______, for example prefix assignment as
			defined by [I-D.ietf-homenet-prefix-assignment]
			
		Which brings me to a question. The abstract, and introduction, state
		that HNCP "enables automated configuration of addresses" -- how is that
		different from [I-D.ietf-homenet-prefix-assignment]? Or, is the answer
		"it isn't, that I-D is required to do that", in which case what does it
		mean that HNCP "enables" it? 
		
		[Of course, reading the document it becomes clear that HNCP does this 
		by way of a normative reference to [I-D.ietf-homenet-prefix-assignment],
		but the abstract and introduction really are unfortunately phrased]
		
		Reading just the introduction, I'd like to be able to know what HNCP
		would bring me, exactly? Implementing and turning on HNCP would do what
		to my network? 
		
	o	3. DNCP Profile
		
			"HNCP is defined as a profile of DNCP..."
		
		Is it not more correctly to say that"
		
			"HNCP is a profile for DNCP..."
		
		?
		
			"HNCP routers MUST assign a unique 32-bit endpoint identifier to
			 each interface for which HNCP is enabled."
		
		Any additional requirements to that identifier? Reading into DNCP, that
		is actually not entirely clear there. I *think* that the endpoint
		identifier MUST be unique to the local node, but that there's no
		requirement beyond that -- correct?
		Could that be called out both in this document, and perhaps in DNCP more
		clearly?
		
		Following the above:
		
			"The value zero is reserved for internal purposes."
		
		What internal purposes would that be? Reading through, hidden in the
		description of the frame format (6.2.2) I read:
		
			"The endpoint identifier of the local interface
		     that belongs to the Common Link the prefix is assigned to, or 0 if
		     the Common Link is a Private Link (e.g., when the prefix is
		     assigned for downstream prefix delegation)."
		     
		OK, so leaving that slightly odd phrasing (and the notion of "Common
		Link" and "Private Link" -- both of which we will come back to) for a
		later comment, can we not bring this up to section 3, thus:

			"HNCP routers MUST assign a 32-bit endpoint identifier, unique to
			 the local node, to each interface for which HNCP is enabled. The
			 value zero MUST NOT be used, except as endpoint identifier for an
			 interface towards a Private Common Link"
		
		?
		
		[but, I am no great fan of "Private Link" or "Common Link", see other comments]
		
		About this:
			"Received datagrams with an IPv6 source or destination address which 
			 is not link-local scoped"
			 
		How about:
			"Received datagrams where either or both of the IPv6 source or
			 destination address  is not link-local scoped"
			
		?
						
		As a general comment, this section contains an unordered set of bullets,
		where a grouping and some common discussion probably would make sense. 
		For example, a few concern security directly (e.g., 3 & 5) but are not 
		really DNCP parametrizations -- whereas others are (e.g., 6, 7, 8).
		The bullet-set reads somewhat like "the kitchen sink". 
		(Numbers indicate count from the first bullet in the block).
		
	o	5.  Border Discovery

		The document reads:
			"A router MUST allow setting a category of either auto-detected,
		     internal or external for each interface which is suitable for both
		     internal and external connections.  In addition the following
		     specializations of the internal category are defined to modify the
		     local router behavior:"
		     
		What defines if an interface is "suitable" for an external, or internal,
		or both, connections? What does "connections" mean in this context? What 
		requirements are there for an interface to be "suitable" respectively
		"unsuitable"?
		
		As part of the discussion of the different categories, some are declared
		as SHOULD, others as OPTIONAL. I do not see any which are MUST. I see
		that the two SHOULD should be MUST

 		Also:
 		
 			Hybrid category:  This declares an interface to be internal while
	        still running DHCPv4 and DHCPv6-PD clients on it.  It is assumed
      	    that the link is under control of a legacy, trustworthy non-HNCP
	        router, still within the same network.  Detection of this category
	        automatically in addition to manual configuration is out of scope
      		of this document.  Support for this category is OPTIONAL.

		What makes a router "legacy"? What makes it "trustworthy"?

	o	In section 6.1.2 I see:
	
			"Nested TLVs:  Other TLVs included in the Delegated Prefix TLV and
			 starting at the next 32-bit boundary following the end of the
			 encoded prefix:"
			 
			"Prefix:   Significant bits of the prefix padded with zeroes up to 
			the next byte boundary."

		Question: 
			Other than "because historically that's how we did things,
			because, at the time, that was a good idea", is there any good
			reason that you're insisting on byte/32-bit alignments here? It's
			been a good while since I've personally written code where 32 bit alignment was a major concern -- but, when generating a packet I
			sure could see it as a minor nuisance to do the alignment. 
			So, I actually see this as "a nuisance introduced in packet
			generation, for no real gain in parsing".
			
			(Note that this is in the MINOR category, though)

	o	6.2.3:
	
			"In any case, a router MUST support a mechanism suitable to
			 distribute addresses from the considered prefix if the link is
			 intended to be used by clients.  In this case a router assigning an
			 IPv4 prefix MUST support the L-capability and a router assigning an
			 IPv6 prefix MUST support serving router advertisements.  In
			 addition if an assigned IPv6 prefix is not suitable for Stateless
			 Address Autoconfiguration the router MUST also support the
			 H-capability as defined in Section 10.
			 
		To your credit, you put a forward pointer to Section 10. With that being said, would it not be more logical to discuss that (which appears as "the overall message format of HNCP") somewhere earlier?

Nits:

	o	Any reason why some TLV types are written in ALL-CAPS whereas others in 
		Hyphenated-Camel-Case?
		
	o	I saw a few "e.g." and "i.e.", which I believe the style guide
		prescribes should be "i.e.," and "e.g.,". Yeah, the RFC Editor will
		catch this ultimately, but if you re-spin the document then might as 
		well make their life just a bit easier ;)

---

From: Alia Atlas <[email-masked]>
Date: Tue, 21 Jul 2015 10:38:20 -0400

Thomas,

Thank you very much for the review!

I look forward to the results of the discussion with the authors.

Alia

On Tue, Jul 21, 2015 at 8:48 AM, Thomas Clausen <[email-masked]>
wrote:

> I have been selected as the Routing Directorate reviewer for this draft.
> The Routing Directorate seeks to review all routing or routing-related
> drafts as they pass through IETF last call and IESG review, and sometimes
> on special request. The purpose of the review is to provide assistance to
> the Routing ADs. For more information about the Routing Directorate, please
> see http://trac.tools.ietf.org/area/rtg/trac/wiki/RtgDir
> Although these comments are primarily for the use of the Routing ADs, it
> would be helpful if you could consider them along with any other IETF Last
> Call comments that you receive, and strive to resolve them through
> discussion or by updating the draft.
>
>                                                         o       A
> PREFIX-DOMAIN TLV
>                                 citation into
> [I-D.ietf-homenet-prefix-assignment] here, so
>                 picture in section 6.3, but not all -- and, I believe,
> this is potentially another problem of more global scope.
>
>                 Generally, for each message (or TLV) it's good to know how
> it is formatted, but it's fantastic to know also how it's generated and
>                 key is to sit by and passively listen to traffic for a
> bit? That does strike me as a dangerous option to have...reading the
> security
>                         (HNCP), an extensible configuration protocol and a
> set of requirements for home network devices. HNCP is described as a
>                         profile of and extension to the Distributed Node
> Consensus Protocol (DNCP).  HNCP enables automated configuration of
> addresses, name
>                         been a good while since I've personally written
> code where 32 bit alignment was a major concern -- but, when generating a
> packet I
>                 To your credit, you put a forward pointer to Section 10.
> With that being said, would it not be more logical to discuss that (which
> appears as "the overall message format of HNCP") somewhere earlier?
>
>
>
> Nits:
>