[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 ;)

_______________________________________________
homenet mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/homenet

Reply via email to