--- /dev/null
+#!/usr/bin/env python
+
+# vsys.py: Python functions to wrap PlanetLab vsys API'
+# Alina Quereilhac - 02/09/2012
+#
+# Copyright (c) 202 INRIA
+#
+
+''' This extension provides easy to use Python functions to
+interact with the PlanetLab vsys API.
+
+The vsys API is presented in the following publication:
+
+Vsys: A programmable sudo
+S Bhatia, G Di Stasi, T Haddow, A Bavier, S Muir, L Peterson
+In USENIX 2011
+
+'''
+
+IFF_TUN = 0x0001
+IFF_TAP = 0x0002
+
+def vif_up(if_name, ip, prefix, snat = False):
+ """ Configures a virtual interface with the values given by the user and
+ sets its state UP
+
+ Parameters:
+ if_name: the name of the virtual interface
+ ip: the IP address to be assigned to the interface
+ prefix: the network prefix associated to the IP address
+ snat: whether to enable SNAT on the virtual interface.
+
+ Return value:
+ On success, return 0.
+ On error, a RuntimeError is raised."""
+
+ import _vsys
+ (code, msg) = _vsys.vif_up(if_name, ip, str(prefix), snat)
+
+ if code < 0:
+ raise RuntimeError(msg)
+
+
+def vif_down(if_name):
+ """ Sets the state of a virtual interface DOWN
+
+ Parameters:
+ if_name: the name of the virtual interface
+
+ Return value:
+ On success, return 0.
+ On error, a RuntimeError is raised."""
+
+ import _vsys
+ (code, msg) = _vsys.vif_down(if_name)
+
+ if code < 0:
+ raise RuntimeError(msg)
+
+def fd_tuntap(if_type, no_pi = False):
+ """Creates a TAP or TUN device in PlanetLab, and returns the device name and
+ the associated file descriptor.
+
+ Parameters:
+ if_type: the type of virtual device. Either IFF_TAP (0x0001) or
+ IFF_TUN (0x0002)
+ no_pi: set flag IFF_NO_PI
+
+ Return value:
+ On success, fd_tuntap returns a tuple containing the file descriptor
+ associated to the device and the device name assigned by the PlanetLab
+ vsys script.
+ On error, a RuntimeError is raised."""
+
+ import _vsys
+ (fd, if_name) = _vsys.fd_tuntap(if_type, no_pi)
+
+ if fd < 0:
+ raise RuntimeError(if_name)
+
+ return (fd, if_name)
+
+def vroute(action, network, prefix, host, device):
+ """ Adds or removes routes on PlanetLab virtual interfaces (TAP/TUN).
+
+ Note that all networks and gateways must belong to the virtual
+ network segment associated to the vsys_vnet tag for the slice.
+
+ Parameters:
+ action: either 'add' or 'del'
+ network: destintation network
+ prefix: destination network prefix
+ host: IP of gateway virtual interface
+ device: name of the gateway virtual interface
+
+ Return value:
+ On success, vroute returns 0.
+ On error, a RuntimeError is raised."""
+
+ import _vsys
+ (code, msg) = _vsys.vroute(action, network, str(prefix), host, device)
+
+ if code < 0:
+ raise RuntimeError(msg)
+
+