#!/usr/bin/env python from mininet.cli import CLI from mininet.node import Link, Host from mininet.net import Mininet from mininet.node import RemoteController from mininet.term import makeTerm from mininet.topo import Topo from functools import partial class VLANHost( Host ): "Host connected to VLAN interface" def config( self, vlan=10, **params ): """Configure VLANHost according to (optional) parameters: vlan: VLAN ID for default interface""" r = super( VLANHost, 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 class VplsTopo(Topo): ''' VPLS demo Topology ''' def __init__(self): Topo.__init__(self) s1 = self.addSwitch('s1') s2 = self.addSwitch('s2') s3 = self.addSwitch('s3') s4 = self.addSwitch('s4') s5 = self.addSwitch('s5') vpls1h1 = self.addHost('vpls1h1', cls=VLANHost, vlan=10, mac='00:00:00:00:00:01') vpls1h2 = self.addHost('vpls1h2', cls=VLANHost, vlan=10, mac='00:00:00:00:00:02') vpls1h3 = self.addHost('vpls1h3', cls=VLANHost, vlan=20, mac='00:00:00:00:00:03') vpls2h1 = self.addHost('vpls2h1', cls=VLANHost, vlan=30, mac='00:00:00:00:00:04') vpls2h2 = self.addHost('vpls2h2', cls=VLANHost, vlan=40, mac='00:00:00:00:00:05') vpls2h3 = self.addHost('vpls2h3', mac='00:00:00:00:00:06') vpls3h1 = self.addHost('vpls3h1', mac='00:00:00:00:00:07') vpls3h2 = self.addHost('vpls3h2', mac='00:00:00:00:00:08') self.addLink(s1, vpls1h1, port1=1, port2=0) self.addLink(s2, vpls2h2, port1=1, port2=0) self.addLink(s3, vpls1h3, port1=1, port2=0) self.addLink(s3, vpls3h1, port1=2, port2=0) self.addLink(s4, vpls1h2, port1=1, port2=0) self.addLink(s4, vpls2h1, port1=2, port2=0) self.addLink(s4, vpls2h3, port1=3, port2=0) self.addLink(s5, vpls3h2, port1=1, port2=0) self.addLink(s1, s4) self.addLink(s1, s2) self.addLink(s2, s4) self.addLink(s2, s3) self.addLink(s3, s4) self.addLink(s3, s5) topos = { 'vpls': ( lambda: VplsTopo() ) } if __name__ == '__main__': from onosnet import run run(VplsTopo())