ng_ayiya - a SixXS IPv6 tunnel broker AYIYA Netgraph node

Project description

Implement a netgraph node that connects to a netgraph kernel socket node and a netgraph interface node and understands enough of the AYIYA protocol to pass packets back and forth. Use a control connection to user space to handle all other signalling. Adjust the sixxs-aiccu implementation and add the netgraph implementation as an option for the FreeBSD port.

The goal of this project is to create a Netgraph node that acts as a link between a socket (TCP, UDP, SCTP, ...) connection to an AYIYA server (for a start, the SixXS POPs) and a local network interface (for a start, one that can route IPv6 traffic). The operation of the node should be controlled via a Netgraph socket (the usual way of letting a kernel Netgraph node communicate with a userland program) by higher-level tunnel negotiation software like SixXS's AICCU. The scope of the project also includes the necessary changes to SixXS's AICCU software to use the Netgraph framework instead of tunneling the packets by itself, as it does in its standard mode of operation.

The initial design of the Netgraph node is as follows:

The hook names should either be the exact strings "ayiya", "control" and "secret" or strings that start with those tags followed by a slash ("/") and additional data that the node will ignore. This allows the administrator or the userland utility to keep more information for clarity, documentation and so on, without interfering with the operation of the node.

Approach to solving the problem

For the present the plan is to write a Netgraph node with the hooks listed above that communicates over these hooks.


Mid-term deliverable: the Netgraph node itself with support for the "ayiya", "inet6" and "control" hooks and the "secrethash" control message. This will allow it to be configured manually using e.g. the ngctl utility and already provide AYIYA tunnel service.

Final deliverable: the necessary modifications to the SixXS AICCU tool to set up the necessary Netgraph structure (also including the interface, ksocket and socket nodes), initialize the AYIYA node properly (using the "secrethash" control message) and possibly provide other functionality, e.g. MOTD or queries. These modifications will be added to the FreeBSD port of the AICCU tool and also submitted to the upstream developers of AICCU with the hope of including them in an official release. Also, if it turns out that it may not be advisable to include the Netgraph node's code into the FreeBSD base system, a FreeBSD port will be created for it for use by the modified AICCU port.


Test Plan

It may turn out to be advisable to create a simple AYIYA simulator for some automated testing. After that either some TAP tests or some tests in the FreeBSD regression testing framework format could be included in the code. TBD: flesh this part out with my mentor.

The Code

TBD: A Subversion repo link.

SummerOfCode2015/AYIYASixXSNetgraphNode (last edited 2015-05-31T21:46:42+0000 by PeterPentchev)