Andrea Campanella | 715a4c4 | 2022-06-01 15:39:46 +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, info |
| 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 | """2x2 fabric topology with IPv4 hosts""" |
| 22 | |
| 23 | def __init__(self, *args, **kwargs): |
| 24 | Topo.__init__(self, *args, **kwargs) |
| 25 | |
| 26 | spines = [] |
| 27 | leaves = [] |
| 28 | {{- range $i, $junk := until (.Values.numLeaves|int) -}} |
| 29 | {{- $leaf := printf "leaf%d" (add $i 1) }} |
| 30 | info( '*** Creating Leaf ' + '{{ $leaf }}\n' ) |
| 31 | leaves.append(self.addSwitch(name='{{ $leaf }}', cls=StratumBmv2Switch, cpuport=CPU_PORT)) |
| 32 | {{- end }} |
| 33 | |
| 34 | {{- range $i, $junk := until (.Values.numSpines|int) -}} |
| 35 | {{- $spine := printf "spine%d" (add $i 1) }} |
| 36 | info( '*** Creating Spine ' + '{{ $spine }}\n' ) |
| 37 | spines.append(self.addSwitch(name='{{ $spine }}', cls=StratumBmv2Switch, cpuport=CPU_PORT)) |
| 38 | {{- end }} |
| 39 | |
| 40 | for spine in spines: |
| 41 | for leaf in leaves: |
| 42 | info( '*** Creating link ' + str(spine) + ' ' + str(leaf) + '\n') |
| 43 | self.addLink(spine, leaf) |
| 44 | info( '*** Created link ' + str(spine) + ' ' + str(leaf) + '\n') |
| 45 | |
| 46 | |
| 47 | def main(): |
| 48 | net = Mininet(topo=TutorialTopo(), controller=None) |
| 49 | net.start() |
| 50 | CLI(net) |
| 51 | net.stop() |
| 52 | |
| 53 | |
| 54 | if __name__ == "__main__": |
| 55 | parser = argparse.ArgumentParser( |
| 56 | description='Mininet topology script for 2x2 fabric with stratum_bmv2 and IPv4 hosts') |
| 57 | args = parser.parse_args() |
| 58 | setLogLevel('info') |
| 59 | |
| 60 | main() |