Re: [homenet] DNCP/HNCP Revisited

"Ray Hunter (v6ops)" <> Sun, 22 September 2019 10:49 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 17C8512008C for <>; Sun, 22 Sep 2019 03:49:20 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.598
X-Spam-Status: No, score=-2.598 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id r0cbFfATbdUt for <>; Sun, 22 Sep 2019 03:49:17 -0700 (PDT)
Received: from ( [IPv6:2001:470:1f15:62e::2]) by (Postfix) with ESMTP id 7D80012006F for <>; Sun, 22 Sep 2019 03:49:17 -0700 (PDT)
Received: from localhost (localhost []) by (Postfix) with ESMTP id CB454401DA; Sun, 22 Sep 2019 12:49:16 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id pKcWwJnhd2VI; Sun, 22 Sep 2019 12:49:13 +0200 (CEST)
Received: from MacBook-Pro-3.local ( []) (Authenticated sender: by (Postfix) with ESMTPA id B95E1401CD; Sun, 22 Sep 2019 12:49:13 +0200 (CEST)
To: Juliusz Chroboczek <>
References: <> <> <> <> <>
From: "Ray Hunter (v6ops)" <>
Message-ID: <>
Date: Sun, 22 Sep 2019 12:49:12 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 PostboxApp/6.1.18
MIME-Version: 1.0
In-Reply-To: <>
Content-Type: multipart/alternative; boundary="------------487B39B10CCE700AF9DE1ECD"
Content-Language: en-US
Archived-At: <>
Subject: Re: [homenet] DNCP/HNCP Revisited
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: IETF Homenet WG mailing list <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Sun, 22 Sep 2019 10:49:20 -0000

Juliusz Chroboczek wrote on 20/09/2019 14:23:
>>>> 1) DNCP allows an option of whether a network state TLV contains optional
>>>> nested payload (HNCP) TLV's or not.
>>> I'm pretty sure that's not the case.  RFC 7787 Section 7.2.2.
>> A OK so you're saying this is already covered in (Section 4.4 of) 7787
> [...]
>>        state hash.  The Node State TLVs SHOULD NOT contain the optional
>>        node data part to avoid redundant transmission of node data,
>>        unless explicitly specified in the DNCP profile.
>> So what I was suggesting was merely additional clarification of that.
> Careful here.  There is no optional part in the *network*-state TLV - this
> TLV's payload is just the network state hash.  The optional payload is for
> the *node*-state TLVs.
I see now.

The network state TLV's and node state TLV's are completely separate 
TLV's (not nested in any way) that can be both generated as the result 
of one inbound request (request network state TLV), and they may be sent 
in separate UDP packets.
>>> The replying node MUST reply to all node state queries.  However, it is up
>>> to the replying node whether these replies are sent in a single packet or
>>> split into multiple packets.
>> So requesting multiple node status TLV's in one packet could lead to an
>> oversized UDP reply packet.
> Yes, this was discussed back in July 2015.  Here's what I said back then:
>      It should also say that a node MUST NOT send a datagram with a larger
>      payload, and that it MUST silently drop any larger datagrams (optionally
>      log to system management, etc.).  If this is not done, persistent state
>      desynchronisation may occur.
> This is what Markus replied:
>      I am not sure I want to cripple use in non-crippled networks, just provide
>      guaranteed base value which works everywhere and *RED ALERT* light should
>      light up on crippledbox if it encounters this
> Since nobody supported my position at the time, I had to agree to the
> following:
>    - Section 3 of RFC 778 says that "Each node MUST be able to receive (and
>      potentially reassemble) UDP datagrams with a payload of at least
>      4000 bytes."
>    - there is no limit on the size of the packets that a node may send.
>> So if I understand you correctly, you're saying this is the problem of the
>> sender of the response to ensure UDP fragmentation doesn't break,
> I'm not sure what you mean.  We certainly assume that the network obeys
> RFCs 2460 and 4443.
>> and that multiple long UDP replies can be generated from a single query
>> packet (potential amplification).
> Let's please discuss security at some other time, I'd like the current
> discussion to come to a conclusion first.
>> If there's multiple UDP replies required for a single query, would you expect
>> sending of these individual packets to also be rate limited by trickle?
> Let's please discuss congestion control at some other time, I'd like the
> current discussion to come to a conclusion first.
>> What behavior would we expect from the requester during this time?
> The requester parses each top-level TLV in turn, and acts upon it.
This is very illuminating for me, and removes a false assumption on my part.
>> Wait for all outstanding replies to arrive?
> No.  The requester parses each top-level TLV and acts upon it as soon as
> it arrives.
>> Re-transmit a node TLV request for missing / dropped replies?
> How would the receiving node detect missing replies?
> If some node-state TLVs are missing, then the receiving node's state might
> not get updated correctly, which will cause the network hash to mismatch,
> which will be detected when it receives a new network-state TLV
> (trickle-driven, worst-case 17s).
> -- Juliusz
> _______________________________________________
> homenet mailing list

Thanks very much for your patience and replies to my questions that have 
certainly filled gaps in my understanding of the protocol that I had 
from reading the standards and the code alone.

AFAICS there's certainly enough room for me to experiment with patches to
i) reduce MTU to avoid problems arising from L2 MTU mismatches and
ii) to reduce the amount of fragments (at the expense of more UDP packets)
without any tweaking of the standards.

My reason for investigating ii) is to potentially reduce the impact of 
the loss of an individual frame on a lossy link (we would lose 1 node 
status TLV from 1 device rather than multiple TLV's related to multiple