MPTCP Userland implementation
- Download: version
0.1 (tar.gz)
- Requirements:
- 32 bit, Linux 2.6 kernel (important - does not compile on 64
bit)
- flex
- bison
- linux headers 2.6.17 (download here)
- Install: unzip, edit Rules.mk (see README in archive),
compile.
- Test: run send_tcp and recv_tcp programs in src/test
- Userland code: The code implements multipath on top
of a userland port of the Linux 2.3.29 stack by Kandula et. al
(description here).
The port simply takes the unmodified ip and tcp code from the kernel,
and wrapps it around
with pcapture to receive data, and raw sockets to send data.Despite the
kernel being dated, the userland version allows testing and development
much more quickly than in-kernel implementations.
- MPTCP Protocol: the code implements a subset of the
current multipath
TCP draft.
It uses options to advertise additional addresses, and includes a data
sequence number to allow the
receiver to reorder data at connection level. It does not implement the
full mapping as in the draft: it only
includes the starting connection level offset in each segment. This
means the connection will likely fail unpredicatbly if it goes through
middleboxes that resegment.
- Congestion Control:: the code implements the linked
increases algorithm for multipath tcp, as described in the congestion
control draft.
It allows the user to choose the congestion control algorithm by
changing defines in src/user-tcp/ipv4/fake-linux.h.
- Limitations: the code is single threaded, thus client must
use asynchronous socket calls.
It will not work with unmodified TCP apps; for examples of use please
look at the test programs
provided.
htsim simulator (for TCP and MPTCP)
- Download: version 0.2
(tar.gz)
- Requirements:
- Install: unzip, run make in sim directory (see README in
archive)
- Test: run htsim in sim directory. It will provide little
useful output
on the console. It stores the output in a binary format in the data
directory.
- Process results:install R first (http://cran.r-project.org/).
You will need to install various R
packages, including a custom package by Damon Wischik (djwutils_2.10.tar.gz).
In
R, set the working directory to analysis and load analysis.R
This will parse the data/logout.dat file. See README file, and the
docs/ directory in the archive for some
basic examples that plot various data. A brief introduction to R is
given here
- Fast simulator: htsim allows testing both high speed and
large numbers of tcp flows concurrently. It models the network as
a collection of pipes (that add delays) and queues (with fixed
processing capacity, and finite buffers), allowing
the creation of arbitrary network topologies. Each packet is allocated
only once (references are passed between network hops), and there is a
memory pool of allocated packets
to minimize malloc/free overhead. Finally, all flows' timeouts are
triggered at the same time: the code performs a periodic sweep of all
the connections and triggers RTO handlers as needed. This unnecesarily
synchronizes the RTOs of different flows, and will bias results if RTOs
are frequent. The console output prints an info for every RTO;
eyeballing their count is one way of ensuring the results are not
distorted by RTOs.
- MPTCP Implementation: the code only implements congestion
control coupling. It implements the linked increases algorithm for
multipath tcp, as described in the
congestion control draft, as well as Fully Coupled, and independent
tcps. It allows the user to choose the congestion control algorithm by
passing a parameter to htsim. It maintains the window in bytes (as
opposed to the Linux based implementations, which maintain
the window in packets).
- Limitations: the code does not implement reordering at
connection level, of any other parts of the multipath
protocol. The subflows are independent TCP connections, that are only
linked through congestion control.
Confidential Content-Based Publish/Subscribe
This project deals with confidentiality in
content-based forwarding. The idea is to allow an untrusted broker to
take forwarding decisions on encrypted notifications and subscriptions,
without learning anything more than necessary to perform this
computation. All the details are in our Securecomm
paper. An earlier implementation using Yao's garbled circuit
construction (insecure according to this stronger security model) is
described in this technical
report.
The source
code (tar gzipped) is also available under GPLv2 licence. Feel free to play around with it and let me
know if you have questions or bug reports. Although I do not intend to
do much work on this subject in the future, I will try to support
further uses of this software for research purposes.