URLs, URNs and RSpecs

Aggregate Manager URLs

Check https://flsmonitor.fed4fire.eu to see the number of free resources on the testbeds.

Virtual Wall 1

The AM of the Virtual Wall is accessible through:

  • GENI AM v2: https://www.wall1.ilabt.iminds.be:12369/protogeni/xmlrpc/am/2.0
  • GENI AM v3: https://www.wall1.ilabt.iminds.be:12369/protogeni/xmlrpc/am/3.0

The URN of the componentmanager is: urn:publicid:IDN+wall1.ilabt.iminds.be+authority+cm

Virtual Wall 2

The AM of the Virtual Wall is accessible through:

  • GENI AM v2: https://www.wall2.ilabt.iminds.be:12369/protogeni/xmlrpc/am/2.0
  • GENI AM v3: https://www.wall2.ilabt.iminds.be:12369/protogeni/xmlrpc/am/3.0

The URN of the componentmanager is: urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm

w-iLab.t

The AM of w-iLab.t is accessible through:

  • GENI AM v2: https://www.wilab2.ilabt.iminds.be:12369/protogeni/xmlrpc/am/2.0
  • GENI AM v3: https://www.wilab2.ilabt.iminds.be:12369/protogeni/xmlrpc/am/3.0

The URN of the componentmanager is: urn:publicid:IDN+wilab2.ilabt.iminds.be+authority+cm

Request RSpecs Virtual Wall (physical hosts)

Normally, an experimenter tool as jFed will hide these RSpecs from you the experimenter, but if you need special features or want to use other tools, you might need these Request RSpecs. If you want other configurations, you can also start up jFed and go into the Raw RSpec view, to have a look at the RSpecs.

Simple unbound RSpec

Unbound means that the testbed chooses a node for you. node0 is the name of the node:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec generated="2014-02-23T20:01:56.848+01:00" generated_by="Experimental jFed Rspec Editor" type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <node client_id="node0" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
      <sliver_type name="raw-pc"/>
  </node>
</rspec>

Bound RSpec

This means that you choose a specific node. The node names should be mentioned in the listresources call, e.g. n095-01a in the example below:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec generated="2014-02-23T20:07:09.675+01:00" generated_by="Experimental jFed Rspec Editor" type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <node client_id="node0" component_id="urn:publicid:IDN+wall2.ilabt.iminds.be+node+n095-01a" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
      <sliver_type name="raw-pc"/>
  </node>
</rspec>

Two nodes with an impairment bridge node in between

When you want to emulate the link between two nodes, you can put an extra bridge node in between, and define the packet loss, latency and bandwidth for each direction of the link. You have to specify IP addresses for the links:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec generated="2014-02-01T16:47:22.736+01:00" generated_by="Experimental jFed Rspec Editor" type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd http://www.protogeni.net/resources/rspec/ext/delay/1 http://www.protogeni.net/resources/rspec/ext/delay/1/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <node client_id="node0" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
    <sliver_type name="raw-pc"/>
    <interface client_id="node0:if0">
      <ip address="10.0.1.1" netmask="255.255.255.0" type="ipv4"/>
    </interface>
  </node>
  <node client_id="node1" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
    <sliver_type name="raw-pc"/>
    <interface client_id="node1:if0">
       <ip address="10.0.1.2" netmask="255.255.255.0" type="ipv4"/>
    </interface>
  </node>
  <node client_id="bridge" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
     <sliver_type name="delay">
       <delay:sliver_type_shaping xmlns="http://www.protogeni.net/resources/rspec/ext/delay/1">
         <pipe source="delay:left" dest="delay:right" capacity="1000" latency="50" />
         <pipe source="delay:right" dest="delay:left" capacity="10000" latency="25" packet_loss="0.01"/>
       </delay:sliver_type_shaping>
     </sliver_type>
     <interface client_id="delay:left" />
     <interface client_id="delay:right" />
  </node>
  <link client_id="link1">
     <interface_ref client_id="node0:if0" />
     <interface_ref client_id="delay:left" />
     <property source_id="delay:left" dest_id="node0:if0"/>
     <property source_id="node0:if0" dest_id="delay:left"/>
     <link_type name="lan"/>
  </link>
  <link client_id="link2">
     <interface_ref client_id="node1:if0" />
     <interface_ref client_id="delay:right" />
     <property source_id="delay:right" dest_id="node1:if0"/>
     <property source_id="node1:if0" dest_id="delay:right"/>
     <link_type name="lan"/>
     </link>
</rspec>

Install a specific disk image on a node

With the following addition of a disk_image tag, you can specify a specific disk image for a node. The currently supported images are:

  • the default image is an Ubuntu 12.04 LTS image
  • DEB60_64-STD with vlan-patched kernel version 3.9.6: urn:publicid:IDN+wall2.ilabt.iminds.be+image+emulab-ops:DEB60_64-VLAN
  • DEB77-64-STD (Debian 7.7 standard): urn:publicid:IDN+wall2.ilabt.iminds.be+image+emulab-ops:DEB77-64-STD
  • FreeBSD 8.3: urn:publicid:IDN+wall2.ilabt.iminds.be+image+emulab-ops:FBSD83-STD
  • FEDORA15-64-STD: urn:publicid:IDN+wall2.ilabt.iminds.be+image+emulab-ops:FEDORA15-64-STD
  • CentOS 6.5: urn:publicid:IDN+wall2.ilabt.iminds.be+image+emulab-ops:CENTOS65-64-STD-BIG2
  • Ubuntu 14.04 LTS: urn:publicid:IDN+wall2.ilabt.iminds.be+image+emulab-ops:UBUNTU14-64-STD
  • Windows 7: urn:publicid:IDN+wall2.ilabt.iminds.be+image+emulab-ops:WIN7SP1-STD (note: it takes about 20 minutes to swap in a Windows 7 node)

Note, the Debian 7.7, Ubuntu 14.04 and CentOS 6.5 (and newer images) have a root filesystem of 15GB, while the other (older) OSses have only about 6GB root filesystem (which may be limiting when you install a lot of software yourself.

You have to add the disk_image tag to the sliver_type tag:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec generated="2014-02-01T16:47:22.736+01:00" generated_by="Experimental jFed Rspec Editor" type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd http://www.protogeni.net/resources/rspec/ext/delay/1 http://www.protogeni.net/resources/rspec/ext/delay/1/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <node client_id="node0" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
     <sliver_type name="raw-pc">
        <disk_image name="urn:publicid:IDN+wall2.ilabt.iminds.be+image+emulab-ops:DEB76-64-STD"/>
     </sliver_type>
  </node>
</rspec>

This disk_image tag makes it also possible to transfer images from one emulab/instageni installation to another one. You need the http url for the image metadata (which you get when you create an image):

<disk_image name="https://www.wall2.ilabt.iminds.be/image_metadata.php?uuid=dd795c55-0a8b-11e4-b407-001517becdc1"/>

The above url is for the mentioned Debian 7.6 64 bits image. One caveat though: this will work automatically when you deploy XEN VMs, but for raw pcs, the local testbed administrator has to confirm the hardware types on which this image is supported.

Install software when provisioning and run a script after provisioning

With the following services parts, you can install tar balls and run scripts after swap in:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec generated="2014-02-01T16:47:22.736+01:00" generated_by="Experimental jFed Rspec Editor" type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd http://www.protogeni.net/resources/rspec/ext/delay/1 http://www.protogeni.net/resources/rspec/ext/delay/1/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <node client_id="node0" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
     <sliver_type name="raw-pc"/>
     <services>
          <execute shell="sh" command="sudo apt-get install dstat"/>
          <install url="http://download.videolan.org/pub/videolan/vlc/0.5.1/vlc-0.5.1.tar.gz" install_path="/local"/>
     </services>
  </node>
</rspec>

You can repeat execute shell and install url multiple times. To debug these scripts, you can check the following on a node after it has started: The startup script is referenced in /var/emulab/boot/startupcmd.

The output of the commands can be found in more /var/tmp/startup*.

For more examples and info, see alo http://www.protogeni.net/wiki/ServicesFaq.

Combine everything

You can combine everything, which results in http://jfed.iminds.be/impairment.rspec (this URL can be used directly in jFed Open URL).

Request RSpecs Virtual Wall (virtual hosts)

OpenVZ container

The Virtual Wall also supports OpenVZ containers, which can be used as follows:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec generated="2014-02-23T22:30:46.312+01:00" generated_by="Experimental jFed Rspec Editor" type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <node client_id="node0" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="false">
      <sliver_type name="emulab-openvz"/>
  </node>
</rspec>

The OpenVZ hosts are not IPv6 enabled, but only have a private IPv4 address, so you need to enable SSH proxy access in jFed to login on them. The special thing here is that the physical host is dedicated to your slice. So, if you ask for 5 VMs they will be put on the same physical host, but this host is only used by your slice. The VMs have access to all CPU and all RAM.

XEN VM

The Virtual Wall also supports XEN VMs, which can be used as follows:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec generated="2014-02-23T22:30:46.312+01:00" generated_by="Experimental jFed Rspec Editor" type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <node client_id="node0" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="false">
      <sliver_type name="emulab-xen"/>
  </node>
</rspec>

The XEN hosts also have a unique IPv6 address, so you need IPv6 access to login on them, or you can enable SSH proxy access in jFed to login on them.

By using exclusive="false", the VMs are put on shared physical hosts (together with other experiments). However, if you use exclusive="true" (use e.g. jFed RSpec editing mode), then a new physical host will be set up with virtualization for your experiment only, and you will have full root access to the XEN DOM0 host. For this: ssh with your same public/private key to the hostname after dropping vm-x. E.g. n096-10bvm-3.wall2.ilabt.iminds.be has n096-10b.wall2.ilabt.iminds.be as DOM0 hostname. You can use XEN xl commands (xl list, xl info, ...) to manipulate the VMs.

Bind the XEN VM to a specific host

In the same way as you can bind a physical host to a specific machine, you can bind also a VM to a specific host (this can be a shared host or a dedicated host).

This means that you choose a specific node. The node names should be mentioned in the listresources call, e.g. n095-01a in the example below:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec generated="2014-02-23T20:07:09.675+01:00" generated_by="Experimental jFed Rspec Editor" type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <node client_id="node0" component_id="urn:publicid:IDN+wall2.ilabt.iminds.be+node+n095-01a" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
      <sliver_type name="emulab-xen"/>
  </node>
</rspec>

(in Jfed, just choose your specific node through the dialog box when right clicking on the node)

XEN VM options

You can tweak the parameters of your VM in the following way (be aware of the xmlns:emulab namespace)):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec generated="2014-03-22T01:53:21.460+01:00" generated_by="Experimental jFed Rspec Editor" type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:jFed="http://jfed.iminds.be/rspec/ext/jfed/1" xmlns:jFedBonfire="http://jfed.iminds.be/rspec/ext/jfed-bonfire/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1">
  <node client_id="node0" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
      <sliver_type name="emulab-xen">
        <emulab:xen cores="10" ram="8192" disk="50"/>
    </sliver_type>
  </node>
</rspec>

As can be seen, the number of cores, RAM and extra disk size (extra partition is created which you can enable) can be configured (use e.g. jFed RSpec editing mode).

Take into account the following boundaries:

For a VM on a shared host:

  • RAM bigger then 128 (default 1024MB)
  • extra disk max 100GB
  • max 4 cores

For a VM on an exclusive host:

  • RAM, cores, and disk is only limited to the physical host. (e.g. 10 cores, 8GB RAM and 50GB disk for 1 VM is possible). See Virtual Wall.

If you define extra disk space, it will be available as an extra partition on /dev/xvda.

XEN network topologies

It is also possible to draw topologies between XEN VMs (layer 2 links), in the same way as for physical machines, but you have to specify IP addresses for the links in the 192.168.x.x IP range, otherwise routing will get bad. See above for specifying the IP addresses on links:

<interface client_id="node2:if0">
   <ip address="192.168.101.3" netmask="255.255.255.0" type="ipv4"/>
</interface>

XEN public IPv4 address

All VMs at the Virtual Wall have a public IPv6 address and a private IPv4 address. However, it is possible to ask a public IPv4 address as well, as follows (see routable_control_ip):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec generated="2014-03-22T01:53:21.460+01:00" generated_by="Experimental jFed Rspec Editor" type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:jFed="http://jfed.iminds.be/rspec/ext/jfed/1" xmlns:jFedBonfire="http://jfed.iminds.be/rspec/ext/jfed-bonfire/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1">
  <node client_id="node0" exclusive="false" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm">
    <sliver_type name="emulab-xen"/>
    <routable_control_ip xmlns="http://www.protogeni.net/resources/rspec/ext/emulab/1"/>
  </node>
</rspec>

Request public IPv4 addresses for my nodes

All Virtual Wall machines have a public IPv6 address and a private IPv4 address. As shown above, you can ask a XEN VM with a public IPv4 control interface. It is however also possible to ask for IPv4 addresses as a resource. This makes it possible to use then that IP address e.g. to make a bare metal (raw-pc) publicly reachable over IPv4, or to build your own cloud with a number of public IPv4 addresses. This goes as follows, for asking 1 address (pay attention that the routable_pool tag is NOT inside a node tag, it is just a separate resource):

<?xml version='1.0'?>
<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request" generated_by="jFed RSpec Editor" generated="2015-10-27T03:37:48.061+01:00" xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1" xmlns:jfedBonfire="http://jfed.iminds.be/rspec/ext/jfed-bonfire/1" xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1" xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1" xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1" xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:jfed="http://jfed.iminds.be/rspec/ext/jfed/1" xmlns:sharedvlan="http://www.protogeni.net/resources/rspec/ext/shared-vlan/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd ">
  <node client_id="node0" exclusive="true" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" component_id="urn:publicid:IDN+wall2.ilabt.iminds.be+node+n105-05">
    <sliver_type name="raw-pc"/>
  </node>
  <emulab:routable_pool client_id="foo" count="1" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" type="any"/>
</rspec>

When the request was successful, the manifest will contain:

<emulab:routable_pool client_id="foo"
     component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm"
     count="1" type="any">
     <emulab:ipv4 address="193.190.127.232" netmask="255.255.255.192"/>
</emulab:routable_pool>

so you know the IP address that has been assigned. See geni-get-info.py example for a script to fetch these IP addresses from the manifest on the node itself.

If you want to assign the IP address to the node, then execute following steps as root:

modprobe 8021q
WALL1: vconfig add eth0 28    (note: eth0 is control interface, this can be another number as well)
WALL1: ifconfig eth0.28 the-ip-from-manifest netmask 255.255.255.192
WALL1: route del default && route add default gw 193.190.127.129
WALL2: vconfig add eth0 29    (note: eth0 is control interface, this can be another number as well)
WALL2: ifconfig eth0.29 the-ip-from-manifest netmask 255.255.255.192
WALL2: route del default && route add default gw 193.190.127.193

When connected over IPv4 to your server, these commands will cause you to lose connectivity to the node, as the route from the private IPv4-address has been erased. You must now reconnect to the server by using the public IPv4-address. We recommend using an IPv6 connection to the node to prevent connectivity interruptions. (You can use the built-in jFed proxy for this).

Request RSpecs w-iLab.t

Normally, an experimenter tool as jFed will hide these RSpecs from you the experimenter, but if you need special features or want to use other tools, you might need these Request RSpecs. If you want other configurations, you can also start up jFed and go into the Raw RSpec view, to have a look at the RSpecs.

The RSpecs for w-iLab.t are very similar to these of the Virtual Wall, with the following remarks:

  • in w-iLab.t you typically want to use specifc nodes as in wireless experimenters the location plays a role
  • impairment nodes are not supported in w-iLab.t
  • the URN of the component manager is different

Simple unbound RSpec

Unbound means that the testbed chooses a node for you. node0 is the name of the node:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec generated="2014-02-23T20:01:56.848+01:00" generated_by="Experimental jFed Rspec Editor" type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <node client_id="node0" component_manager_id="urn:publicid:IDN+wilab2.ilabt.iminds.be+authority+cm" exclusive="true">
      <sliver_type name="raw-pc"/>
  </node>
</rspec>

Bound RSpec

This means that you choose a specific node. The node names should be mentioned in the listresources call, e.g. zotacB1 (they are numbered according a grid) in the example below:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec generated="2014-02-23T20:07:09.675+01:00" generated_by="Experimental jFed Rspec Editor" type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <node client_id="node0" component_id="urn:publicid:IDN+wilab2.ilabt.iminds.be+node+zotacB1" component_manager_id="urn:publicid:IDN+wilab2.ilabt.iminds.be+authority+cm" exclusive="true">
      <sliver_type name="raw-pc"/>
  </node>
</rspec>

Use specific images, install software or run a script

This is the same as for the Virtual Wall. The following images are supported on w-iLab.t:

* the default image is an Ubuntu 12.04 LTS 64 bit image with OMF5.4 installed (UBUNTU12-64-OMF54)
* FreeBSD 8.3 32 bit: ``urn:publicid:IDN+wilab2.ilabt.iminds.be+image+emulab-ops//FBSD83-STD``
* Debian 6.0 64 bit: ``urn:publicid:IDN+wilab2.ilabt.iminds.be+image+emulab-ops//DEB60_64-STD``
* Fedora 15 64 bit: ``urn:publicid:IDN+wilab2.ilabt.iminds.be+image+emulab-ops//FEDORA15-64-STD``
* OpenWRT: ``urn:publicid:IDN+wilab2.ilabt.iminds.be+image+emulab-ops//openWRT``

Note on OpenWRT: this image has less functionality then the others, e.g. no mount of your homedir, no installed ssh keys, just use login: root, password: root