mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 10:48:02 +00:00 
			
		
		
		
	progress making station up/down requests
This commit is contained in:
		| @@ -18,6 +18,8 @@ from LANforge import LFRequest | |||||||
| debug_printer = pprint.PrettyPrinter(indent=2) | debug_printer = pprint.PrettyPrinter(indent=2) | ||||||
| base_url = "http://localhost:8080" | base_url = "http://localhost:8080" | ||||||
|  |  | ||||||
|  | ADD_STA_FLAGS_DOWN_WPA2 = 68719477760 | ||||||
|  |  | ||||||
| class PortEID: | class PortEID: | ||||||
|     shelf: 1 |     shelf: 1 | ||||||
|     resource: 1 |     resource: 1 | ||||||
| @@ -42,10 +44,45 @@ class PortEID: | |||||||
|         port_name = json_s['name'] |         port_name = json_s['name'] | ||||||
| # end class PortEID | # end class PortEID | ||||||
|  |  | ||||||
|  | # for use with set_port | ||||||
|  | def portDhcpUpRequest(resource_id, port_name): | ||||||
|  |     data = { | ||||||
|  |         "shelf": 1, | ||||||
|  |         "resource": resource_id, | ||||||
|  |         "port": port_name, | ||||||
|  |         "current_flags": 2147483648, # 0x1 = interface down + 2147483648 use DHCP values | ||||||
|  |         "interest": 75513859 # includes use_command_flags + use_current_flags + dhcp + dhcp_rls + ifdown | ||||||
|  |     } | ||||||
|  |     return data | ||||||
|  |  | ||||||
|  | # for use with set_port | ||||||
|  | def portDownRequest(resource_id, port_name): | ||||||
|  |     data = { | ||||||
|  |         "shelf": 1, | ||||||
|  |         "resource": resource_id, | ||||||
|  |         "port": port_name, | ||||||
|  |         "current_flags": 1, # 0x0 = interface up | ||||||
|  |  | ||||||
|  |         "interest": 75513859 | ||||||
|  |     } | ||||||
|  |     return data | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def generateMac(parent_mac, random_octet): | ||||||
|  |     print("************ random_octet: %s **************"%(random_octet)) | ||||||
|  |     my_oct = random_octet | ||||||
|  |     if (len(random_octet) == 4): | ||||||
|  |         my_oct = random_octet[2:] | ||||||
|  |     octets = parent_mac.split(":") | ||||||
|  |     octets[4] = my_oct | ||||||
|  |     return ":".join(octets) | ||||||
|  |  | ||||||
|  | # this produces a named series similar to "sta000, sta001, sta002...sta0(end_id)" | ||||||
|  | # the padding_number is added to the start and end numbers and the resulting sum | ||||||
|  | # has the first digit trimmed, so f(0, 1, 10000) => {0000, 0001} | ||||||
| def portNameSeries(prefix="sta", start_id=0, end_id=1, padding_number=1000): | def portNameSeries(prefix="sta", start_id=0, end_id=1, padding_number=1000): | ||||||
|     name_list = [] |     name_list = [] | ||||||
|     for i in range((padding_number+start_id), (padding_number+end_id)): |     for i in range((padding_number+start_id), (padding_number+end_id+1)): | ||||||
|         sta_name = prefix+str(i)[1:] |         sta_name = prefix+str(i)[1:] | ||||||
|         name_list.append(sta_name) |         name_list.append(sta_name) | ||||||
|     return name_list |     return name_list | ||||||
|   | |||||||
| @@ -17,14 +17,7 @@ from time import sleep | |||||||
| from LANforge import LFRequest | from LANforge import LFRequest | ||||||
| from LANforge import LFUtils | from LANforge import LFUtils | ||||||
|  |  | ||||||
| def gen_mac(parent_mac, random_octet): |  | ||||||
|     print("************ random_octet: %s **************"%(random_octet)) |  | ||||||
|     my_oct = random_octet |  | ||||||
|     if (len(random_octet) == 4): |  | ||||||
|         my_oct = random_octet[2:] |  | ||||||
|     octets = parent_mac.split(":") |  | ||||||
|     octets[4] = my_oct |  | ||||||
|     return ":".join(octets) |  | ||||||
|  |  | ||||||
| def main(): | def main(): | ||||||
|     base_url = "http://localhost:8080" |     base_url = "http://localhost:8080" | ||||||
| @@ -32,31 +25,32 @@ def main(): | |||||||
|     radio = "wiphy0" |     radio = "wiphy0" | ||||||
|     start_id = 200 |     start_id = 200 | ||||||
|     end_id = 202 |     end_id = 202 | ||||||
|  |     # station numbers are heavily manipulated strings, often using manual padding | ||||||
|  |     # sta200 is not sta0200 nor sta00200, and we can format these numbers by adding | ||||||
|  |     # a 1000 or 10000 to the station id, and trimming the first digit off | ||||||
|     padding_number = 10000 # the first digit of this will be deleted |     padding_number = 10000 # the first digit of this will be deleted | ||||||
|     ssid = "jedway-wpa2-x2048-4-1" |     ssid = "jedway-wpa2-x2048-4-1" | ||||||
|     passphrase = "jedway-wpa2-x2048-4-1" |     passphrase = "jedway-wpa2-x2048-4-1" | ||||||
|     j_printer = pprint.PrettyPrinter(indent=2) |     j_printer = pprint.PrettyPrinter(indent=2) | ||||||
|     json_post = "" |     json_post = "" | ||||||
|     json_response = "" |     json_response = "" | ||||||
|  |     found_stations = [] | ||||||
|     lf_r = LFRequest.LFRequest(base_url+"/port/1/1/wiphy0") |     lf_r = LFRequest.LFRequest(base_url+"/port/1/1/wiphy0") | ||||||
|     wiphy0_json = lf_r.getAsJson() |     wiphy0_json = lf_r.getAsJson() | ||||||
|     if (wiphy0_json is None) or (wiphy0_json['interface'] is None): |     if (wiphy0_json is None) or (wiphy0_json['interface'] is None): | ||||||
|         print("Unable to find radio. Are we connected?") |         print("Unable to find radio. Are we connected?") | ||||||
|         exit(1) |         exit(1) | ||||||
|  |  | ||||||
|     print("# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") |     # If you need to inspect a radio.... | ||||||
|     print("# radio wiphy0                                              -") |     #print("# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") | ||||||
|     print("# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") |     #print("# radio wiphy0                                              -") | ||||||
|     LFUtils.debug_printer.pprint(wiphy0_json['interface']['alias']) |     #print("# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") | ||||||
|  |     #LFUtils.debug_printer.pprint(wiphy0_json['interface']['alias']) | ||||||
|     #parent_radio_mac = wiphy0_json['interface']['mac'] |     #parent_radio_mac = wiphy0_json['interface']['mac'] | ||||||
|     print("# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") |     #print("# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -") | ||||||
|  |  | ||||||
|     found_stations = [] |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||||||
|     # example 1                                                 - |     # Example 1                                                 - | ||||||
|     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||||||
|     # This section uses URLs /cli-form/rm_vlan, /cli-form/add_sta |     # This section uses URLs /cli-form/rm_vlan, /cli-form/add_sta | ||||||
|     # The /cli-form URIs take URL-encoded form posts |     # The /cli-form URIs take URL-encoded form posts | ||||||
| @@ -71,6 +65,7 @@ def main(): | |||||||
|     # and != {sta0001, sta001, sta01, or sta1} |     # and != {sta0001, sta001, sta01, or sta1} | ||||||
|  |  | ||||||
|     desired_stations = LFUtils.portNameSeries("sta", start_id, end_id, padding_number) |     desired_stations = LFUtils.portNameSeries("sta", start_id, end_id, padding_number) | ||||||
|  |     LFUtils.debug_printer.pprint(desired_stations) | ||||||
|  |  | ||||||
|     for sta_name in desired_stations: |     for sta_name in desired_stations: | ||||||
|         url = base_url+"/port/1/%s/%s" % (resource_id, sta_name) |         url = base_url+"/port/1/%s/%s" % (resource_id, sta_name) | ||||||
| @@ -94,6 +89,7 @@ def main(): | |||||||
|     LFUtils.waitUntilPortsDisappear(resource_id, found_stations) |     LFUtils.waitUntilPortsDisappear(resource_id, found_stations) | ||||||
|  |  | ||||||
|     print("Example 1: Next we create stations...") |     print("Example 1: Next we create stations...") | ||||||
|  |     #68727874560 was previous flags | ||||||
|     for sta_name in desired_stations: |     for sta_name in desired_stations: | ||||||
|         print("Example 1: Next we create station %s"%sta_name) |         print("Example 1: Next we create station %s"%sta_name) | ||||||
|         lf_r = LFRequest.LFRequest(base_url+"/cli-form/add_sta") |         lf_r = LFRequest.LFRequest(base_url+"/cli-form/add_sta") | ||||||
| @@ -122,7 +118,7 @@ def main(): | |||||||
|             "resource": resource_id, |             "resource": resource_id, | ||||||
|             "radio": radio, |             "radio": radio, | ||||||
|             "sta_name": sta_name, |             "sta_name": sta_name, | ||||||
|             "flags":68727874560, |             "flags": LFUtils.ADD_STA_FLAGS_DOWN_WPA2,  # note flags for add_sta do not match set_port | ||||||
|             "ssid": ssid, |             "ssid": ssid, | ||||||
|             "key": passphrase, |             "key": passphrase, | ||||||
|             "mac": "xx:xx:xx:xx:*:xx", # "NA", #gen_mac(parent_radio_mac, random_hex.pop(0)) |             "mac": "xx:xx:xx:xx:*:xx", # "NA", #gen_mac(parent_radio_mac, random_hex.pop(0)) | ||||||
| @@ -130,12 +126,30 @@ def main(): | |||||||
|             "rate": "DEFAULT" |             "rate": "DEFAULT" | ||||||
|         }) |         }) | ||||||
|         json_response = lf_r.formPost() |         json_response = lf_r.formPost() | ||||||
|         print(json_response) |  | ||||||
|         sleep(1) |  | ||||||
|  |  | ||||||
|     LFUtils.waitUntilPortsAppear() |  | ||||||
|  |     # the LANforge API separates STA creation and ethernet port settings | ||||||
|  |     # We need to revisit the stations we create and amend flags to add | ||||||
|  |     # things like DHCP or ip+gateway, admin-{up,down} | ||||||
|  |     sleep(1) | ||||||
|  |     LFUtils.waitUntilPortsAppear(resource_id, desired_stations) | ||||||
|  |     for sta_name in desired_stations: | ||||||
|  |         print("Ex 1: station up %s"%sta_name) | ||||||
|  |         lf_r = LFRequest.LFRequest(base_url+"/cli-json/set_port") | ||||||
|  |         data = LFUtils.portDhcpUpRequest(resource_id, sta_name) | ||||||
|  |         lf_r.addPostData(data) | ||||||
|  |         lf_r.jsonPost() | ||||||
|  |  | ||||||
|  |     LFUtils.waitUntilPortsAppear(resource_id, desired_stations) | ||||||
|  |     sleep(1) | ||||||
|  |     for sta_name in desired_stations: | ||||||
|  |         print("Ex 1: sta down %s"%sta_name) | ||||||
|  |         lf_r = LFRequest.LFRequest(base_url+"/cli-json/set_port") | ||||||
|  |         data = LFUtils.portDownRequest(resource_id, sta_name) | ||||||
|  |         lf_r.addPostData(data) | ||||||
|  |         lf_r.jsonPost() | ||||||
|     print("...done with example 1\n\n") |     print("...done with example 1\n\n") | ||||||
|  |     sleep(2) | ||||||
|     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||||||
|     # Example 2                                                 - |     # Example 2                                                 - | ||||||
|     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||||||
| @@ -147,6 +161,7 @@ def main(): | |||||||
|         desired_stations.append("sta"+str(i)[1:]) |         desired_stations.append("sta"+str(i)[1:]) | ||||||
|  |  | ||||||
|     print("Example 2: using port list to find stations") |     print("Example 2: using port list to find stations") | ||||||
|  |     sleep(1) | ||||||
|     url = base_url+"/port/1/%s/list?fields=alias" % (resource_id) |     url = base_url+"/port/1/%s/list?fields=alias" % (resource_id) | ||||||
|     lf_r = LFRequest.LFRequest(url) |     lf_r = LFRequest.LFRequest(url) | ||||||
|     json_response = lf_r.getAsJson() |     json_response = lf_r.getAsJson() | ||||||
| @@ -156,14 +171,14 @@ def main(): | |||||||
|     port_map = LFUtils.portAliasesInList(json_response) |     port_map = LFUtils.portAliasesInList(json_response) | ||||||
|     #LFUtils.debug_printer.pprint(port_map) |     #LFUtils.debug_printer.pprint(port_map) | ||||||
|     for sta_name in desired_stations: |     for sta_name in desired_stations: | ||||||
|         print("Example 2: checking for station : "+sta_name) |         print("Ex 2: checking for station : "+sta_name) | ||||||
|         #LFUtils.debug_printer.pprint(port_map.keys()) |         #LFUtils.debug_printer.pprint(port_map.keys()) | ||||||
|         if sta_name in port_map.keys(): |         if sta_name in port_map.keys(): | ||||||
|             print("found station : "+sta_name) |             print("found station : "+sta_name) | ||||||
|             found_stations.append(sta_name) |             found_stations.append(sta_name) | ||||||
|  |  | ||||||
|     for sta_name in found_stations: |     for sta_name in found_stations: | ||||||
|         print("Example 2: delete station %s ..."%sta_name) |         print("Ex 2: delete station %s ..."%sta_name) | ||||||
|         lf_r = LFRequest.LFRequest(base_url+"/cli-json/rm_vlan") |         lf_r = LFRequest.LFRequest(base_url+"/cli-json/rm_vlan") | ||||||
|         lf_r.addPostData({ |         lf_r.addPostData({ | ||||||
|                 "shelf":1, |                 "shelf":1, | ||||||
| @@ -176,7 +191,7 @@ def main(): | |||||||
|     LFUtils.waitUntilPortsDisappear(resource_id, found_stations) |     LFUtils.waitUntilPortsDisappear(resource_id, found_stations) | ||||||
|  |  | ||||||
|     for sta_name in desired_stations: |     for sta_name in desired_stations: | ||||||
|         print("Example 2: create station %s"%sta_name) |         print("Ex 2: create station %s"%sta_name) | ||||||
|         lf_r = LFRequest.LFRequest(base_url+"/cli-json/add_sta") |         lf_r = LFRequest.LFRequest(base_url+"/cli-json/add_sta") | ||||||
|         # see notes from example 1 on flags and mac address patterns |         # see notes from example 1 on flags and mac address patterns | ||||||
|         #octet = random_hex.pop(0)[2:] is a method |         #octet = random_hex.pop(0)[2:] is a method | ||||||
| @@ -186,7 +201,7 @@ def main(): | |||||||
|             "resource": resource_id, |             "resource": resource_id, | ||||||
|             "radio": radio, |             "radio": radio, | ||||||
|             "sta_name": sta_name, |             "sta_name": sta_name, | ||||||
|             "flags":68727874560, |             "flags": LFUtils.ADD_STA_FLAGS_DOWN_WPA2, | ||||||
|             "ssid": ssid, |             "ssid": ssid, | ||||||
|             "key": passphrase, |             "key": passphrase, | ||||||
|             "mac": "xx:xx:xx:xx:*:xx", |             "mac": "xx:xx:xx:xx:*:xx", | ||||||
| @@ -194,7 +209,63 @@ def main(): | |||||||
|             "rate": "DEFAULT" |             "rate": "DEFAULT" | ||||||
|         }) |         }) | ||||||
|         lf_r.jsonPost() |         lf_r.jsonPost() | ||||||
|  |     # the LANforge API separates STA creation and ethernet port settings | ||||||
|  |     # We need to revisit the stations we create and amend flags to add | ||||||
|  |     # things like DHCP or ip+gateway, admin-{up,down} | ||||||
|  |     for sta_name in desired_stations: | ||||||
|  |         print("Ex 2: create station %s"%sta_name) | ||||||
|  |         lf_r = LFRequest.LFRequest(base_url+"/cli-json/set_port") | ||||||
|  |         data = LFUtils.portDhcpUpRequest(resource_id, sta_name) | ||||||
|  |         lf_r.addPostData(data) | ||||||
|  |         lf_r.jsonPost() | ||||||
|     print("...done with Example 2") |     print("...done with Example 2") | ||||||
|  |     sleep(1) | ||||||
|  |  | ||||||
|  |     print("Example 3: bring ports up and down") | ||||||
|  |     sleep(1) | ||||||
|  |     print("Ex 3: setting ports up...") | ||||||
|  |     wait_for_these = [] | ||||||
|  |     for sta_name in desired_stations: | ||||||
|  |         lf_r = LFRequest.LFRequest(base_url+"/port/1/%s/%s?fields=port,device,down"%(resource_id, sta_name)) | ||||||
|  |         json_response = lf_r.getAsJson() | ||||||
|  |         if json_response['interface']['down'] is 'true': | ||||||
|  |             data = LFUtils.portUpRequest(resource_id, sta_name) | ||||||
|  |             url = base_url+"/cli-json/set_port" | ||||||
|  |             lf_r = LFRequest.LFRequest(url) | ||||||
|  |             lf_r.addPostData(data) | ||||||
|  |             print("setting %s up"%sta_name) | ||||||
|  |             json_response = lf_r.jsonPost() | ||||||
|  |             wait_for_these.append(sta_name) | ||||||
|  |     LFUtils.waitUntilPortsAppear(resource_id, wait_for_these) | ||||||
|  |     exit(0) ###################################################### | ||||||
|  |     sleep(1) | ||||||
|  |     print("Ex 3: setting ports down...") | ||||||
|  |     for sta_name in desired_stations: | ||||||
|  |         lf_r = LFRequest.LFRequest(base_url+"/port/1/%s/%s?fields=port,device,down"%(resource_id, sta_name)) | ||||||
|  |         json_response = lf_r.getAsJson() | ||||||
|  |         if json_response['interface']['down'] is 'false': | ||||||
|  |             data = LFUtils.portDownRequest(resource_id, sta_name) | ||||||
|  |             url = base_url+"/cli-json/set_port" | ||||||
|  |             lf_r = LFRequest.LFRequest(url) | ||||||
|  |             lf_r.addPostData(data) | ||||||
|  |             print("setting %s down"%sta_name) | ||||||
|  |             json_response = lf_r.jsonPost() | ||||||
|  |             wait_for_these.append(sta_name) | ||||||
|  |     LFUtils.waitUntilPortsDisappear(resource_id, wait_for_these) | ||||||
|  |     print("...ports are down") | ||||||
|  |     sleep(1) | ||||||
|  |     print("Example 4: Modify stations from type /ac to /n") | ||||||
|  |     sleep(1) | ||||||
|  |     sleep(1) | ||||||
|  |     print("Example 5: change station encryption from wpa2, wpa3, to open") | ||||||
|  |     sleep(1) | ||||||
|  |     sleep(1) | ||||||
|  |     print("Example 6: change station auto from open") | ||||||
|  |     sleep(1) | ||||||
|  |     sleep(1) | ||||||
|  |     print("Example 7: alter TX power:") | ||||||
|  |     sleep(1) | ||||||
|  |     sleep(1) | ||||||
|  |  | ||||||
| # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jed Reynolds
					Jed Reynolds