<!-- Mail as an attachment to: monthly@freebsd.org -->
<project cat='proj'>
  <title>Multipath TCP for FreeBSD</title>

  <contact>
    <person>
      <name>
        <given>Nigel</given>
        <common>Williams</common>
      </name>
      <email>njwilliams@swin.edu.au</email>
    </person>
  </contact>

  <links>
    <url href="https://bitbucket.org/nw-swin/caia-mptcp-freebsd/">MPTCP for FreeBSD Repository</url>
    <url href="http://caia.swin.edu.au/urp/newtcp/mptcp/">MPTCP for FreeBSD Project Website</url>
  </links>

  <body>
    <p>
      Multipath TCP (MPTCP) is an extension to TCP that allows for the use of multiple network interfaces on a standard TCP session. The addition of new addresses and scheduling of data across these occurs transparently from the perspective of the TCP application.
               
      The goal of this project is to deliver an MPTCP kernel patch that interoperates with the reference MPTCP implementation, along with additional enhancements to aid network research.
      
      Tagged v0.51 release in repository, with some minor improvements over v0.5. 
      
      Have now removed much of the MPTCP code that was inside tcp_do_segment, tcp_output (and elsewhere). The goal of this is to avoid using MPTCP code for standard TCP connections. 
      
      Currently in the process of implementing a subflow socket buffer upcall and event processing. These will handle changes in subflow socket state, MP-signalling and incoming data-segments.
      
      This also requires some re-working MP option processing, particularly how incoming DSN maps are parsed and stored for use during MP-layer reassembly. 
      
      Also looking at how these changes might take advantage of the new TCP stack modularisation enhancements to create subflow-specific tcp functions.
    </p>
  </body>

  <sponsor>
    The Cisco University Research Program Fund at Community Foundation Silicon Valley
  </sponsor>
  <sponsor>
    FreeBSD Foundation
  </sponsor>

  <help>
    <task>
      complete implementation of subflow event processing, new option parsing.
    </task>
    <task>
      Update documentation, task lists.
    </task>
  </help>
</project>
