3gpp-emulator

From VNUML-WIKI
Revision as of 21:31, 16 March 2008 by Fgalan (talk | contribs) (Supporting stuff)
Jump to: navigation, search

3GPP System Architecture Evolution Scenarios

Authors:
Fermín Galán (fermin at tid.es)
Miguel Gómez (miguelg at tid.es)
version 1.0, March Xth, 2008

Introduction

3GPP System Architecture Evolution (SAE) scenarios are one of the most complex network environments to be found in current telecom systems, due to the numerous elements involved on each scenario and the different possible configurations for each of those elements. Consequently, conventional tetsbeds prove to be extremely costly and ineffective in this context, due to the large amount of equipment and the frequent infrastructure reconfiguration processes required.

In order to overcome these limitations, we have been working towards the definition of a testing platform that, by combining the virtualization features provided by VNUML with the capabilities offered by several of the available Open Source IMS and mobility toolkits, allows the easy creation and deployment of complex multi-domain 3GPP SAE emulation scenarios. Some results of this work have been presented in the following paper:

Miguel Gómez Rodríguez, Fermín Galán Márquez and Emilio J. Torres Mateos, "A 3GPP System Architecture Evolution Virtualized Experimentation Infrastructure for Mobility Prototyping (Invited Paper)," Proceedings of the 4th International Conference on Testbeds and Research Infrastructures for the Development of Networks & Communities (TridentCom 2008), Innsbruck (Austria), March 18th - 20th, 2008.

This page intends to be a complement to such paper, providing additional information and working materials to allow a better comprehension of the experiments described in the paper and enable third parties to repeat those experiments or adapt them to their particular needs.

The following sections present the proposed 3GPP SAE network reference scenario, detailing next its particularization to the case studies described in the paper and providing the associated VNUML scenario specifications.

Reference Scenario

Multi-domain 3GPP SAE emulation scenario

Multi-domain 3GPP SAE emulation reference scenario

The reference scenario architecture is composed of several domains. Each domain consists of an core network (CN) and an arbitrary number of access networks (ANs). The IMS lays within the CN, consisting of a set of CSCFs proxies (our model considers one of each type: P-CSCF, S-CSCF and I-CSCF). Each AN is connected to its corresponding CN through an Access Router (AR).

The different domain CNs are connected through an interconnection point (IX), also known as inter-PLMN (Public Land Mobile Network) backbone. The IX interconnects also a segment of auxiliary network elements (such as a DNS server).

The scenario considers two kinds of attachment points for external equipment: access networks (for UEs) and IMS cores (for core entities, such as the SIP Application Server shown as example in the figure below).

The following script (sae-generator.pl) allows to generate VNUML multi-domain specifications automatically. Some observations follow:

  • The first parameter is the number of domains (D) and the second one the number of access network per domain (N).
  • The 'external' attribute is not added in neither acc*_* nor core* <net>s, since it depends on the host's physical interface (e.g., eth0, eth1, etc.) and the particular VLAN ID being used. Therefore, users need to edit the <net>s section of the resulting XML file properly.
  • The script generates homogeneous specifications only, i.e. the same number of ANs per domain, although the resulting XML can be easily pruned to fit user needs.
  • An auxiliary segment with a DNS server is added
  • IPv6 addresses are automatically assigned to each element
  • The <console> is pts. The recommended way to access virtual machines is the vn script (you should find it in /usr/share/vnuml/contrib/vn_script if you installed VNUML through the .deb package or in the .tgz if you used the sources). For example: "vn console sae ar1". See the vn README for more details.

Intradomain Scenario

Intra-domain mobility scenario

Intra-domain mobility scenario

The scenario is composed of 2 domains (it can be obtained after pruning the scenario generated by the script with './sae-generator.pl 2 2'), one with one AN for the terminating UE and other with two ANs for the originating UE.

Note that acc1_1, acc2_1 and acc2_2 <net>s use the 'external' attribute in order to allow the interconnection of external UE equipment. However, note that the values considered in the example (eth0.121, eth0.122 and eth0.123) have to be changed to match the proper ones in your emulation environment.

The intra-domain mobility scenario specification can be downloaded here: sae-intradomain.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE vnuml SYSTEM "/usr/share/xml/vnuml/vnuml.dtd">

<vnuml>
   <global>
      <version>1.8</version>
      <simulation_name>sae-intra</simulation_name>
      <automac/>
      <vm_mgmt type="none" />
      <vm_defaults exec_mode="mconsole">
         <kernel>/usr/share/vnuml/kernels/linux</kernel>
         <console id="0">pts</console>
      </vm_defaults>
   </global>

   <net name="ix" mode="uml_switch" />
   <net name="core1" mode="uml_switch" />
   <net name="acc1_1" mode="uml_switch" external="eth0.121"/>
   <net name="ppp1" mode="uml_switch" />
   <net name="core2" mode="uml_switch" />
   <net name="acc2_1" mode="uml_switch" external="eth0.122"/>
   <net name="acc2_2" mode="uml_switch" external="eth0.123"/>
   <net name="ppp2" mode="uml_switch" />
   <net name="aux" mode="uml_switch" />

   <!-- domain 1 -->

   <vm name="dhcp1_1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-dhcpv6</filesystem>
      <if id="1" net="acc1_1">
         <ipv6>2001:db8:1:2::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:1:2::1">2000::/3</route>
   </vm>

  <vm name="ar1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
      <if id="1" net="acc1_1">
         <ipv6>2001:db8:1:2::1/64</ipv6>
      </if>
      <if id="2" net="ppp1">
         <ipv6>2001:db8:1:100::1/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:1:100::2">2000::/3</route>
      <forwarding type="ipv6" />
   </vm>

   <vm name="p_cscf1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core1">
         <ipv6>2001:db8:1:1::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:1:1::1">2001:db8:1:2::/64</route>
      <route type="ipv6" gw="2001:db8:1:1::100">2000::/3</route>
   </vm>

   <vm name="s_cscf1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core1">
         <ipv6>2001:db8:1:1::3/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:1:1::1">2001:db8:1:2::/64</route>
      <route type="ipv6" gw="2001:db8:1:1::100">2000::/3</route>
   </vm>

   <vm name="i_cscf1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core1">
         <ipv6>2001:db8:1:1::4/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:1:1::1">2001:db8:1:2::/64</route>
      <route type="ipv6" gw="2001:db8:1:1::100">2000::/3</route>
   </vm>

   <vm name="p_gw1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
      <if id="1" net="core1">
         <ipv6>2001:db8:1:1::100/64</ipv6>
      </if>
      <if id="2" net="ix">
         <ipv6>2001:db8:100::1/64</ipv6>
      </if>
      <if id="3" net="ppp1">
         <ipv6>2001:db8:1:100::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:1:100::1">2001:db8:1:2::/64</route>
      <route type="ipv6" gw="2001:db8:1:100::1">2001:db8:1:3::/64</route>
      <route type="ipv6" gw="2001:db8:100::2">2001:db8:2::/48</route>
      <route type="ipv6" gw="2001:db8:100::200">2001:db8:200::/48</route>
      <forwarding type="ipv6" />
   </vm>

   <!-- domain 2 -->

   <vm name="dhcp2_1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-dhcpv6</filesystem>
      <if id="1" net="acc2_1">
         <ipv6>2001:db8:2:2::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:2:2::1">2000::/3</route>
   </vm>

   <vm name="dhcp2_2">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-dhcpv6</filesystem>
      <if id="1" net="acc2_2">
         <ipv6>2001:db8:2:3::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:2:3::1">2000::/3</route>
   </vm>

  <vm name="ar2">
      <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
      <if id="1" net="acc2_1">
         <ipv6>2001:db8:2:2::1/64</ipv6>
      </if>
      <if id="2" net="acc2_2">
         <ipv6>2001:db8:2:3::1/64</ipv6>
      </if>
      <if id="3" net="ppp2">
         <ipv6>2001:db8:2:100::1/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:2:100::2">2000::/3</route>
      <forwarding type="ipv6" />
   </vm>

   <vm name="p_cscf2">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core2">
         <ipv6>2001:db8:2:1::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:2:1::1">2001:db8:2:2::/64</route>
      <route type="ipv6" gw="2001:db8:2:1::100">2000::/3</route>
   </vm>

   <vm name="s_cscf2">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core2">
         <ipv6>2001:db8:2:1::3/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:2:1::1">2001:db8:2:2::/64</route>
      <route type="ipv6" gw="2001:db8:2:1::100">2000::/3</route>
   </vm>

   <vm name="i_cscf2">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core2">
         <ipv6>2001:db8:2:1::4/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:2:1::1">2001:db8:2:2::/64</route>
      <route type="ipv6" gw="2001:db8:2:1::100">2000::/3</route>
   </vm>

   <vm name="p_gw2">
      <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
      <if id="1" net="core2">
         <ipv6>2001:db8:2:1::100/64</ipv6>
      </if>
      <if id="2" net="ix">
         <ipv6>2001:db8:100::2/64</ipv6>
      </if>
      <if id="3" net="ppp2">
         <ipv6>2001:db8:2:100::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:2:100::1">2001:db8:2:2::/64</route>
      <route type="ipv6" gw="2001:db8:2:100::1">2001:db8:2:3::/64</route>
      <route type="ipv6" gw="2001:db8:100::1">2001:db8:1::/48</route>
      <route type="ipv6" gw="2001:db8:100::200">2001:db8:200::/48</route>
      <forwarding type="ipv6" />
   </vm>

  <!-- auxiliy element nodes -->

  <vm name="dns">
     <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-dns</filesystem>
     <if id="1" net="aux">
        <ipv6>2001:db8:200::1/64</ipv6>
     </if>
     <route type="ipv6" gw="2001:db8:200::100">2000::/3</route>
  </vm>

  <vm name="aux_r">
     <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
     <if id="1" net="aux">
        <ipv6>2001:db8:200::100/64</ipv6>
     </if>
     <if id="2" net="ix">
        <ipv6>2001:db8:100::200/64</ipv6>
     </if>
     <route type="ipv6" gw="2001:db8:100::1">2001:db8:1::/48</route>
     <route type="ipv6" gw="2001:db8:100::2">2001:db8:2::/48</route>
     <forwarding type="ipv6" />
 </vm>

</vnuml>

Interdomain Mobility Scenario

Inter-domain mobility scenario

Inter-domain mobility scenario

The scenario is composed of five domains (it can be obtained after pruning the scenario generated by the script with './sae-generator.pl 5 1'), which may play the following roles:

  • Domain 1 (one AN): Terminating Visiting Network
  • Domain 2 (one AN): Originating Final Visiting Network
  • Domain 3 (one AN): Originating Initial Visiting Network
  • Domain 4 (no AN): Originating Home Network
  • Domain 5 (no AN): Terminating Home Network

Note that acc1_1, acc2_1 and acc3_1 <net>s use the 'external' attribute in order to allow the interconnection of external UE equipment. However, note that the values considered in the example (eth0.121, eth0.122 and eth0.123) have to be changed to match the proper ones in your emulation environment.

The inter-domain mobility scenario specification can be downloaded here: sae-interdomain.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE vnuml SYSTEM "/usr/share/xml/vnuml/vnuml.dtd">

<vnuml>
   <global>
      <version>1.8</version>
      <simulation_name>sae-inter</simulation_name>
      <automac/>
      <vm_mgmt type="none" />
      <vm_defaults exec_mode="mconsole">
         <kernel>/usr/share/vnuml/kernels/linux</kernel>
         <console id="0">pts</console>
      </vm_defaults>
   </global>

   <net name="ix" mode="uml_switch" />
   <net name="core1" mode="uml_switch" />
   <net name="acc1_1" mode="uml_switch" external="eth0.121"/>
   <net name="ppp1" mode="uml_switch" />
   <net name="core2" mode="uml_switch" />
   <net name="acc2_1" mode="uml_switch" external="eth0.122"/>
   <net name="ppp2" mode="uml_switch" />
   <net name="core3" mode="uml_switch" />
   <net name="acc3_1" mode="uml_switch" external="eth0.123"/>
   <net name="ppp3" mode="uml_switch" />
   <net name="core4" mode="uml_switch" />
   <net name="core5" mode="uml_switch" />
   <net name="aux" mode="uml_switch" />

   <!-- domain 1 -->

   <vm name="dhcp1_1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-dhcpv6</filesystem>
      <if id="1" net="acc1_1">
         <ipv6>2001:db8:1:2::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:1:2::1">2000::/3</route>
   </vm>

  <vm name="ar1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
      <if id="1" net="acc1_1">
         <ipv6>2001:db8:1:2::1/64</ipv6>
      </if>
      <if id="2" net="ppp1">
         <ipv6>2001:db8:1:100::1/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:1:100::2">2000::/3</route>
      <forwarding type="ipv6" />
   </vm>

   <vm name="p_cscf1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core1">
         <ipv6>2001:db8:1:1::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:1:1::1">2001:db8:1:2::/64</route>
      <route type="ipv6" gw="2001:db8:1:1::100">2000::/3</route>
   </vm>

   <vm name="s_cscf1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core1">
         <ipv6>2001:db8:1:1::3/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:1:1::1">2001:db8:1:2::/64</route>
      <route type="ipv6" gw="2001:db8:1:1::100">2000::/3</route>
   </vm>

   <vm name="i_cscf1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core1">
         <ipv6>2001:db8:1:1::4/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:1:1::1">2001:db8:1:2::/64</route>
      <route type="ipv6" gw="2001:db8:1:1::100">2000::/3</route>
   </vm>

   <vm name="p_gw1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
      <if id="1" net="core1">
         <ipv6>2001:db8:1:1::100/64</ipv6>
      </if>
      <if id="2" net="ix">
         <ipv6>2001:db8:100::1/64</ipv6>
      </if>
      <if id="3" net="ppp1">
         <ipv6>2001:db8:1:100::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:1:100::1">2001:db8:1:2::/64</route>
      <route type="ipv6" gw="2001:db8:100::2">2001:db8:2::/48</route>
      <route type="ipv6" gw="2001:db8:100::3">2001:db8:3::/48</route>
      <route type="ipv6" gw="2001:db8:100::4">2001:db8:4::/48</route>
      <route type="ipv6" gw="2001:db8:100::5">2001:db8:5::/48</route>
      <route type="ipv6" gw="2001:db8:100::200">2001:db8:200::/48</route>
      <forwarding type="ipv6" />
   </vm>

   <!-- domain 2 -->

   <vm name="dhcp2_1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-dhcpv6</filesystem>
      <if id="1" net="acc2_1">
         <ipv6>2001:db8:2:2::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:2:2::1">2000::/3</route>
   </vm>

  <vm name="ar2">
      <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
      <if id="1" net="acc2_1">
         <ipv6>2001:db8:2:2::1/64</ipv6>
      </if>
      <if id="2" net="ppp2">
         <ipv6>2001:db8:2:100::1/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:2:100::2">2000::/3</route>
      <forwarding type="ipv6" />
   </vm>

   <vm name="p_cscf2">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core2">
         <ipv6>2001:db8:2:1::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:2:1::1">2001:db8:2:2::/64</route>
      <route type="ipv6" gw="2001:db8:2:1::100">2000::/3</route>
   </vm>

   <vm name="s_cscf2">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core2">
         <ipv6>2001:db8:2:1::3/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:2:1::1">2001:db8:2:2::/64</route>
      <route type="ipv6" gw="2001:db8:2:1::100">2000::/3</route>
   </vm>

   <vm name="i_cscf2">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core2">
         <ipv6>2001:db8:2:1::4/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:2:1::1">2001:db8:2:2::/64</route>
      <route type="ipv6" gw="2001:db8:2:1::100">2000::/3</route>
   </vm>

   <vm name="p_gw2">
      <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
      <if id="1" net="core2">
         <ipv6>2001:db8:2:1::100/64</ipv6>
      </if>
      <if id="2" net="ix">
         <ipv6>2001:db8:100::2/64</ipv6>
      </if>
      <if id="3" net="ppp2">
         <ipv6>2001:db8:2:100::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:2:100::1">2001:db8:2:2::/64</route>
      <route type="ipv6" gw="2001:db8:100::1">2001:db8:1::/48</route>
      <route type="ipv6" gw="2001:db8:100::3">2001:db8:3::/48</route>
      <route type="ipv6" gw="2001:db8:100::4">2001:db8:4::/48</route>
      <route type="ipv6" gw="2001:db8:100::5">2001:db8:5::/48</route>
      <route type="ipv6" gw="2001:db8:100::200">2001:db8:200::/48</route>
      <forwarding type="ipv6" />
   </vm>

   <!-- domain 3 -->

   <vm name="dhcp3_1">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-dhcpv6</filesystem>
      <if id="1" net="acc3_1">
         <ipv6>2001:db8:3:2::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:3:2::1">2000::/3</route>
   </vm>

  <vm name="ar3">
      <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
      <if id="1" net="acc3_1">
         <ipv6>2001:db8:3:2::1/64</ipv6>
      </if>
      <if id="2" net="ppp3">
         <ipv6>2001:db8:3:100::1/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:3:100::2">2000::/3</route>
      <forwarding type="ipv6" />
   </vm>

   <vm name="p_cscf3">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core3">
         <ipv6>2001:db8:3:1::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:3:1::1">2001:db8:3:2::/64</route>
      <route type="ipv6" gw="2001:db8:3:1::100">2000::/3</route>
   </vm>

   <vm name="s_cscf3">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core3">
         <ipv6>2001:db8:3:1::3/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:3:1::1">2001:db8:3:2::/64</route>
      <route type="ipv6" gw="2001:db8:3:1::100">2000::/3</route>
   </vm>

   <vm name="i_cscf3">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core3">
         <ipv6>2001:db8:3:1::4/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:3:1::1">2001:db8:3:2::/64</route>
      <route type="ipv6" gw="2001:db8:3:1::100">2000::/3</route>
   </vm>

   <vm name="p_gw3">
      <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
      <if id="1" net="core3">
         <ipv6>2001:db8:3:1::100/64</ipv6>
      </if>
      <if id="2" net="ix">
         <ipv6>2001:db8:100::3/64</ipv6>
      </if>
      <if id="3" net="ppp3">
         <ipv6>2001:db8:3:100::2/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:3:100::1">2001:db8:3:2::/64</route>
      <route type="ipv6" gw="2001:db8:100::1">2001:db8:1::/48</route>
      <route type="ipv6" gw="2001:db8:100::2">2001:db8:2::/48</route>
      <route type="ipv6" gw="2001:db8:100::4">2001:db8:4::/48</route>
      <route type="ipv6" gw="2001:db8:100::5">2001:db8:5::/48</route>
      <route type="ipv6" gw="2001:db8:100::200">2001:db8:200::/48</route>
      <forwarding type="ipv6" />
   </vm>

   <!-- domain 4 -->

   <vm name="s_cscf4">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core4">
         <ipv6>2001:db8:4:1::3/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:4:1::1">2001:db8:4:2::/64</route>
      <route type="ipv6" gw="2001:db8:4:1::100">2000::/3</route>
   </vm>

   <vm name="i_cscf4">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core4">
         <ipv6>2001:db8:4:1::4/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:4:1::1">2001:db8:4:2::/64</route>
      <route type="ipv6" gw="2001:db8:4:1::100">2000::/3</route>
   </vm>

   <vm name="p_gw4">
      <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
      <if id="1" net="core4">
         <ipv6>2001:db8:4:1::100/64</ipv6>
      </if>
      <if id="2" net="ix">
         <ipv6>2001:db8:100::4/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:4:100::1">2001:db8:4:2::/64</route>
      <route type="ipv6" gw="2001:db8:100::1">2001:db8:1::/48</route>
      <route type="ipv6" gw="2001:db8:100::2">2001:db8:2::/48</route>
      <route type="ipv6" gw="2001:db8:100::3">2001:db8:3::/48</route>
      <route type="ipv6" gw="2001:db8:100::5">2001:db8:5::/48</route>
      <route type="ipv6" gw="2001:db8:100::200">2001:db8:200::/48</route>
      <forwarding type="ipv6" />
   </vm>

   <!-- domain 5 -->

   <vm name="s_cscf5">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core5">
         <ipv6>2001:db8:5:1::3/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:5:1::1">2001:db8:5:2::/64</route>
      <route type="ipv6" gw="2001:db8:5:1::100">2000::/3</route>
   </vm>

   <vm name="i_cscf5">
      <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-node</filesystem>
      <if id="1" net="core5">
         <ipv6>2001:db8:5:1::4/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:5:1::1">2001:db8:5:2::/64</route>
      <route type="ipv6" gw="2001:db8:5:1::100">2000::/3</route>
   </vm>

   <vm name="p_gw5">
      <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
      <if id="1" net="core5">
         <ipv6>2001:db8:5:1::100/64</ipv6>
      </if>
      <if id="2" net="ix">
         <ipv6>2001:db8:100::5/64</ipv6>
      </if>
      <route type="ipv6" gw="2001:db8:5:100::1">2001:db8:5:2::/64</route>
      <route type="ipv6" gw="2001:db8:100::1">2001:db8:1::/48</route>
      <route type="ipv6" gw="2001:db8:100::2">2001:db8:2::/48</route>
      <route type="ipv6" gw="2001:db8:100::3">2001:db8:3::/48</route>
      <route type="ipv6" gw="2001:db8:100::4">2001:db8:4::/48</route>
      <route type="ipv6" gw="2001:db8:100::200">2001:db8:200::/48</route>
      <forwarding type="ipv6" />
   </vm>

  <!-- auxiliy element nodes -->

  <vm name="dns">
     <filesystem type="cow">/usr/share/vnuml/filesystems/tridentcom-dns</filesystem>
     <if id="1" net="aux">
        <ipv6>2001:db8:200::1/64</ipv6>
     </if>
     <route type="ipv6" gw="2001:db8:200::100">2000::/3</route>
  </vm>

  <vm name="aux_r">
     <filesystem type="cow">/usr/share/vnuml/filesystems/n3vlr-0.11-vnuml-v0.1.img</filesystem>
     <if id="1" net="aux">
        <ipv6>2001:db8:200::100/64</ipv6>
     </if>
     <if id="2" net="ix">
        <ipv6>2001:db8:100::200/64</ipv6>
     </if>
     <route type="ipv6" gw="2001:db8:100::1">2001:db8:1::/48</route>
     <route type="ipv6" gw="2001:db8:100::2">2001:db8:2::/48</route>
     <route type="ipv6" gw="2001:db8:100::3">2001:db8:3::/48</route>
     <route type="ipv6" gw="2001:db8:100::4">2001:db8:4::/48</route>
     <route type="ipv6" gw="2001:db8:100::5">2001:db8:5::/48</route>
     <forwarding type="ipv6" />
 </vm>

</vnuml>

Supporting stuff

Apart of the XML scenario specifications, you need root filesystem for the different elements. The following ones can be used:

Additionally, the following UML kernel (suporting MIPv6) can be used: linux-mipv6.

It is worth noting that (except for n3vlr) these filesystems and kernels are provided "as is", released for the 3GPP SAE specific example case and are not maintained "officially" by the VNUML Project (as for example the root_tutorial_fs is).

Work on Progress

Currently, working on progress is focused in the following:

  • Application layer configurations. The root_fs provides a "base" experimentation framework, including application software for SAE experimentation, but their configurations need to be polished in order to actually work (e.g., ser.cfg for all CSCF involved in the scenarios, in order to be able to perform end-to-end sessions between UEs; or named.conf and /var/named files for the particular DNS configuration of all nodes).
  • Upgrade filesystems. It would be interesting to upgrade the base root_fs for tridentcom-* filesystems (with is quite old, based on 0.4.0) to something newer (for example, to 0.5.2, the current release in the time of writing this). Additionally, new application middleware (improving the current one) could be installed (e.g., OpenIMS Core).
  • Improve addressing and routing. Currently, we are using static IPv6 addressing for all interfaces and static routing. This is the straightforward way, but it is hard to maintain. Therefore, smarter approaches (such as stateless configuration and dynamic routing) should be implemented.

We are open to (and encourage :) contributions! So, if you are using this example for your own experiments and you think that your work (e.g., new filesystems, running configurations for applications, VNUML scenarios, etc.) could be useful for others, please tell us about (see Contact and Forums).