Subject: [tcpinc] Linux TCP-ENO implementation

From: Kyle Rose <[email-masked]>
Date: Mon, 27 Mar 2017 19:17:04 -0400

Courtesy of the IETF-98 Hackathon, I was able to focus enough to generate a
roughly-working TCP-ENO implementation for the Linux kernel:

https://github.com/squarooticus/tcpinc-linux/tree/tcpinc

Definitely not done in any sense, with plenty of to-dos and open questions
about implementation, but it does successfully negotiate ENO with itself
and with the reference implementation from tcpcrypt.org.

>From the commit log:

        - One of many things it does wrong that isn't noted in a comment is
        that the server doesn't set remote-enabled on the third leg of the
        3WHS, because that ACK appears to be processed in a different part
        of the code that I haven't found yet: instead, it sets it after the
        second ACK received from the client.

        - We probably want to avoid copying the ENO SYN suboptions out of
        the received SYN packet since we use that data only while the skb
        exists. We instead need a way to duck type the SYN subopts in the
        ENO negotiation and use a fixed-size buffer for one and a pointer
        for the other.

        - I think it makes sense to move into the tcpcrypt implementation
        next rather than try to refine this too much, because the
        modular implementation of TEPs may motivate changes to ENO with
        respect to the interface between the two.

If anyone would like to help out with further development, please let me
know. I am both happy to help others bootstrap development, and learn from
those who know a lot more about kernel development than I do. My next steps
are to figure out where to inject the INIT messages and to duct-tape on a
P-256 implementation, in an effort to get tcpcrypt successfully
interoperating with the reference implementation, rather than try to
beautify it at the moment. (This conflicts with my usual strategy of
pursuing engineering purity, but in this case what I really want is working
code.)

Thanks to the folks who helped organize the Hackathon, and thanks to Jake
and Lucas (of the BBC) for allowing me to squat at the AMT table.

Kyle