\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[a4paper, tmargin=10mm]{geometry}

\usepackage[english]{isodate}

\usepackage{enumitem}
\usepackage{amssymb}
\usepackage{pifont}

%-- Checklist Definitions --%
\newlist{checklist}{itemize}{1}
\setlist[checklist]{label=$\square$}

\newcommand{\cmark}{\ding{51}}%
\newcommand{\done}{\rlap{$\square$}{\raisebox{2pt}{\large\hspace{1pt}\cmark}}%
\hspace{-2.5pt}}

%-- Begin --%

\title{
    \begin{Large}Part II Progress Report\end{Large}
    \vspace{8pt}
    \\ A Multi-Path Bidirectional Layer 3 Proxy
}
\author{
    \begin{tabular}{rl}
        \multicolumn{2}{c}{Jake Hillion \texttt{<jsh77@cam.ac.uk>}}
        \vspace{8pt}
        \\ Supervisor: &Mike Dodson \texttt{<md403@cam.ac.uk>}
        \\ Director of Studies: &Neil Lawrence \texttt{<ndl21@cam.ac.uk>}
        \vspace{4pt}
        \\ Overseer: &Andrew Moore \texttt{<awm22@cam.ac.uk>}
        \\ Overseer: &Andreas Vlachos \texttt{<av308@cam.ac.uk>}
    \end{tabular}
}
\date{\printdate{05.02.2021}}

\begin{document}
\maketitle

\vspace{9pt}

My project seeks to provide a method of proxying IP packets across multiple connections, using congestion control to solve the problem of balancing the transport. The goal is to provide a single connection to the Internet that combines the bandwidth and resilience of the individual connections, at the cost of latency.

To achieve this, I have implemented a piece of software that links a virtual TUN device between two nodes. The initial implementation takes advantage of the kernel's TCP implementation for congestion control, while a UDP congestion control system is being built as an alternative. Alongside this software, the relevant scripts for enabling proxying on Linux machines within a defined virtual testing environment are built. To enable effective development, a continuous integration suite that builds from unit tests to end-to-end verification of success criteria has been built, such that the success criteria can be verified for each update.

\begin{checklist}
    \item[\done] Demonstrate that a flow is maintained over two connections if one becomes unavailable. \\ \emph{Timetable: \printdate{07.02.2021}}
    \item[\done] All performance gains should act bidirectionally. \\ \emph{Timetable: \printdate{20.12.2020}}
    \item[\done] Allow the client to have the IP of the far side of the proxy. \\ \emph{Timetable: \printdate{20.12.2020}}
    \item        Provide security that is no worse than not using this solution at all. \\ \emph{Timetable: \printdate{29.11.2020}}
    \item[\done] Demonstrate more bandwidth over two proxied connections than a single unproxied connection. \\ \emph{Timetable: \printdate{07.02.2021}}
\end{checklist}

In terms of success criteria, progress has been good. Most of these success criteria were completed in Michaelmas, far ahead of schedule. Though the security success criteria is as yet incomplete, this is due to sustained work on providing an improved solution, and not meeting the success criteria. The composability of the software with other security solutions does provide the necessary security, at the cost of some efficiency.

I have made significant progress on the dissertation itself, as well as the project. The preparation chapter is approaching completion, an initial draft of the implementation chapter is well underway, and many of the figures required for evaluation are generated.

In summary, I am confident that the project is progressing well. For the implementation, the majority of the success criteria have been satisfied since early November, very much ahead of schedule, allowing for many extended criteria to be explored. For dissertation writing, I am 2 weeks ahead of schedule. I expect to be complete by the end of March, leaving time to support metric values for connections and potentially IPv6. I continue to enjoy the project, and in particular, the intricacies of interaction between low level userspace and system code.

\end{document}
