#!/usr/bin/python3 ''' # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - # Example of how to operate a WCT instance using cli-socket - # - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - make sure pexpect is installed: $ sudo yum install python3-pexpect $ sudo yum install python3-xlsxwriter You might need to install pexpect-serial using pip: $ pip3 install pexpect-serial $ pip3 install XlsxWriter ''' import sys if sys.version_info[0] != 3: print("This script requires Python 3") exit() import argparse import logging import time from time import sleep import pexpect import xlsxwriter import pprint import LANforge from LANforge import LFRequest from LANforge import LFUtils from LANforge.LFUtils import NA # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - def main(): host = "ct524-debbie.jbr.candelatech.com" base_url = "http://%s:8080"%host resource_id = 1 # typically you're using resource 1 in stand alone realm radio = "wiphy0" start_id = 200 end_id = 202 padding_number = 10000 # the first digit of this will be deleted ssid = "jedway-wpa2-x64-3-1" passphrase = "jedway-wpa2-x64-3-1" clisock = 3990 cliprompt = 'lfgui# ' parser = argparse.ArgumentParser(description="test creating a station") parser.add_argument("-m", "--host", type=str, help="json host to connect to") parser.add_argument("-r", "--radio", type=str, help="radio to create a station on") parser.add_argument("-a", "--start_id", type=int, help="starting station id") parser.add_argument("-b", "--end_id", type=int, help="ending station id") parser.add_argument("-s", "--ssid", type=str, help="station ssid") parser.add_argument("-p", "--passwd", type=str, help="password for ssid") args = None try: args = parser.parse_args() if (args.host is not None): host = args.host, baseurl = base_url = "http://%s:8080"%host if (args.radio is not None): radio = args.radio if (args.start_id is not None): start_id = args.start_id if (args.end_id is not None): end_id = args.end_id if (args.ssid is not None): ssid = args.ssid if (args.passwd is not None): passphrase = args.passwd except Exception as e: logging.exception(e) usage() exit(2) # 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 j_printer = pprint.PrettyPrinter(indent=2) json_post = "" json_response = "" found_stations = [] lf_r = LFRequest.LFRequest(base_url+"/port/1/1/wiphy2") wiphy0_json = lf_r.getAsJson() if (wiphy0_json is None) or (wiphy0_json['interface'] is None): print("Unable to find radio. Are we connected?") exit(1) desired_stations = LFUtils.portNameSeries("sta", start_id, end_id, padding_number) #LFUtils.debug_printer.pprint(desired_stations) print("Example 1: will create stations %s"%(",".join(desired_stations))) for sta_name in desired_stations: url = base_url+"/port/1/%s/%s" % (resource_id, sta_name) print("Ex 1: Checking for station : "+url) lf_r = LFRequest.LFRequest(url) json_response = lf_r.getAsJson(show_error=False) if (json_response != None): found_stations.append(sta_name) for sta_name in found_stations: print("Ex 1: Deleting station %s ...."%sta_name) lf_r = LFRequest.LFRequest(base_url+"/cli-form/rm_vlan") lf_r.addPostData( { "shelf":1, "resource": resource_id, "port": sta_name }) json_response = lf_r.formPost() sleep(0.05) # best to give LANforge a few millis between rm_vlan commands LFUtils.waitUntilPortsDisappear(resource_id, base_url, found_stations) print("Ex 1: Next we create stations...") #68727874560 was previous flags for sta_name in desired_stations: print("Ex 1: Next we create station %s"%sta_name) lf_r = LFRequest.LFRequest(base_url+"/cli-form/add_sta") lf_r.addPostData( LFUtils.staNewDownStaRequest(sta_name, resource_id=resource_id, radio=radio, ssid=ssid, passphrase=passphrase)) lf_r.formPost() sleep(0.1) LFUtils.waitUntilPortsAppear(resource_id, base_url, desired_stations) for sta_name in desired_stations: sleep(1) print("doing portSetDhcpDownRequest on "+sta_name) lf_r = LFRequest.LFRequest(base_url+"/cli-form/set_port") data = LFUtils.portDhcpUpRequest(resource_id, sta_name) lf_r.addPostData(data) lf_r.jsonPost() LFUtils.waitUntilPortsAppear(resource_id, base_url, desired_stations) # Now lets do some cli-socket scripting gui_telnet = pexpect.spawn('telnet %s %s'%(host, clisock)) if (gui_telnet == None): print ("Unable to telnet to %s:%s"%(host,clisock)); exit(1) gui_telnet.expect('lfgui# ') gui_telnet.sendline("cv create 'WiFi Capacity' 'wct'") gui_telnet.expect('OK') gui_telnet.sendline("cv load wct wct-wpa2-x64-two-loops") gui_telnet.expect('OK') gui_telnet.sendline("cv click wct 'Auto Save Report'") gui_telnet.expect('OK') gui_telnet.sendline("cv click wct Start") # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- if __name__ == '__main__': main() #### #### ####