Builds

A - ready to use - version of the MP-DCCP solution is available for testing under a virtual environment. The topology depicted below can be deployed by downloading the disk images mpdccp1c.qcow2 and mpdccp2s.qcow2 and using them to set up the corresponding virtual machines with KVM. The images are client and server hosts running Debian v9.3 and the Linux kernel 4.14.111 with the MP-DCCP module v0.3 available. The subsequent instructions provide a guide to install and set up the whole topology.

Prerequisites

Install KVM and libvirt (for management purposses)

sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils

If desired virt manager can be installed to set up the virtual machines using a gaphical interface, however, the instructions below provide a guide to set them up using libvirt command line

sudo apt install virt-manager

Host Network configuration

The virtual network devices virbr<x> and their corresponding networks have to be configured on the host machine. libvirt allows to do so, by using xml files for their definition. In this example the files net1.xml, net2.xml and net3.xml will be used

Create the xml files with the following content

net1.xml

<network>
  <name>net1</name>
  <bridge name='virbr1' stp='on' delay='0'/>
  <domain name='net1'/>
  <ip address='192.168.100.1' netmask='255.255.255.0'>
  <dhcp>
  <range start='192.168.100.10' end='192.168.100.10'/>
  <dhcp>
  </ip>
</network>

net2.xml

<network>
  <name>net2</name>
  <bridge name='virbr2' stp='on' delay='0'/>
  <domain name='net2'/>
  <ip address='192.168.101.1' netmask='255.255.255.0'>
  <dhcp>
  <range start='192.168.101.10' end='192.168.101.10'/>
  <dhcp>
  </ip>
</network>

net3.xml

<network>
  <name>net3</name>
  <bridge name='virbr3' stp='on' delay='0'/>
  <domain name='net3'/>
  <ip address='192.168.102.1' netmask='255.255.255.0'>
  <dhcp>
  <range start='192.168.102.10' end='192.168.102.10'/>
  <dhcp>
  </ip>
</network>

Define and start the networks

virsh net-define net1.xml
virsh net-autostart net1
virsh net-start net1

virsh net-define net2.xml
virsh net-autostart net2
virsh net-start net2

virsh net-define net3.xml
virsh net-autostart net3
virsh net-start net3

Enable packet forwarding and allow DCCP traffic

sysctl -w net.ipv4.ip_forward=1
iptables -I FORWARD 1 -p dccp -s 192.168.100.0/22 -d 192.168.100.0/22 -j ACCEPT

Create Client VM

mpdccp1c.qcow2

 virt-install \
 --name mpdccp-client \
 --memory 2048 \
 --vcpus 1 \
 --disk /path-to-image/mpdccp1c.qcow2,bus=sata \
 --import \
 --network network=net1,model=virtio \
 --network network=net2,model=virtio

Create Server VM

mpdccp2s.qcow2

 virt-install \
 --name mpdccp-server \
 --memory 2048 \
 --vcpus 1 \
 --disk /path-to-image/mpdccp2s.qcow2,bus=sata \
 --import \
 --network network=net3,model=virtio

Once the above commands are executed, the virtual machines will start automaticaly. Login is possible with user root or user1.

User Password
root mpdccp123
user1 mpdccp456

VM Network configuration

The VMs are equiped with scripts to automatically detect the network interfaces, setup their corresponding network configuration, and configure the source based routing (only needed for the client VM). If different IP addressing to the one set in the xml network configuration files has to be used, the routing configuration script has to be modified accordingly

Network intreface configuration (executed at boot):
/usr/local/bin/init-net-conf.sh

Sorce based routing:
/etc/network/if-up.d/int-up-route
/etc/network/if-down.d/remove_rules

Start the VMs

The VMs are started automatically after creation. To start them again after shutdown, the following commands can be used

virsh --connect qemu:///system start mpdccp-client
virsh --connect qemu:///system start mpdccp-server
virt-viewer --connect qemu:///system mpdccp-client
virt-viewer --connect qemu:///system mpdccp-server

Tools available in the VMs

The VMs include the modified version of iperf enabled to work with MP-DCCP, as well as the tunprox encapsulation tool. Scripts to set up the tunneling interaces using tunprox are located in the user1 home directory.

Tunprox server configuration:
/home/user1/mpdccp_server_conf.sh

Tunprox client configuration
/home/user1/mpdccp_client_conf.sh