From be1ed1036333f8a104cd073a40a05c7add346481 Mon Sep 17 00:00:00 2001 From: Brian O'Connor <bocon@onlab.us> Date: Wed, 27 Aug 2014 03:58:36 -0700 Subject: [PATCH] adding vlanhost.py --- examples/vlanhost.py | 83 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 examples/vlanhost.py diff --git a/examples/vlanhost.py b/examples/vlanhost.py new file mode 100644 index 00000000..bf3e69cb --- /dev/null +++ b/examples/vlanhost.py @@ -0,0 +1,83 @@ +""" +vlanhost.py: Host subclass that uses a VLAN tag for the default interface. + +Dependencies: + This class depends on the "vlan" package + $ sudo apt-get install vlan + +Usage (example uses VLAN ID=1000): + From the command line: + sudo mn --custom vlanhost.py --host vlan,vlan=1000 + + From a script (see exampleUsage function below): + from functools import partial + from vlanhost import VLANHost + + .... + + host = partial( VLANHost, vlan=1000 ) + net = Mininet( host=host, ... ) + + Directly running this script: + sudo python vlanhost.py 1000 + +""" + +from mininet.node import Host + +class VLANHost( Host ): + + def config( self, vlan=100, **params ): + """Configure VLANHost according to (optional) parameters: + vlan: VLAN ID for default interface""" + + r = super( Host, self ).config( **params ) + + intf = self.defaultIntf() + # remove IP from default, "physical" interface + self.cmd( 'ifconfig %s inet 0' % intf ) + # create VLAN interface + self.cmd( 'vconfig add %s %d' % ( intf, vlan ) ) + # assign the host's IP to the VLAN interface + self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) ) + # update the intf name and host's intf map + newName = '%s.%d' % ( intf, vlan ) + # update the (Mininet) interface to refer to VLAN interface name + intf.name = newName + # add VLAN interface to host's name to intf map + self.nameToIntf[ newName ] = intf + + return r + +hosts = { 'vlan': VLANHost } + + +def exampleUsage( vlan ): + """Simple example of how VLANHost can be used in a script""" + # This is where the magic happens... + host = partial( VLANHost, vlan=vlan ) + # vlan (type: int): VLAN ID to be used by all hosts + + # Start a basic network using our VLANHost + topo = SingleSwitchTopo( k=2 ) + net = Mininet( host=host, topo=topo ) + net.start() + CLI( net ) + net.stop() + +if __name__ == '__main__': + import sys + from functools import partial + + from mininet.net import Mininet + from mininet.cli import CLI + from mininet.topo import SingleSwitchTopo + + try: + vlan = int( sys.argv[ 1 ] ) + except Exception: + print 'Usage: vlanhost.py <vlan id>\n' + print 'Using VLAN ID=100...' + vlan = 100 + + exampleUsage( vlan ) -- GitLab