Ivan Eroshkin | 79ac6e0 | 2022-08-05 16:02:31 +0200 | [diff] [blame^] | 1 | #!/usr/bin/python |
| 2 | |
| 3 | # SPDX-FileCopyrightText: 2022-present Intel Corporation |
| 4 | # SPDX-License-Identifier: Apache-2.0 |
| 5 | |
| 6 | import argparse |
| 7 | |
| 8 | from mininet.cli import CLI |
| 9 | from mininet.log import setLogLevel |
| 10 | from mininet.net import Mininet |
| 11 | from mininet.topo import Topo |
| 12 | from stratum import StratumBmv2Switch |
| 13 | |
| 14 | from mn_lib import IPv4Host |
| 15 | from mn_lib import TaggedIPv4Host |
| 16 | |
| 17 | CPU_PORT = 255 |
| 18 | |
| 19 | |
| 20 | class 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 | |
| 136 | def main(): |
| 137 | net = Mininet(topo=TutorialTopo(), controller=None) |
| 138 | net.start() |
| 139 | CLI(net) |
| 140 | net.stop() |
| 141 | |
| 142 | |
| 143 | if __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() |