Trellis v0.1 Power User Guide
This page describes the low-level mechanisms for configuring virtual topologies on nodes running the VINI Trellis v0.1 kernel (2.6.22.14-vs2.3.0.32.1.planetlab #1 SMP Wed Apr 30 16:56:00 EDT 2008).
Trellis nodes
Trellis v0.1 (tech report) is running on the following nodes:
- vini1.princeton.vini-veritas.net
- vini2.alta.internet2.vini-veritas.net
- vini2.chic.internet2.vini-veritas.net
- vini2.hous.internet2.vini-veritas.net
- vini2.losa.internet2.vini-veritas.net
- vini2.kans.internet2.vini-veritas.net
- vini2.newy.internet2.vini-veritas.net
- vini2.salt.internet2.vini-veritas.net
- vini2.wash.internet2.vini-veritas.net
Slice attributes
In order to be able to configure interfaces and add routes, your slice needs to be set up with the proper slice attributes. Contact Andy Bavier to enable topology creation for a particular slice.
Entering a network container
You should automatically end up inside a network container when you ssh into your slice. By default you will see only the loopback device and an empty routing table:
[acb@cadenza iias]$ ssh pl_trellis@vini2.chic.internet2.vini-veritas.net
[pl_trellis@vini2 ~]$ /sbin/ifconfig -a
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:4402 errors:0 dropped:0 overruns:0 frame:0
TX packets:4402 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:336560 (328.6 KiB) TX bytes:336560 (328.6 KiB)
[pl_trellis@vini2 ~]$ /sbin/route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
[pl_trellis@vini2 ~]$
Configuring a topology
The current method for setting up a topology uses modified versions of the PL-VINI Ruby scripts. You may want to familiarize yourself with the PL-VINI User Guide.
To use the PL-VINI scripts with Trellis, first check out the Trellis development branch of the scripts:
# export CVS_RSH=ssh # cvs -d <you>-visp@cvs.cs.princeton.edu:/cvs co -P -r trellis_0_1_branch visp/iias
Next, you must add a couple of lines to your Ruby topology specification, specifying the environment as Trellis and the GRE key to use in your topology. This will look something like:
$iias = Slice.new('pl_trellis')
$iias.set_environment('Trellis')
$iias.set_key(101);
See config/trellis.rb for an example. Then perform the following steps in order (similar to PL-VINI):
- make configs sets up the per-node configuration files in the
vini/subdirectory - make sync copies the configuration files to the nodes
- make topo sets up the virtual topology in your slice – at this point you can login to any of the nodes in your slice and interact with the virtual links
- make test pings each adjacent node in the topology to test connectivity
- make start runs the routing software (e.g., Quagga) on the virtual topology
- make stop kills the routing software
- make teardown tears down the topology
For example, after setting up the topology on vini2.chic.internet2.vini-veritas.net using conf/trellis.rb as the configuration file:
[pl_trellis@vini2 ~]$ /sbin/ifconfig
a101if0 Link encap:Ethernet HWaddr 46:C9:C0:08:BB:81
inet addr:192.168.100.3 Bcast:192.168.100.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1458 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:384 (384.0 b) TX bytes:308 (308.0 b)
a101if1 Link encap:Ethernet HWaddr 7A:E9:5A:E4:41:DE
inet addr:192.168.103.2 Bcast:192.168.103.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1458 Metric:1
RX packets:14 errors:0 dropped:0 overruns:0 frame:0
TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:944 (944.0 b) TX bytes:1070 (1.0 KiB)
a101if2 Link encap:Ethernet HWaddr E6:5D:52:82:52:AF
inet addr:192.168.104.2 Bcast:192.168.104.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1458 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:384 (384.0 b) TX bytes:398 (398.0 b)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8688 errors:0 dropped:0 overruns:0 frame:0
TX packets:8688 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:673182 (657.4 KiB) TX bytes:673182 (657.4 KiB)
nat101 Link encap:Ethernet HWaddr 06:FD:AE:77:5E:14
inet addr:10.0.101.2 Bcast:10.0.101.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:384 (384.0 b) TX bytes:0 (0.0 b)
[pl_trellis@vini2 ~]$ /sbin/route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0 * 255.255.255.0 U 0 0 0 a101if0
10.0.101.0 * 255.255.255.0 U 0 0 0 nat101
192.168.103.0 * 255.255.255.0 U 0 0 0 a101if1
192.168.104.0 * 255.255.255.0 U 0 0 0 a101if2
default 10.0.101.1 0.0.0.0 UG 0 0 0 nat101
Interfaces starting with the letter "a" correspond to the virtual links in the topology. The interface starting with "nat" is used to connect outside of the virtual topology via NAT.
Known issues
- IP multicast doesn't work over the virtual topology.
- XORP doesn't run inside a network container. The problem seems to be that
/proc/sys/net/ipv4/ip_forwardis not present for some reason. - Raw forwarding performance is lower than that described in the Trellis tech report because the virtual links currently use the Linux
bridgeandetunmodules instead ofshortbridge/ztun.

