|
2 | 2 |
|
3 | 3 | import os
|
4 | 4 | import shutil
|
| 5 | +from dotenv import load_dotenv |
5 | 6 | from mininet.topo import Topo
|
6 | 7 | from mininet.node import Host, OVSBridge
|
7 | 8 | from mininet.net import Mininet
|
|
16 | 17 |
|
17 | 18 | PRIVDIR = '/var/priv'
|
18 | 19 |
|
| 20 | +START_NODE_MANAGERS = False |
| 21 | + |
| 22 | +# Load environment variables from .env file |
| 23 | +load_dotenv() |
| 24 | + |
| 25 | +# Get node manager path |
| 26 | +NODE_MANAGER_PATH = os.getenv('NODE_MANAGER_PATH', None) |
| 27 | +if NODE_MANAGER_PATH is not None: |
| 28 | + NODE_MANAGER_PATH = os.path.join(NODE_MANAGER_PATH, |
| 29 | + 'srv6_manager.py') |
| 30 | +# Get gRPC server port |
| 31 | +NODE_MANAGER_GRPC_PORT = os.getenv('NODE_MANAGER_GRPC_PORT', None) |
| 32 | + |
| 33 | + |
19 | 34 | class BaseNode(Host):
|
20 | 35 |
|
21 | 36 | def __init__(self, name, *args, **kwargs):
|
@@ -86,6 +101,14 @@ class Router(BaseNode):
|
86 | 101 | def __init__(self, name, *args, **kwargs):
|
87 | 102 | BaseNode.__init__(self, name, *args, **kwargs)
|
88 | 103 |
|
| 104 | + def config(self, **kwargs): |
| 105 | + # Init steps |
| 106 | + BaseNode.config(self, **kwargs) |
| 107 | + # Start node managers |
| 108 | + if START_NODE_MANAGERS: |
| 109 | + self.cmd('python %s --grpc-port %s &' |
| 110 | + % (NODE_MANAGER_PATH, NODE_MANAGER_GRPC_PORT)) |
| 111 | + |
89 | 112 |
|
90 | 113 | class Switch(OVSBridge):
|
91 | 114 | def __init__(self, name, *args, **kwargs):
|
@@ -266,8 +289,45 @@ def simpleTest():
|
266 | 289 | stopAll()
|
267 | 290 |
|
268 | 291 |
|
| 292 | +def parse_arguments(): |
| 293 | + # Get parser |
| 294 | + parser = ArgumentParser( |
| 295 | + description='Emulation of a Mininet topology (8 routers running ' |
| 296 | + 'IS-IS, 1 controller out-of-band' |
| 297 | + ) |
| 298 | + parser.add_argument( |
| 299 | + '--start-node-managers', dest='start_node_managers', |
| 300 | + action='store_true', default=False, |
| 301 | + help='Define whether to start node manager on routers or not' |
| 302 | + ) |
| 303 | + # Parse input parameters |
| 304 | + args = parser.parse_args() |
| 305 | + # Return the arguments |
| 306 | + return args |
| 307 | + |
269 | 308 |
|
270 | 309 | if __name__ == '__main__':
|
| 310 | + # Parse command-line arguments |
| 311 | + args = parse_arguments() |
| 312 | + # Define whether to start node manager on routers or not |
| 313 | + START_NODE_MANAGERS = args.start_node_managers |
| 314 | + if START_NODE_MANAGERS: |
| 315 | + if NODE_MANAGER_PATH is None: |
| 316 | + print('Error: --start-node-managers requires NODE_MANAGER_PATH ' |
| 317 | + 'variable') |
| 318 | + print('NODE_MANAGER_PATH variable not set in .env file\n') |
| 319 | + exit(-2) |
| 320 | + if not os.path.exists(NODE_MANAGER_PATH): |
| 321 | + print('Error: --start-node-managers requires NODE_MANAGER_PATH ' |
| 322 | + 'variable') |
| 323 | + print('NODE_MANAGER_PATH defined in .env file ' |
| 324 | + 'points to a non existing folder\n') |
| 325 | + exit(-2) |
| 326 | + if NODE_MANAGER_GRPC_PORT is None: |
| 327 | + print('Error: --start-node-managers requires ' |
| 328 | + 'NODE_MANAGER_GRPC_PORT variable') |
| 329 | + print('NODE_MANAGER_GRPC_PORT variable not set in .env file\n') |
| 330 | + exit(-2) |
271 | 331 | # Tell mininet to print useful information
|
272 | 332 | setLogLevel('info')
|
273 | 333 | simpleTest()
|
0 commit comments