mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 02:38:03 +00:00 
			
		
		
		
	port_probe.py : support for VHT and HE (non - ofdma)
Signed-off-by: Chuck SmileyRekiere <chuck.smileyrekiere@candelatech.com>
This commit is contained in:
		| @@ -28,9 +28,6 @@ class ProbePort(LFCliBase): | |||||||
|         self.probepath = "/probe/1/%s/%s" % (hunks[-2], hunks[-1]) |         self.probepath = "/probe/1/%s/%s" % (hunks[-2], hunks[-1]) | ||||||
|         self.response = None |         self.response = None | ||||||
|         self.signals = None |         self.signals = None | ||||||
|         self.he = None |  | ||||||
|  |  | ||||||
|         self.he = False |  | ||||||
|         self.ofdma = False |         self.ofdma = False | ||||||
|  |  | ||||||
|         self.tx_bitrate = None |         self.tx_bitrate = None | ||||||
| @@ -76,8 +73,8 @@ class ProbePort(LFCliBase): | |||||||
|         self.signals = dict(zip(keys, values)) |         self.signals = dict(zip(keys, values)) | ||||||
|  |  | ||||||
|         tx_bitrate = [x for x in text if 'tx bitrate' in x][0].replace('\t', ' ') |         tx_bitrate = [x for x in text if 'tx bitrate' in x][0].replace('\t', ' ') | ||||||
|         if 'HE' in tx_bitrate: |         # if 'HE' in tx_bitrate: | ||||||
|             print("HE not supported ") |         #    print("HE not supported ") | ||||||
|         print("tx_bitrate {tx_bitrate}".format(tx_bitrate=tx_bitrate)) |         print("tx_bitrate {tx_bitrate}".format(tx_bitrate=tx_bitrate)) | ||||||
|         self.tx_bitrate = tx_bitrate.split(':')[-1].strip(' ') |         self.tx_bitrate = tx_bitrate.split(':')[-1].strip(' ') | ||||||
|         if 'MHz' in tx_bitrate: |         if 'MHz' in tx_bitrate: | ||||||
| @@ -106,7 +103,12 @@ class ProbePort(LFCliBase): | |||||||
|         print("tx_nss {tx_nss}".format(tx_nss=self.tx_nss)) |         print("tx_nss {tx_nss}".format(tx_nss=self.tx_nss)) | ||||||
|         self.tx_mbit = float(self.tx_bitrate.split(' ')[0]) |         self.tx_mbit = float(self.tx_bitrate.split(' ')[0]) | ||||||
|         print("tx_mbit {tx_mbit}".format(tx_mbit=self.tx_mbit)) |         print("tx_mbit {tx_mbit}".format(tx_mbit=self.tx_mbit)) | ||||||
|         self.calculated_data_rate_tx_HT() |         if 'HE' in tx_bitrate: | ||||||
|  |             self.calculated_data_rate_tx_HE() | ||||||
|  |         elif 'VHT' in tx_bitrate: | ||||||
|  |             self.calculated_data_rate_tx_VHT() | ||||||
|  |         else: | ||||||
|  |             self.calculated_data_rate_tx_HT() | ||||||
|  |  | ||||||
|         rx_bitrate = [x for x in text if 'rx bitrate' in x][0].replace('\t', ' ') |         rx_bitrate = [x for x in text if 'rx bitrate' in x][0].replace('\t', ' ') | ||||||
|         print("rx_bitrate {rx_bitrate}".format(rx_bitrate=rx_bitrate)) |         print("rx_bitrate {rx_bitrate}".format(rx_bitrate=rx_bitrate)) | ||||||
| @@ -123,30 +125,33 @@ class ProbePort(LFCliBase): | |||||||
|             self.rx_mhz = 20 |             self.rx_mhz = 20 | ||||||
|  |  | ||||||
|         rx_mcs = [x.strip('\t') for x in text if 'rx bitrate' in x][0].split(':')[1].strip('\t') |         rx_mcs = [x.strip('\t') for x in text if 'rx bitrate' in x][0].split(':')[1].strip('\t') | ||||||
|         self.rx_mcs = int(rx_mcs.split('MCS')[1].strip(' ').split(' ')[0]) |         # MCS is not in the 6.0MBit/s frame | ||||||
|         print("self.rx_mcs {rx_mcs}".format(rx_mcs=self.rx_mcs)) |         if 'MCS' in rx_mcs: | ||||||
|         if 'NSS' in text: |             self.rx_mcs = int(rx_mcs.split('MCS')[1].strip(' ').split(' ')[0]) | ||||||
|             self.rx_nss = [x.strip('\t') for x in text if 'rx bitrate' in x][0].split('NSS')[1].strip(' ') |             print("self.rx_mcs {rx_mcs}".format(rx_mcs=self.rx_mcs)) | ||||||
|         else: |             if 'NSS' in text: | ||||||
|             # nss is not present need to derive from MCS for HT |                 self.rx_nss = [x.strip('\t') for x in text if 'rx bitrate' in x][0].split('NSS')[1].strip(' ') | ||||||
|             if 0 <= self.rx_mcs <= 7: |             else: | ||||||
|                 self.rx_nss = 1 |                 # nss is not present need to derive from MCS for HT | ||||||
|             elif 8 <= self.rx_mcs <= 15: |                 if 0 <= self.rx_mcs <= 7: | ||||||
|                 self.rx_nss = 2 |                     self.rx_nss = 1 | ||||||
|             elif 16 <= self.rx_mcs <= 23: |                 elif 8 <= self.rx_mcs <= 15: | ||||||
|                 self.rx_nss = 3 |                     self.rx_nss = 2 | ||||||
|             elif 24 <= self.rx_mcs <= 31: |                 elif 16 <= self.rx_mcs <= 23: | ||||||
|                 self.rx_nss = 4 |                     self.rx_nss = 3 | ||||||
|  |                 elif 24 <= self.rx_mcs <= 31: | ||||||
|  |                     self.rx_nss = 4 | ||||||
|  |  | ||||||
|         self.rx_mbit = self.rx_bitrate.split(' ')[0] |             self.rx_mbit = self.rx_bitrate.split(' ')[0] | ||||||
|         print("rx_nss {rx_nss}".format(rx_nss=self.rx_nss)) |             print("rx_nss {rx_nss}".format(rx_nss=self.rx_nss)) | ||||||
|         self.rx_mbit = float(self.rx_bitrate.split(' ')[0]) |             self.rx_mbit = float(self.rx_bitrate.split(' ')[0]) | ||||||
|         print("rx_mbit {rx_mbit}".format(rx_mbit=self.rx_mbit)) |             print("rx_mbit {rx_mbit}".format(rx_mbit=self.rx_mbit)) | ||||||
|         self.calculated_data_rate_rx_HT() |             if 'HE' in rx_bitrate: | ||||||
|         if 'HE not supported' in [x.strip('\t') for x in text if 'HE' in x]: |                 self.calculated_data_rate_rx_HE() | ||||||
|             self.he = False |             elif 'VHT' in rx_bitrate: | ||||||
|         else: |                 self.calculated_data_rate_rx_VHT() | ||||||
|             self.he = True |             else: | ||||||
|  |                 self.calculated_data_rate_rx_HT() | ||||||
|  |  | ||||||
|     def getSignalAvgCombined(self): |     def getSignalAvgCombined(self): | ||||||
|         return self.signals['signal avg'].split(' ')[0] |         return self.signals['signal avg'].split(' ')[0] | ||||||
| @@ -164,6 +169,7 @@ class ProbePort(LFCliBase): | |||||||
|         return ' '.join(self.signals['beacon signal avg']).replace(' ', '') |         return ' '.join(self.signals['beacon signal avg']).replace(' ', '') | ||||||
|  |  | ||||||
|     def calculated_data_rate_tx_HT(self): |     def calculated_data_rate_tx_HT(self): | ||||||
|  |         print("calculated_data_rate_tx_HT") | ||||||
|         # TODO compare with standard for 40 MHz if values change |         # TODO compare with standard for 40 MHz if values change | ||||||
|         N_sd = 0  # Number of Data Subcarriers based on modulation and bandwith |         N_sd = 0  # Number of Data Subcarriers based on modulation and bandwith | ||||||
|         N_bpscs = 0  # Number of coded bits per Subcarrier(Determined by the modulation, MCS) |         N_bpscs = 0  # Number of coded bits per Subcarrier(Determined by the modulation, MCS) | ||||||
| @@ -175,11 +181,7 @@ class ProbePort(LFCliBase): | |||||||
|         bw = 20 |         bw = 20 | ||||||
|         # Note the T_gi is not exactly know so need to calculate bothh with .4 and .8 |         # Note the T_gi is not exactly know so need to calculate bothh with .4 and .8 | ||||||
|         # the nubmer of Data Subcarriers is based on modulation and bandwith |         # the nubmer of Data Subcarriers is based on modulation and bandwith | ||||||
|         # try: |  | ||||||
|         bw = int(self.tx_mhz) |         bw = int(self.tx_mhz) | ||||||
|         # except BaseException: |  | ||||||
|         #    print("port_probe.py: WARNING unable to parse tx MHz (BW) , check probe output will use {bw}".format(bw=bw)) |  | ||||||
|  |  | ||||||
|         print("Mhz {Mhz}".format(Mhz=self.tx_mhz)) |         print("Mhz {Mhz}".format(Mhz=self.tx_mhz)) | ||||||
|         if bw == 20: |         if bw == 20: | ||||||
|             N_sd = 52 |             N_sd = 52 | ||||||
| @@ -253,6 +255,7 @@ class ProbePort(LFCliBase): | |||||||
|             self.tx_gi = T_gi_long |             self.tx_gi = T_gi_long | ||||||
|  |  | ||||||
|     def calculated_data_rate_rx_HT(self): |     def calculated_data_rate_rx_HT(self): | ||||||
|  |         print("calculated_data_rate_rx_HT") | ||||||
|         N_sd = 0  # Number of Data Subcarriers based on modulation and bandwith |         N_sd = 0  # Number of Data Subcarriers based on modulation and bandwith | ||||||
|         N_bpscs = 0  # Number of coded bits per Subcarrier(Determined by the modulation, MCS) |         N_bpscs = 0  # Number of coded bits per Subcarrier(Determined by the modulation, MCS) | ||||||
|         R = 0  # coding ,  (Determined by the modulation, MCS ) |         R = 0  # coding ,  (Determined by the modulation, MCS ) | ||||||
| @@ -333,6 +336,7 @@ class ProbePort(LFCliBase): | |||||||
|             self.rx_gi = T_gi_long |             self.rx_gi = T_gi_long | ||||||
|  |  | ||||||
|     def calculated_data_rate_tx_VHT(self): |     def calculated_data_rate_tx_VHT(self): | ||||||
|  |         print("calculated_data_rate_tx_VHT") | ||||||
|         # TODO compare with standard for 40 MHz if values change |         # TODO compare with standard for 40 MHz if values change | ||||||
|         N_sd = 0  # Number of Data Subcarriers based on modulation and bandwith |         N_sd = 0  # Number of Data Subcarriers based on modulation and bandwith | ||||||
|         N_bpscs = 0  # Number of coded bits per Subcarrier(Determined by the modulation, MCS) |         N_bpscs = 0  # Number of coded bits per Subcarrier(Determined by the modulation, MCS) | ||||||
| @@ -344,10 +348,7 @@ class ProbePort(LFCliBase): | |||||||
|         bw = 20 |         bw = 20 | ||||||
|         # Note the T_gi is not exactly know so need to calculate bothh with .4 and .8 |         # Note the T_gi is not exactly know so need to calculate bothh with .4 and .8 | ||||||
|         # the nubmer of Data Subcarriers is based on modulation and bandwith |         # the nubmer of Data Subcarriers is based on modulation and bandwith | ||||||
|         try: |         bw = int(self.tx_mhz) | ||||||
|             bw = int(self.tx_mhz) |  | ||||||
|         except BaseException: |  | ||||||
|             print("port_probe.py: WARNING unable to parse tx MHz (BW) , check probe output will use {bw}".format(bw=bw)) |  | ||||||
|  |  | ||||||
|         print("Mhz {Mhz}".format(Mhz=self.tx_mhz)) |         print("Mhz {Mhz}".format(Mhz=self.tx_mhz)) | ||||||
|         if bw == 20: |         if bw == 20: | ||||||
| @@ -430,6 +431,7 @@ class ProbePort(LFCliBase): | |||||||
|             self.tx_gi = T_gi_long |             self.tx_gi = T_gi_long | ||||||
|  |  | ||||||
|     def calculated_data_rate_rx_VHT(self): |     def calculated_data_rate_rx_VHT(self): | ||||||
|  |         print("calculated_data_rate_rx_VHT") | ||||||
|         N_sd = 0  # Number of Data Subcarriers based on modulation and bandwith |         N_sd = 0  # Number of Data Subcarriers based on modulation and bandwith | ||||||
|         N_bpscs = 0  # Number of coded bits per Subcarrier(Determined by the modulation, MCS) |         N_bpscs = 0  # Number of coded bits per Subcarrier(Determined by the modulation, MCS) | ||||||
|         R = 0  # coding ,  (Determined by the modulation, MCS ) |         R = 0  # coding ,  (Determined by the modulation, MCS ) | ||||||
| @@ -439,10 +441,7 @@ class ProbePort(LFCliBase): | |||||||
|         T_gi_long = .8 * 10 ** -6  # Guard index. |         T_gi_long = .8 * 10 ** -6  # Guard index. | ||||||
|         # Note the T_gi is not exactly know so need to calculate bothh with .4 and .8 |         # Note the T_gi is not exactly know so need to calculate bothh with .4 and .8 | ||||||
|         # the nubmer of Data Subcarriers is based on modulation and bandwith |         # the nubmer of Data Subcarriers is based on modulation and bandwith | ||||||
|         try: |         bw = int(self.rx_mhz) | ||||||
|             bw = int(self.rx_mhz) |  | ||||||
|         except BaseException: |  | ||||||
|             print("port_probe.py:  {} WARNING unable to parse rx MHz (BW) , check probe output will use ") |  | ||||||
|         print("Mhz {Mhz}".format(Mhz=self.rx_mhz)) |         print("Mhz {Mhz}".format(Mhz=self.rx_mhz)) | ||||||
|         if bw == 20: |         if bw == 20: | ||||||
|             N_sd = 52 |             N_sd = 52 | ||||||
| @@ -524,6 +523,7 @@ class ProbePort(LFCliBase): | |||||||
|         ########################################### |         ########################################### | ||||||
|  |  | ||||||
|     def calculated_data_rate_tx_HE(self): |     def calculated_data_rate_tx_HE(self): | ||||||
|  |         print("calculated_data_rate_tx_HE") | ||||||
|         # TODO compare with standard for 40 MHz if values change |         # TODO compare with standard for 40 MHz if values change | ||||||
|         N_sd = 0  # Number of Data Subcarriers based on modulation and bandwith |         N_sd = 0  # Number of Data Subcarriers based on modulation and bandwith | ||||||
|         N_bpscs = 0  # Number of coded bits per Subcarrier(Determined by the modulation, MCS) |         N_bpscs = 0  # Number of coded bits per Subcarrier(Determined by the modulation, MCS) | ||||||
| @@ -535,11 +535,7 @@ class ProbePort(LFCliBase): | |||||||
|         bw = 20 |         bw = 20 | ||||||
|         # Note the T_gi is not exactly know so need to calculate bothh with .4 and .8 |         # Note the T_gi is not exactly know so need to calculate bothh with .4 and .8 | ||||||
|         # the nubmer of Data Subcarriers is based on modulation and bandwith |         # the nubmer of Data Subcarriers is based on modulation and bandwith | ||||||
|         try: |         bw = int(self.tx_mhz) | ||||||
|             bw = int(self.tx_mhz) |  | ||||||
|         except BaseException: |  | ||||||
|             print("port_probe.py: WARNING unable to parse tx MHz (BW) , check probe output will use {bw}".format(bw=bw)) |  | ||||||
|  |  | ||||||
|         print("Mhz {Mhz}".format(Mhz=self.tx_mhz)) |         print("Mhz {Mhz}".format(Mhz=self.tx_mhz)) | ||||||
|         if bw == 20: |         if bw == 20: | ||||||
|             N_sd = 52 |             N_sd = 52 | ||||||
| @@ -621,6 +617,7 @@ class ProbePort(LFCliBase): | |||||||
|             self.tx_gi = T_gi_long |             self.tx_gi = T_gi_long | ||||||
|  |  | ||||||
|     def calculated_data_rate_rx_HE(self): |     def calculated_data_rate_rx_HE(self): | ||||||
|  |         print("calculated_data_rate_rx_HE") | ||||||
|         N_sd = 0  # Number of Data Subcarriers based on modulation and bandwith |         N_sd = 0  # Number of Data Subcarriers based on modulation and bandwith | ||||||
|         N_bpscs = 0  # Number of coded bits per Subcarrier(Determined by the modulation, MCS) |         N_bpscs = 0  # Number of coded bits per Subcarrier(Determined by the modulation, MCS) | ||||||
|         R = 0  # coding ,  (Determined by the modulation, MCS ) |         R = 0  # coding ,  (Determined by the modulation, MCS ) | ||||||
| @@ -630,10 +627,7 @@ class ProbePort(LFCliBase): | |||||||
|         T_gi_long = .8 * 10 ** -6  # Guard index. |         T_gi_long = .8 * 10 ** -6  # Guard index. | ||||||
|         # Note the T_gi is not exactly know so need to calculate bothh with .4 and .8 |         # Note the T_gi is not exactly know so need to calculate bothh with .4 and .8 | ||||||
|         # the nubmer of Data Subcarriers is based on modulation and bandwith |         # the nubmer of Data Subcarriers is based on modulation and bandwith | ||||||
|         try: |         bw = int(self.rx_mhz) | ||||||
|             bw = int(self.rx_mhz) |  | ||||||
|         except BaseException: |  | ||||||
|             print("port_probe.py:  {} WARNING unable to parse rx MHz (BW) , check probe output will use ") |  | ||||||
|         print("Mhz {Mhz}".format(Mhz=self.rx_mhz)) |         print("Mhz {Mhz}".format(Mhz=self.rx_mhz)) | ||||||
|         if bw == 20: |         if bw == 20: | ||||||
|             N_sd = 52 |             N_sd = 52 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Chuck SmileyRekiere
					Chuck SmileyRekiere