from optparse import OptionParser
def get_options():
- usage = ("usage: %prog -N <vif-name> -t <vif-type> -a <ip4-address> "
- "-n <net-prefix> -s <snat> -p <pointopoint> "
- "-q <txqueuelen> -g <gre_key> -G <gre_remote> ")
+ usage = ("usage: %prog -u <slicename> -N <vif-name> -t <vif-type> -a <ip4-address> "
+ "-n <net-prefix> -S <snat> -p <pointopoint> -q <txqueuelen> "
+ "-g <gre_key> -G <gre_remote> -f <vif-name-file> ")
parser = OptionParser(usage = usage)
+ parser.add_option("-u", "--slicename", dest="slicename",
+ help = "The name of the PlanetLab slice ",
+ type="str")
+
parser.add_option("-N", "--vif-name", dest="vif_name",
help = "The name of the virtual interface, or a "
"unique numeric identifier to name the interface "
default = None,
type="str")
+ parser.add_option("-f", "--vif-name-file", dest="vif_name_file",
+ help = "File to store the virtual interface name assigned by the OS",
+ default = "vif_name", type="str")
+
(options, args) = parser.parse_args()
vif_type = vsys.IFF_TAP
if options.vif_type and options.vif_type == "IFF_TUN":
vif_type = vsys.IFF_TUN
- return (options.vif_name, vif_type, options.ip4_address,
+ return (options.slicename, options.vif_name, vif_type, options.ip4_address,
options.net_prefix, options.snat, options.pointopoint,
- options.txqueuelen, options.gre_key, options.gre_remote)
+ options.txqueuelen, options.gre_key, options.gre_remote,
+ options.vif_name_file)
if __name__ == '__main__':
- (vif_name, vif_type, ip4_address, net_prefix, snat, pointopoint,
- pointopoint, txqueuelen, gre_key, gre_remote) = get_options()
+ (slicename, vif_name, vif_type, ip4_address, net_prefix, snat, pointopoint,
+ txqueuelen, gre_key, gre_remote, vif_name_file) = get_options()
if (gre_key):
import pwd
import getpass
- slicename = getpass.getuser()
sliceid = pwd.getpwnam(slicename).pw_uid
if vif_type == vsys.IFF_TAP:
vif_prefix = "tun"
# if_name should be a unique numeric vif id
- vif_name = "%s%s-%d" % (vif_prefix, sliceid, vif_name)
+ vif_name = "%s%s-%s" % (vif_prefix, sliceid, vif_name)
- vsys.vif_up(vif_name, ip4_address, net_prefix, snat = snat,
+ try:
+ vsys.vif_up(vif_name, ip4_address, net_prefix, snat = snat,
pointopoint = pointopoint, txqueuelen = txqueuelen,
gre_key = gre_key, gre_remote = gre_remote)
-
+
+ except RuntimeError as e:
+ import sys
+ import traceback
+ traceback.print_exc(file=sys.stderr)
+
+ # Ignore warnings
+ if e.message.find("WARNING:") < 0:
+ sys.exit(1)
+
+ # Saving interface name to vif_name_file
+ f = open(vif_name_file, 'w')
+ f.write(vif_name)
+ f.close()
+
+