#!/usr/bin/env python from mininet.node import Host from mininet.topo import Topo class VLANHost(Host): """Host connected to VLAN interface""" def config(self, vlan=100, **params): """Configure VLANHost according to (optional) parameters vlan: VLAN ID for default interface""" hostid = 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 new_name = "%s.%d" % (intf, vlan) # update the (Mininet) interface to refer to VLAN interface name intf.name = new_name # add VLAN interface to host's name to intf map self.nameToIntf[new_name] = intf return hostid class VlanTopo(Topo): """Simple topology example.""" def __init__(self): """Create custom topo.""" # Initialize topology Topo.__init__(self) # Add hosts and switches host1 = self.addHost("h1", cls=VLANHost, vlan=200) host2 = self.addHost("h2", cls=VLANHost, vlan=300) host3 = self.addHost("h3", cls=VLANHost, vlan=200) host4 = self.addHost("h4", cls=VLANHost, vlan=300) host5 = self.addHost("h5", cls=VLANHost, vlan=200) host6 = self.addHost("h6", cls=VLANHost, vlan=300) s1 = self.addSwitch("s1") s2 = self.addSwitch("s2") s3 = self.addSwitch("s3") self.addLink(s1, s2) self.addLink(s2, host1) self.addLink(s2, host2) self.addLink(s2, host3) self.addLink(s1, s3) self.addLink(s3, host4) self.addLink(s3, host5) self.addLink(s3, host6) topos = {"vlantopo": (lambda: VlanTopo())}