## Introduction This tutorial explains how to configure IRATI to instantiate a normal DIF spanning two machines (systems) interconnected by a VLAN, as illustrated in Figure 1. ![Tutorial 1 scenario](https://github.com/IRATI/stack/wiki/images/irati-tutorial1-scenario.png) ## Configuration of System 1 Assumptions: IRATI has been successfully installed in the system as explained in [How to install the IRATI stack.](https://github.com/IRATI/stack#2-build-instructions) The software is assumed to have been installed in `$INSTALLATION_PATH`. ### Configuring the VLAN In order to configure the VLAN, type the following command ip link add link eth1 name eth1.100 type vlan id 100 ip link set dev eth1 up ip link set dev eth1.100 up _**NOTE**: If you are installing IRATI in a VirtualBox VM, please do not use the Intel PRO/1000 net card adaptor since it strips the VLAN tags._ ### Loading the RINA kernel modules For this simple experiment we will use the _shim DIF over 802.1q_ and the _normal DIF_, therefore we need to load the modules that provide kernel support for these functionalities. modprobe rina-irati-core irati_verbosity=7 modprobe rina-default-plugin modprobe normal-ipcp modprobe shim-eth-vlan modprobe shim-tcp-udp ### Configuration files Copy the following files to the `$INSTALLATION_PATH`/etc folder (ipcm.conf file assumes INSTALLATION_PATH=/usr/local/irati) * [IPCM config file](https://github.com/IRATI/stack/wiki/configurations/tutorial1/system1/ipcm.conf) * [DIF (shim) 100 template](https://github.com/IRATI/stack/wiki/configurations/tutorial1/system1/shimeth.system1.100.dif) * [Normal DIF template](https://github.com/IRATI/stack/wiki/configurations/tutorial1/system1/default.dif) ### Instantiating the IPC Manager Once the configuration file has the adequate contents, we can start the IPC Manager Daemon, which will trigger the creation of the two IPC Processes and assignment to its respective DIF as specified in the configuration file. To do so, we have to enter the following command in the `$INSTALLATION_PATH/bin` folder. ./ipcm -c ../etc/ipcm.conf If everything went well you should be able to open a telnet session to the IPC Manager console like this: socat - UNIX:/usr/local/irati/var/run/ipcm-console.sock And once inside, type the `list-ipcps` command, the following output should be shown: IPCM >>> list-ipcps Management Agent not started Current IPC processes (id | name | type | state | Registered applications | Port-ids of flows provided) 1 | eth.1.IPCP:1:: | shim-eth-vlan | ASSIGNED TO DIF 100 | Normal.1.IPCP-1-- | - 2 | Normal.1.IPCP:1:: | normal-ipc | ASSIGNED TO DIF Normal.DIF | - | - You can obtain more information about a **NORMAL** IPC Process by using the `query-rib` command (not supported by shim IPC Processes yet). By examining this information we can look at the naming and addressing properties of the IPC Process, the configuration of the DIF policies, its neighbors, the registrations to N-1 DIFs, the N-1 Flows it currently relies on, the N-flows it provides to applications, etc. You can exit the IPC Manager console via the ´exit´ or ´quit´ commands. ## Configuration of System 2 The configuration of system 2 is dual to the system 1 configuration, with only a minimal change in the IPC Manager configuration file: * [IPCM config file](https://github.com/IRATI/stack/wiki/configurations/tutorial1/system2/ipcm.conf) * [DIF (shim) 100 template](https://github.com/IRATI/stack/wiki/configurations/tutorial1/system2/shimeth.system2.100.dif) * [Normal DIF template](https://github.com/IRATI/stack/wiki/configurations/tutorial1/system2/default.dif) ## Enrollment of IPC Processes in the normal DIF Now we have two IPC Processes in two systems that belong to the _normal DIF_ but they don't know about the existence of each other. In order to so, we have to trigger the _enrollment_ procedure, which will make both IPC Processes to discover each other and to become neighbours in the _normal DIF_. We will trigger the enrollment procedure via the IPC Manager console of System 1 (could also be done from System 2 with a dual procedure). socat - UNIX:/usr/local/irati/var/run/ipcm-console.sock The usage of the ´enroll-to-dif´ command is the following: ´USAGE: enroll-to-dif ´. For our case: IPCM >>> enroll-to-dif 2 normal.DIF 100 DIF enrollment succesfully completed ## Running the rina-echo-time application in 'ping' mode We will now use the rina-echo-time application in 'ping' mode to test a flow over the normal DIF. This application consists in two types of processes: servers and clients. In the 'ping' mode, the client sends a configurable number of packets (SDUs) at a configurable rate to the server, which echoes them back. The client reports the latency it perceives. ### Running the rina-echo-time server In System 2, go to the `$INSTALLATION_PATH/bin` folder and type: ./rina-echo-time -l Now the server application has registered to the normal DIF. You can see it has done so by inspecting the RIB of the IPC Process _test2.IRATI_ in System 2 via the IPC Manager console, the following new entry should appear: Name: /dif/management/flowallocator/directoryforwardingtableentries/rina.apps.echotime.server-1--; Class: directoryforwardingtableentry; Instance: 20 Value: App name: rina.apps.echotime.server-1--; Address: 17; Timestamp: 0 Note that the IPC Process _test2.IRATI_ has disseminated the registration of this application through the DIF, therefore the RIB of _test1.IRATI_ will also contain this entry. ### Running the rina-echo-time client In System 1, go to the `$INSTALLATION_PATH/bin` folder and type: ./rina-echo-time -c 100 If the command is successful, you will see the following output: Flow allocation time = 147ms SDU size = 20, seq = 0, RTT = 17ms SDU size = 20, seq = 1, RTT = 4605us SDU size = 20, seq = 2, RTT = 2724us SDU size = 20, seq = 3, RTT = 33ms SDU size = 20, seq = 4, RTT = 1682us SDU size = 20, seq = 5, RTT = 4270us SDU size = 20, seq = 6, RTT = 13ms SDU size = 20, seq = 7, RTT = 2721us SDU size = 20, seq = 8, RTT = 5776us SDU size = 20, seq = 9, RTT = 3319us SDU size = 20, seq = 10, RTT = 1637us SDU size = 20, seq = 11, RTT = 37ms SDU size = 20, seq = 12, RTT = 1950us SDU size = 20, seq = 13, RTT = 1631us ... If you inspect the RIB of any of the two IPC Processes, you will be able to see a new entry describing the flow supported by the _normal DIF_. Name: /dif/resourceallocation/flowallocator/flows/16-2; Class: flow; Instance: 21 Value: * State: 2 * Is this IPC Process the requestor of the flow? 1 * Max create flow retries: 1 * Hop count: 3 * Source AP Naming Info: rina.apps.echotime.client:1:: * Source address: 16 * Source port id: 2 * Destination AP Naming Info: rina.apps.echotime.server:1::res: Destination port id: * Connection ids of the connection supporting this flow: + Src CEP-id 0; Dest CEP-id 0; Qos-id 1 * Index of the current active connection for this flow: 0