VLAN configuration in mininet

 

[Topology]

 

h6

|

h5

|

h1,h2,h3,h4

 

h1, h2,h3,h4 are hosts, h5 is a switch, and h6 is a router.

h1 and h2 are in the same VLAN while h3 and h4 are in the same vlan.

 

[Need to do first]

1. sudo apt-get install bridge-utils

2. sudo apt-get install vlan

3.sudo modprobe 8021q

 

[mininet script]

#!/usr/bin/env python

from mininet.cli import CLI

from mininet.link import Link,TCLink,Intf

from mininet.net import Mininet

from mininet.node import RemoteController

 

if '__main__' == __name__:

  net = Mininet(link=TCLink)

  h1 = net.addHost('h1')

  h2 = net.addHost('h2')

  h3 = net.addHost('h3')

  h4 = net.addHost('h4')

  #h5 is a switch

  h5 = net.addHost('h5')

  #h6 is a router

  h6 = net.addHost('h6')

  Link(h1, h5)

  Link(h2, h5)

  Link(h3, h5)

  Link(h4, h5)

  Link(h5, h6)

  net.build()

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

  h2.cmd("ifconfig h2-eth0 0")

  h3.cmd("ifconfig h3-eth0 0")

  h4.cmd("ifconfig h4-eth0 0")

  h5.cmd("ifconfig h5-eth0 0")

  h5.cmd("ifconfig h5-eth1 0")

  h5.cmd("ifconfig h5-eth2 0")

  h5.cmd("ifconfig h5-eth3 0")

  h5.cmd("ifconfig h5-eth4 0")

  h6.cmd("ifconfig h6-eth0 0")

  h5.cmd("vconfig add h5-eth4 10")

  h5.cmd("vconfig add h5-eth4 20")

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

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

  h5.cmd("ifconfig h5-eth4.10 up")

  h5.cmd("ifconfig h5-eth4.20 up")

  h5.cmd("brctl addbr brvlan10")

  h5.cmd("brctl addbr brvlan20")

  h5.cmd("brctl addif brvlan10 h5-eth0")

  h5.cmd("brctl addif brvlan10 h5-eth1")

  h5.cmd("brctl addif brvlan10 h5-eth4.10")

  h5.cmd("brctl addif brvlan20 h5-eth2")

  h5.cmd("brctl addif brvlan20 h5-eth3")

  h5.cmd("brctl addif brvlan20 h5-eth4.20")

  h5.cmd("ifconfig brvlan10 up")

  h5.cmd("ifconfig brvlan20 up")

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

  h6.cmd("ifconfig h6-eth0.10 10.0.10.254 netmask 255.255.255.0")

  h6.cmd("ifconfig h6-eth0.20 10.0.20.254 netmask 255.255.255.0")

  h1.cmd("ifconfig h1-eth0 10.0.10.1 netmask 255.255.255.0")

  h2.cmd("ifconfig h2-eth0 10.0.10.2 netmask 255.255.255.0")

  h3.cmd("ifconfig h3-eth0 10.0.20.1 netmask 255.255.255.0")

  h4.cmd("ifconfig h4-eth0 10.0.20.2 netmask 255.255.255.0")

  h1.cmd("ip route add default via 10.0.10.254 dev h1-eth0")

  h2.cmd("ip route add default via 10.0.10.254 dev h2-eth0")

  h3.cmd("ip route add default via 10.0.20.254 dev h3-eth0")

  h4.cmd("ip route add default via 10.0.20.254 dev h4-eth0")

  CLI(net)

  net.stop()

 

[Execution]

 

 

 

 

h1 ping h2

 

h1 ping h4

 

h2 ping h3

 

 

 

[Case 2]

 

h1,h2----h3----h4---h5,h6

h1,h2,h5,h6 are hosts. h1 and h5 are in the same VLAN while h2 and h6 are in the same VLAN.

h3, h4 are configured as switches.

 

[mininet script]

#!/usr/bin/env python

from mininet.cli import CLI

from mininet.link import Link,TCLink,Intf

from mininet.net import Mininet

from mininet.node import RemoteController

 

if '__main__' == __name__:

  net = Mininet(link=TCLink)

  #h1 is under vlan10

  h1 = net.addHost('h1')

  #h2 is under vlan20

  h2 = net.addHost('h2')

  #h3 is a switch

  h3 = net.addHost('h3')

  #h4 is a switch

  h4 = net.addHost('h4')

  #h5 is under vlan10

  h5 = net.addHost('h5')

  #h6 is under vlan20

  h6 = net.addHost('h6')

  Link(h1, h3)

  Link(h2, h3)

  Link(h3, h4)

  Link(h5, h4)

  Link(h6, h4)

  net.build()

  h3.cmd("ifconfig h3-eth2 0")

  h4.cmd("ifconfig h4-eth0 0")

  h3.cmd("vconfig add h3-eth2 10")

  h3.cmd("vconfig add h3-eth2 20")

  h4.cmd("vconfig add h4-eth0 10")

  h4.cmd("vconfig add h4-eth0 20")

  h3.cmd("ifconfig h3-eth2.10 up")

  h3.cmd("ifconfig h3-eth2.20 up")

  h4.cmd("ifconfig h4-eth0.10 up")

  h4.cmd("ifconfig h4-eth0.20 up")

  h3.cmd("brctl addbr brvlan10")

  h3.cmd("brctl addbr brvlan20")

  h3.cmd("brctl addif brvlan10 h3-eth0")

  h3.cmd("brctl addif brvlan20 h3-eth1")

  h3.cmd("brctl addif brvlan10 h3-eth2.10")

  h3.cmd("brctl addif brvlan20 h3-eth2.20")

  h4.cmd("brctl addbr brvlan10")

  h4.cmd("brctl addbr brvlan20")

  h4.cmd("brctl addif brvlan10 h4-eth1")

  h4.cmd("brctl addif brvlan20 h4-eth2")

  h4.cmd("brctl addif brvlan10 h4-eth0.10")

  h4.cmd("brctl addif brvlan20 h4-eth0.20")

  h3.cmd("ifconfig brvlan10 up")

  h3.cmd("ifconfig brvlan20 up")

  h4.cmd("ifconfig brvlan10 up")

  h4.cmd("ifconfig brvlan20 up")

  CLI(net)

  net.stop()

 

[Execution]

 

 

[case 3]

[mininet script:vlan3.py]

#!/usr/bin/env python

from mininet.net import Mininet

from mininet.cli import CLI

from mininet.link import Link,TCLink,Intf

 

if '__main__' == __name__:

  net = Mininet(link=TCLink)

  h1 = net.addHost('h1')

  h2 = net.addHost('h2')

  h3 = net.addHost('h3')

  h4 = net.addHost('h4')

  #h5 is a switch

  h5 = net.addHost('h5')

  h6 = net.addHost('h6')

  Link(h1, h5)

  Link(h2, h5)

  Link(h3, h6)

  Link(h4, h6)

  Link(h5, h6)

  net.build()

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

  h2.cmd("ifconfig h2-eth0 0")

  h3.cmd("ifconfig h3-eth0 0")

  h4.cmd("ifconfig h4-eth0 0")

  h5.cmd("ifconfig h5-eth0 0")

  h5.cmd("ifconfig h5-eth1 0")

  h5.cmd("ifconfig h5-eth2 0")

  h6.cmd("ifconfig h6-eth0 0")

  h6.cmd("ifconfig h6-eth0 0")

  h6.cmd("ifconfig h6-eth0 0")

  h5.cmd("vconfig add h5-eth2 10")

  h5.cmd("vconfig add h5-eth2 20")

  h6.cmd("vconfig add h6-eth2 10")

  h6.cmd("vconfig add h6-eth2 20")

  h5.cmd("ifconfig h5-eth2.10 up")

  h5.cmd("ifconfig h5-eth2.20 up")

  h6.cmd("ifconfig h6-eth2.10 up")

  h6.cmd("ifconfig h6-eth2.20 up")

  h5.cmd("brctl addbr brvlan10")

  h5.cmd("brctl addbr brvlan20")

  h5.cmd("brctl addif brvlan10 h5-eth0")

  h5.cmd("brctl addif brvlan10 h5-eth2.10")

  h5.cmd("brctl addif brvlan20 h5-eth1")

  h5.cmd("brctl addif brvlan20 h5-eth2.20")

  h5.cmd("ifconfig brvlan10 up")

  h5.cmd("ifconfig brvlan20 up")

  h6.cmd("brctl addbr brvlan10")

  h6.cmd("brctl addbr brvlan20")

  h6.cmd("brctl addif brvlan10 h6-eth0")

  h6.cmd("brctl addif brvlan10 h6-eth2.10")

  h6.cmd("brctl addif brvlan20 h6-eth1")

  h6.cmd("brctl addif brvlan20 h6-eth2.20")

  h6.cmd("ifconfig brvlan10 up")

  h6.cmd("ifconfig brvlan20 up")

  h1.cmd("ifconfig h1-eth0 10.0.10.1 netmask 255.255.255.0")

  h2.cmd("ifconfig h2-eth0 10.0.10.2 netmask 255.255.255.0")

  h3.cmd("ifconfig h3-eth0 10.0.10.3 netmask 255.255.255.0")

  h4.cmd("ifconfig h4-eth0 10.0.10.4 netmask 255.255.255.0")

  CLI(net)

  net.stop()

 

[Execution]

 

h1 can ping h3, but not h2 and h4. Because h2 and h4 are in a different vlan.

 

[case 4]

 

[mininet script:vlan2.py]

#!/usr/bin/env python

from mininet.net import Mininet

from mininet.cli import CLI

from mininet.link import Link,TCLink,Intf

 

if '__main__' == __name__:

  net = Mininet(link=TCLink)

  h1 = net.addHost('h1')

  h2 = net.addHost('h2')

  h3 = net.addHost('h3')

  h4 = net.addHost('h4')

  #h5,h6,h7 is a switch

  h5 = net.addHost('h5')

  h6 = net.addHost('h6')

  h7 = net.addHost('h7')

  #h8 is a router

  h8 = net.addHost('h8')

  Link(h1, h5)

  Link(h2, h5)

  Link(h3, h6)

  Link(h4, h6)

  Link(h5, h7)

  Link(h6, h7)

  Link(h7, h8)

  net.build()

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

  h2.cmd("ifconfig h2-eth0 0")

  h3.cmd("ifconfig h3-eth0 0")

  h4.cmd("ifconfig h4-eth0 0")

  h5.cmd("ifconfig h5-eth0 0")

  h5.cmd("ifconfig h5-eth1 0")

  h5.cmd("ifconfig h5-eth2 0")

  h6.cmd("ifconfig h6-eth0 0")

  h6.cmd("ifconfig h6-eth1 0")

  h6.cmd("ifconfig h6-eth2 0")

  h7.cmd("ifconfig h7-eth0 0")

  h7.cmd("ifconfig h7-eth1 0")

  h8.cmd("ifconfig h8-eth0 0")

  h5.cmd("vconfig add h5-eth2 10")

  h5.cmd("vconfig add h5-eth2 20")

  h6.cmd("vconfig add h6-eth2 10")

  h6.cmd("vconfig add h6-eth2 20")

  h7.cmd("vconfig add h7-eth0 10")

  h7.cmd("vconfig add h7-eth0 20")

  h7.cmd("vconfig add h7-eth1 10")

  h7.cmd("vconfig add h7-eth1 20")

  h7.cmd("vconfig add h7-eth2 10")

  h7.cmd("vconfig add h7-eth2 20")

  h8.cmd("vconfig add h8-eth0 10")

  h8.cmd("vconfig add h8-eth0 20")

  h5.cmd("ifconfig h5-eth2.10 up")

  h5.cmd("ifconfig h5-eth2.20 up")

  h6.cmd("ifconfig h6-eth2.10 up")

  h6.cmd("ifconfig h6-eth2.20 up")

  h7.cmd("ifconfig h7-eth0.10 up")

  h7.cmd("ifconfig h7-eth0.20 up")

  h7.cmd("ifconfig h7-eth1.10 up")

  h7.cmd("ifconfig h7-eth1.20 up")

  h7.cmd("ifconfig h7-eth2.10 up")

  h7.cmd("ifconfig h7-eth2.20 up")

  h5.cmd("brctl addbr brvlan10")

  h5.cmd("brctl addbr brvlan20")

  h5.cmd("brctl addif brvlan10 h5-eth0")

  h5.cmd("brctl addif brvlan10 h5-eth2.10")

  h5.cmd("brctl addif brvlan20 h5-eth1")

  h5.cmd("brctl addif brvlan20 h5-eth2.20")

  h5.cmd("ifconfig brvlan10 up")

  h5.cmd("ifconfig brvlan20 up")

  h6.cmd("brctl addbr brvlan10")

  h6.cmd("brctl addbr brvlan20")

  h6.cmd("brctl addif brvlan10 h6-eth0")

  h6.cmd("brctl addif brvlan10 h6-eth2.10")

  h6.cmd("brctl addif brvlan20 h6-eth1")

  h6.cmd("brctl addif brvlan20 h6-eth2.20")

  h6.cmd("ifconfig brvlan10 up")

  h6.cmd("ifconfig brvlan20 up")

  h7.cmd("brctl addbr brvlan10")

  h7.cmd("brctl addbr brvlan20")

  h7.cmd("brctl addif brvlan10 h7-eth0.10")

  h7.cmd("brctl addif brvlan10 h7-eth1.10")

  h7.cmd("brctl addif brvlan10 h7-eth2.10")

  h7.cmd("brctl addif brvlan20 h7-eth0.20")

  h7.cmd("brctl addif brvlan20 h7-eth1.20")

  h7.cmd("brctl addif brvlan20 h7-eth2.20")

  h7.cmd("ifconfig brvlan10 up")

  h7.cmd("ifconfig brvlan20 up")

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

  h8.cmd("ifconfig h8-eth0.10 10.0.10.1 netmask 255.255.255.0")

  h8.cmd("ifconfig h8-eth0.20 10.0.20.1 netmask 255.255.255.0")

  h1.cmd("ifconfig h1-eth0 10.0.10.2 netmask 255.255.255.0")

  h2.cmd("ifconfig h2-eth0 10.0.20.2 netmask 255.255.255.0")

  h3.cmd("ifconfig h3-eth0 10.0.10.3 netmask 255.255.255.0")

  h4.cmd("ifconfig h4-eth0 10.0.20.3 netmask 255.255.255.0")

  h1.cmd("ip route add default via 10.0.10.1 dev h1-eth0")

  h2.cmd("ip route add default via 10.0.20.1 dev h2-eth0")

  h3.cmd("ip route add default via 10.0.10.1 dev h3-eth0")

  h4.cmd("ip route add default via 10.0.20.1 dev h4-eth0")

  CLI(net)

  net.stop()

 

[execution]

Now h1 can ping h2, h3, and h4. When h1 ping h2 or h4, the packets will be sent to the router (h8) for packet forwarding.

 

[case 5]

 

[mininet script:vlan5.py]

#!/usr/bin/env python

from mininet.net import Mininet

from mininet.cli import CLI

from mininet.link import Link,TCLink,Intf

 

if '__main__' == __name__:

  net = Mininet(link=TCLink)

  h1 = net.addHost('h1')

  h2 = net.addHost('h2')

  h3 = net.addHost('h3')

  h4 = net.addHost('h4')

  #h5,h6 is a switch

  h5 = net.addHost('h5')

  h6 = net.addHost('h6')

  #h7 is a router

  h7 = net.addHost('h7')

  Link(h1, h5)

  Link(h2, h5)

  Link(h3, h6)

  Link(h4, h6)

  Link(h5, h7)

  Link(h6, h7)

  net.build()

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

  h2.cmd("ifconfig h2-eth0 0")

  h3.cmd("ifconfig h3-eth0 0")

  h4.cmd("ifconfig h4-eth0 0")

  h5.cmd("ifconfig h5-eth0 0")

  h5.cmd("ifconfig h5-eth1 0")

  h5.cmd("ifconfig h5-eth2 0")

  h6.cmd("ifconfig h6-eth0 0")

  h6.cmd("ifconfig h6-eth1 0")

  h6.cmd("ifconfig h6-eth2 0")

  h7.cmd("ifconfig h7-eth0 0")

  h7.cmd("ifconfig h7-eth1 0")

  h5.cmd("vconfig add h5-eth2 10")

  h5.cmd("vconfig add h5-eth2 20")

  h6.cmd("vconfig add h6-eth2 10")

  h6.cmd("vconfig add h6-eth2 20")

  h7.cmd("vconfig add h7-eth0 10")

  h7.cmd("vconfig add h7-eth0 20")

  h7.cmd("vconfig add h7-eth1 10")

  h7.cmd("vconfig add h7-eth1 20")

  h5.cmd("ifconfig h5-eth2.10 up")

  h5.cmd("ifconfig h5-eth2.20 up")

  h6.cmd("ifconfig h6-eth2.10 up")

  h6.cmd("ifconfig h6-eth2.20 up")

  h7.cmd("ifconfig h7-eth0.10 up")

  h7.cmd("ifconfig h7-eth0.20 up")

  h7.cmd("ifconfig h7-eth1.10 up")

  h7.cmd("ifconfig h7-eth1.20 up")

  h5.cmd("brctl addbr brvlan10")

  h5.cmd("brctl addbr brvlan20")

  h5.cmd("brctl addif brvlan10 h5-eth0")

  h5.cmd("brctl addif brvlan10 h5-eth2.10")

  h5.cmd("brctl addif brvlan20 h5-eth1")

  h5.cmd("brctl addif brvlan20 h5-eth2.20")

  h5.cmd("ifconfig brvlan10 up")

  h5.cmd("ifconfig brvlan20 up")

  h6.cmd("brctl addbr brvlan10")

  h6.cmd("brctl addbr brvlan20")

  h6.cmd("brctl addif brvlan10 h6-eth0")

  h6.cmd("brctl addif brvlan10 h6-eth2.10")

  h6.cmd("brctl addif brvlan20 h6-eth1")

  h6.cmd("brctl addif brvlan20 h6-eth2.20")

  h6.cmd("ifconfig brvlan10 up")

  h6.cmd("ifconfig brvlan20 up")

  h7.cmd("brctl addbr brvlan10")

  h7.cmd("brctl addbr brvlan20")

  h7.cmd("brctl addif brvlan10 h7-eth0.10")

  h7.cmd("brctl addif brvlan10 h7-eth1.10")

  h7.cmd("brctl addif brvlan20 h7-eth0.20")

  h7.cmd("brctl addif brvlan20 h7-eth1.20")

  h7.cmd("ifconfig brvlan10 up")

  h7.cmd("ifconfig brvlan20 up")

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

  h7.cmd("ifconfig brvlan10 10.0.10.1 netmask 255.255.255.0")

  h7.cmd("ifconfig brvlan20 10.0.20.1 netmask 255.255.255.0")

  h1.cmd("ifconfig h1-eth0 10.0.10.2 netmask 255.255.255.0")

  h2.cmd("ifconfig h2-eth0 10.0.20.2 netmask 255.255.255.0")

  h3.cmd("ifconfig h3-eth0 10.0.10.3 netmask 255.255.255.0")

  h4.cmd("ifconfig h4-eth0 10.0.20.3 netmask 255.255.255.0")

  h1.cmd("ip route add default via 10.0.10.1 dev h1-eth0")

  h2.cmd("ip route add default via 10.0.20.1 dev h2-eth0")

  h3.cmd("ip route add default via 10.0.10.1 dev h3-eth0")

  h4.cmd("ip route add default via 10.0.20.1 dev h4-eth0")

  CLI(net)

  net.stop()

 

[execution]

Now h1 can ping h2, h3, and h4. When h1 ping h2 or h4, the packets will be sent to the router (h7) for packet forwarding.

 

[case 6: This is not a vlan case. Just for future cases]

 

This case is referring to http://backreference.org/2013/07/23/gre-bridging-ipsec-and-nfqueue/ . You can find more information in this webpage.

 

[mininet script: vlan4.py]

#!/usr/bin/env python

from mininet.net import Mininet

from mininet.cli import CLI

from mininet.link import Link,TCLink,Intf

 

if '__main__' == __name__:

  net = Mininet(link=TCLink)

  h1 = net.addHost('h1')

  h2 = net.addHost('h2')

  h3 = net.addHost('h3')

  h4 = net.addHost('h4')

  h5 = net.addHost('h5')

  h6 = net.addHost('h6')

  h7 = net.addHost('h7')

  Link(h1, h5)

  Link(h2, h5)

  Link(h3, h6)

  Link(h4, h6)

  Link(h5, h7)

  Link(h6, h7)

  net.build()

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

  h2.cmd("ifconfig h2-eth0 0")

  h3.cmd("ifconfig h3-eth0 0")

  h4.cmd("ifconfig h4-eth0 0")

  h5.cmd("ifconfig h5-eth0 0")

  h5.cmd("ifconfig h5-eth1 0")

  h5.cmd("ifconfig h5-eth2 0")

  h6.cmd("ifconfig h6-eth0 0")

  h6.cmd("ifconfig h6-eth1 0")

  h6.cmd("ifconfig h6-eth2 0")

  h7.cmd("ifconfig h7-eth0 0")

  h7.cmd("ifconfig h7-eth1 0")

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

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

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

  h5.cmd("ifconfig h5-eth2 192.168.10.1 netmask 255.255.255.0")

  h6.cmd("ifconfig h6-eth2 192.168.20.1 netmask 255.255.255.0")

  h7.cmd("ifconfig h7-eth0 192.168.10.2 netmask 255.255.255.0")

  h7.cmd("ifconfig h7-eth1 192.168.20.2 netmask 255.255.255.0")

  h5.cmd("ip route add 192.168.20.0/24 via 192.168.10.2")

  h6.cmd("ip route add 192.168.10.0/24 via 192.168.20.2")

  h5.cmd("ip link add gretap type gretap local 192.168.10.1 remote 192.168.20.1 dev h5-eth2")

  h6.cmd("ip link add gretap type gretap local 192.168.20.1 remote 192.168.10.1 dev h6-eth2")

  h5.cmd("ifconfig gretap up")

  h6.cmd("ifconfig gretap up")

  h5.cmd("ip link add br0 type bridge")

  h5.cmd("ip link set h5-eth0 down")

  h5.cmd("ip link set h5-eth1 down")

  h5.cmd("ip link set h5-eth0 master br0")

  h5.cmd("ip link set h5-eth1 master br0")

  h5.cmd("ip link set h5-eth0 up")

  h5.cmd("ip link set h5-eth1 up")

  h5.cmd("ip link set br0 up")

  h5.cmd("ip addr add 10.0.0.254/24 dev br0")

  h5.cmd("ip link set gretap master br0")

  h6.cmd("ip link add br0 type bridge")

  h6.cmd("ip link set h6-eth0 down")

  h6.cmd("ip link set h6-eth1 down")

  h6.cmd("ip link set h6-eth0 master br0")

  h6.cmd("ip link set h6-eth1 master br0")

  h6.cmd("ip link set h6-eth0 up")

  h6.cmd("ip link set h6-eth1 up")

  h6.cmd("ip link set br0 up")

  h6.cmd("ip addr add 10.0.0.253/24 dev br0")

  h6.cmd("ip link set gretap master br0")

  h1.cmd("ip addr add 10.0.0.11/24 dev h1-eth0")

  h2.cmd("ip addr add 10.0.0.12/24 dev h2-eth0")

  h3.cmd("ip addr add 10.0.0.13/24 dev h3-eth0")

  h4.cmd("ip addr add 10.0.0.14/24 dev h4-eth0")

  CLI(net)

  net.stop()

 

[execution]

 

 

[case 7]

 

[mininet script:vlan4_2.py]

#!/usr/bin/env python

from mininet.net import Mininet

from mininet.cli import CLI

from mininet.link import Link,TCLink,Intf

 

if '__main__' == __name__:

  net = Mininet(link=TCLink)

  h1 = net.addHost('h1')

  h2 = net.addHost('h2')

  h3 = net.addHost('h3')

  h4 = net.addHost('h4')

  h5 = net.addHost('h5')

  h6 = net.addHost('h6')

  h7 = net.addHost('h7')

  h8 = net.addHost('h8')

  Link(h1, h5)

  Link(h2, h5)

  Link(h3, h6)

  Link(h4, h6)

  Link(h5, h7)

  Link(h6, h8)

  Link(h7, h8)

  net.build()

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

  h2.cmd("ifconfig h2-eth0 0")

  h3.cmd("ifconfig h3-eth0 0")

  h4.cmd("ifconfig h4-eth0 0")

  h5.cmd("ifconfig h5-eth0 0")

  h5.cmd("ifconfig h5-eth1 0")

  h5.cmd("ifconfig h5-eth2 0")

  h6.cmd("ifconfig h6-eth0 0")

  h6.cmd("ifconfig h6-eth1 0")

  h6.cmd("ifconfig h6-eth2 0")

  h7.cmd("ifconfig h7-eth0 0")

  h7.cmd("ifconfig h7-eth1 0")

  h8.cmd("ifconfig h8-eth0 0")

  h8.cmd("ifconfig h8-eth1 0")

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

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

  h7.cmd("vconfig add h7-eth1 10")

  h8.cmd("vconfig add h8-eth1 10")

  h7.cmd("ifconfig h7-eth1.10 192.168.10.1 netmask 255.255.255.0")

  h8.cmd("ifconfig h8-eth1.10 192.168.10.2 netmask 255.255.255.0")

  h7.cmd("ip link add gretap type gretap local 192.168.10.1 remote 192.168.10.2 dev h7-eth1.10")

  h8.cmd("ip link add gretap type gretap local 192.168.10.2 remote 192.168.10.1 dev h8-eth1.10")

  h7.cmd("ifconfig gretap up")

  h8.cmd("ifconfig gretap up")

  h7.cmd("vconfig add h7-eth0 10")

  h7.cmd("brctl addbr mylan10")

  h7.cmd("brctl addif mylan10 h7-eth0.10")

  h7.cmd("brctl addif mylan10 gretap")

  h7.cmd("ifconfig h7-eth0.10 up")

  h7.cmd("ifconfig mylan10 up")

  h7.cmd("ip addr add 10.0.0.254/24 dev mylan10")

  h8.cmd("vconfig add h8-eth0 10")

  h8.cmd("brctl addbr mylan10")

  h8.cmd("brctl addif mylan10 h8-eth0.10")

  h8.cmd("brctl addif mylan10 gretap")

  h8.cmd("ifconfig h8-eth0.10 up")

  h8.cmd("ifconfig mylan10 up")

  h8.cmd("ip addr add 10.0.0.253/24 dev mylan10")

  h5.cmd("vconfig add h5-eth2 10")

  h5.cmd("brctl addbr mylan10")

  h5.cmd("brctl addif mylan10 h5-eth0")

  h5.cmd("brctl addif mylan10 h5-eth1")

  h5.cmd("brctl addif mylan10 h5-eth2.10")

  h5.cmd("ifconfig h5-eth2.10 up")

  h5.cmd("ifconfig mylan10 up")

  h6.cmd("vconfig add h6-eth2 10")

  h6.cmd("brctl addbr mylan10")

  h6.cmd("brctl addif mylan10 h6-eth0")

  h6.cmd("brctl addif mylan10 h6-eth1")

  h6.cmd("brctl addif mylan10 h6-eth2.10")

  h6.cmd("ifconfig h6-eth2.10 up")

  h6.cmd("ifconfig mylan10 up")

  h1.cmd("ip addr add 10.0.0.11/24 dev h1-eth0")

  h2.cmd("ip addr add 10.0.0.12/24 dev h2-eth0")

  h3.cmd("ip addr add 10.0.0.13/24 dev h3-eth0")

  h4.cmd("ip addr add 10.0.0.14/24 dev h4-eth0")

  CLI(net)

  net.stop()

 

[execution]

 

Dr. Chih-Heng Ke

Department of Computer Science and Information Engineering, National Quemoy University, Kinmen, Taiwan

Email: smallko@gmail.com