Subject: [homenet] ANNOUNCE: shncpd -- the simple, stupid and slow HNCP daemon

From: Juliusz Chroboczek <[email-masked]>
Date: Sat, 04 Jul 2015 11:37:19 +0200

I'm not sure when I'll next have some time to spend on that, so at the
risk of making a fool of myself, I've made my preliminary code public:

  https://github.com/jech/shncpd

This is meant to be a very naive implementation of a mildly useful subset
of HNCP with minimal external dependencies.  Right now, it implements the
following (up to bugs):

  - the HNCP profile of DNCP, including silly walks and keepalives;

  - parsing of a significant subset of HNCP;

  - address allocation (not prefix allocation!).

The plan is to implement prefix allocation, router advertisements, prefix
delegation (manually configured), integration with Babel, perhaps
a minimal DHCPv4 server, and to stop there.  No integration with DHCPv6-PD,
no border discovery, and certainly no mDNS proxying.

I think the DNCP bits are mostly complete, but probably somewhat buggy --
for example we follow dncp-06 Section 6.1.2 and hncp-06 Section 10 (both
are likely to change in the next draft), and I'm not quite positive that
we perform silly walks at all the right places.

Quick HOWTO.  The only dependency is libbsd or libubox, compile with either 

    make

or

    make EXTRA_DEFINES='-DUSE_LIBUBOX' LDLIBS='-lubox -lrt'

(the latter is untested).  Then, on a network with at least one other HNCP
peer (either shncpd or hnetd), say

    ./shncpd -d2 eth0 eth1 wlan0

There should be a pause of a couple of seconds, then a flurry of activity,
then a bunch of "consistent" messages with exponential backoff up to
random([12, 25]) seconds.

In order to perform address assignment, you'll need an HNCP peer that
performs address delegation (shncpd cannot do that yet).  Say

    sudo ./shncpd -d2 -a eth0 eth1 wlan0

and you should see addresses appear on your interfaces within 5 seconds or
so.  Killing the daemon will cause the addresses to disappear.

-- Juliusz