mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-03 04:07:52 +00:00
test_l3_longevity.py : added channel utilization
Signed-off-by: Chuck SmileyRekiere <chuck.smileyrekiere@candelatech.com>
This commit is contained in:
@@ -109,6 +109,7 @@ class L3VariableTime(Realm):
|
|||||||
ap_port='/dev/ttyUSB0',
|
ap_port='/dev/ttyUSB0',
|
||||||
ap_baud='115200',
|
ap_baud='115200',
|
||||||
ap_cmd='wl -i wl1 bs_data',
|
ap_cmd='wl -i wl1 bs_data',
|
||||||
|
ap_chanim_cmd='wl -i wl1 chanim_stats',
|
||||||
ap_test_mode=False,
|
ap_test_mode=False,
|
||||||
_exit_on_error=False,
|
_exit_on_error=False,
|
||||||
_exit_on_fail=False,
|
_exit_on_fail=False,
|
||||||
@@ -190,6 +191,7 @@ class L3VariableTime(Realm):
|
|||||||
self.ap_port = ap_port
|
self.ap_port = ap_port
|
||||||
self.ap_baud = ap_baud
|
self.ap_baud = ap_baud
|
||||||
self.ap_cmd = ap_cmd
|
self.ap_cmd = ap_cmd
|
||||||
|
self.ap_chanim_cmd = ap_chanim_cmd
|
||||||
self.ap_test_mode = ap_test_mode
|
self.ap_test_mode = ap_test_mode
|
||||||
self.ap_umsched = ""
|
self.ap_umsched = ""
|
||||||
self.ap_msched = ""
|
self.ap_msched = ""
|
||||||
@@ -465,6 +467,23 @@ class L3VariableTime(Realm):
|
|||||||
|
|
||||||
return ap_stats
|
return ap_stats
|
||||||
|
|
||||||
|
def read_ap_chanim_stats(self):
|
||||||
|
# 5ghz: wl -i wl1 chanim_stats 2.4ghz# wl -i wl0 chanim_stats
|
||||||
|
ap_chanim_stats = ""
|
||||||
|
try:
|
||||||
|
# configure the serial interface
|
||||||
|
ser = serial.Serial(self.ap_port, int(self.ap_baud), timeout=5)
|
||||||
|
ss = SerialSpawn(ser)
|
||||||
|
ss.sendline(str(self.ap_chanim_cmd))
|
||||||
|
ss.expect([pexpect.TIMEOUT], timeout=1) # do not detete line, waits for output
|
||||||
|
ap_chanim_stats = ss.before.decode('utf-8','ignore')
|
||||||
|
print("ap_stats {}".format(ap_chanim_stats))
|
||||||
|
|
||||||
|
except:
|
||||||
|
print("WARNING unable to read AP")
|
||||||
|
|
||||||
|
return ap_chanim_stats
|
||||||
|
|
||||||
# Run the main body of the test logic.
|
# Run the main body of the test logic.
|
||||||
def start(self, print_pass=False, print_fail=False):
|
def start(self, print_pass=False, print_fail=False):
|
||||||
print("Bringing up stations")
|
print("Bringing up stations")
|
||||||
@@ -594,15 +613,24 @@ class L3VariableTime(Realm):
|
|||||||
"50:E0:85:87:5B:F4 960.7 51.5 5.9% 25.7% 0.0% 80 9 2 0.0% 0.0%\n",
|
"50:E0:85:87:5B:F4 960.7 51.5 5.9% 25.7% 0.0% 80 9 2 0.0% 0.0%\n",
|
||||||
"- note the MAC will match ap_stats.append((overall) - 200.2 26.5% - - \n")
|
"- note the MAC will match ap_stats.append((overall) - 200.2 26.5% - - \n")
|
||||||
print("ap_stats {}".format(ap_stats))
|
print("ap_stats {}".format(ap_stats))
|
||||||
|
|
||||||
|
# Create the test data as a continuous string
|
||||||
|
ap_chanim_stats = "{}{}{}{}".format("root@Docsis-Gateway:~# wl -i wl1 chanim_stats\n",
|
||||||
|
"version: 3\n",
|
||||||
|
"chanspec tx inbss obss nocat nopkt doze txop goodtx badtx glitch badplcp knoise idle timestamp\n",
|
||||||
|
"0xe06a 61 15 0 17 0 0 6 53 2 0 0 -91 65 343370578\n")
|
||||||
else:
|
else:
|
||||||
# read from the AP
|
# read from the AP
|
||||||
ap_stats = self.read_ap_stats()
|
ap_stats = self.read_ap_stats()
|
||||||
|
ap_chanim_stats = self.read_ap_chanim_stats()
|
||||||
#ap_stats_rows = [] # Array of Arrays
|
|
||||||
|
|
||||||
ap_stats_rows = ap_stats.splitlines()
|
ap_stats_rows = ap_stats.splitlines()
|
||||||
print("From AP: ap_stats_rows {}".format(ap_stats_rows))
|
print("From AP: ap_stats_rows {}".format(ap_stats_rows))
|
||||||
|
|
||||||
|
ap_chanim_stats_rows = ap_chanim_stats.splitlines()
|
||||||
|
print("From AP: ap_chanim_stats_rows {}".format(ap_chanim_stats_rows))
|
||||||
|
channel_utilization = 0
|
||||||
|
|
||||||
# Query all of our ports
|
# Query all of our ports
|
||||||
# Note: the endp eid is the shelf.resource.port.endp-id
|
# Note: the endp eid is the shelf.resource.port.endp-id
|
||||||
port_eids = self.gather_port_eids()
|
port_eids = self.gather_port_eids()
|
||||||
@@ -622,6 +650,7 @@ class L3VariableTime(Realm):
|
|||||||
mac = p['mac']
|
mac = p['mac']
|
||||||
print("#### From LANforge: p['mac']: {mac}".format(mac=mac))
|
print("#### From LANforge: p['mac']: {mac}".format(mac=mac))
|
||||||
|
|
||||||
|
# Parse the ap stats to find the matching mac then use that row for reporting
|
||||||
for row in ap_stats_rows:
|
for row in ap_stats_rows:
|
||||||
split_row = row.split()
|
split_row = row.split()
|
||||||
#print("split_row {}".format(split_row))
|
#print("split_row {}".format(split_row))
|
||||||
@@ -643,7 +672,28 @@ class L3VariableTime(Realm):
|
|||||||
# Find latency, jitter for connections using this port.
|
# Find latency, jitter for connections using this port.
|
||||||
latency, jitter, tput = self.get_endp_stats_for_port(p["port"], endps)
|
latency, jitter, tput = self.get_endp_stats_for_port(p["port"], endps)
|
||||||
|
|
||||||
ap_stats_col_titles = ['Station Address','PHY Mbps','Data Mbps','Air Use','Data Use','Retries','bw','mcs','Nss','ofdma','mu-mimo']
|
# now report the ap_chanim_stats along side of the ap_stats
|
||||||
|
xtop_reported = False
|
||||||
|
for row in ap_chanim_stats_rows:
|
||||||
|
split_row = row.split()
|
||||||
|
if xtop_reported:
|
||||||
|
try:
|
||||||
|
xtop = split_row[7]
|
||||||
|
channel_utilization = 100 - int(xtop)
|
||||||
|
except:
|
||||||
|
print("detected chanspec with reading chanim_stats, failed reading xtop")
|
||||||
|
# should be only one channel utilization
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
if split_row[0].lower() == 'chanspec':
|
||||||
|
xtop_reported = True
|
||||||
|
except:
|
||||||
|
print("Error reading xtop")
|
||||||
|
# ap information is passed with ap_row so all information needs to be contained in ap_row
|
||||||
|
ap_row.append(str(channel_utilization))
|
||||||
|
|
||||||
|
ap_stats_col_titles = ['Station Address','PHY Mbps','Data Mbps','Air Use','Data Use','Retries','bw','mcs','Nss','ofdma','mu-mimo','channel_utilization']
|
||||||
|
|
||||||
self.write_port_csv(len(temp_stations_list), ul, dl, ul_pdu_str, dl_pdu_str, atten_val, eid_name, p,
|
self.write_port_csv(len(temp_stations_list), ul, dl, ul_pdu_str, dl_pdu_str, atten_val, eid_name, p,
|
||||||
latency, jitter, tput, ap_row, ap_stats_col_titles) #ap_stats_col_titles used as a length
|
latency, jitter, tput, ap_row, ap_stats_col_titles) #ap_stats_col_titles used as a length
|
||||||
@@ -952,6 +1002,7 @@ python3 .\\test_l3_longevity.py --test_duration 4m --endp_type \"lf_tcp lf_udp m
|
|||||||
parser.add_argument('--ap_port', help='--ap_port \'/dev/ttyUSB0\'',default='/dev/ttyUSB0')
|
parser.add_argument('--ap_port', help='--ap_port \'/dev/ttyUSB0\'',default='/dev/ttyUSB0')
|
||||||
parser.add_argument('--ap_baud', help='--ap_baud \'115200\'',default='115200')
|
parser.add_argument('--ap_baud', help='--ap_baud \'115200\'',default='115200')
|
||||||
parser.add_argument('--ap_cmd', help='ap_cmd \'wl -i wl1 bs_data\'', default="wl -i wl1 bs_data")
|
parser.add_argument('--ap_cmd', help='ap_cmd \'wl -i wl1 bs_data\'', default="wl -i wl1 bs_data")
|
||||||
|
parser.add_argument('--ap_chanim_cmd', help='ap_chanim_cmd \'wl -i wl1 chanim_stats\'', default="wl -i wl1 chanim_stats")
|
||||||
parser.add_argument('--ap_scheduler_stats', help='--ap_scheduler_stats flag to clear stats run test then dump ul and dl stats to file on ap', action='store_true')
|
parser.add_argument('--ap_scheduler_stats', help='--ap_scheduler_stats flag to clear stats run test then dump ul and dl stats to file on ap', action='store_true')
|
||||||
|
|
||||||
|
|
||||||
@@ -1012,6 +1063,9 @@ python3 .\\test_l3_longevity.py --test_duration 4m --endp_type \"lf_tcp lf_udp m
|
|||||||
if args.ap_cmd:
|
if args.ap_cmd:
|
||||||
ap_cmd = args.ap_cmd
|
ap_cmd = args.ap_cmd
|
||||||
|
|
||||||
|
if args.ap_chanim_cmd:
|
||||||
|
ap_chanim_cmd = args.ap_chanim_cmd
|
||||||
|
|
||||||
if args.test_duration:
|
if args.test_duration:
|
||||||
test_duration = args.test_duration
|
test_duration = args.test_duration
|
||||||
|
|
||||||
@@ -1032,7 +1086,6 @@ python3 .\\test_l3_longevity.py --test_duration 4m --endp_type \"lf_tcp lf_udp m
|
|||||||
else:
|
else:
|
||||||
side_a = None
|
side_a = None
|
||||||
|
|
||||||
|
|
||||||
if args.radio:
|
if args.radio:
|
||||||
radios = args.radio
|
radios = args.radio
|
||||||
else:
|
else:
|
||||||
@@ -1180,6 +1233,7 @@ python3 .\\test_l3_longevity.py --test_duration 4m --endp_type \"lf_tcp lf_udp m
|
|||||||
ap_port=ap_port,
|
ap_port=ap_port,
|
||||||
ap_baud=ap_baud,
|
ap_baud=ap_baud,
|
||||||
ap_cmd=ap_cmd,
|
ap_cmd=ap_cmd,
|
||||||
|
ap_chanim_cmd=ap_chanim_cmd,
|
||||||
ap_test_mode=ap_test_mode)
|
ap_test_mode=ap_test_mode)
|
||||||
|
|
||||||
ip_var_test.pre_cleanup()
|
ip_var_test.pre_cleanup()
|
||||||
|
|||||||
Reference in New Issue
Block a user