blob: d782702157de246c9d56f6cc62607284ec5d8d93 [file] [log] [blame]
Ivan Eroshkin79ac6e02022-08-05 16:02:31 +02001#!/usr/bin/python
2
3# SPDX-FileCopyrightText: 2022-present Intel Corporation
4# SPDX-License-Identifier: Apache-2.0
5
6import argparse
7
8from mininet.cli import CLI
9from mininet.log import setLogLevel
10from mininet.net import Mininet
11from mininet.topo import Topo
12from stratum import StratumBmv2Switch
13
14from mn_lib import IPv4Host
15from mn_lib import TaggedIPv4Host
16
17CPU_PORT = 255
18
19
20class TutorialTopo(Topo):
21 """2x4 fabric topology with IPv4 hosts"""
22
23 def __init__(self, *args, **kwargs):
24 Topo.__init__(self, *args, **kwargs)
25
26 # Leaves
27 # gRPC port 50001
28 leaf1 = self.addSwitch('leaf1', cls=StratumBmv2Switch, cpuport=CPU_PORT)
29 # gRPC port 50002
30 leaf2 = self.addSwitch('leaf2', cls=StratumBmv2Switch, cpuport=CPU_PORT)
31 # gRPC port 50003
32 leaf3 = self.addSwitch('leaf3', cls=StratumBmv2Switch, cpuport=CPU_PORT)
33 # gRPC port 50004
34 leaf4 = self.addSwitch('leaf4', cls=StratumBmv2Switch, cpuport=CPU_PORT)
35
36 # Spines
37 # gRPC port 50005
38 spine1 = self.addSwitch('spine1', cls=StratumBmv2Switch, cpuport=CPU_PORT)
39 # gRPC port 50006
40 spine2 = self.addSwitch('spine2', cls=StratumBmv2Switch, cpuport=CPU_PORT)
41
42 # Switch Links
43 self.addLink(spine1, leaf1)
44 self.addLink(spine1, leaf2)
45 self.addLink(spine1, leaf3)
46 self.addLink(spine1, leaf4)
47 self.addLink(spine2, leaf1)
48 self.addLink(spine2, leaf2)
49 self.addLink(spine2, leaf3)
50 self.addLink(spine2, leaf4)
51
52 # IPv4 hosts attached to leaf 1
53 h1a = self.addHost('h1a', cls=IPv4Host, mac="00:00:00:00:00:1A",
54 ip='172.16.1.1/24', gw='172.16.1.254')
55 h1b = self.addHost('h1b', cls=IPv4Host, mac="00:00:00:00:00:1B",
56 ip='172.16.1.2/24', gw='172.16.1.254')
57 h1c = self.addHost('h1c', cls=TaggedIPv4Host, mac="00:00:00:00:00:1C",
58 ip='172.16.1.3/24', gw='172.16.1.254', vlan=100)
59 h2 = self.addHost('h2', cls=TaggedIPv4Host, mac="00:00:00:00:00:20",
60 ip='172.16.2.1/24', gw='172.16.2.254', vlan=200)
61 self.addLink(h1a, leaf1) # port 3
62 self.addLink(h1b, leaf1) # port 4
63 self.addLink(h1c, leaf1) # port 5
64 self.addLink(h2, leaf1) # port 6
65
66 # IPv4 hosts attached to leaf 2
67 h3 = self.addHost('h3', cls=TaggedIPv4Host, mac="00:00:00:00:00:30",
68 ip='172.16.3.1/24', gw='172.16.3.254', vlan=300)
69 h4 = self.addHost('h4', cls=IPv4Host, mac="00:00:00:00:00:40",
70 ip='172.16.4.1/24', gw='172.16.4.254')
71 self.addLink(h3, leaf2) # port 3
72 self.addLink(h4, leaf2) # port 4
73
74 # IPv4 hosts attached to leaf 3
75 h2b = self.addHost('h2b', cls=TaggedIPv4Host, mac="00:00:00:00:00:2B",
76 ip='172.16.5.1/24', gw='172.16.5.254', vlan=500)
77 h1d = self.addHost('h1d', cls=TaggedIPv4Host, mac="00:00:00:00:00:1D",
78 ip='172.16.6.1/24', gw='172.16.6.254', vlan=600)
79 h3b = self.addHost('h3b', cls=IPv4Host, mac="00:00:00:00:00:3B",
80 ip='172.16.5.2/24', gw='172.16.5.254')
81 self.addLink(h2b, leaf3) # port 3
82 self.addLink(h1d, leaf3) # port 4
83 self.addLink(h3b, leaf3) # port 5
84
85 # IPv4 hosts attached to leaf 4
86 h4b = self.addHost('h4b', cls=TaggedIPv4Host, mac="00:00:00:00:00:4B",
87 ip='172.16.7.1/24', gw='172.16.7.254', vlan=700)
88 h3c = self.addHost('h3c', cls=IPv4Host, mac="00:00:00:00:00:3C",
89 ip='172.16.7.2/24', gw='172.16.7.254')
90 self.addLink(h4b, leaf4) # port 3
91 self.addLink(h3c, leaf4) # port 4
92
93
94def main():
95 net = Mininet(topo=TutorialTopo(), controller=None)
96 net.start()
97 CLI(net)
98 net.stop()
99
100
101if __name__ == "__main__":
102 parser = argparse.ArgumentParser(
103 description='Mininet topology script for 2x2 fabric with stratum_bmv2 and IPv4 hosts')
104 args = parser.parse_args()
105 setLogLevel('info')
106
107 main()