From Nsnam
Revision as of 15:59, 30 April 2015 by Teto (Talk | contribs) (Week 5 - Deliverable for Step2 and Step 3)

Jump to: navigation, search

Main Page - Current Development - Developer FAQ - Tools - Related Projects - Project Ideas - Summer Projects

Installation - Troubleshooting - User FAQ - HOWTOs - Samples - Models - Education - Contributed Code - Papers

Return to GSoC 2015 Accepted Projects page.

Project overview

  • Project: Implementation of MPTCP (Multipath TCP) + Implementation of per-node clocks
  • Student: Matthieu Coudron
  • Mentors: Tom Henderson
  • Code: In a repository not so far away... (to come)
  • About me: I am a PhD student working on multipath communications. I have a background in network and system security.

On the MPTCP subject

Thanks to last year TCP option gsoc, it is possible to implement multipath TCP - an extension to TCP that is more and more popular (used in Apple voice recognition system "SIRI", embedded in yosemite, some Citrix products, soon to be embedded in Proximus products) - in a clean way. MPTCP is available in some (possibly out of branch) kernels - Linux, Mac OS, FreeBSD - and work even with adversary middleboxes (Contrary to SCTP), which was an important challenge. The 2nd challenge is still pending, ie, how to make the best usage of the path diversity ? How to be better than TCP without being more aggressive than TCP at bottlenecks ? I hope that being able to run MPTCP in a simulator could foster research on that peculiar subject since doing it with kernel code or creating a multihomed (3G/wired) setup can be complex (MPTCP kernel code is being refactored, and implementation is quite time consuming). There is no solution in the literature that answers this in a robust way.

On the per node clock

I would like to start implementing per node clock to be able to simulate time distribution protocols. Right now nodes are all perfectly synchronized ins ns3 (they share the simulator clocks). My goal is to be able to run NTPD in ns3-dce over ns3 nodes with drifting clocks. Time distribution experimentations are hard to do in practice (do you control 2 or more stratum 1 NTP servers ? and the traffic between these), I believe it makes sens and I know of no simulator that does it. This proposition is a follow up of my email to the dev ml:

Expected deliverables

Alongside, I also intend to send patches to improve some parts of the ns3 code. I plan to work during the first half on the MPTCP code and then on the per-node clock integration. The MPTCP code has the priority though since this is the most awaited feature I believe.


I intend to validate MPTCP against DCE. This may require some synergy with the TCP validation project.

Week 1 - Step 1

  • Modify tcp-option.h to support MPTCP
  • (de)Serialization of the numerous MPTCP options

Week 2 - Deliverable for Step 1; start of Step 2

  • Adapt TcpSocketBase to be more flexible (making all function virtual, overload some functions with TcpHeaders parameters instead of flags etc...)
  • Same for TcpXxBuffer

Week 3 - Step 2

  • Addition of test scripts, to trace buffers

Week 4 - Step 2

  • put DCE infrastructure into place

Week 5 - Deliverable for Step2 and Step 3

  • Implement linux MPTCP schedulers to be able to compare
  • Implement OLIA/LIA congestion controls

Week 6 - Step 3

  • MPTCP may still need some polishing at this point

Week 7 - Deliverable for Step 3; start of Step 4

  • Addition of a Clock m_clock member in each Node.
  • Addition of a perfect clock (default behavior won't change)
  • Addition of a drifting clock with initial offset

Week 8 - Step 4

  • making ntpd work in DCE

Week 9 - Step 4

  • making ntpd work in DCE (indeed: that looks complex)

Week 10 - Step 4 and Deliverables for Step 3 and 4

  • test the whole thing
  • Add some tests/documentation

Weekly progress

Final review