Fix net-trellis-p4-smoke not working with latest stratum_bmv2
- Fix scenario files to use correct deviceId
- More robust liveness check in bmv2.py
- Use different ports for stratum internal server
- Longer switch startup timeout in bmv2.py
- Ignore number of flow rules when checking summary (make scenario
independent of trellis implementation)
Change-Id: I206e5339d2e78ae9a025caa5ec4862a9d4c24871
diff --git a/tools/dev/mininet/bmv2.py b/tools/dev/mininet/bmv2.py
index 522a80c..6a7285f 100644
--- a/tools/dev/mininet/bmv2.py
+++ b/tools/dev/mininet/bmv2.py
@@ -32,7 +32,7 @@
SIMPLE_SWITCH_GRPC = 'simple_switch_grpc'
PKT_BYTES_TO_DUMP = 80
VALGRIND_PREFIX = 'valgrind --leak-check=yes'
-SWITCH_START_TIMEOUT = 5 # seconds
+SWITCH_START_TIMEOUT = 10 # seconds
BMV2_LOG_LINES = 5
BMV2_DEFAULT_DEVICE_ID = 1
DEFAULT_PIPECONF = "org.onosproject.pipelines.basic"
@@ -81,7 +81,8 @@
if sw.stopped:
return
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
- if s.connect_ex(('127.0.0.1', sw.grpcPort)) == 0:
+ port = sw.grpcPortInternal if sw.grpcPortInternal else sw.grpcPort
+ if s.connect_ex(('localhost', port)) == 0:
time.sleep(1)
else:
warn("\n*** WARN: switch %s died ☠️ \n" % sw.name)
@@ -126,6 +127,7 @@
**kwargs):
Switch.__init__(self, name, **kwargs)
self.grpcPort = grpcport
+ self.grpcPortInternal = None # Needed for Stratum (local_hercules_url)
self.thriftPort = thriftport
self.cpuPort = cpuport
self.json = json
@@ -303,6 +305,8 @@
os.mkdir(config_dir)
with open(self.chassisConfigFile, 'w') as fp:
fp.write(self.chassisConfig())
+ if self.grpcPortInternal is None:
+ self.grpcPortInternal = pickUnusedPort()
cmdString = self.getStratumCmdString(config_dir)
else:
if self.thriftPort is None:
@@ -320,6 +324,8 @@
# Start the switch
self.stopped = False
self.logfd = open(self.logfile, "w")
+ self.logfd.write(cmdString + "\n\n" + "-" * 80 + "\n\n")
+ self.logfd.flush()
self.bmv2popen = self.popen(cmdString,
stdout=self.logfd,
stderr=self.logfd)
@@ -346,11 +352,12 @@
stratumRoot + STRATUM_BINARY,
'-device_id=%d' % self.p4DeviceId,
'-chassis_config_file=%s' % self.chassisConfigFile,
- '-forwarding_pipeline_configs_file=%s/config.txt' % config_dir,
+ '-forwarding_pipeline_configs_file=%s/pipeline_config.txt' % config_dir,
'-persistent_config_dir=' + config_dir,
'-initial_pipeline=' + stratumRoot + STRATUM_INIT_PIPELINE,
'-cpu_port=%s' % self.cpuPort,
'-external_hercules_urls=0.0.0.0:%d' % self.grpcPort,
+ '-local_hercules_url=localhost:%d' % self.grpcPortInternal,
'-max_num_controllers_per_node=10'
]
return " ".join(args)
@@ -390,7 +397,8 @@
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
endtime = time.time() + SWITCH_START_TIMEOUT
while True:
- result = sock.connect_ex(('127.0.0.1', self.grpcPort))
+ port = self.grpcPortInternal if self.grpcPortInternal else self.grpcPort
+ result = sock.connect_ex(('localhost', port))
if result == 0:
# No new line
sys.stdout.write("⚡️ %s @ %d" % (self.targetName, self.bmv2popen.pid))