|
23 | 23 | # Execute the activation script to activate the venv
|
24 | 24 | exec(code, {'__file__': venv_path})
|
25 | 25 |
|
| 26 | +from argparse import ArgumentParser |
26 | 27 | import shutil
|
| 28 | +from dotenv import load_dotenv |
27 | 29 | from mininet.topo import Topo
|
28 | 30 | from mininet.node import Host, OVSBridge
|
29 | 31 | from mininet.net import Mininet
|
|
38 | 40 |
|
39 | 41 | PRIVDIR = '/var/priv'
|
40 | 42 |
|
| 43 | +START_NODE_MANAGERS = False |
| 44 | + |
| 45 | +# Load environment variables from .env file |
| 46 | +load_dotenv() |
| 47 | + |
| 48 | +# Get node manager path |
| 49 | +NODE_MANAGER_PATH = os.getenv('NODE_MANAGER_PATH', None) |
| 50 | +if NODE_MANAGER_PATH is not None: |
| 51 | + NODE_MANAGER_PATH = os.path.join(NODE_MANAGER_PATH, |
| 52 | + 'srv6_manager.py') |
| 53 | +# Get gRPC server port |
| 54 | +NODE_MANAGER_GRPC_PORT = os.getenv('NODE_MANAGER_GRPC_PORT', None) |
| 55 | + |
| 56 | + |
41 | 57 | class BaseNode(Host):
|
42 | 58 |
|
43 | 59 | def __init__(self, name, *args, **kwargs):
|
@@ -108,6 +124,14 @@ class Router(BaseNode):
|
108 | 124 | def __init__(self, name, *args, **kwargs):
|
109 | 125 | BaseNode.__init__(self, name, *args, **kwargs)
|
110 | 126 |
|
| 127 | + def config(self, **kwargs): |
| 128 | + # Init steps |
| 129 | + BaseNode.config(self, **kwargs) |
| 130 | + # Start node managers |
| 131 | + if START_NODE_MANAGERS: |
| 132 | + self.cmd('python %s --grpc-port %s &' |
| 133 | + % (NODE_MANAGER_PATH, NODE_MANAGER_GRPC_PORT)) |
| 134 | + |
111 | 135 |
|
112 | 136 | class Switch(OVSBridge):
|
113 | 137 | def __init__(self, name, *args, **kwargs):
|
@@ -288,8 +312,45 @@ def simpleTest():
|
288 | 312 | stopAll()
|
289 | 313 |
|
290 | 314 |
|
| 315 | +def parse_arguments(): |
| 316 | + # Get parser |
| 317 | + parser = ArgumentParser( |
| 318 | + description='Emulation of a Mininet topology (8 routers running ' |
| 319 | + 'IS-IS, 1 controller out-of-band' |
| 320 | + ) |
| 321 | + parser.add_argument( |
| 322 | + '--start-node-managers', dest='start_node_managers', |
| 323 | + action='store_true', default=False, |
| 324 | + help='Define whether to start node manager on routers or not' |
| 325 | + ) |
| 326 | + # Parse input parameters |
| 327 | + args = parser.parse_args() |
| 328 | + # Return the arguments |
| 329 | + return args |
| 330 | + |
291 | 331 |
|
292 | 332 | if __name__ == '__main__':
|
| 333 | + # Parse command-line arguments |
| 334 | + args = parse_arguments() |
| 335 | + # Define whether to start node manager on routers or not |
| 336 | + START_NODE_MANAGERS = args.start_node_managers |
| 337 | + if START_NODE_MANAGERS: |
| 338 | + if NODE_MANAGER_PATH is None: |
| 339 | + print('Error: --start-node-managers requires NODE_MANAGER_PATH ' |
| 340 | + 'variable') |
| 341 | + print('NODE_MANAGER_PATH variable not set in .env file\n') |
| 342 | + exit(-2) |
| 343 | + if not os.path.exists(NODE_MANAGER_PATH): |
| 344 | + print('Error: --start-node-managers requires NODE_MANAGER_PATH ' |
| 345 | + 'variable') |
| 346 | + print('NODE_MANAGER_PATH defined in .env file ' |
| 347 | + 'points to a non existing folder\n') |
| 348 | + exit(-2) |
| 349 | + if NODE_MANAGER_GRPC_PORT is None: |
| 350 | + print('Error: --start-node-managers requires ' |
| 351 | + 'NODE_MANAGER_GRPC_PORT variable') |
| 352 | + print('NODE_MANAGER_GRPC_PORT variable not set in .env file\n') |
| 353 | + exit(-2) |
293 | 354 | # Tell mininet to print useful information
|
294 | 355 | setLogLevel('info')
|
295 | 356 | simpleTest()
|
0 commit comments