blob: 2d3ba6b7e3e7354d66800b5012ab98eb787fda2f [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 """2x3 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
34 # Spines
35 # gRPC port 50004
36 spine1 = self.addSwitch('spine1', cls=StratumBmv2Switch, cpuport=CPU_PORT)
37 # gRPC port 50005
38 spine2 = self.addSwitch('spine2', cls=StratumBmv2Switch, cpuport=CPU_PORT)
39
40 # Switch Links
41 self.addLink(spine1, leaf1)
42 self.addLink(spine1, leaf2)
43 self.addLink(spine1, leaf3)
44 self.addLink(spine2, leaf1)
45 self.addLink(spine2, leaf2)
46 self.addLink(spine2, leaf3)
47
48 # IPv4 hosts attached to leaf 1
49 h1a = self.addHost('h1a', cls=IPv4Host, mac="00:00:00:00:00:1A",
50 ip='172.16.1.1/24', gw='172.16.1.254')
51 h1b = self.addHost('h1b', cls=IPv4Host, mac="00:00:00:00:00:1B",
52 ip='172.16.1.2/24', gw='172.16.1.254')
53 h1c = self.addHost('h1c', cls=TaggedIPv4Host, mac="00:00:00:00:00:1C",
54 ip='172.16.1.3/24', gw='172.16.1.254', vlan=100)
55 h2a = self.addHost('h2a', cls=TaggedIPv4Host, mac="00:00:00:00:00:2A",
56 ip='172.16.2.1/24', gw='172.16.2.254', vlan=200)
57 h2b = self.addHost('h2b', cls=TaggedIPv4Host, mac="00:00:00:00:00:2B",
58 ip='172.16.2.2/24', gw='172.16.2.254', vlan=200)
59 h2c = self.addHost('h2c', cls=IPv4Host, mac="00:00:00:00:00:2C",
60 ip='172.16.2.3/24', gw='172.16.2.254')
61 h3a = self.addHost('h3a', cls=TaggedIPv4Host, mac="00:00:00:00:00:3A",
62 ip='172.16.3.1/24', gw='172.16.3.254', vlan=300)
63 h3b = self.addHost('h3b', cls=IPv4Host, mac="00:00:00:00:00:3B",
64 ip='172.16.3.2/24', gw='172.16.3.254')
65 h3c = self.addHost('h3c', cls=IPv4Host, mac="00:00:00:00:00:3C",
66 ip='172.16.3.3/24', gw='172.16.3.254')
67 self.addLink(h1a, leaf1) # port 3
68 self.addLink(h1b, leaf1) # port 4
69 self.addLink(h1c, leaf1) # port 5
70 self.addLink(h2a, leaf1) # port 6
71 self.addLink(h2b, leaf1) # port 7
72 self.addLink(h2c, leaf1) # port 8
73 self.addLink(h3a, leaf1) # port 9
74 self.addLink(h3b, leaf1) # port 10
75 self.addLink(h3c, leaf1) # port 11
76
77 # IPv4 hosts attached to leaf 2
78 h4a = self.addHost('h4a', cls=IPv4Host, mac="00:00:00:00:00:4A",
79 ip='172.16.4.1/24', gw='172.16.4.254')
80 h4b = self.addHost('h4b', cls=IPv4Host, mac="00:00:00:00:00:4B",
81 ip='172.16.4.2/24', gw='172.16.4.254')
82 h4c = self.addHost('h4c', cls=TaggedIPv4Host, mac="00:00:00:00:00:4C",
83 ip='172.16.4.3/24', gw='172.16.4.254', vlan=400)
84 h5a = self.addHost('h5a', cls=TaggedIPv4Host, mac="00:00:00:00:00:5A",
85 ip='172.16.5.1/24', gw='172.16.5.254', vlan=500)
86 h5b = self.addHost('h5b', cls=TaggedIPv4Host, mac="00:00:00:00:00:5B",
87 ip='172.16.5.2/24', gw='172.16.5.254', vlan=500)
88 h5c = self.addHost('h5c', cls=IPv4Host, mac="00:00:00:00:00:5C",
89 ip='172.16.5.3/24', gw='172.16.5.254')
90 h6a = self.addHost('h6a', cls=TaggedIPv4Host, mac="00:00:00:00:00:6A",
91 ip='172.16.6.1/24', gw='172.16.6.254', vlan=600)
92 h6b = self.addHost('h6b', cls=IPv4Host, mac="00:00:00:00:00:6B",
93 ip='172.16.6.2/24', gw='172.16.6.254')
94 h6c = self.addHost('h6c', cls=IPv4Host, mac="00:00:00:00:00:6C",
95 ip='172.16.6.3/24', gw='172.16.6.254')
96 self.addLink(h4a, leaf2) # port 3
97 self.addLink(h4b, leaf2) # port 4
98 self.addLink(h4c, leaf2) # port 5
99 self.addLink(h5a, leaf2) # port 6
100 self.addLink(h5b, leaf2) # port 7
101 self.addLink(h5c, leaf2) # port 8
102 self.addLink(h6a, leaf2) # port 9
103 self.addLink(h6b, leaf2) # port 10
104 self.addLink(h6c, leaf2) # port 11
105
106 # IPv4 hosts attached to leaf 3
107 h7a = self.addHost('h7a', cls=IPv4Host, mac="00:00:00:00:00:7A",
108 ip='172.16.7.1/24', gw='172.16.7.254')
109 h7b = self.addHost('h7b', cls=IPv4Host, mac="00:00:00:00:00:7B",
110 ip='172.16.7.2/24', gw='172.16.7.254')
111 h7c = self.addHost('h7c', cls=TaggedIPv4Host, mac="00:00:00:00:00:7C",
112 ip='172.16.7.3/24', gw='172.16.7.254', vlan=700)
113 h8a = self.addHost('h8a', cls=TaggedIPv4Host, mac="00:00:00:00:00:8A",
114 ip='172.16.8.1/24', gw='172.16.8.254', vlan=800)
115 h8b = self.addHost('h8b', cls=TaggedIPv4Host, mac="00:00:00:00:00:8B",
116 ip='172.16.8.2/24', gw='172.16.8.254', vlan=800)
117 h8c = self.addHost('h8c', cls=IPv4Host, mac="00:00:00:00:00:8C",
118 ip='172.16.8.3/24', gw='172.16.8.254')
119 h9a = self.addHost('h9a', cls=TaggedIPv4Host, mac="00:00:00:00:00:9A",
120 ip='172.16.9.1/24', gw='172.16.9.254', vlan=900)
121 h9b = self.addHost('h9b', cls=IPv4Host, mac="00:00:00:00:00:9B",
122 ip='172.16.9.2/24', gw='172.16.9.254')
123 h9c = self.addHost('h9c', cls=IPv4Host, mac="00:00:00:00:00:9C",
124 ip='172.16.9.3/24', gw='172.16.9.254')
125 self.addLink(h7a, leaf3) # port 3
126 self.addLink(h7b, leaf3) # port 4
127 self.addLink(h7c, leaf3) # port 5
128 self.addLink(h8a, leaf3) # port 6
129 self.addLink(h8b, leaf3) # port 7
130 self.addLink(h8c, leaf3) # port 8
131 self.addLink(h9a, leaf3) # port 9
132 self.addLink(h9b, leaf3) # port 10
133 self.addLink(h9c, leaf3) # port 11
134
135
136def main():
137 net = Mininet(topo=TutorialTopo(), controller=None)
138 net.start()
139 CLI(net)
140 net.stop()
141
142
143if __name__ == "__main__":
144 parser = argparse.ArgumentParser(
145 description='Mininet topology script for 2x2 fabric with stratum_bmv2 and IPv4 hosts')
146 args = parser.parse_args()
147 setLogLevel('info')
148
149 main()