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 avilable. 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'>
  </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'>
  </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'>
  </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 default

Create Server VM

mpdccp2s.qcow2

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

Once the above commands are executed, the virtual machines will start automaticaly. Login is possible with user root or user1. Shut them down and continue with the following network configurations

User Password
root mpdccp123
user1 mpdccp456

Client VM Network configuration

Remove the interface connected to the default network and create the interfaces conencted to net1 and net2

virsh edit mpdccp-client

Content to remove

<interface type='network'>
 <mac address='52:54:00:f8:d5:b1'/>
 <source network='default'/>
 <model type='rtl8139'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

Content to add

<interface type='network'>
 <source network='net2'/>
 <model type='rtl8139'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'//>
</interface>
<interface type='network'>
 <source network='net1'/>
 <model type='rtl8139'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>/>
</interface>

The Network interfaces configured in this example use pci slot 8 and 9, which correspond with the device names ens8 and ens9. Static IP addressing has been pre-configured at the virtual machine on /etc/network/interfaces file

Server VM Network configuration

On server side, remove the interface connected to the default network and create the interface connected to net3

virsh edit mpdccp-server

Content to add

<interface type='network'>
 <source network='net3'/>
 <model type='rtl8139'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</interface>

Start the VMs

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