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-dncp-05.txt
Reviewer: Thomas Heide Clausen
Review Date: June 16, 2015
IETF LC End Date: <Reviewed during (just after - apologies) 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       Is there any good reason why the authors have no listed 
affiliation?
        
        o       It is somewhat contradictory that the abstract talks about 
                "...describes a protocol" and then later "...leaves some details
                 to be specified in profiles, which define actual implementable 
DNCP
                 based protocols"
                 
                 Does that not mean, then, that this document specifies an 
algorithm,
                 a framework, and not a protocol?

        o       On that, I see "DNCP protocol" several places. Expanded, that 
becomes
                "Dynamic Network Configuration Protocol Protocol" ...
                
        o       In general, and despite actually knowing some of the core 
algorithms
                somewhat before this review, I found the document really tough 
to
                read, with convoluted sentences, inconsistent 
requirements-language,
                and a lack of introductory "here's the 1000ft view of the 
protocol,
                what it does, how it works, and under which conditions it 
works".
                
        o       On that, I do not find the chosen structure of the document to 
be
                optimal for conveying an unambiguous protocol specification. 
For one,
                the same concepts are occasionally described slightly 
differently.
                For another, it is often hard to find the information needed to
                parse a specific mandated processing (for example). I provide an
                example of what I would suggest a better structure in the 
below. 
                        
                The goal is to provide first concepts and an overview, followed 
by a
                single, easy to identify place for "precise and unambiguous 
definitions
                of concepts", and then use those in the detailed expression of 
the
                protocol. Note that this is just an example, of course:
                                
                        Section "Terminology:"
                                The Network State Hash is a hash value which 
represents the
                                current state of the network, as known by a 
node.
                                
                        Section "Protocol Overview and Functioning"
                        
                                When receiving a FOO TLV, the DNCP node 
compares the received
                                Network State Hash with its own Network State 
Hash. This
                                represents the consistency check rom RFC6206. 
If same,
                                then...if not, then ....
                                
                        Section "Protocol Information Bases"
                                For the purpose of this specification, the 
Protocol
                                Information Bases are orgnaized as sets of 
tuples ... any
                                        implementation can chose whatever 
representation it wants.
                                
                                        The Network State Information Base in a 
DNCP node is a set
                                        of tuples:
                                                (x, y, z, w)
                                        
                                        where x is ..., y is ..., z is ..., and 
w is ...
                                        
                        Section "How to calculate the Network State Hash":
                                 
                                 The network State Hash is calculated using the 
information
                                 from the Network State Information Base, as 
follows:
                                 
                                                1. First, the tuples in that 
information base are sorted
                                                   in ascending order based on 
....
                                           
                                                2. Second, .... (concatenation)
                                        
                                                3. Third, the hash function 
from <profile> is used
                                        
                                                4. Fourth, the first n bits of 
the resulting hash value, 
                                                   are retained, witn n being 
from <profile>.

                        And then, in remaining sections simply reference the 
Network
                        State Hash, which is now ubiquitously defined in a 
single place.
                        
                        I am taking this example, since when reading section 
5.3 I found 
                        myself chasing through the document, finding multiple 
slightly
                        different definitions of "Network State Hash" --  but 
beyond this
                        example, it generally does apply to the document as a 
whole, and
                        certainly to all of the processing and generation 
considerations in
                        section 5.
        
        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.
                
Major Issues:
        
        o       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 if
                this is a framework, a protocol, a building block, an 
architecture, an
                algorithm -- and, if either of those, what it is actually 
accomplishing,
                and why one would chose to use DNCP. It does, however, 
transpire that
                "whatever it is", it has two "modes" and that it requires 
something
                (presumably a routing protocol) to provide each "node" with a 
topology
                map.
                
                Suggest that a proper introduction consisting of three parts 
would be
                beneficial: (i) what this document is, (ii) what doing DNCP 
actually
                gets you, and (iii) the operating conditions under which the
                DNCP is applicable.
                
                On the latter point, given that you state that DNCP requires 
profiles
                to provide "actual implementable DNCP based protocols", it 
appears
                important to understand what the limits for "what a profile can 
give 
                you" are.
                
                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       The document, in my understanding, defines an exchange format 
with
                limited ability to evolve, as simply "a steam of TLVs".

                As long as there's never a need to evolve the TLV format 
itself, and
                as long as you do not run out of TLV types, that's not going to 
be
                a problem. The doc sets aside a 16bit TLV type space, that's 
reasonable
                enough, but I worry if eventually a DNCPv2 will need to evolve 
the 
                format. One purely hypothetical example could be if a "sequence 
number"
                would be needed in each DNCP message to detect "link success 
rates", or
                something of that sort.  
                
                I do not have an actual example in mind -- and that's exactly 
the point:
                to be evolutive for the unknown future and (at the very least) 
be able
                to discriminate between "old" and "new".
                
                A discussion could be had if a "version number" in each TLV 
would do,
                or if a concept of "protocol message with a version number" is
                preferential. I do not believe, however, that "no version 
number" is
                viable.

        o       Noting that the "overhearing n reduncant transmissions" is a 
key 
                retransmission suppression mechanism in Trickle, and that this
                seems to assume broad/multicast, using unicast seems to 
contradict
                the statement of "consists of Trickle", at least in the way the
                algorithm is defined in RFC6206. Note: it's fine to use an 
algorithm
                outside of its initial scope, but it should be with the caveat 
of
                "which of the characteristics still hold, and which do not"

        o       DNCP claims to be trickle based, yet supports unicast. It also
                (apparently) is a request/reply protocol.  It doesn't have 
messages.
                This document needs a good, and pedagogical, "protocol overview 
and
                functioning" section somewhere: one needs to get through the 
end of
                Section 5 before having even a vague idea of how DNCP works.
                
        o       The use of normative language is not as tight as could be 
desired.
                For example, a number of SHOULDs seem to really ought to be 
"MAYs" since 
                not following the SHOULD won't break the algorithm. It would be 
good 
                to walk through the document and take a careful look at these to
                either MUST/MAY the SHOULDs, or to qualify the SHOULDs 
remaining.
                
        o       I am going to go out on a limb here, and say that "the protocol 
is
                underspecified". That's a deliberately provocative statement, 
but it
                was honestly how I felt upon having completed the review. 
                
                The document does not help the reader get an intuitive 
understanding
                of the protocol functioning, but jumps right into minute 
details --
                requiring the reader to "build up her or his own model of how 
DNCP
                works". On having read the document a few times, I think that I 
                understand it -- but there's nothing permitting me to verify my
                understanding, and thereby I'd not feel confident to be able to
                provide an interoperable and independent implementation. I've 
given
                some comments in the "Comments" section as to what I think 
would be
                viable ways to improve this point.

         o      Section 5.3, penultimate paragraph:
         
                        "If keep-alives specified in Section 6.1 are NOT sent 
by the peer
                     (either the DNCP profile does not specify the use of 
keep-alives or
                     the particular peer chooses not to send keep-alives), some 
other
                     means MUST be employed to ensure its presence.  When the 
peer is no
                     longer present, the Neighbor TLV and the local DNCP peer 
state MUST
                     be removed."
                     
                "...some other means MUST be employed to ensure its presence." 
--
                followed by more MUST verage when a peer disappears...I am not 
sure that
                that's conductive to interoperable implementations.
                
                Two implementatons may chose different "means" and then turn 
off keep-
                alives - and be non-interoperable.
                
                For interoperability, we need:
                
                                o       A mandatory to implement mechanism, 
that always is
                                        present, but can be complemented by 
another "means", or
                                        
                                o       A mandatory to implement mechanism, 
which by way of a
                                        specified negotiation mechanism can be 
turned off between
                                        two peers, to allow them to use another 
"means".
                                        
                If you argument is "...this will be specified in the profile", 
then
                you still should provide the two above in this document, with 
the note
                that "...and a profile may specify which from among these MUST 
be
                used in a given deployment"

        o       Section 8:
                Interesting; I am not a security expert, but I am very curious 
to
                see the SEC-DIR review of this document. That said, section 
8.3.1 
                contains normative verbage:
                
                        "A node MUST be trusted for participating in the DNCP 
network if and
                        only if..."
                        
                Which I think needs a qualifier of the "If the certificate based
                trust model is used, then a node must be trusted for ...."
        
                Same goes for the subsequent SHOULD - it really reads as-if this
                certificate based mechanism initially was intended as MTI, but 
then
                was backed away from subsequently without a complete cleanup of 
the
                text?
                
                I do actually question the value of having a laundry-list of 
trust 
                management methods, and for one of those (certs) a laundry-list
                of all sorts of trust relationship establishment methods, in 
this
                document; this in no small part as the lists are explicitly 
indicated
                as "non-exhaustive" and that none are listed as "mandatory to
                implement". Was any thought given to factoring this into a 
seperate
                document, and focusing in this document on one, 
mandatory-to-implement,
                security mechanism?
                
Minor Issues:

        Introduction:
                o       1st paragraph: "reachable nodes"; two things:
                
                                -       I always have a problem with the term 
"node"; it is often
                                        used as a shorthand for "routers and 
hosts, both". I was
                                        given to understand that homenet 
specifically did not want
                                        to consider host changes?
                                        
                                -       "Reachable" - does that mean something 
as in "radio range",
                                        does it mean "on the same link", does 
it mean within a
                                        specific (DNCP?) domain, or does it 
mean simply "on the
                                        Internet somewhere"?
                                        
                o       2nd paragraph: "nodes that are currently accounted for":
                                -       What does that mean?
                                
                                -       Also, the conclusion "Therefore unlike 
Time-To-Live (TTL)       
                                        based solutions, it does not require 
periodic re-publishing
                                        of the data by the nodes" does actually 
not follow from
                                        the previous sentence in that paragraph.

                                -       I actually do not think that the 
introduction describes
                                        what DNCP does, and so the comparison 
to TTL-based 
                                        solutions is rather hard to get here.
                                        
                                -       Continuing:
                                
                                                "On the other hand, it does 
require the topology
                                                to be visible to every node 
that wants to be able to
                                                identify unreachable nodes and 
therefore remove old,
                                                stale data."
                                                
                                        This reads a lot more like an 
applicability statement than
                                        an introduction; the take-away when 
reading this is:
                                        
                                                "Each node must have something 
that maintains
                                                 a topology map of the entire 
network, such as 
                                                 a (LS) routing protocol, for 
DNCP to function"
                                                 
                                        Is that actually the intent here?
                                        
                                -       "DNCP is most suitable for data that 
changes only gradually"
                                        How is the reader to interpret 
"gradually"? Do you mean
                                        "infrequently", or do you really mean 
"gradualy"?
                                        
                o Last paragraph:
                                "DNCP has relatively few requirements for the 
underlying
                                 transport; it requires some way of 
transmitting either unicast
                                 datagram or stream data to a peer"
                        
                        This is a bit of a forward comment, but we now have 
"nodes
                        that are accounted for" and "peers". I see neither 
defined in
                        the terminology section.
                                
                                "and, if used in multicast mode, a way of
                                 sending multicast datagrams."
                        
                        This is the first mention of two "modes" of this 
protocol. This
                        loops back to an earlier comment, that the introduction 
actually
                        does not introduce the protocol, but rather is an 
incomplete
                        applicability statement.
                                
                                "If security is desired and one of the
                                 built-in security methods is to be used, 
support for some
                                TLS-derived transport scheme - such as TLS 
[RFC5246] on top of
                                TCP or DTLS [RFC6347] on top of UDP - is also 
required."
   
                        I am not pretending to be a security expert, but "some
                        TLS-derived...such as ... on top of TCP or DTLS..." (i) 
does not
                        sound like it could lead to interoperable 
implementations, and (ii)
                        does not sound sufficiently tight as a MTI security 
mechanism to
                        pass security reviews. Again, I am no security expert, 
but perhaps
                        getting one looped in early would be advicable?
                        
        Terminology:
                o       Suggest adding "In this document ..." somewhere to this 
text:

                                "For readability, any DNCP profile specific
                                 parameters with a profile-specific fixed value 
are
                                 prefixed with DNCP_."
                                 
                o       DNCP network: I read this twice, and came away with two 
different
                        understandings, perhaps you can clarify which it is:

                                o       A set of nodes running DNCP, within the 
same domain, and
                                        for which a path betwen any two DNCP 
nodes includes only
                                        other DNCP nodes; i.e., a DNCP network 
forms a connected
                                        component with only other DNCP nodes.
                                        
                                o       A set of nodes running DNCP. They may 
be anywhere on the
                                        Internet, they are part of the same 
DNCP network as long
                                        as they (through other means) have 
learned of each others
                                        addresses.
                                        
                        In the former, that'd be (for example) a deployment 
within my
                        home -- in the latter, it could be a node in my home 
and a node in
                        your home forming a DNCP network. 
                        
                        The text is not quite clear on this point.
        
                o       Link: a point of clarification here. In "DNCP network", 
there was
                        talk about "unidirectional links" and "bidirectional 
links"; in
                        "Link" the definition is somewhat vague "directly 
connected" and 
                        "can communicate". Could something like "without 
decrementing TTL/
                        hop-count" be added, and could a statement on 
bidirectionality 
                        (IOW, that this is just an IP link) be added?
                        
                        
                o       "Interface" is overloading the term "port" (IP port) 
which can be
                        confusing
                        
                o       "Endpoint" - The definition "locally configured use of 
DNCP" is not
                        clear -- are you really not talking about a DNCP 
process? 
                        
                        I am not sure that it is clear how a DNCP process can 
be "attached
                        to  ... a specific remote unicast address, or to a 
range of unicast
                        addresses that are allowed to contact"

                        I can see how a DNCP process can be configured to allow 
connections 
                        from a specific range of addresses, or can be 
configured to connect
                        to a specific remote unicast address. Is that what you 
mean instead?
                        
                        
                o       "Peer" - states that two peers "communicate directly". 
For link,
                        the definition is "directly connected nodes can 
communicate".
                        Would it then not be easier to say "a DNCP node on the 
same link 
                        as ..." ?
                
                o       "Node state"
                                "The hash function and the number of bits used 
are defined 
                                 in the DNCP profile."
                                 
                        Suggest:
                                "The hash function and the length of the hash 
value are defined 
                                 in the DNCP profile."
                        
                        
                o       "Network state hash" - same comment as for node state 
(above)
                
        Data model:
                o       "Latest update sequence number"
                        This may just be my personal taste, but does it hurt to 
mandate
                        a specific way of doing the looping comparison? The 
reason I 
                        suggest this is, that it's one of those things where 
creativity
                        in an implementation seems to simply be an invitation 
for bugs,
                        and for little gain
                        
                o       "Relative time delta"
                        Document talks about "a 32 bit number on the wire" -- 
does that
                        mean that wireless links are excluded?
                        
                o       Related to terminology, there seems to be some 
fuzzyness around
                        node and endpoint. For example, in data model one of 
the things that
                        a DNCP node may have is:

                                "Unicast address: the DNCP node it should 
connect with"
                        
                        Does that mean *any* DNCP process (i.e., *any* 
endpoint) at that
                        address, or a *specific* DNCP process at that address?
                        
                        The same, but inverse, for "Range of addresses: the 
DNCP nodes that
                        are allowed to connect" - is this "any DHCP process 
(i.e., *any*
                        endpoint) on any of these addresses?
                        
                        Following, the same section reads:

                                "For each remote (peer, endpoint) pair detected 
on a local
                                endpoint, a DNCP node has..."
                
                        the following text indicating that there's some sort of 
distinction
                        between which endpoint.
                        
                        This whole thing needs some clarification.              
        
                
        Operation
                
                o       First a generic comment that Trickle itself has some 
operating
                        conditions which scopes its applicability, and it would 
behove
                        this document to, in its own applicability statement, 
call out
                        those.
                        
                o       On the same token, while the use of Trickle in an 
unicast fashion
                        is possible, I wonder if (in general) unicast use is 
advicable. I
                        appreciate that some links are point-to-point and so a 
broadcast 
                        across it becomes an unicast -- but, does that 
necessitate being
                        called out?
                        
                        IF the reason for this "because we can use TCP", then 
be explicit
                        about this - but, also, that you're then not exactly 
using Trickle
                        where and how it was intended. I wonder if you could be 
explicit 
                        as to what consequences this "alternate use of Trickle" 
have? It
                        seems that the use of unicast is directly contradicting 
the main
                        operating consideration of Trickle?
                        
                o       2nd paragraph states: 
                
                                "the multicast transport does not have to be 
particularly
                                 secure"
                
                        What is the definition of "not have to be particularly 
secure"?
                        Is cleartext OK? Authentication? Encryption?
                        Should I do something more?
                        
        5.1 Trickle-driven status updates
                o       First paragraph:
                
                                "Multicast MUST be employed on a 
multicast-capable interface;
                                 otherwise, unicast can be used as well"
                         
                        If the interface is not multicast-capable, then unicast 
can be
                        used as well as what? Certainly not multicast, since 
the interface
                        is not multicast capable...?
                        
                o       Continuing:
                
                                "If possible, most recent,"
                        
                        What would make it "not possible"?
                                
                                "recently changed, or best of all, all known 
Node State TLVs"
                        
                        OK, so assuming that for some reason (MTU limitation) 
it is not
                        possible, does the above represent an order that I MUST 
respect,
                        or is it "take a pick from among these, according to 
your whim of
                        the day"?
 
                                "(Section 7.2.3) SHOULD be also included,"
                                
                        SHOULD is a strong statement, especially when prefixed 
by 
                        "if possible". That, essentially, renders it a MAY.
                        
                                "unless it is defined as undesirable for some 
reason 
                                 by the DNCP profile
                        
                        Now it DEFINITELY is a MAY since apparently a profile 
can state
                        that these TLVs MUST NOT be included -- and, I assume, 
since the
                        document permits it to do so, it is possible without 
breaking the
                        algorithm.
                        
                o       And, continuing again:
                
                                "If the
                                 DNCP profile supports dense broadcast link 
optimization
                                 (Section 6.2), and if a node does not have the 
highest node
                                 identifier on a link, the endpoint may be in a 
unicast mode in
                                 which multicast traffic is only listened to.  
In that mode,
                                 multicast updates MUST NOT be sent."

                        Really hard to parse. Is that not equivalent to saying:
                        
                                "If a DNCP endpoint is not configured to be in 
multicast
                                  mode, then it MUST NOT send multicast updates"
                                  
                        ?
                        
                        If it is, then say that -- if it is not, then a rewrite 
is needed,
                        as that's what I manage to extract from the text.

        
        5.2.  Processing of Received TLVs
                o       First paragraph reads:
                
                                "The DNCP profile may specify criteria based on 
which particular 
                                 TLVs are ignored."
                        
                        Criteria for what? Do you perhaps mean:
                        
                                "The DNCP profile may specify which TLVs to 
process, and 
                                 which to ignore"?
                        
                        Auxiliary question, then, and related to my penultimate 
comment 
                        to 5.1, are there any constraints on that, any risks 
from ignoring
                        (or not) specific TLVs to the operation of the network?
                        
                o       I am also confused by the 3rd sentence in the first 
paragraph:
                
                                "Any ’reply’ mentioned in the steps below 
denotes sending of
                                 the specified TLV(s) via unicast to the 
originator of the TLV
                                 being processed."
                                 
                         This confusion is likely due to the lack of a 
"protocol overview 
                         and functioning" description [either as its own 
section, or as part
                         of the introduction].
                         
                         I know how trickle works. Trickle is a distributed 
consistency
                         algorithm. When an inconsistency is detected, then an 
action is
                         triggered that rectifies that inconsistency.  DNCP 
claims to be trickle based, but apparently also a sort of request/reply 
                         mechanism. Combined with trickle-over-unicast-links, I 
am not sure
                         what the protocol logic actually is. Reading through 
to the end of
                         Section 5, I think that I understand the idea, but I 
am not sure.
                         
                         And the old "when in doubt, look at the state 
machines" didn't help
                         either, there aren't any. 
                         
                         The point to this comment is, that the document 
immediately jumps
                         into the details -- but forgets to give the "10000ft 
view" of the
                         protocol functioning.
                         
                o       First paragraph states two SHOULD. Would those not be 
MUST? What
                        breaks if not respecting those criteria?
                        
                o       2nd paragraph, a "valid address", that definition is 
rather unclear.
                        I understand that that's something specified in "the 
profile", but
                        what is the relationship to the different addresses 
discussed in
                        the data model section?
                        
                        It is not clear what the parenthesis to this paragraph 
means, 
                        but that is probably again a case of the "use case" and 
"protocol
                        overview" not being documented - the document so far 
has nowhere 
                        described interaction with outside processes.
                
                o       First bullet, but generally through these, and other, 
bullets:
                
                        I had a really hard time deciphering this. First:
                        
                                "The receiver MUST reply
                         with a Network State TLV (Section 7.2.2) and a Node 
State TLV
                         (Section 7.2.3) for each node data used to calculate 
the
                         network state hash"
                    
                    Alright, off to find "network state hash".
                    
                    The terminology tells me that it is:
                    
                        "a hash value which represents the current state of
                                 the network.  The hash function and the number 
of
                 bits used are defined in the DNCP profile.
                 Whenever a node is added, removed or updates its
                 published node data this hash value changes as
                 well. It is calculated over each reachable nodes'
                 update number concatenated with the hash value of
                 its node data. For calculation these tuples are
                 sorted in ascending order of the respective node's
                 node identifier.

                    Searching further, I find Section 5.1, but that simply 
states:
                    
                        "The Trickle state for all endpoints is
                             considered inconsistent and reset if and only if 
the locally
                             calculated network state hash changes."

                        Next occurence is in these bullets, and then just 
before Section 6,
                        
                                "During
                             the grace period, the nodes that were not marked 
reachable 
                             in the most recent graph traversal MUST NOT be 
used for
                             calculation of the network state hash, be provided 
to any
                             applications that need to use the whole TLV graph, 
or be
                             provided to remote nodes."
                             
                        Alright, now I know what I can't use for calculating it.
                        
                        A few occurences later, in section 7.2.2, in what looks 
like a
                        section laying out the packet -- sorry, TLV -- format, 
I see for 
                        "Network State TLV":
                        
                                "This TLV contains the current locally 
calculated network state
                                hash. It is calculated over each reachable 
nodes' update number
                                concatenated with the hash value of its node 
data in ascending
                                order of the respective node identifiers"
                                
                        Phew. Now, it does seem a little at odds with the 
terminology. The
                        terminology states something about tuples that are 
ordered. While
                        those tuples are not defined (they should be), at least 
what is
                        described is clear and possibly can be implemented. 
What is in 7.2.2
                        is not ant cannot.
                        
                        This is an instance of a general issue that I have with 
this
                        document: that it doesn't take a step back, and 
properly define
                        things in a proper order, but dives into (and repeats) 
details.
                        
                        
                o       Also to section 5.2, for each of the cases that are 
described, could
                        a conceptual description of "what this corresponds to" 
be added? For
                        example:
                
                                Upon reciept of a Node State TLV:
                                        If the node identifier matches the 
local node identifier and
                                        the TLV has a higher update sequence 
number than its current
                        local value, or the same update sequence number and a 
                        different hash, the node SHOULD re-publish its own node 
data
                        with an update sequence number 1000 higher than the 
received
                        one.
                        
                        It's not clear why it is a "SHOULD re-publish" (not 
MUST, nor what
                        happens if SHOULD is not followed). And it is not clear 
why 1000 ...
                        
                        [I just pick this example, but it applies to all 
processing bullets]
                        
        o       In the same cases, it is a lot more readable (IMO) to do nested 
bullets:
        
                o       If FOO; and either of:          
                                - BAR
                                - GNYF
                                - BLAB
                        Then do all of the following:
                                - ...
                                - ...
                                - ...
                o       Otherwise, if not-FOO, ...
                
                That's a personal preference, though, so feel free to disregard 
this
                comment.
                        
         o      Section 5.3 and elsewhere, suggest replacing:
         
                        "If it comes via..."
                
                by:
                
                        "If received over ..."
                
                
        o       Last paragraph in 5.3:
                        Same comment as 3rd comment to 5.1 made above.
                
        o       Section 5.4, first sentence:
                        "DNCP validates the set of data within it ..."
                        
                Should that not be:
                        "A DNCP instance validates the data within its data 
sets ..."
                
                ?

                Also, "nodes that are currently accounted for; what's the 
definition
                of "accounted for"?
                
        o       Section 5.4, first paragraph
                The statement:
                
                        "therefore,
                         unlike Time-To-Live (TTL) based solutions, it does not 
require
                     periodic re-publishing of the data by the nodes.  On the 
other
                     hand, it does require the topology to be visible to every 
node that
                     wants to be able to identify unreachable nodes and 
therefore remove
                     old, stale data."
                     
                which also appeared in the introduction, is copied verbatimly. 
Once
                more, the statement is a claim which is not supported, and that 
which
                follows "therefore" is not a consequence of that which comes 
before
                "therefore".
        
        o       Section 5.4, first paragraph
        
                        "When a Neighbor TLV or a whole node is added or 
removed, the
                        neighbor graph SHOULD be traversed, starting from the 
local node.
                        The edges to be traversed are identified by looking for 
Neighbor
                        TLVs on both nodes, that have the other node’s 
identifier in the
                        neighbor node identifier, and local and neighbor 
endpoint
                        identifiers swapped. Each node reached should be marked 
currently
                        reachable."
                        
                First comment, why SHOULD and not MUST?
                
                Second comment, and now you made me go look...."neighbor" 
sounds like
                "someone on the same link as me" so  the "neighbor graph" is 
really just
                a set relating "this node" and "another node which is on the 
same link
                as this node".
        
                Yet, looking in the terminology, I see "Neighbor graph" defined 
as:
                                "the undirected graph of DNCP nodes produced by
                 retaining only bidirectional peer relationships
                 between nodes.
                
                Which doesn't sound as much like a "neighbor graph" as it does a
                "topology graph" for the whole network.
                
                So, is the terminology wrong, or is the definition wrong?
                
        o       Section 5.4, 3rd paragraph
                
                Is it actually important that the content of that graph be 
"purged"?
                That sounds like an implementation detail -- rather, it sounds 
like
                the elements of the graph should "not be used for calculations 
and
                MAY be removed". Or, is there a specific requirement that I am
                missing?
                
        o       Section 6.1, I do not understand the parenthesis in this 
sentence:
        
                        Trickle-driven status updates (Section 5.1) provide a 
mechanism for
                        handling of new peer detection (if applicable) on an 
endpoint
                
                Under what conditions is that applicable, and under which is it 
not?
        
        o       Section 6.2:
        
                        "An upper bound for the number of neighbors that are 
allowed for a
                         (particular type of) link that an endpoint runs on 
SHOULD be
                         provided by a DNCP profile, user configuration, or 
some hardcoded
                         default in the implementation."
                         
                A couple of things to that:
                        1)      Can you explain the parenthesis? What type of 
link?
                        2)      How does "an endpoint runs on" a link?
                        3)      Why SHOULD?
                        4)      Is this specification seriously suggesting 
"some hardcoded
                                default in the implementation" as a SHOULD?

                [I am tempted to upgrade this to a "Major issue" simply because 
of 4) ]                 
                
                
                Also to 6.2, this particular optimization, do you have any
                quantification of its actual benefit? What should I look for to
                determine if this "optimization" yields a benefit or not? What 
are
                you trying to optimize? Over what link types does this function?
                I am dubious that it "optimizes" much, if anything, across an 
Ethernet, for example ...
                
        o       Section 7
                As indicated previously, having to search through the frame 
format
                diagrams for "how to calculate the value" isn't ideal.
                
        o       Section 7.2.3, I worry when I see something like this:
        
                        "The whole network should have roughly the same idea 
about the time
                         since origination of any particular published state."
                        
                What is the definition of "roughly"?
                Is the "should" intentionally in non-caps?
                What're the consequences if not?
                [Note that trickle almost mechanically makes information 
propagate 
                with non-trivial jitter across a network, so how do you ensure 
this?]
                
        o       Section 7.2.4, CUSTOM-DATA TLV.
        
                Given the description:
                        "This TLV can be used to contain anything; the URI used 
should be
                         under control of the author of that specification."
                
                It seems that (i) the description is self-contradictory: it 
cannot 
                contain *anything* but can contain an URI?
                
                Secondly, how is this supposed to work, what does it mean [for 
DNCP]
                that "the URI is under control of the author"?
                
                Thirdly, what does "that specification" refer to?
                
                Fourthly, why lower-case should? Indeed, why is the "control" 
of the
                URI of any importance to DNCP?

        o       Section 9, the bullet:
        
                        "When receiving messages, what sort of messages are 
dropped, as
                        specified in Section 5.2"
                
                Seems at odds with Section 5.2, which discusses TLV processing.
                

Nits:
                
        Requirement Language:
                o       Please reflect Errata 499 for RFC2119 in the boilerplate
                
                o       The RFC2119 boilerplate could conveniently be in the 
terminology
                        section, given that it is terminology.
                        
_______________________________________________
homenet mailing list
homenet@ietf.org
https://www.ietf.org/mailman/listinfo/homenet

Reply via email to