Committed by
Gerrit Code Review
Add portOffset for multiple ONOSCluster port forwarding
With multiple ONOS clusters, we want to make sure that the forwarded port numbers don't collide. We add a portOffset which is automatically incremented appropriately as more ONOSClusters are created. It can also be specified explicitly. Change-Id: I62977c3d4141668d9f541067db1a20ec0035489b
Showing
1 changed file
with
13 additions
and
3 deletions
| ... | @@ -369,19 +369,27 @@ class ONOSNode( Controller ): | ... | @@ -369,19 +369,27 @@ class ONOSNode( Controller ): |
| 369 | 369 | ||
| 370 | class ONOSCluster( Controller ): | 370 | class ONOSCluster( Controller ): |
| 371 | "ONOS Cluster" | 371 | "ONOS Cluster" |
| 372 | + # Offset for port forwarding | ||
| 373 | + portOffset = 0 | ||
| 372 | def __init__( self, *args, **kwargs ): | 374 | def __init__( self, *args, **kwargs ): |
| 373 | """name: (first parameter) | 375 | """name: (first parameter) |
| 374 | *args: topology class parameters | 376 | *args: topology class parameters |
| 375 | ipBase: IP range for ONOS nodes | 377 | ipBase: IP range for ONOS nodes |
| 376 | - forward: default port forwarding list, | 378 | + forward: default port forwarding list |
| 379 | + portOffset: offset to port base (optional) | ||
| 377 | topo: topology class or instance | 380 | topo: topology class or instance |
| 378 | nodeOpts: ONOSNode options | 381 | nodeOpts: ONOSNode options |
| 379 | - **kwargs: additional topology parameters""" | 382 | + **kwargs: additional topology parameters |
| 383 | + By default, multiple ONOSClusters will increment | ||
| 384 | + the portOffset automatically; alternately, it can | ||
| 385 | + be specified explicitly. | ||
| 386 | + """ | ||
| 380 | args = list( args ) | 387 | args = list( args ) |
| 381 | name = args.pop( 0 ) | 388 | name = args.pop( 0 ) |
| 382 | topo = kwargs.pop( 'topo', None ) | 389 | topo = kwargs.pop( 'topo', None ) |
| 383 | self.nat = kwargs.pop( 'nat', 'nat0' ) | 390 | self.nat = kwargs.pop( 'nat', 'nat0' ) |
| 384 | nodeOpts = kwargs.pop( 'nodeOpts', {} ) | 391 | nodeOpts = kwargs.pop( 'nodeOpts', {} ) |
| 392 | + self.portOffset = kwargs.pop( 'portOffset', ONOSCluster.portOffset ) | ||
| 385 | # Pass in kwargs to the ONOSNodes instead of the cluster | 393 | # Pass in kwargs to the ONOSNodes instead of the cluster |
| 386 | "alertAction: exception|ignore|warn|exit (exception)" | 394 | "alertAction: exception|ignore|warn|exit (exception)" |
| 387 | alertAction = kwargs.pop( 'alertAction', None ) | 395 | alertAction = kwargs.pop( 'alertAction', None ) |
| ... | @@ -408,6 +416,8 @@ class ONOSCluster( Controller ): | ... | @@ -408,6 +416,8 @@ class ONOSCluster( Controller ): |
| 408 | self.net.addNAT( self.nat ).configDefault() | 416 | self.net.addNAT( self.nat ).configDefault() |
| 409 | updateNodeIPs( self.env, self.nodes() ) | 417 | updateNodeIPs( self.env, self.nodes() ) |
| 410 | self._remoteControllers = [] | 418 | self._remoteControllers = [] |
| 419 | + # Update port offset for more ONOS clusters | ||
| 420 | + ONOSCluster.portOffset += len( self.nodes() ) | ||
| 411 | 421 | ||
| 412 | def start( self ): | 422 | def start( self ): |
| 413 | "Start up ONOS cluster" | 423 | "Start up ONOS cluster" |
| ... | @@ -448,7 +458,7 @@ class ONOSCluster( Controller ): | ... | @@ -448,7 +458,7 @@ class ONOSCluster( Controller ): |
| 448 | '-j ACCEPT' ) | 458 | '-j ACCEPT' ) |
| 449 | for port in ports: | 459 | for port in ports: |
| 450 | for index, node in enumerate( self.nodes() ): | 460 | for index, node in enumerate( self.nodes() ): |
| 451 | - ip, inport = node.IP(), port + index | 461 | + ip, inport = node.IP(), port + self.portOffset + index |
| 452 | # Configure a destination NAT rule | 462 | # Configure a destination NAT rule |
| 453 | self.cmd( 'iptables -t nat -' + action, | 463 | self.cmd( 'iptables -t nat -' + action, |
| 454 | 'PREROUTING -t nat -p tcp --dport', inport, | 464 | 'PREROUTING -t nat -p tcp --dport', inport, | ... | ... |
-
Please register or login to post a comment