Skip to content

Tutorial 9: DMM app discovery ARCFIRE 2018

Eduard Grasa edited this page Jul 20, 2018 · 36 revisions

Introduction

The goal of this tutorial is to demonstrate how RINA can carry out Distributed Mobility Management and application discovery over a variety of DIFs. Figure 1 shows a view of the physical systems involved in the experiment. Six Raspberry Pis will play the role of WiFi Access Routers (ARs) of the provider network. The ARs are divided into two groups of three, each one connected to an Edge Router (ER). Both ERs are connected to a Core Router (CR), which connects the service provider network to the Internet via two ISP routers. Each ISP router is directly connected to a Server. One ER is connected to a Data Centre (DC) gateway, which provides access to a small service-provider owner DC with four servers. All these systems (except for the Raspberry Pis) will be deployed as KVM/QEMU Virtual Machines (VMs). A couple of User Equipment (UE) hosts will access services deployed on servers reachable via the Internet and/or the service provider edge data-centre. All systems have RINA capabilities via the IRATI open source RINA implementation.

Tutorial 9 scenario: physical systems

Layer diagrams are shown in the Figure below. The upper part of the Figure shows the layers (DIFs) involved in the case when the UE accesses an application via the Internet DIF. The Mobile Network DIF (in blue) features distributed mobility management, allowing the UE to move through the access network without impacting service continuity, while still providing shortest path routing.

Tutorial 9 scenario: physical systems

When the application requests a flow to a service, the RINA system will locate that service (through which DIF is it available), make the UE join the appropriate DIF and allocate the flow to the destination application. If the service is available locally at the service provider DC, RINA will also locate the service and in this case make the UE join an Enterprise VPN DIF (which involves authentication and access control), and finally allocate the flow to the application hosted at the DC.

1. Configuration of the Raspberry Pis

Each Raspberry Pi acts as a WiFi Access Point, connected to and Edge Router. It has two shim DIFs: one for the WiFi interface and another one that runs over a VLAN to connect to the AP to the "mobile network core". The first step to get RINA up and running on the Raspberry Pi is to install IRATI as explained in IRATI Raspbian installation. The rest of this section assumes IRATI has been installed within the /usr/local/irati/ folder.

1.1 Raspberry Pi 1 (AP1)

Copy the following IRATI configuration files to the /usr/local/irati/etc folder:

Now, assuming the pi user exists on the Raspberry Pi, copy the following files to the /home/pi folder:

Edit /etc/rc.local and add a call to the IRATI init script at the end of the file (so that IRATI will be initialized at boot time).

/home/pi/init-rina.sh

Edit the /etc/default/hostapd file and point it to the /home/pi/hostapd.conf config file (edit the DAEMON_CONF variable):

DAEMON_CONF="/home/pi/hostapd.conf"

If you reboot the Raspberry Pi it should create the VLANs, configure the WiFi interface in AP mode and startup IRATI.

1.2 Raspberry Pi 2 (AP2)

Copy the following IRATI configuration files to the /usr/local/irati/etc folder:

Now, assuming the pi user exists on the Raspberry Pi, copy the following files to the /home/pi folder:

Edit /etc/rc.local and add a call to the IRATI init script at the end of the file (so that IRATI will be initialized at boot time).

/home/pi/init-rina.sh

Edit the /etc/default/hostapd file and point it to the /home/pi/hostapd.conf config file (edit the DAEMON_CONF variable):

DAEMON_CONF="/home/pi/hostapd.conf"

If you reboot the Raspberry Pi it should create the VLANs, configure the WiFi interface in AP mode and startup IRATI.

1.3 Raspberry Pi 3 (AP3)

Copy the following IRATI configuration files to the /usr/local/irati/etc folder:

Now, assuming the pi user exists on the Raspberry Pi, copy the following files to the /home/pi folder:

Edit /etc/rc.local and add a call to the IRATI init script at the end of the file (so that IRATI will be initialized at boot time).

/home/pi/init-rina.sh

Edit the /etc/default/hostapd file and point it to the /home/pi/hostapd.conf config file (edit the DAEMON_CONF variable):

DAEMON_CONF="/home/pi/hostapd.conf"

If you reboot the Raspberry Pi it should create the VLANs, configure the WiFi interface in AP mode and startup IRATI.

1.4 Raspberry Pi 4 (AP4)

Copy the following IRATI configuration files to the /usr/local/irati/etc folder:

Now, assuming the pi user exists on the Raspberry Pi, copy the following files to the /home/pi folder:

Edit /etc/rc.local and add a call to the IRATI init script at the end of the file (so that IRATI will be initialized at boot time).

/home/pi/init-rina.sh

Edit the /etc/default/hostapd file and point it to the /home/pi/hostapd.conf config file (edit the DAEMON_CONF variable):

DAEMON_CONF="/home/pi/hostapd.conf"

If you reboot the Raspberry Pi it should create the VLANs, configure the WiFi interface in AP mode and startup IRATI.

1.5 Raspberry Pi 5 (AP5)

Copy the following IRATI configuration files to the /usr/local/irati/etc folder:

Now, assuming the pi user exists on the Raspberry Pi, copy the following files to the /home/pi folder:

Edit /etc/rc.local and add a call to the IRATI init script at the end of the file (so that IRATI will be initialized at boot time).

/home/pi/init-rina.sh

Edit the /etc/default/hostapd file and point it to the /home/pi/hostapd.conf config file (edit the DAEMON_CONF variable):

DAEMON_CONF="/home/pi/hostapd.conf"

If you reboot the Raspberry Pi it should create the VLANs, configure the WiFi interface in AP mode and startup IRATI.

1.6 Raspberry Pi 6 (AP6)

Copy the following IRATI configuration files to the /usr/local/irati/etc folder:

Now, assuming the pi user exists on the Raspberry Pi, copy the following files to the /home/pi folder:

Edit /etc/rc.local and add a call to the IRATI init script at the end of the file (so that IRATI will be initialized at boot time).

/home/pi/init-rina.sh

Edit the /etc/default/hostapd file and point it to the /home/pi/hostapd.conf config file (edit the DAEMON_CONF variable):

DAEMON_CONF="/home/pi/hostapd.conf"

If you reboot the Raspberry Pi it should create the VLANs, configure the WiFi interface in AP mode and startup IRATI.

2. Configuration of the VLAN-aware Ethernet Switch

Make sure you create the VLANs indicated in Figure 1, and that you connect the Raspberry Pis and the Machine that will run the Demonstrator with IRATI VMs at the apropriate ports. For example, a possible configuration is:

  • AP1 is connected to Eth. switch port 1.
  • AP2 is connected to Eth. switch port 2.
  • AP3 is connected to Eth. switch port 3.
  • AP4 is connected to Eth. switch port 4.
  • AP5 is connected to Eth. switch port 5.
  • AP6 is connected to Eth. switch port 6.
  • Demonstrator machine is connected to Eth. switch port 8.

Then the following VLANs (which tag the traffic), have to be configured: VLAN 10 on port 1, VLAN 20 on port 2, VLAN 30 on port 3, VLAN 40 on port 4, VLAN 50 on port 5, VLAN 60 on port 6, VLANs 10, 20, 30, 40, 50, 60 on port 8.

3. Configuration of the machine that runs the Demonstrator

Before starting the demonstrator, make sure that:

  • You have connected the machine to the VLAN-aware Ethernet switch via the eth0 interface
  • You have connected all the Raspberry Pis to the VLAN Aware Ethernet switch and they are up and running
  • VLANs have been configured at the switch

The machine where the demonstrator needs to be installed must be a Linux machine and have the bridgeutils and qemu-kvm packages installed. Then copy the pre-configured demonstrator tar.gz file to any folder of your choice, and extract it.

# tar xzvf demonstrator-omec.tar.gz demonstrator

Enter the demonstrator/demonstrator folder and execute the up.sh script:

# cd demonstrator/demonstrator
# ./up.sh

The demonstrator will create the required Ethernet bridges, instantiate VMs, boot them, instantiate IRATI, configure DIFs, trigger enrollments and instantiate rina-echo-time application processes at each one of the "Server" VMs (Figure 1).

4. Configuration of the UE machine (Mobile Host)

In our setup we have used a Debian 9 Laptop to act as the UE, but it can be any type of Linux machine (as long as its OS is supported by IRATI). The important requirement is that the machine has two WiFi interfaces. Since most laptops come with a single built-in WiFi interface, the easiest way to get another one is to use a USB WiFi dongle, but please make sure its drivers are compatible with the Linux distribution of choice (we have used this one).

First thing is to install IRATI according to the [instructions here] (https://github.com/IRATI/stack#2-build-instructions). We assume IRATI has been installed in the /usr/local/irati folder. Copy the following files to the /usr/local/irati/etc folder:

Copy the IRATI initialization script to the home folder (e.g. /home/i2cat):

Run the init script

# cd /home/i2cat
# ./init-rina.sh

Start the IPC Manager Daemon with the proper configuration

# cd /usr/local/irati/bin
# ./ipcm -c ../etc/ipcm-berlin.conf -l DEBUG -a "console, scripting, mobman"

Open another terminal and login to the management console, you should see the 2 shim WiFi IPCPs and one normal IPCP created (belonging to the mobile.DIF dif).

# socat - UNIX:/usr/local/irati/var/run/ipcm-console.sock
# IPCM >>> list-ipcps
 Management Agent not started
 Current IPC processes (id | name | type | state | Registered applications | Port-ids of flows provided)
    1 | wlan2.ue:1:: | shim-wifi-sta | ASSIGNED TO DIF pristine | ue1.mobile-1-- | -
    2 | wlan0.ue:1:: | shim-wifi-sta | ASSIGNED TO DIF arcfire | ue1.mobile-1-- | -
    3 | ue1.mobile:1:: | normal-ipc | ASSIGNED TO DIF mobile.DIF | da-ue1.arcfire-1-- | -

After 20 seconds the UE will join the mobile DIF by attaching to the pristine SSID and making the IPCP ue1.mobile enroll to the mobile DIF.

IPCM >>> list-ipcps
Management Agent not started

Current IPC processes (id | name | type | state | Registered applications | Port-ids of flows provided)
    1 | wlan2.ue:1:: | shim-wifi-sta | ASSIGNED TO DIF arcfire | ue1.mobile-1-- | 115
    2 | wlan0.ue:1:: | shim-wifi-sta | ASSIGNED TO DIF arcfire | ue1.mobile-1-- | -
    3 | ue1.mobile:1:: | normal-ipc | ASSIGNED TO DIF mobile.DIF | da-ue1.arcfire-1-- | -

When the IPCM detects this event, it instructs the DIF Allocator instance to allocate a flow to join the DIF Allocator DAF and get access to the application to DIF mappings known by the operator (only those that can be disclosed to the UE).

IPCM >>> list-ipcps
Management Agent not started

Current IPC processes (id | name | type | state | Registered applications | Port-ids of flows provided)
    1 | wlan2.ue:1:: | shim-wifi-sta | ASSIGNED TO DIF arcfire | ue1.mobile-1-- | 115
    2 | wlan0.ue:1:: | shim-wifi-sta | ASSIGNED TO DIF arcfire | ue1.mobile-1-- | -
    3 | ue1.mobile:1:: | normal-ipc | ASSIGNED TO DIF mobile.DIF | da-ue1.arcfire-1-- | 116

We open another terminal and instantiate a rina-echo-time client that will connect to the aneto rina-echo-time server. To do so, UE1 will need to find out that this application is reachable via the slice 1 DIF, create an IPCP, join this DIF and ask it to allocate a flow. These operations impact the flow allocation time (which takes into account all of them), as it can be seen in the screen capture below.

root@debian:/usr/local/irati/bin# ./rina-echo-time --server-api aneto -c 10000 -s 200 -w 50
4470(1531998761)#librina.logs (DBG): New log level: INFO
Flow allocation time = 1075.9 ms
SDU size = 200, seq = 0, RTT = 7.9345 ms
SDU size = 200, seq = 1, RTT = 5.9728 ms
SDU size = 200, seq = 2, RTT = 5.9617 ms
SDU size = 200, seq = 3, RTT = 7.0413 ms
SDU size = 200, seq = 4, RTT = 9.2504 ms

We open yet another terminal and instantiate a rina-echo-time client that will connect to the montblanc rina-echo-time server. This time UE1 will need to join the Internet DIF, carrying out the actions explained in the last paragraph.

root@debian:/usr/local/irati/bin# ./rina-echo-time --server-api montblanc -c 10000 -s 200 -w 50
12278(1532000341)#librina.logs (DBG): New log level: INFO
Flow allocation time = 1142 ms
SDU size = 200, seq = 0, RTT = 52.459 ms
SDU size = 200, seq = 1, RTT = 52.882 ms
SDU size = 200, seq = 2, RTT = 53.038 ms
SDU size = 200, seq = 3, RTT = 52.837 ms
SDU size = 200, seq = 4, RTT = 60.684 ms
SDU size = 200, seq = 5, RTT = 58.707 ms

If we list the IPCPs in the UE1 system via the IPC Manager Console, we'll see that there are two new IPCPs (one for the slice1 DIF and another for the Internet DIF), and a number of flows that have been created as a consequence of the rina-echo-time clients flow allocation requests.

IPCM >>> list-ipcps
Management Agent not started

Current IPC processes (id | name | type | state | Registered applications | Port-ids of flows provided)
    1 | wlan2.ue:1:: | shim-wifi-sta | ASSIGNED TO DIF arcfire | ue1.mobile-1-- | 115
    2 | wlan0.ue:1:: | shim-wifi-sta | ASSIGNED TO DIF arcfire | ue1.mobile-1-- | -
    3 | ue1.mobile:1:: | normal-ipc | ASSIGNED TO DIF mobile.DIF | da-ue1.arcfire-1--, ue1.slice1-1--, ue1.internet-1-- | 116, 117, 119
    4 | ue1.slice1:1:: | normal-ipc | ASSIGNED TO DIF slice1.DIF | da-ue1.arcfire-1-- | 118
    5 | ue1.internet:1:: | normal-ipc | ASSIGNED TO DIF internet.DIF | da-ue1.arcfire-1-- | 120

Flow continuity is preserved after a handover, and impact to packet loss and delay is minimal.

IPCM >>> list-ipcps
Management Agent not started

Current IPC processes (id | name | type | state | Registered applications | Port-ids of flows provided)
    1 | wlan2.ue:1:: | shim-wifi-sta | ASSIGNED TO DIF arcfire | ue1.mobile-1-- | -
    2 | wlan0.ue:1:: | shim-wifi-sta | ASSIGNED TO DIF rinaisense | ue1.mobile-1-- | 121
    3 | ue1.mobile:1:: | normal-ipc | ASSIGNED TO DIF mobile.DIF | da-ue1.arcfire-1--, ue1.slice1-1--, ue1.internet-1-- | 116, 117, 119
    4 | ue1.slice1:1:: | normal-ipc | ASSIGNED TO DIF slice1.DIF | da-ue1.arcfire-1-- | 118
    5 | ue1.internet:1:: | normal-ipc | ASSIGNED TO DIF internet.DIF | da-ue1.arcfire-1-- | 120
Clone this wiki locally