From 211bdbaee88831d4f95b26b465604c48c0262339 Mon Sep 17 00:00:00 2001 From: Sidartha-CT Date: Wed, 20 May 2026 10:47:41 +0000 Subject: [PATCH 1/2] py-json/interop_connectivity.py : Fix connectivity for clustered lanforge scenario. Signed-off-by: Sidartha-CT --- py-json/interop_connectivity.py | 51 ++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/py-json/interop_connectivity.py b/py-json/interop_connectivity.py index 9040f6ae7..7f9aa7672 100755 --- a/py-json/interop_connectivity.py +++ b/py-json/interop_connectivity.py @@ -127,6 +127,19 @@ def __init__(self, # adb get url self.adb_url = 'http://{}:{}/adb'.format(self.lanforge_ip, self.port) + self.adb_data = self.get_adb_data() + + def get_adb_data(self): + """Fetch ADB device data from the LANforge API endpoint.""" + try: + response = requests.get(self.adb_url, timeout=10) + response.raise_for_status() + adb_data = response.json()["devices"] + except Exception as e: + print(f"Failed to get adb data: {e}") + adb_data = [] + return adb_data + # request function to send json post request to the adb api def post_data(self, url, data): logger.info("ANDROID API {} {} {}".format(url, data, datetime.now())) @@ -151,9 +164,10 @@ async def stop_app(self, port_list=[]): # Added key for adb request for port_data in port_list: shelf, resource, serial, band = port_data + resource = self.get_adb_resource_lf(serial) data = { 'shelf': 1, - 'resource': 1, + 'resource': resource, 'adb_id': serial, # key=8 modification for adb API to add faster callback option 'key': 8, @@ -183,10 +197,10 @@ def set_wifi_state(self, port_list=[], state='enable'): data_list = [] for port_data in port_list: shelf, resource, serial, *extra = port_data - + resource = self.get_adb_resource_lf(serial) data = { 'shelf': 1, - 'resource': 1, + 'resource': resource, 'adb_id': serial, # key=8 modification for adb API to add faster callback option 'key': 8, @@ -197,6 +211,20 @@ def set_wifi_state(self, port_list=[], state='enable'): loop = asyncio.get_event_loop() tasks = [loop.run_in_executor(None, self.post_data, self.post_url, data) for data in data_list] + def get_adb_resource_lf(self, serial): + """ + Determine which LANforge (Manager LANforge / Resource LANforge) + the given Android device is connected to and return its resource. + """ + if self.adb_data is None: + self.adb_data = self.get_adb_data() + for dev in self.adb_data: + key = next(iter(dev)) + eid = key.split('.') + if eid[2] == serial: + return eid[1] + return None + async def reboot_android(self, port_list=[], state='enable'): if (port_list == []): logger.info('Port list is empty') @@ -212,10 +240,10 @@ async def reboot_android(self, port_list=[], state='enable'): data_list = [] for port_data in port_list: shelf, resource, serial, *extra = port_data - + resource = self.get_adb_resource_lf(serial) data = { 'shelf': 1, - 'resource': 1, + 'resource': resource, 'adb_id': serial, # key=8 modification for adb API to add faster callback option 'key': 8, @@ -238,10 +266,10 @@ async def forget_all_networks(self, port_list=[]): data_list = [] for port_data in port_list: shelf, resource, serial, *extra = port_data - + resource = self.get_adb_resource_lf(serial) data = { 'shelf': 1, - 'resource': 1, + 'resource': resource, 'id': serial, 'type': 'adb' } @@ -306,9 +334,10 @@ async def configure_wifi(self, port_list=[]): username = self.get_username(shelf, resource) # adding enable wifi option for android clients as a prerequisite step by-default command = 'shell svc wifi enable' + resource_lf = self.get_adb_resource_lf(serial) data = { 'shelf': 1, - 'resource': 1, + 'resource': resource_lf, 'adb_id': serial, # key=8 modification for adb API to add faster callback option 'key': 8, @@ -319,7 +348,7 @@ async def configure_wifi(self, port_list=[]): if (username is None): # logger.warning('The device with serial {} not found'.format(serial)) username = \ - requests.get('http://{}:{}/adb/1/1/{}'.format(self.lanforge_ip, self.port, serial)).json()['devices'][ + requests.get('http://{}:{}/adb/1/{}/{}'.format(self.lanforge_ip, self.port, resource_lf, serial)).json()['devices'][ 'user-name'] # check if the encryption is personal @@ -350,7 +379,7 @@ async def configure_wifi(self, port_list=[]): curr_eap_identity, curr_passwd) data = { 'shelf': 1, - 'resource': 1, + 'resource': resource_lf, 'adb_id': serial, # key=8 modification for adb API to add faster callback option 'key': 8, @@ -369,7 +398,7 @@ async def configure_wifi(self, port_list=[]): username, self.server_ip, curr_ssid, curr_passwd, curr_encryption) data = { 'shelf': 1, - 'resource': 1, + 'resource': resource_lf, 'adb_id': serial, # key=8 modification for adb API to add faster callback option 'key': 8, From bb3e8591f3d175c51d0aea332f1a5c186ec64b88 Mon Sep 17 00:00:00 2001 From: Sidartha-CT Date: Wed, 20 May 2026 10:50:23 +0000 Subject: [PATCH 2/2] lf_base_interop_profile.py: Add Android 16 support for port reset Verified CLI : python3 lf_interop_port_reset_test.py --host 192.168.204.93 --mgr_ip eth1 --dut AP --ssid "HX520" --encryp psk2 --passwd 12345678 --reset 2 --time_int 5 --device_list FY2410910051,RZCTA09CTXF,DESKTOP-DQ8D8GV --release 11 12 13 14 15 16 Signed-off-by: Sidartha-CT --- py-scripts/lf_base_interop_profile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py-scripts/lf_base_interop_profile.py b/py-scripts/lf_base_interop_profile.py index 9b6d8ef26..c009e831c 100755 --- a/py-scripts/lf_base_interop_profile.py +++ b/py-scripts/lf_base_interop_profile.py @@ -108,7 +108,7 @@ def __init__(self, manager_ip=None, self.release = release self.debug = _debug_on self.screen_size_prcnt = screen_size_prcnt - self.supported_sdk = ["11", "12", "13", "14", "15"] + self.supported_sdk = ["11", "12", "13", "14", "15", "16"] self.supported_devices_names = [] self.supported_devices_resource_id = None self.log_dur = log_dur