mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 18:58:01 +00:00 
			
		
		
		
	Added base library structure for lanforge
Signed-off-by: shivam <shivam.thakur@candelatech.com>
This commit is contained in:
		| @@ -0,0 +1,341 @@ | ||||
| import importlib | ||||
| import logging | ||||
| import os | ||||
| import sys | ||||
|  | ||||
| sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../"))) | ||||
| lfcli_base = importlib.import_module("py-json.LANforge.lfcli_base") | ||||
| LFCliBase = lfcli_base.LFCliBase | ||||
| realm = importlib.import_module("py-json.realm") | ||||
|  | ||||
|  | ||||
| class lf_libs: | ||||
|     """ | ||||
|     "traffic_generator": { | ||||
|             "name": "lanforge", | ||||
|             "scenario": "", | ||||
|             "details": { | ||||
|                 "manager_ip": "<ip-address>", | ||||
|                 "http_port": 8080, | ||||
|                 "ssh_port": 22, | ||||
|                 "default_setup_DB": "Test_Scenario", | ||||
|                 "wan_ports": ["1.1.eth2"], | ||||
|                 "lan_ports": ["1.1.eth1"] | ||||
|             } | ||||
|         } | ||||
|     """ | ||||
|     lanforge_data = dict() | ||||
|     manager_ip = None | ||||
|     manager_http_port = None | ||||
|     manager_ssh_port = None | ||||
|     manager_default_db = None | ||||
|     wan_ports = None | ||||
|     lan_ports = None | ||||
|     uplink_nat_ports = None | ||||
|     """ | ||||
|     Scenario : dhcp-bridge / dhcp-external | ||||
|     dhcp-bridge -   wan_ports will act as dhcp server for AP's and it will use uplink_nat_ports for uplink NAT | ||||
|                     lan_ports will have IP Address from the AP  | ||||
|                      | ||||
|     dhcp-external - wan_ports will have IP Address from the dhcp server that will be hosted outside the lanforge | ||||
|                     lan_ports will have IP Address from the AP  | ||||
|                     In case of VLAN configurations, wan_ports will be tagged to get IP Address  | ||||
|                     from VLANS that are outside LANforge | ||||
|     """ | ||||
|     scenario = None | ||||
|     """ | ||||
|     Number of Resources available | ||||
|     """ | ||||
|     resources = None | ||||
|  | ||||
|     """ | ||||
|     ax radio - supports (2.4G and 5gHz Band) | ||||
|     Maximum 1 Station per radio | ||||
|     """ | ||||
|  | ||||
|     ax200_radios = [] | ||||
|  | ||||
|     """ | ||||
|     6e radio - supports (2.4GHz, 5gHz and 6gHz Band) | ||||
|     Maximum 1 Station per radio | ||||
|     """ | ||||
|     ax210_radios = [] | ||||
|  | ||||
|     """ | ||||
|     ax radio - supports (2.4G and 5gHz Band) | ||||
|     Maximum 19 Station per radio | ||||
|     """ | ||||
|     mtk_radios = [] | ||||
|  | ||||
|     """ | ||||
|     ax radio - supports (2.4G Band) | ||||
|     Maximum 64 Station per radio | ||||
|     """ | ||||
|     wave1_2g_radios = [] | ||||
|  | ||||
|     """ | ||||
|     ax radio - supports (5gHz Band) | ||||
|     Maximum 64 Station per radio | ||||
|     """ | ||||
|     wave1_5g_radios = [] | ||||
|  | ||||
|     """ | ||||
|     ax radio - supports (2.4G and 5gHz Band) | ||||
|     Maximum 64 Station per radio | ||||
|     """ | ||||
|     wave2_radios = [] | ||||
|  | ||||
|     """ | ||||
|         ax radio - supports (2.4G and 5gHz Band) | ||||
|         Maximum 64 Station per radio | ||||
|         """ | ||||
|     attenuator = [] | ||||
|  | ||||
|     """ | ||||
|     Realm Object can be used to call various methods available | ||||
|     """ | ||||
|     local_realm = None | ||||
|  | ||||
|     def __init__(self, lf_data, log_level=logging.DEBUG): | ||||
|         logging.basicConfig(format='%(asctime)s - %(message)s', level=log_level) | ||||
|         lf_data = dict(lf_data) | ||||
|         try: | ||||
|             self.lanforge_data = lf_data.get("details") | ||||
|             self.setup_lf_data() | ||||
|         except Exception as e: | ||||
|             logging.error("lf_data has bad values: " + str(lf_data)) | ||||
|             logging.error(e) | ||||
|  | ||||
|     def setup_lf_data(self): | ||||
|         try: | ||||
|             self.manager_ip = self.lanforge_data.get("manager_ip") | ||||
|             self.manager_http_port = self.lanforge_data.get("http_port") | ||||
|             self.manager_ssh_port = self.lanforge_data.get("ssh_port") | ||||
|             self.manager_default_db = self.lanforge_data.get("default_setup_DB") | ||||
|             self.wan_ports = self.lanforge_data.get("wan_ports") | ||||
|             self.lan_ports = self.lanforge_data.get("lan_ports") | ||||
|             self.local_realm = realm.Realm(lfclient_host=self.manager_ip, lfclient_port=self.manager_http_port) | ||||
|         except Exception as e: | ||||
|             logging.error("lf_data has bad values: " + str(self.lanforge_data)) | ||||
|             logging.error(e) | ||||
|  | ||||
|     def setup_metadata(self): | ||||
|         data = self.json_get("/port/all") | ||||
|         all_eth_ports = [] | ||||
|         for info in data["interfaces"]: | ||||
|             if (info[list(info.keys())[0]]["port type"]) == "Ethernet": | ||||
|                 all_eth_ports.append(list(dict(info).keys())[0]) | ||||
|         logging.debug("Available Ports: " + str(all_eth_ports)) | ||||
|         for port in self.wan_ports: | ||||
|             if port not in all_eth_ports: | ||||
|                 logging.error("LANforge system doesn't contains the expected WAN Port:  " + str(port)) | ||||
|                 continue | ||||
|             logging.debug("WAN Port is Available on LANforge Port Manager: " + str(port)) | ||||
|         for port in self.lan_ports: | ||||
|             if port not in all_eth_ports: | ||||
|                 logging.error("LANforge system doesn't contains the expected LAN Port:  " + str(port)) | ||||
|                 continue | ||||
|             logging.debug("LAN Port is Available on LANforge Port Manager: " + str(port)) | ||||
|         data = self.json_get("/radiostatus/all") | ||||
|         all_radios = [] | ||||
|         all_radio_eid = [] | ||||
|         max_possible_stations = 0 | ||||
|         max_2g_stations = 0 | ||||
|         max_5g_stations = 0 | ||||
|         max_6g_stations = 0 | ||||
|         max_ax_stations = 0 | ||||
|         max_ac_stations = 0 | ||||
|         phantom_radios = [] | ||||
|         for info in data: | ||||
|             if info == "handler" or info == "uri" or info == "warnings": | ||||
|                 continue | ||||
|             all_radio_eid.append(info) | ||||
|             all_radios.append(data[info]) | ||||
|             if str(data[info]["phantom"]).__contains__("True"): | ||||
|                 phantom_radios.append(str(data[info]["entity id"])) | ||||
|                 logging.error("Radio is in phantom state: " + str(data[info]["entity id"]) + | ||||
|                               " ,Please Contact: support@candelatech.com") | ||||
|             if str(data[info]["driver"]).__contains__("AX210"): | ||||
|                 max_possible_stations += 1 | ||||
|                 max_2g_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 max_5g_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 max_6g_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 max_ax_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 self.ax210_radios.append(info) | ||||
|             if str(data[info]["driver"]).__contains__("AX200"): | ||||
|                 max_possible_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 max_2g_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 max_5g_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 max_ax_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 self.ax200_radios.append(info) | ||||
|             if str(data[info]["driver"]).__contains__("ath10k(988x)"): | ||||
|                 max_possible_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 max_2g_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 max_5g_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 max_ac_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 self.wave2_radios.append(info) | ||||
|             if str(data[info]["driver"]).__contains__("ath10k(9984)"): | ||||
|                 if str(data[info]["capabilities"]).__contains__("802.11bgn-AC"): | ||||
|                     max_possible_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                     max_2g_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                     max_ac_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                     self.wave1_2g_radios.append(info) | ||||
|                 if str(data[info]["capabilities"]).__contains__("802.11an-AC"): | ||||
|                     max_possible_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                     max_5g_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                     max_ac_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                     self.wave1_5g_radios.append(info) | ||||
|             if str(data[info]["driver"]).__contains__("mt7915e"): | ||||
|                 max_possible_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 max_2g_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 max_5g_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 max_ax_stations += 1 * int(str(data[info]["max_vifs"])) | ||||
|                 self.mtk_radios.append(info) | ||||
|         logging.debug("Radio Information is Extracted") | ||||
|         logging.debug("Available Radios: " + str(all_radio_eid) + "  -  Phantom Radios: " + str(phantom_radios)) | ||||
|         logging.debug("max_possible_stations: " + str(max_possible_stations)) | ||||
|         logging.debug("max_2g_stations: " + str(max_2g_stations)) | ||||
|         logging.debug("max_5g_stations: " + str(max_5g_stations)) | ||||
|         logging.debug("max_6g_stations: " + str(max_6g_stations)) | ||||
|         logging.debug("max_ax_stations: " + str(max_ax_stations)) | ||||
|         logging.debug("max_ac_stations: " + str(max_ac_stations)) | ||||
|  | ||||
|     def load_scenario(self): | ||||
|         self.local_realm.load(self.manager_default_db) | ||||
|  | ||||
|     def json_get(self, _req_url="/"): | ||||
|         cli_base = LFCliBase(_lfjson_host=self.manager_ip, _lfjson_port=self.manager_http_port) | ||||
|         json_response = cli_base.json_get(_req_url=_req_url) | ||||
|         return json_response | ||||
|  | ||||
|  | ||||
| class lf_tests(lf_libs): | ||||
|  | ||||
|     def __init__(self, lf_data, log_level=logging.DEBUG): | ||||
|         super().__init__(lf_data, log_level) | ||||
|         pass | ||||
|  | ||||
|     def client_connectivity_test(self): | ||||
|         pass | ||||
|  | ||||
|     def enterprise_client_connectivity_test(self): | ||||
|         pass | ||||
|  | ||||
|     def wifi_capacity_test(self): | ||||
|         pass | ||||
|  | ||||
|     def dataplane_throughput_test(self): | ||||
|         pass | ||||
|  | ||||
|     def rate_vs_range_test(self): | ||||
|         pass | ||||
|  | ||||
|     def multiband_performance_test(self): | ||||
|         pass | ||||
|  | ||||
|     def multi_psk_test(self): | ||||
|         pass | ||||
|  | ||||
|  | ||||
| class lf_tools(lf_libs): | ||||
|  | ||||
|     def __init__(self, lf_data, log_level=logging.DEBUG): | ||||
|         super().__init__(lf_data, log_level) | ||||
|         pass | ||||
|  | ||||
|     def create_stations(self): | ||||
|         pass | ||||
|  | ||||
|     def delete_stations(self): | ||||
|         pass | ||||
|  | ||||
|     def modify_station(self): | ||||
|         pass | ||||
|  | ||||
|     def read_stations(self): | ||||
|         pass | ||||
|  | ||||
|     def start_sniffer(self): | ||||
|         pass | ||||
|  | ||||
|     def pull_reports(self): | ||||
|         pass | ||||
|  | ||||
|     def get_wifi_radios(self): | ||||
|         pass | ||||
|  | ||||
|     def modify_wifi_radio(self): | ||||
|         pass | ||||
|  | ||||
|     def load_scenario_db(self): | ||||
|         pass | ||||
|  | ||||
|     def read_cv_scenario(self): | ||||
|         pass | ||||
|  | ||||
|     def add_dut(self): | ||||
|         pass | ||||
|  | ||||
|     def delete_dut(self): | ||||
|         pass | ||||
|  | ||||
|     def read_dut(self): | ||||
|         pass | ||||
|  | ||||
|     def update_dut(self): | ||||
|         pass | ||||
|  | ||||
|     def get_ethernet_ports(self): | ||||
|         pass | ||||
|  | ||||
|     def set_ethernet_port(self): | ||||
|         pass | ||||
|  | ||||
|     def clean_port_manager(self): | ||||
|         pass | ||||
|  | ||||
|     def clean_layer3cx(self): | ||||
|         pass | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     basic_02 = { | ||||
|         "controller": { | ||||
|             "url": "https://sec-qa01.cicd.lab.wlan.tip.build:16001", | ||||
|             "username": "tip@ucentral.com", | ||||
|             "password": "OpenWifi%123" | ||||
|         }, | ||||
|         "access_point": [ | ||||
|             { | ||||
|                 "model": "hfcl_ion4", | ||||
|                 "mode": "wifi5", | ||||
|                 "serial": "0006aee53b84", | ||||
|                 "jumphost": True, | ||||
|                 "ip": "10.28.3.100", | ||||
|                 "username": "lanforge", | ||||
|                 "password": "pumpkin77", | ||||
|                 "port": 22, | ||||
|                 "jumphost_tty": "/dev/ttyAP2", | ||||
|                 "version": "next-latest" | ||||
|             } | ||||
|         ], | ||||
|         "traffic_generator": { | ||||
|             "name": "lanforge", | ||||
|             "scenario": "dhcp-bridge",  # dhcp-bridge / dhcp-external | ||||
|             "details": { | ||||
|                 "manager_ip": "192.168.52.89", | ||||
|                 "http_port": 8080, | ||||
|                 "ssh_port": 22, | ||||
|                 "default_setup_DB": "Test_Scenario", | ||||
|                 "wan_ports": ["1.1.eth3"], | ||||
|                 "lan_ports": ["1.1.eth1"], | ||||
|                 "uplink_nat_ports": ["1.1.eth2"] | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     obj = lf_tools(lf_data=basic_02["traffic_generator"]) | ||||
|     obj.setup_metadata() | ||||
|     # obj.load_scenario() | ||||
|     # obj = lf_tests(lf_data="") | ||||
|     # obj.json_get(_req_url="/port/all") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 shivam
					shivam