Configure a node as a vlan router

[Prerequiste]

  sudo apt-get install bridge-utils

  sudo apt-get install vlan

 

[Topology]

 

[Script]

#!/usr/bin/python

 

from mininet.net import Mininet

from mininet.node import Controller, RemoteController, OVSKernelSwitch, OVSLegacyKernelSwitch, UserSwitch

from mininet.cli import CLI

from mininet.log import setLogLevel

from mininet.link import Link, TCLink

 

def topology():

    "Create a network."

    net = Mininet( controller=RemoteController, link=TCLink, switch=OVSKernelSwitch )

    print "*** Creating nodes"

    h1 = net.addHost( 'h1', mac='00:00:00:00:00:01', ip='0.0.0.0' )

    h2 = net.addHost( 'h2', mac='00:00:00:00:00:02', ip='192.168.10.1/24' )

    h3 = net.addHost( 'h3', mac='00:00:00:00:00:03', ip='192.168.10.2/24' )

    h4 = net.addHost( 'h4', mac='00:00:00:00:00:04', ip='192.168.20.1/24' )

    h5 = net.addHost( 'h5', mac='00:00:00:00:00:05', ip='192.168.20.2/24' )

    h6 = net.addHost( 'h6', mac='00:00:00:00:00:06', ip='0.0.0.0' )

    c7 = net.addController( 'c7', controller=RemoteController, ip='127.0.0.1', port=6633 )

    print "*** Creating links"

    Link(h1, h2, intfName1='h1-eth0')

    Link(h1, h3, intfName1='h1-eth1')

    Link(h1, h4, intfName1='h1-eth2')

    Link(h1, h5, intfName1='h1-eth3')

    Link(h1, h6, intfName1='h1-eth4', intfName2='h6-eth0')     

    net.build()

    h1.cmd("sudo ifconfig h1-eth0 0")

    h1.cmd("sudo ifconfig h1-eth1 0")

    h1.cmd("sudo ifconfig h1-eth2 0")

    h1.cmd("sudo ifconfig h1-eth3 0")

    h1.cmd("sudo ifconfig h1-eth4 0")

    h1.cmd("sudo brctl addbr brvlan10")

    h1.cmd("sudo brctl addif brvlan10 h1-eth0")

    h1.cmd("sudo brctl addif brvlan10 h1-eth1")

    h1.cmd("sudo brctl addbr brvlan20")

    h1.cmd("sudo brctl addif brvlan20 h1-eth2")

    h1.cmd("sudo brctl addif brvlan20 h1-eth3")

    h1.cmd("sudo vconfig add h1-eth4 10")

    h1.cmd("sudo vconfig add h1-eth4 20")

    h1.cmd("sudo brctl addif brvlan10 h1-eth4.10")

    h1.cmd("sudo brctl addif brvlan20 h1-eth4.20")

    h1.cmd("sudo ifconfig h1-eth4.10 up")

    h1.cmd("sudo ifconfig h1-eth4.20 up")

    h1.cmd("sudo ifconfig brvlan10 up")

    h1.cmd("sudo ifconfig brvlan20 up")

    h6.cmd("sudo vconfig add h6-eth0 10")

    h6.cmd("sudo vconfig add h6-eth0 20")

    h6.cmd("sudo ifconfig h6-eth0.10 192.168.10.254 netmassk 255.255.255.0 up")

    h6.cmd("sudo ifconfig h6-eth0.20 192.168.20.254 netmassk 255.255.255.0 up")

    h6.cmd("sudo echo 1 > /proc/sys/net/ipv4/ip_forward")

    h2.cmd("sudo ip route add 192.168.20.0/24 via 192.168.10.254 dev h2-eth0")

    h3.cmd("sudo ip route add 192.168.20.0/24 via 192.168.10.254 dev h3-eth0")

    h4.cmd("sudo ip route add 192.168.10.0/24 via 192.168.20.254 dev h4-eth0")

    h5.cmd("sudo ip route add 192.168.10.0/24 via 192.168.20.254 dev h5-eth0")

    c7.start()

    print "*** Running CLI"

    CLI( net )

    print "*** Stopping network"

    net.stop()

 

if __name__ == '__main__':

    setLogLevel( 'info' )

    topology()

 

[Execution]

 

 

 

Dr. Chih-Heng Ke (smallko@gmail.com)

Department of Computer Science and Information Engineering,

National Quemoy University, Kinmen, Taiwan