This commit is contained in:
Matthew Stidham
2021-01-21 15:42:05 -08:00
23 changed files with 2986 additions and 1406 deletions

193
cisco_ap_ctl.py Normal file
View File

@@ -0,0 +1,193 @@
#!/usr/bin/python3
'''
LANforge 192.168.100.178
Controller at 192.168.100.112 admin/Cisco123
Controller is 192.1.0.10
AP is on serial port /dev/ttyUSB1 9600 8 n 1
make sure pexpect is installed:
$ sudo yum install python3-pexpect
You might need to install pexpect-serial using pip:
$ pip3 install pexpect-serial
./cisco_ap_ctl.py
'''
import sys
if sys.version_info[0] != 3:
print("This script requires Python 3")
exit()
import re
import logging
import time
from time import sleep
import pprint
import telnetlib
import argparse
import pexpect
default_host = "localhost"
default_ports = {
"serial": None,
"ssh": 22,
"telnet": 23
}
NL = "\n"
CR = "\r\n"
Q = '"'
A = "'"
FORMAT = '%(asctime)s %(name)s %(levelname)s: %(message)s'
band = "a"
logfile = "stdout"
# regex101.com ,
# this will be in the tx_power script
# ^\s+1\s+6\s+\S+\s+\S+\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)
def usage():
print("$0 used connect to Cisco AP:")
print("-a|--ap: AP to act upon")
print("-d|--dest: destination host")
print("-o|--port: destination port")
print("-u|--user: AP login name")
print("-p|--pass: AP password")
print("-s|--scheme (serial|telnet|ssh): connect to controller via serial, ssh or telnet")
print("--tty Serial port for accessing AP")
print("-l|--log file: log messages here")
print("-b|--band: a (5Ghz) or b (2.4Ghz) or abgn for dual-band 2.4Ghz AP")
print("-z|--action: action")
print("-h|--help")
# see https://stackoverflow.com/a/13306095/11014343
class FileAdapter(object):
def __init__(self, logger):
self.logger = logger
def write(self, data):
# NOTE: data can be a partial line, multiple lines
data = data.strip() # ignore leading/trailing whitespace
if data: # non-blank
self.logger.info(data)
def flush(self):
pass # leave it to logging to flush properly
def main():
global logfile
parser = argparse.ArgumentParser(description="Cisco AP Control Script")
parser.add_argument("-a", "--prompt", type=str, help="ap prompt")
parser.add_argument("-d", "--dest", type=str, help="address of the AP 172.19.27.55")
parser.add_argument("-o", "--port", type=int, help="control port on the AP, 2008")
parser.add_argument("-u", "--user", type=str, help="credential login/username, admin")
parser.add_argument("-p", "--passwd", type=str, help="credential password Wnbulab@123")
parser.add_argument("-s", "--scheme", type=str, choices=["serial", "ssh", "telnet"], help="Connect via serial, ssh or telnet")
parser.add_argument("-t", "--tty", type=str, help="tty serial device for connecting to AP")
parser.add_argument("-l", "--log", type=str, help="logfile for messages, stdout means output to console")
parser.add_argument("-z", "--action", type=str, help="action, current action is powercfg")
args = None
try:
args = parser.parse_args()
host = args.dest
scheme = args.scheme
port = (default_ports[scheme], args.port)[args.port != None]
user = args.user
passwd = args.passwd
if (args.log != None):
logfile = args.log
filehandler = None
except Exception as e:
logging.exception(e)
usage()
exit(2)
console_handler = logging.StreamHandler()
formatter = logging.Formatter(FORMAT)
logg = logging.getLogger(__name__)
logg.setLevel(logging.DEBUG)
file_handler = None
if (logfile is not None):
if (logfile != "stdout"):
file_handler = logging.FileHandler(logfile, "w")
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
logg.addHandler(file_handler)
logging.basicConfig(format=FORMAT, handlers=[file_handler])
else:
# stdout logging
logging.basicConfig(format=FORMAT, handlers=[console_handler])
egg = None # think "eggpect"
ser = None
try:
if (scheme == "serial"):
#eggspect = pexpect.fdpexpect.fdspan(telcon, logfile=sys.stdout.buffer)
import serial
from pexpect_serial import SerialSpawn
ser = serial.Serial(args.tty, 9600, timeout=5)
print("Created serial connection on %s, open: %s"%(args.tty, ser.is_open))
egg = SerialSpawn(ser)
egg.logfile = FileAdapter(logg)
time.sleep(1)
elif (scheme == "ssh"):
if (port is None):
port = 22
cmd = "ssh -p%d %s@%s"%(port, user, host)
logg.info("Spawn: "+cmd+NL)
egg = pexpect.spawn(cmd)
#egg.logfile_read = sys.stdout.buffer
egg.logfile = FileAdapter(logg)
i = egg.expect(["password:", "continue connecting (yes/no)?"], timeout=3)
time.sleep(0.1)
if i == 1:
egg.sendline('yes')
egg.expect('password:')
sleep(0.1)
egg.sendline(args.passwd)
elif (scheme == "telnet"):
if (port is None):
port = 23
cmd = "telnet {} {}".format(host, port)
logg.info("Spawn: "+cmd+NL)
egg = pexpect.spawn(cmd)
egg.logfile = FileAdapter(logg)
# Will login below as needed.
else:
usage()
exit(1)
except Exception as e:
logging.exception(e)
ap_prompt = "{}>".format(args.prompt)
ap_hash = "{}#".format(args.prompt)
egg.sendline()
egg.sendline()
time.sleep(0.1)
egg.expect('Username:', timeout=3)
time.sleep(0.1)
egg.sendline(args.user)
time.sleep(0.1)
egg.expect('Password:')
egg.sendline(args.passwd)
egg.expect(ap_prompt)
egg.sendline("en")
egg.expect("Password:")
egg.sendline(args.passwd)
egg.expect("#")
egg.sendline('show controllers dot11Radio 1 powercfg | g T1')
egg.expect("--More--")
egg.sendcontrol('c')
egg.expect("#",timeout=5)
egg.sendline("exit")
egg.excect(">",timeout=5)
egg.sendline("exit")
# ctlr.execute(cn_cmd)
if __name__ == '__main__':
main()
####
####
####

View File

@@ -349,7 +349,7 @@ def main():
found_escape = False
if j == 5:
logg.info("9800 timed out looking for CCP,CCP_EN,User:,Password:,CCP_CONFIG loop_count {} i {} j {} before {} after {}".format(CCP,CCP_EN,CCP_CONFIG,loop_count,i,j,egg.before,egg.after))
logg.info("9800 timed out looking for CCP :{},CCP_EN: {},CCP_CONFIG: {} loop_count {} i {} j {} before {} after {}".format(CCP,CCP_EN,CCP_CONFIG,loop_count,i,j,egg.before,egg.after))
logg.info("9800 Closing the connection and try to re-establish loop_count {} i {} j {}".format(loop_count,i,j))
egg.close(force = True)
sleep(1)
@@ -567,9 +567,9 @@ def main():
if i == 0:
logg.info("9800 found Escape character is '^] i:{} before: {} after: {}".format(i,egg.before,egg.after))
#egg.sendline(CR)
egg.sendline(CR) # 1/18/2021 - may need a bit more logic
found_escape = True
sleep(0.1)
sleep(0.2)
j = egg.expect_exact([CCP,CCP_EN,"User:","Password:",CCP_CONFIG,pexpect.TIMEOUT],timeout=3)
sleep(0.1)
if j == 0:
@@ -1108,13 +1108,16 @@ def main():
else:
command = "show ap channel %s"%(args.ap)
if (args.action == "no_wlan_wireless_tag_policy" and (args.wlan is None)):
raise Exception("wlan is required")
if (args.action == "no_wlan_wireless_tag_policy"):
logg.info("send wireless tag policy no wlan")
logg.info("send wireless tag policy no wlan , for wlan {}".format(args.wlan))
egg.sendline("config t")
sleep(0.1)
i = egg.expect_exact(["(config)#",pexpect.TIMEOUT],timeout=2)
if i == 0:
for command in ["wireless tag policy default-policy-tag","no wlan open-wlan policy default-policy-profile"]:
for command in ["wireless tag policy default-policy-tag","no wlan {} policy default-policy-profile".format(args.wlan)]:
egg.sendline(command)
sleep(1)
j = egg.expect_exact([CCP_POLICY_TAG,pexpect.TIMEOUT],timeout=2)
@@ -1187,13 +1190,8 @@ def main():
logg.info("did not get the (config)# prompt")
if (args.action == "show_wlan_summary"):
egg.sendline("show wlan summary")
sleep(0.1)
i = egg.expect([CCP_EN,pexpect.TIMEOUT],timeout=2)
if i == 0:
logg.info("show wlan summary sent")
if i == 1:
logg.info("show wlan summary timed out")
print("command show wlan summary ")
command = "show wlan summary"
if (args.action == "create_wlan" and ((args.wlanID is None) or (args.wlan is None))):
raise Exception("wlan and wlanID is required an")
@@ -1205,14 +1203,27 @@ def main():
i = egg.expect_exact(["(config)#",pexpect.TIMEOUT],timeout=2)
if i == 0:
logg.info("elevated to (config)#")
command = "wlan %s %s %s"%(args.wlan, args.wlanID, args.wlan)
command = "wlan %s %s %s"%(args.wlan, args.wlanID, args.wlan) # should the last one be ssid not wlan
logg.info("open network command {}".format(command))
egg.sendline(command)
sleep(0.4)
j = egg.expect_exact([CCP_CONFIG_WLAN,pexpect.TIMEOUT],timeout=2)
if j == 0:
for command in ["shutdown","no security ft","no security wpa","no security wpa wpa2","no security wpa wpa2 ciphers aes",
"no security wpa akm dot1x","no shutdown"]:
# previous commands for command in ["shutdown","no security ft","no security wpa","no security wpa wpa2","no security wpa wpa2 ciphers aes",
# "no security wpa akm dot1x","no shutdown"]:
# 1/14/2021 - Cisco suggestion
# We are basically disabling all the possible security parameters for Authentication
for command in [
"no security ft",
"no security ft adaptive",
"no security wpa",
"no security wpa wpa2",
"no security wpa wpa1",
"no security wpa wpa2 ciphers aes"
"no security dot1x authentication-list",
"no security wpa akm dot1x",
"no shutdown"]:
egg.sendline(command)
sleep(1)
k = egg.expect_exact([CCP_CONFIG_WLAN,pexpect.TIMEOUT],timeout=2)

View File

@@ -220,6 +220,8 @@ def usage():
print('-e','--email', "--email user==<from email> passwd==<email password> to==<to email> smtp==<smtp server> port==<smtp port> 465 (SSL)")
print('-ccp','--prompt', "--prompt controller prompt default WLC")
print('--beacon_dbm_diff', "--beacon_dbm_diff <value> is the delta that is allowed between the controller tx and the beacon measured")
print('--show_lf_portmod',"<store_true> show the output of lf_portmod after traffic to verify RSSI values measured by lanforge")
print("-h|--help")
@@ -285,13 +287,13 @@ def main():
parser.add_argument("--pf_a4_dropoff", type=str, help="Allow one chain to use lower tx-power and still pass when doing 4x4. Default is 3")
parser.add_argument("--wait_forever", action='store_true', help="Wait forever for station to associate, may aid debugging if STA cannot associate properly")
parser.add_argument("--adjust_nf", action='store_true', help="Adjust RSSI based on noise-floor. ath10k without the use-real-noise-floor fix needs this option")
parser.add_argument("--wlan", type=str, help="--wlan 9800, wlan identifier default wlan-open",required=True)
parser.add_argument("--wlan", type=str, help="--wlan 9800, wlan identifier, this must match the -ssid",required=True)
parser.add_argument("--wlanID", type=str, help="--wlanID 9800 , defaults to 1",default="1",required=True)
parser.add_argument("--series", type=str, help="--series 9800 or 3504, defaults to 9800",default="9800")
parser.add_argument("--slot", type=str, help="--slot 1 , 9800 AP slot defaults to 1",default="1")
parser.add_argument("--create_station", type=str, help="create LANforge station at the beginning of the test")
parser.add_argument("--radio", type=str, help="radio to create LANforge station on at the beginning of the test")
parser.add_argument("--ssid", type=str, help="ssid",required=True)
parser.add_argument("--ssid", type=str, help="ssid, this must patch the wlan",required=True)
parser.add_argument("--ssidpw", type=str, help="ssidpw",required=True)
parser.add_argument("--security", type=str, help="security",required=True)
parser.add_argument("--cleanup", action='store_true',help="--cleanup , Clean up stations after test completes ")
@@ -302,6 +304,9 @@ def main():
parser.add_argument('-e','--email', action='append', nargs=1, type=str, help="--email user==<from email> passwd==<email password> to==<to email> smtp==<smtp server> port==<smtp port> 465 (SSL)")
parser.add_argument('-ccp','--prompt', type=str,help="controller prompt",required=True)
parser.add_argument('--beacon_dbm_diff', type=str,help="--beacon_dbm_diff <value> is the delta that is allowed between the controller tx and the beacon measured",default="7")
parser.add_argument('--show_lf_portmod', action='store_true',help="--show_lf_portmod, show the output of lf_portmod after traffic to verify RSSI values measured by lanforge")
parser.add_argument('-ap','--ap', action='append', nargs=1, type=str, help="--ap ap_scheme==<telnet,ssh or serial> ap_prompt==<ap_prompt> ap_ip==<ap ip> ap_port==<ap port number> ap_user==<ap user> ap_pw==<ap password>")
#current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + "{:.3f}".format(time.time() - (math.floor(time.time())))[1:]
#print(current_time)
@@ -343,7 +348,12 @@ def main():
# capture the controller output , thus won't got to stdout some output always present
cap_ctl_out = False
else:
cap_ctl_out = True
cap_ctl_out = True
if (args.wlan != args.ssid):
print("####### ERROR ################################")
print("wlan: {} must equial the station ssid: {}".format(args.wlan,args.ssid))
print("####### ERROR ################################")
exit(1)
# note: there would always be an args.outfile due to the default
current_time = time.strftime("%m_%d_%Y_%H_%M_%S", time.localtime())
outfile = "{}_{}.txt".format(args.outfile,current_time)
@@ -355,6 +365,20 @@ def main():
if args.log:
outfile_log = "{}_{}_output_log.log".format(args.outfile,current_time)
print("output file log: {}".format(outfile_log))
ap_dict = []
if args.ap_info:
ap_info = args.ap_info
for _ap_info in ap_info:
print("ap_info {}".format(_ap_info))
ap_keys = ['ap_scheme','ap_prompt','ap_ip','ap_port','ap_user','ap_pw']
ap_dict = dict(map(lambda x: x.split('=='), str(_ap_info).replace('[','').replace(']','').replace("'","").split()))
for key in ap_keys:
if key not in ap_dict:
print("missing ap config, for the {}, all these need to be set {} ".format(key,ap_keys))
exit(1)
print("ap_dict: {}".format(ap_dict))
email_dicts = []
if args.email:
emails = args.email
@@ -397,6 +421,8 @@ def main():
logging.basicConfig(format=FORMAT, handlers=[console_handler])
#logg.addHandler(logging.StreamHandler()) # allows to logging to file and stderr
if bool(ap_dict):
logg.info("ap_dict {}".format(ap_dict))
if bool(email_dicts):
logg.info("email_dicts {}".format(email_dicts))
@@ -519,6 +545,8 @@ def main():
col = 0
row = 0
worksheet.write(row, col, 'Regulatory\nDomain', dblue_bold); col += 1
worksheet.set_column(col, col, 10) # Set width
worksheet.write(row, col, 'Controller\nChannel', dblue_bold); col += 1
worksheet.write(row, col, 'AP\nChannel', dblue_bold); col += 1
worksheet.write(row, col, 'NSS', dblue_bold); col += 1
worksheet.set_column(col, col, 10) # Set width
@@ -631,7 +659,13 @@ def main():
pss = advanced.stdout.decode('utf-8', 'ignore');
logg.info(pss)
except subprocess.CalledProcessError as process_error:
logg.info("Controller unable to commicate to AP or unable to communicate to controller error code {} output {}".format(process_error.returncode, process_error.output))
logg.info("####################################################################################################")
logg.info("# CHECK IF CONTROLLER HAS TELNET CONNECTION ALREADY ACTIVE")
logg.info("####################################################################################################")
logg.info("####################################################################################################")
logg.info("# Controller unable to commicate to AP or unable to communicate to controller error code: {} output {}".format(process_error.returncode, process_error.output))
logg.info("####################################################################################################")
exit_test(workbook)
try:
@@ -663,7 +697,8 @@ def main():
continue
# the summaries are different between the 9800 series controller and the 3504 series
# if the output changes then the following pattern/regular expression parcing needs to be changed
# this site may help: https://regex101.com/
# this site may help: https://regex101.com/
# when using https://regex101.com/ for tool beginning of string begins with ^
if (searchap):
if args.series == "9800":
pat = "%s\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+(\S+)"%(args.ap)
@@ -844,6 +879,20 @@ def main():
logg.info("Controller unable to commicate to AP or unable to communicate to controller error code: {} output {}".format(process_error.returncode, process_error.output))
exit_test(workbook)
if (bw != "NA"):
try:
logg.info("9800/3504 cisco_wifi_ctl.py: bandwidth 20 prior to setting channel, some channels only support 20")
ctl_output = subprocess.run(["./cisco_wifi_ctl.py", "--scheme", scheme, "-d", args.dest, "-u", args.user, "-p", args.passwd, "-a", args.ap, "--band", band,
"--action", "bandwidth", "--value", "20", "--series" , args.series,"--port", args.port,"--prompt",args.prompt],capture_output=cap_ctl_out, check=True)
if cap_ctl_out:
pss = ctl_output.stdout.decode('utf-8', 'ignore')
logg.info(pss)
except subprocess.CalledProcessError as process_error:
logg.info("Controller unable to commicate to AP or unable to communicate to controller error code: {} output {}".format(process_error.returncode, process_error.output))
exit_test(workbook)
# NSS is set on the station earlier...
if (ch != "NA"):
logg.info("9800/3504 test_parameters set channel: {}".format(ch))
@@ -878,7 +927,49 @@ def main():
if wlan_created:
logg.info("wlan already present, no need to create wlan {} wlanID {} port {}".format(args.wlan, args.wlanID, args.port))
pass
else:
else:
# Verify that a wlan does not exist on wlanID
# delete the wlan if already exists
try:
logg.info("9800 cisco_wifi_ctl.py: show_wlan_summary")
wlan_info = subprocess.run(["./cisco_wifi_ctl.py", "--scheme", scheme, "-d", args.dest, "-u", args.user, "-p", args.passwd, "-a", args.ap, "--band", band,
"--action", "show_wlan_summary","--series" , args.series,"--port", args.port,"--prompt",args.prompt], capture_output=True, check=True)
pss = wlan_info.stdout.decode('utf-8', 'ignore')
logg.info(pss)
except subprocess.CalledProcessError as process_error:
logg.info("Controller unable to commicate to AP or unable to communicate to controller error code: {} output {}".format(process_error.returncode, process_error.output))
exit_test(workbook)
# "number of WLANs:\s+(\S+)"
search_wlan = False
for line in pss.splitlines():
logg.info(line)
if (line.startswith("---------")):
search_wlan = True
continue
if (search_wlan):
pat = "{}\s+(\S+)\s+(\S+)".format(args.wlanID)
m = re.search(pat, line)
if (m != None):
cc_wlan = m.group(1)
cc_wlan_ssid = m.group(2)
# wlanID is in use
logg.info("###############################################################################")
logg.info("Need to remove wlan: {} wlanID: {} wlan ssid: {}".format(cc_wlan, args.wlanID, cc_wlan_ssid))
logg.info("###############################################################################")
try:
logg.info("9800 cisco_wifi_ctl.py: delete_wlan, wlan present at start of test: wlan: {} wlanID: {} wlan_ssid: {}".format(cc_wlan, args.wlanID, cc_wlan_ssid))
ctl_output = subprocess.run(["./cisco_wifi_ctl.py", "--scheme", scheme, "-d", args.dest, "-u", args.user, "-p", args.passwd, "-a", args.ap, "--band", band,
"--action", "delete_wlan","--series",args.series, "--wlan", args.wlan, "--wlanID", args.wlanID,"--port",args.port,"--prompt",args.prompt], capture_output=cap_ctl_out, check=True)
if cap_ctl_out:
pss = ctl_output.stdout.decode('utf-8', 'ignore')
logg.info(pss)
except subprocess.CalledProcessError as process_error:
logg.info("Controller unable to commicate to AP or unable to communicate to controller error code: {} output {}".format(process_error.returncode, process_error.output))
exit_test(workbook)
# Create wlan
wlan_created = True
logg.info("create wlan {} wlanID {} port {}".format(args.wlan, args.wlanID, args.port))
try:
@@ -1179,7 +1270,7 @@ def main():
subprocess.run(["./lf_firemod.pl", "--manager", lfmgr, "--resource", lfresource, "--action", "do_cmd",
"--cmd", "set_cx_state all c-udp-power RUNNING"], capture_output=True, check=True)
# Wait 10 more seconds
# Wait configured number of seconds more seconds
logg.info("Waiting {} seconds to let traffic run for a bit, Channel {} NSS {} BW {} TX-Power {}".format(args.duration,ch, n, bw, tx))
time.sleep(int(args.duration))
@@ -1194,8 +1285,10 @@ def main():
port_stats = subprocess.run(["./lf_portmod.pl", "--manager", lfmgr, "--card", lfresource, "--port_name", lfstation,
"--cli_cmd", "probe_port 1 %s %s"%(lfresource, lfstation)],capture_output=True, check=True)
pss = port_stats.stdout.decode('utf-8', 'ignore')
logg.info("./lf_portmod.pl --manager {} --card {} --port_name {} --cli_cmd probe_port 1 {} {}".format(lfmgr, lfresource, lfstation,lfresource,lfstation))
logg.info(pss)
# for debug: print the output of lf_portmod.pl and the command used
if (args.show_lf_portmod):
logg.info("./lf_portmod.pl --manager {} --card {} --port_name {} --cli_cmd probe_port 1 {} {}".format(lfmgr, lfresource, lfstation,lfresource,lfstation))
logg.info(pss)
foundit = False
for line in pss.splitlines():
@@ -1339,7 +1432,7 @@ def main():
pi = int(pathloss)
ag = int(antenna_gain)
calc_dbm_beacon = int(beacon_sig) + pi + rssi_adj + ag
logg.info("calc_dbm_beacon".format(calc_dbm_beacon))
logg.info("calc_dbm_beacon {}".format(calc_dbm_beacon))
logg.info("sig: %s"%sig)
calc_dbm = int(sig) + pi + rssi_adj + ag
@@ -1471,7 +1564,76 @@ def main():
failed_low += 1
least = min(least, diff_a4)
if ((least < (-pfrange - pf_a4_dropoff)) or (failed_low >= 1)):
failed_low_treshold = 1
#
#
# If the ap dictionary is set the read the AP to see the number
# of spatial streams used. For tx power 1 the AP may determine to use
# fewer spatial streams
#
#
P1 = None
T1 = None
P2 = None
T2 = None
P3 = None
T3 = None
P4 = None
T4 = None
N_ANT = None
DAA_Pwr = None
DAA_N_TX = None
DAA_Total_pwr = None
if(bool(ap_dict)):
logg.info("Read AP ap_scheme: {} ap_ip: {} ap_port: {} ap_user: {} ap_pw: {}".format(ap_dict['ap_scheme'],ap_dict['ap_ip'],ap_dict["ap_port"],
ap_dict['ap_user'],ap_dict['ap_pw']))
try:
logg.info("cisco_ap_ctl.py: no_logging_console")
ap_info= subprocess.run(["./cisco_ap_ctl.py", "--scheme", ap_dict['ap_scheme'], "--prompt", ap_dict['ap_prompt'],"--dest", ap_dict['ap_ip'], "--port", ap_dict["ap_port"],
"-user", ap_dict['ap_user'], "-passwd", ap_dict['ap_pw'],"--action", "powercfg"],capture_output=True, check=True)
pss = ap_info.stdout.decode('utf-8', 'ignore');
logg.info(pss)
except subprocess.CalledProcessError as process_error:
logg.info("####################################################################################################")
logg.info("# CHECK IF AP HAS TELNET CONNECTION ALREADY ACTIVE")
logg.info("####################################################################################################")
logg.info("####################################################################################################")
logg.info("# Unable to commicate to AP or unable to communicate to controller error code: {} output {}".format(process_error.returncode, process_error.output))
logg.info("####################################################################################################")
#exit_test(workbook)
exit(1)
for line in pss.splitlines():
logg.info("ap {}".format(line))
m = re.search('^\s+1\s+6\s+\S+\s+\S+\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)')
if (m != None):
P1 = m.group(1)
T1 = m.group(2)
P2 = m.group(3)
T2 = m.group(4)
P3 = m.group(5)
T3 = m.group(6)
P4 = m.group(7)
T4 = m.group(8)
N_ANT = m.group(9)
DAA_Pwr = m.group(10)
DAA_N_TX = m.group(11)
DAA_Total_pwr = m.group(12)
print("P1: {} T1: {} P2: {} T2: {} P3: {} T3: {} P4: {} T4: {} N_ANT: {} DAA_Pwr: {} DAA_N_TX: {} DAA_Total_pwr: {}"
.format(P1,T1,P2,T2,P3,T3,P4,T4,N_ANT,DAA_Pwr,DAA_N_TX,DAA_Total_pwr))
else:
logg.info("AP Check regular expression!!!")
exit(1)
#
# The controller may adjust the number of spatial streams to allow for the
# best power values
#
if ((least < (-pfrange - pf_a4_dropoff)) or (failed_low >= failed_low_treshold)):
pf = 0
if (diff_a1 > pfrange):
@@ -1513,6 +1675,7 @@ def main():
col = 0
worksheet.write(row, col, myrd, center_blue); col += 1
worksheet.write(row, col, cc_ch, center_blue); col += 1
worksheet.write(row, col, _ch, center_blue); col += 1
worksheet.write(row, col, _nss, center_blue); col += 1
worksheet.write(row, col, cc_bw, center_blue); col += 1

View File

@@ -30,6 +30,9 @@ def main():
num_wanlinks = -1
# see if there are old wanlinks to remove
lf_r = LFRequest.LFRequest(base_url+"/wl/list")
port_a ="rd0a"
port_b ="rd1a"
try:
json_response = lf_r.getAsJson()
LFUtils.debug_printer.pprint(json_response)
@@ -69,7 +72,7 @@ def main():
'alias': 'wl_eg1-A',
'shelf': 1,
'resource': '1',
'port': 'eth3',
'port': port_a,
'latency': '75',
'max_rate': '128000',
'description': 'cookbook-example'
@@ -83,7 +86,7 @@ def main():
'alias': 'wl_eg1-B',
'shelf': 1,
'resource': '1',
'port': 'eth5',
'port': port_b,
'latency': '95',
'max_rate': '256000',
'description': 'cookbook-example'

View File

@@ -1,4 +1,7 @@
#!/usr/bin/env python3
"""
This script is out-dated, please see py-scripts/test_ipv4_variable_time.py
"""
import sys
import pprint
from pprint import pprint

View File

@@ -2,7 +2,8 @@
'''
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# -
# Example of how to operate a WCT instance using cli-socket -
# Example of how to operate a WCT instance using cli-socket. -
# This script is out-dated. Please refer to py-scripts/run_cv_scenario.py -
# -
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
make sure pexpect is installed:
@@ -156,4 +157,4 @@ if __name__ == '__main__':
####
####
####
####

View File

@@ -822,14 +822,21 @@ class Realm(LFCliBase):
def new_test_group_profile(self):
return TestGroupProfile(self.lfclient_host, self.lfclient_port, local_realm=self, debug_=self.debug)
<<<<<<< HEAD
class BaseProfile(LFCliBase):
def __init__(self, local_realm):
self.parent_realm = local_realm
=======
class BaseProfile(LFCliBase):
def __init__(self,local_realm):
self.parent_realm=local_realm
>>>>>>> e9a071eff8cfb397f9534ea865f8450e43078cee
self.halt_on_error = False
self.exit_on_error = False
def json_get(self, target):
<<<<<<< HEAD
return self.parent_realm.json_get(target)
def json_post(self, req_url, data, debug_=False, suppress_related_commands_=None):
@@ -868,6 +875,10 @@ class BaseProfile(LFCliBase):
def wait_until_cxs_appear(self, target, debug=False):
return self.parent_realm.wait_until_cxs_appear(target, debug=False)
=======
self.debug_ = False
return self.parent_realm.json_get(self,target)
>>>>>>> e9a071eff8cfb397f9534ea865f8450e43078cee
class MULTICASTProfile(LFCliBase):
def __init__(self, lfclient_host, lfclient_port, local_realm,
@@ -1044,6 +1055,7 @@ class MULTICASTProfile(LFCliBase):
pprint.pprint(self)
<<<<<<< HEAD
class L3CXProfile(BaseProfile):
def __init__(self,
lfclient_host,
@@ -1061,6 +1073,16 @@ class L3CXProfile(BaseProfile):
name_prefix_="Unset",
number_template_="00000",
debug_=False):
=======
class L3CXProfile(BaseProfile):
def __init__(self, lfclient_host, lfclient_port, local_realm,
side_a_min_bps=None, side_b_min_bps=None,
side_a_max_bps=0, side_b_max_bps=0,
side_a_min_pdu=-1, side_b_min_pdu=-1,
side_a_max_pdu=0, side_b_max_pdu=0,
report_timer_=3000, name_prefix_="Unset", number_template_="00000", debug_=False):
>>>>>>> e9a071eff8cfb397f9534ea865f8450e43078cee
"""
:param lfclient_host:
:param lfclient_port:
@@ -1137,13 +1159,21 @@ class L3CXProfile(BaseProfile):
monitor_interval=1,
col_names=None,
created_cx=None,
<<<<<<< HEAD
monitor=True,
=======
show=True,
>>>>>>> e9a071eff8cfb397f9534ea865f8450e43078cee
report_file=None,
output_format=None,
script_name=None,
arguments=None):
try:
<<<<<<< HEAD
duration_sec = self.parse_time(duration_sec).seconds
=======
duration_sec=self.local_realm.parse_time(duration_sec).seconds
>>>>>>> e9a071eff8cfb397f9534ea865f8450e43078cee
except:
if (duration_sec is None) or (duration_sec <= 1):
raise ValueError("L3CXProfile::monitor wants duration_sec > 1 second")
@@ -1164,6 +1194,7 @@ class L3CXProfile(BaseProfile):
else:
output_format = report_file.split('.')[-1]
<<<<<<< HEAD
# Step 1, column names
if fields = None:
pass
@@ -1171,6 +1202,12 @@ class L3CXProfile(BaseProfile):
fields = ",".join(col_names)
print(fields)
# Step 2, monitor columns
=======
#Step 1, column names
fields=",".join(col_names)
print(fields)
#Step 2, monitor columns
>>>>>>> e9a071eff8cfb397f9534ea865f8450e43078cee
start_time = datetime.datetime.now()
end_time = start_time + datetime.timedelta(seconds=duration_sec)
print(end_time)
@@ -1179,6 +1216,7 @@ class L3CXProfile(BaseProfile):
passes = 0
expected_passes = 0
old_cx_rx_values = self.__get_rx_values()
<<<<<<< HEAD
timestamps = []
# for x in range(0,int(round(iterations,0))):
if col_names = None:
@@ -1188,6 +1226,12 @@ class L3CXProfile(BaseProfile):
response = self.json_get("/endp/all")
else:
response = self.json_get("/endp/%s?fields=%s" % (created_cx, fields))
=======
timestamps=[]
#for x in range(0,int(round(iterations,0))):
while datetime.datetime.now() < end_time:
response = self.json_get("/endp/%s?fields=%s" % (created_cx, fields))
>>>>>>> e9a071eff8cfb397f9534ea865f8450e43078cee
if "endpoint" not in response:
print(response)
raise ValueError("no endpoint?")
@@ -1213,8 +1257,15 @@ class L3CXProfile(BaseProfile):
time.sleep(monitor_interval)
print(value_map)
<<<<<<< HEAD
# step 3 organize data
endpoints = list()
=======
#if passes == expected_passes:
#self._pass("PASS: All tests passed")
#step 3 organize data
endpoints=list()
>>>>>>> e9a071eff8cfb397f9534ea865f8450e43078cee
for endpoint in value_map.values():
endpoints.append(endpoint['endpoint'])
endpoints2 = []
@@ -1226,11 +1277,19 @@ class L3CXProfile(BaseProfile):
itertools.chain.from_iterable(itertools.repeat(x, len(created_cx.split(','))) for x in timestamps))
for point in range(0, len(endpoints2)):
endpoints2[point].insert(0, timestamps2[point])
<<<<<<< HEAD
# step 4 save and close
header_row = col_names
header_row.insert(0, 'Timestamp')
print(header_row)
if output_format.lower() in ['excel', 'xlsx'] or report_file.split('.')[-1] == 'xlsx':
=======
#step 4 save and close
header_row=col_names
print(header_row)
header_row.insert(0,'Timestamp')
if output_format.lower() in ['excel','xlsx'] or report_file.split('.')[-1] == 'xlsx':
>>>>>>> e9a071eff8cfb397f9534ea865f8450e43078cee
report_fh = open(report_file, "w+")
workbook = xlsxwriter.Workbook(report_file)
worksheet = workbook.add_worksheet()
@@ -1286,9 +1345,15 @@ class L3CXProfile(BaseProfile):
def refresh_cx(self):
for cx_name in self.created_cx.keys():
<<<<<<< HEAD
self.json_post("/cli-json/show_cxe", {
"test_mgr": "ALL",
"cross_connect": cx_name
=======
self.local_realm.json_post("/cli-json/show_cxe", {
"test_mgr": "ALL",
"cross_connect": cx_name
>>>>>>> e9a071eff8cfb397f9534ea865f8450e43078cee
}, debug_=self.debug)
print(".", end='')
@@ -1296,8 +1361,13 @@ class L3CXProfile(BaseProfile):
print("Starting CXs...")
for cx_name in self.created_cx.keys():
if self.debug:
<<<<<<< HEAD
print("cx-name: %s" % (cx_name))
self.json_post("/cli-json/set_cx_state", {
=======
print("cx-name: %s"%(cx_name))
self.local_realm.json_post("/cli-json/set_cx_state", {
>>>>>>> e9a071eff8cfb397f9534ea865f8450e43078cee
"test_mgr": "default_tm",
"cx_name": cx_name,
"cx_state": "RUNNING"
@@ -3498,7 +3568,7 @@ class StationProfile:
# First, request remove on the list.
for port_eid in desired_stations:
self.local_realm.rm_port(port_eid, check_exists=True, debug_=debug_)
time.sleep(delay)
# And now see if they are gone
LFUtils.wait_until_ports_disappear(base_url=self.lfclient_url, port_list=desired_stations)

View File

@@ -1,5 +1,10 @@
'''
Candela Technologies Inc.
Info : Standard Script for WLAN Capaity Calculator
Date :
Author : Anjali Rahamatkar
This Script has three classes :
1. abg11_calculator : It will take all the user input of 802.11a/b/g station,calculate Intermediate values and Theoretical values.
2. n11_calculator : It will take all the user input of 802.11n station,calculate Intermediate values and Theoretical values.
@@ -15,7 +20,8 @@ import json
# Class to take all user input (802.11a/b/g Standard)
class abg11_calculator:
class abg11_calculator():
def __init__(self, Traffic_Type, PHY_Bit_Rate, Encryption, QoS, MAC_Frame_802_11, Basic_Rate_Set, Preamble,
slot_name, Codec_Type, RTS_CTS_Handshake, CTS_to_self):
@@ -31,9 +37,77 @@ class abg11_calculator:
self.RTS_CTS_Handshake = RTS_CTS_Handshake
self.CTS_to_self = CTS_to_self
# This function is for calculate intermediate values and Theoretical values
def input_parameter(self):
@staticmethod
def create_argparse(prog=None, formatter_class=None, epilog=None, description=None):
if (prog is not None) or (formatter_class is not None) or (epilog is not None) or (description is not None):
ap = argparse.ArgumentParser(prog=prog,
formatter_class=formatter_class,
allow_abbrev=True,
epilog=epilog,
description=description)
else:
ap = argparse.ArgumentParser()
# Station : 11abg
ap.add_argument("-sta", "--station", help="Enter Station Name : [11abg,11n,11ac](by Default 11abg)")
ap.add_argument("-t", "--traffic", help="Enter the Traffic Type : [Data,Voice](by Default Data)")
ap.add_argument("-p", "--phy",
help="Enter the PHY Bit Rate of Data Flow : [1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54](by Default 54)")
ap.add_argument("-e", "--encryption",
help="Enter the Encryption : [None, WEP , TKIP, CCMP](by Default None)")
ap.add_argument("-q", "--qos", help="Enter the QoS = : [No, Yes](by Default [No for 11abg] and [Yes for 11n])")
ap.add_argument("-m", "--mac",
help="Enter the 802.11 MAC Frame : [Any Value](by Default [106 for 11abg] and [1538 for 11n])")
ap.add_argument("-b", "--basic", nargs='+',
help="Enter the Basic Rate Set : [1,2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54]"
" (by Default [1 2 5.5 11 6 12] for 11abg, [6 12 24] for 11n/11ac])")
ap.add_argument("-pre", "--preamble", help="Enter Preamble value : [ Short, Long, N/A](by Default Short)")
ap.add_argument("-s", "--slot", help="Enter the Slot Time : [Short, Long, N/A](by Default Short)")
ap.add_argument("-co", "--codec", help="Enter the Codec Type (Voice Traffic): {[ G.711 , G.723 , G.729]"
"by Default G.723 for 11abg, G.711 for 11n} and"
"{['Mixed','Greenfield'] by Default Mixed for 11ac}")
ap.add_argument("-r", "--rts", help="Enter the RTS/CTS Handshake : [No, Yes](by Default No)")
ap.add_argument("-c", "--cts", help="Enter the CTS-to-self (protection) : [No, Yes](by Default No)")
# Station : 11n and 11ac
ap.add_argument("-d", "--data",
help="Enter the Data/Voice MCS Index : ['0','1','2','3','4','5','6','7','8','9','10',"
"'11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26',"
"'27','28','29','30','31']by Default 7")
ap.add_argument("-ch", "--channel",
help="Enter the Channel Bandwidth = : ['20','40'] by Default 40 for 11n and "
"['20','40','80'] by Default 80 for 11ac")
ap.add_argument("-gu", "--guard", help="Enter the Guard Interval = : ['400','800'] (by Default 400)")
ap.add_argument("-high", "--highest",
help="Enter the Highest Basic MCS = : ['0','1','2','3','4','5','6','7','8','9',"
"'10','11','12','13','14','15','16','17','18','19','20','21','22','23','24',"
"'25','26','27','28','29','30','31'](by Default 1)")
ap.add_argument("-pl", "--plcp",
help="Enter the PLCP Configuration = : ['Mixed','Greenfield'] (by Default Mixed) for 11n")
ap.add_argument("-ip", "--ip",
help="Enter the IP Packets per A-MSDU = : ['0','1','2','3','4','5','6','7','8','9',"
"'10','11','12','13','14','15','16','17','18','19','20'] (by Default 0)")
ap.add_argument("-mc", "--mc",
help="Enter the MAC Frames per A-MPDU = : ['0','1','2','3','4','5','6','7','8',"
"'9','10','11','12','13','14','15','16','17','18','19','20','21','22','23',"
"'24','25','26','27','28','29','30','31','32','33','34','35','36','37','38',"
"'39','40','41','42','43','44','45','46','47','48','49','50','51','52','53',"
"'54','55','56','57','58','59','60','61','62','63','64'](by Default [42 for 11n] and [64 for 11ac])")
ap.add_argument("-cw", "--cwin",
help="Enter the CWmin (leave alone for default) = : [Any Value] (by Default 15)")
ap.add_argument("-spa", "--spatial", help="Enter the Spatial Streams = [1,2,3,4] (by Default 4)")
ap.add_argument("-rc", "--rtscts", help="Enter the RTS/CTS Handshake and CTS-to-self "
" = ['No','Yes'] (by Default No for 11ac)")
return ap
def calculate(self):
PHY_Bit_Rate_float = float(self.PHY_Bit_Rate)
PHY_Bit_Rate_int = int(PHY_Bit_Rate_float)
@@ -419,7 +493,7 @@ class abg11_calculator:
Client_5 = Ttxframe_data + SIFS_value + Ttxframe + DIFS_value + RTS_CTS_Handshake_Overhead + CTS_to_self_Handshake + MeanBackoff_value / 20
Client_6 = Ttxframe_data + SIFS_value + Ttxframe + DIFS_value + RTS_CTS_Handshake_Overhead + CTS_to_self_Handshake + MeanBackoff_value / 50
Client_7 = Ttxframe_data + SIFS_value + Ttxframe + DIFS_value + RTS_CTS_Handshake_Overhead + CTS_to_self_Handshake + MeanBackoff_value / 100
Client_1_new = format(Client_1, '.2f')
self.Client_1_new = format(Client_1, '.2f')
Client_2_new = format(Client_2, '.4f')
Client_3_new = format(Client_3, '.4f')
Client_4_new = format(Client_4, '.4f')
@@ -430,7 +504,7 @@ class abg11_calculator:
# Max Frame Rate
Max_Frame_Rate_C1 = 1000000 / Client_1
Max_Frame_Rate_C1_round = round(Max_Frame_Rate_C1)
self.Max_Frame_Rate_C1_round = round(Max_Frame_Rate_C1)
Max_Frame_Rate_C2 = 1000000 / Client_2
Max_Frame_Rate_C2_round = round(Max_Frame_Rate_C2)
Max_Frame_Rate_C3 = 1000000 / Client_3
@@ -447,7 +521,7 @@ class abg11_calculator:
# Max. Offered Load (802.11)
Max_Offered_Load_C1 = Max_Frame_Rate_C1 * Nbits_value / 1000000
Max_Offered_Load_C1_new = format(Max_Offered_Load_C1, '.3f')
self.Max_Offered_Load_C1_new = format(Max_Offered_Load_C1, '.3f')
Max_Offered_Load_C2 = Max_Frame_Rate_C2 * Nbits_value / 1000000
Max_Offered_Load_C2_new = format(Max_Offered_Load_C2, '.3f')
Max_Offered_Load_C3 = Max_Frame_Rate_C3 * Nbits_value / 1000000
@@ -464,7 +538,7 @@ class abg11_calculator:
# Offered Load Per 802.11 Client
Offered_Load_Per_Client1 = Max_Offered_Load_C1 / 1
Offered_Load_Per_Client1_new = format(Offered_Load_Per_Client1, '.3f')
self.Offered_Load_Per_Client1_new = format(Offered_Load_Per_Client1, '.3f')
Offered_Load_Per_Client2 = Max_Offered_Load_C2 / 2
Offered_Load_Per_Client2_new = format(Offered_Load_Per_Client2, '.3f')
Offered_Load_Per_Client3 = Max_Offered_Load_C3 / 5
@@ -481,7 +555,7 @@ class abg11_calculator:
# Offered Load (802.3 Side)
Offered_Load_C1 = Max_Frame_Rate_C1 * Ethernet_MAC_Frame_int * 8 / 1000000
Offered_Load_C1_new = format(Offered_Load_C1, '.3f')
self.Offered_Load_C1_new = format(Offered_Load_C1, '.3f')
Offered_Load_C2 = Max_Frame_Rate_C2 * Ethernet_MAC_Frame_int * 8 / 1000000
Offered_Load_C2_new = format(Offered_Load_C2, '.3f')
Offered_Load_C3 = Max_Frame_Rate_C3 * Ethernet_MAC_Frame_int * 8 / 1000000
@@ -499,7 +573,7 @@ class abg11_calculator:
if ip == 1:
IP_Throughput_C1 = Max_Frame_Rate_C1 * ip_packet * 8 / 1000000
IP_Throughput_C1_new = format(IP_Throughput_C1, '.3f')
self.IP_Throughput_C1_new = format(IP_Throughput_C1, '.3f')
IP_Throughput_C2 = Max_Frame_Rate_C2 * ip_packet * 8 / 1000000
IP_Throughput_C2_new = format(IP_Throughput_C2, '.3f')
IP_Throughput_C3 = Max_Frame_Rate_C3 * ip_packet * 8 / 1000000
@@ -513,7 +587,7 @@ class abg11_calculator:
IP_Throughput_C7 = Max_Frame_Rate_C7 * ip_packet * 8 / 1000000
IP_Throughput_C7_new = format(IP_Throughput_C7, '.3f')
else:
IP_Throughput_C1_new = "N/A"
self.IP_Throughput_C1_new = "N/A"
IP_Throughput_C2_new = "N/A"
IP_Throughput_C3_new = "N/A"
IP_Throughput_C4_new = "N/A"
@@ -521,102 +595,104 @@ class abg11_calculator:
IP_Throughput_C6_new = "N/A"
IP_Throughput_C7_new = "N/A"
print("\n" + "******************Station : 11abgCalculator*****************************" + "\n")
print("Theoretical Maximum Offered Load" + "\n")
print("1 Client:")
All_theoretical_output = {'Packet Interval(usec)': Client_1_new, 'Max Frame Rate(fps)': Max_Frame_Rate_C1_round,
'Max. Offered Load (802.11)(Mb/s)': Max_Offered_Load_C1_new,
'Offered Load Per 802.11 Client(Mb/s)': Offered_Load_Per_Client1_new,
'Offered Load (802.3 Side)(Mb/s)': Offered_Load_C1_new,
'IP Throughput (802.11 -> 802.3)(Mb/s)': IP_Throughput_C1_new}
print(json.dumps(All_theoretical_output, indent=4))
Voice_Call = Max_Frame_Rate_C1 / Codec_Frame_rate
Voice_Call_value = round(Voice_Call)
if "Data" in self.Traffic_Type:
Maximum_Theoretical_R_value = "N/A"
self.Maximum_Theoretical_R_value = "N/A"
else:
if "G.711" in self.Codec_Type:
Maximum_Theoretical_R_value = 85.9
self.Maximum_Theoretical_R_value = 85.9
else:
if "G.723" in self.Codec_Type:
Maximum_Theoretical_R_value = 72.9
self.Maximum_Theoretical_R_value = 72.9
else:
if "G.729" in self.Codec_Type:
Maximum_Theoretical_R_value = 81.7
self.Maximum_Theoretical_R_value = 81.7
else:
Maximum_Theoretical_R_value = 93.2
self.Maximum_Theoretical_R_value = 93.2
if "Data" in self.Traffic_Type:
Estimated_MOS_Score = "N/A"
Maximum_Bidirectional = "N/A"
self.Estimated_MOS_Score = "N/A"
self.Maximum_Bidirectional_Voice_Calls = "N/A"
else:
if (Voice_Call_value <= 1):
Maximum_Bidirectional_Voice_Calls = Max_Frame_Rate_C1_round / Codec_Frame_rate
Maximum_Bidirectional_Voice_Calls1 = self.Max_Frame_Rate_C1_round / Codec_Frame_rate
elif (Voice_Call_value <= 2):
Maximum_Bidirectional_Voice_Calls = Max_Frame_Rate_C2_round / Codec_Frame_rate
Maximum_Bidirectional_Voice_Calls1 = Max_Frame_Rate_C2_round / Codec_Frame_rate
elif (Voice_Call_value <= 5):
Maximum_Bidirectional_Voice_Calls = Max_Frame_Rate_C3_round / Codec_Frame_rate
Maximum_Bidirectional_Voice_Calls1 = Max_Frame_Rate_C3_round / Codec_Frame_rate
elif (Voice_Call_value <= 10):
Maximum_Bidirectional_Voice_Calls = Max_Frame_Rate_C4_round / Codec_Frame_rate
Maximum_Bidirectional_Voice_Calls1 = Max_Frame_Rate_C4_round / Codec_Frame_rate
elif (Voice_Call_value <= 20):
Maximum_Bidirectional_Voice_Calls = Max_Frame_Rate_C5_round / Codec_Frame_rate
Maximum_Bidirectional_Voice_Calls1 = Max_Frame_Rate_C5_round / Codec_Frame_rate
elif (Voice_Call_value <= 50):
Maximum_Bidirectional_Voice_Calls = Max_Frame_Rate_C6_round / Codec_Frame_rate
Maximum_Bidirectional_Voice_Calls1 = Max_Frame_Rate_C6_round / Codec_Frame_rate
else:
Maximum_Bidirectional_Voice_Calls = Max_Frame_Rate_C7_round / Codec_Frame_rate
Maximum_Bidirectional = round(Maximum_Bidirectional_Voice_Calls, 2)
if Maximum_Theoretical_R_value < 0:
Estimated_MOS_Score = 1
Maximum_Bidirectional_Voice_Calls1 = Max_Frame_Rate_C7_round / Codec_Frame_rate
self.Maximum_Bidirectional_Voice_Calls = round(Maximum_Bidirectional_Voice_Calls1, 2)
if self.Maximum_Theoretical_R_value < 0:
self.Estimated_MOS_Score = 1
else:
if Maximum_Theoretical_R_value > 100:
Estimated_MOS_Score = 4.5
if self.Maximum_Theoretical_R_value > 100:
self.Estimated_MOS_Score = 4.5
else:
Estimated_MOS_Score_1 = 1 + 0.035 * Maximum_Theoretical_R_value + Maximum_Theoretical_R_value * (
Maximum_Theoretical_R_value - 60) * (
100 - Maximum_Theoretical_R_value) * 7 * 0.000001
Estimated_MOS_Score = round(Estimated_MOS_Score_1, 2)
Estimated_MOS_Score_1 = 1 + 0.035 * self.Maximum_Theoretical_R_value + self.Maximum_Theoretical_R_value * (
self.Maximum_Theoretical_R_value - 60) * (
100 - self.Maximum_Theoretical_R_value) * 7 * 0.000001
self.Estimated_MOS_Score = round(Estimated_MOS_Score_1, 2)
def get_result(self):
print("\n" + "******************Station : 11abgCalculator*****************************" + "\n")
print("Theoretical Maximum Offered Load" + "\n")
print("1 Client:")
All_theoretical_output = {'Packet Interval(usec)': self.Client_1_new, 'Max Frame Rate(fps)': self.Max_Frame_Rate_C1_round,
'Max. Offered Load (802.11)(Mb/s)': self.Max_Offered_Load_C1_new,
'Offered Load Per 802.11 Client(Mb/s)': self.Offered_Load_Per_Client1_new,
'Offered Load (802.3 Side)(Mb/s)': self.Offered_Load_C1_new,
'IP Throughput (802.11 -> 802.3)(Mb/s)': self.IP_Throughput_C1_new}
print(json.dumps(All_theoretical_output, indent=4))
print("\n" + "Theroretical Voice Call Capacity" + "\n")
All_theoretical_voice = {'Maximum Theoretical R-value': Maximum_Theoretical_R_value,
'Estimated MOS Score': Estimated_MOS_Score,
'Maximum Bidirectional Voice Calls(calls)': Maximum_Bidirectional}
All_theoretical_voice = {'Maximum Theoretical R-value': self.Maximum_Theoretical_R_value,
'Estimated MOS Score': self.Estimated_MOS_Score,
'Maximum Bidirectional Voice Calls(calls)': self.Maximum_Bidirectional_Voice_Calls}
print(json.dumps(All_theoretical_voice, indent=4))
##Class to take all user input (802.11n Standard)
class n11_calculator():
class n11_calculator(abg11_calculator):
def __init__(self, Traffic_Type, Data_Voice_MCS, Channel_Bandwidth, Guard_Interval_value, Highest_Basic_str,
Encryption, QoS,
IP_Packets_MSDU_str, MAC_Frames_per_A_MPDU_str, BSS_Basic_Rate, MAC_MPDU_Size_Data_Traffic,
Codec_Type_Voice_Traffic, PLCP, CWmin, RTS_CTS_Handshake, CTS_to_self_protection):
self.Traffic_Type = Traffic_Type
Codec_Type, PLCP, CWmin, RTS_CTS_Handshake, CTS_to_self,PHY_Bit_Rate=None,MAC_Frame_802_11=None,Basic_Rate_Set=None,Preamble=None,slot_name=None):
super().__init__(Traffic_Type, PHY_Bit_Rate, Encryption, QoS, MAC_Frame_802_11, Basic_Rate_Set, Preamble,
slot_name, Codec_Type, RTS_CTS_Handshake, CTS_to_self)
self.Data_Voice_MCS = Data_Voice_MCS
self.Channel_Bandwidth = Channel_Bandwidth
self.Guard_Interval_value = Guard_Interval_value
self.Highest_Basic_str = Highest_Basic_str
self.Encryption = Encryption
self.QoS = QoS
self.IP_Packets_MSDU_str = IP_Packets_MSDU_str
self.MAC_Frames_per_A_MPDU_str = MAC_Frames_per_A_MPDU_str
self.BSS_Basic_Rate = BSS_Basic_Rate
self.MAC_MPDU_Size_Data_Traffic = MAC_MPDU_Size_Data_Traffic
self.Codec_Type_Voice_Traffic = Codec_Type_Voice_Traffic
self.PLCP = PLCP
self.CWmin = CWmin
self.RTS_CTS_Handshake = RTS_CTS_Handshake
self.CTS_to_self_protection = CTS_to_self_protection
# This function is for calculate intermediate values and Theoretical values
def input_parameter(self):
def calculate(self):
global HT_data_temp
global temp_value
SIFS = 16.00
@@ -773,17 +849,17 @@ class n11_calculator():
Encrypt_Hdr = 16
# c36 Codec IP Packet Size
if "G.711" in self.Codec_Type_Voice_Traffic:
if "G.711" in self.Codec_Type:
Codec_IP_Packet_Size = 200
Codec_Frame_Rate = 100
else:
if "G.723" in self.Codec_Type_Voice_Traffic:
if "G.723" in self.Codec_Type:
Codec_IP_Packet_Size = 60
Codec_Frame_Rate = 67
else:
if "G.729" in self.Codec_Type_Voice_Traffic:
if "G.729" in self.Codec_Type:
Codec_IP_Packet_Size = 60
Codec_Frame_Rate = 100
@@ -1096,7 +1172,7 @@ class n11_calculator():
CTS_to_self_Handshake_Overhead = 0
else:
if "Yes" in self.CTS_to_self_protection:
if "Yes" in self.CTS_to_self:
if "20" in self.Channel_Bandwidth:
CTS_to_self_Handshake_Overhead = 20 + 4 * int((22 + 14 * 8 + 24 * 4 - 1) / (24 * 4)) + SIFS
@@ -1112,7 +1188,7 @@ class n11_calculator():
MAC_PPDU_Interval_1 = RTS_CTS_Handshake_Overhead + CTS_to_self_Handshake_Overhead + Ttxframe + Ack_Response_Overhead + BlockAck_Response_Overhead + DIFS + (
MeanBackoff / 1)
Client_1_new = format(MAC_PPDU_Interval_1, '.2f')
self.Client_1_new = format(MAC_PPDU_Interval_1, '.2f')
MAC_PPDU_Interval_2 = RTS_CTS_Handshake_Overhead + CTS_to_self_Handshake_Overhead + Ttxframe + Ack_Response_Overhead + BlockAck_Response_Overhead + DIFS + (
MeanBackoff / 2)
Client_2_new = format(MAC_PPDU_Interval_2, '.2f')
@@ -1135,7 +1211,7 @@ class n11_calculator():
# Max PPDU Rate
Max_PPDU_Rate_1 = 1000000 / MAC_PPDU_Interval_1
Client_8_new = format(Max_PPDU_Rate_1, '.2f')
self.Client_8_new = format(Max_PPDU_Rate_1, '.2f')
Max_PPDU_Rate_2 = 1000000 / MAC_PPDU_Interval_2
Client_9_new = format(Max_PPDU_Rate_2, '.2f')
Max_PPDU_Rate_3 = 1000000 / MAC_PPDU_Interval_3
@@ -1167,7 +1243,7 @@ class n11_calculator():
Max_MAC_MPDU_Rate_6 = Max_PPDU_Rate_6
Max_MAC_MPDU_Rate_7 = Max_PPDU_Rate_7
Client_15_new = round(Max_MAC_MPDU_Rate_1)
self.Client_15_new = round(Max_MAC_MPDU_Rate_1)
Client_16_new = round(Max_MAC_MPDU_Rate_2)
Client_17_new = round(Max_MAC_MPDU_Rate_3)
Client_18_new = round(Max_MAC_MPDU_Rate_4)
@@ -1195,7 +1271,7 @@ class n11_calculator():
Max_MAC_MSDU_Rate_6 = Max_MAC_MPDU_Rate_6
Max_MAC_MSDU_Rate_7 = Max_MAC_MPDU_Rate_7
Client_22_new = round(Max_MAC_MSDU_Rate_1)
self.Client_22_new = round(Max_MAC_MSDU_Rate_1)
Client_23_new = round(Max_MAC_MSDU_Rate_2)
Client_24_new = round(Max_MAC_MSDU_Rate_3)
Client_25_new = round(Max_MAC_MSDU_Rate_4)
@@ -1212,7 +1288,7 @@ class n11_calculator():
Max_802_11_MAC_Frame_Data_Rate_6 = Max_MAC_MPDU_Rate_6 * MAC_MPDU_Size * 8 / 1000000
Max_802_11_MAC_Frame_Data_Rate_7 = Max_MAC_MPDU_Rate_7 * MAC_MPDU_Size * 8 / 1000000
Client_29_new = format(Max_802_11_MAC_Frame_Data_Rate_1, '.3f')
self.Client_29_new = format(Max_802_11_MAC_Frame_Data_Rate_1, '.3f')
Client_30_new = format(Max_802_11_MAC_Frame_Data_Rate_2, '.3f')
Client_31_new = format(Max_802_11_MAC_Frame_Data_Rate_3, '.3f')
Client_32_new = format(Max_802_11_MAC_Frame_Data_Rate_4, '.3f')
@@ -1230,7 +1306,7 @@ class n11_calculator():
Max_802_11_MAC_Payload_Goodput_6 = MSDU * 8 * Max_MAC_MSDU_Rate_6 / 1000000
Max_802_11_MAC_Payload_Goodput_7 = MSDU * 8 * Max_MAC_MSDU_Rate_7 / 1000000
Client_36_new = format(Max_802_11_MAC_Payload_Goodput_1, '.3f')
self.Client_36_new = format(Max_802_11_MAC_Payload_Goodput_1, '.3f')
Client_37_new = format(Max_802_11_MAC_Payload_Goodput_2, '.3f')
Client_38_new = format(Max_802_11_MAC_Payload_Goodput_3, '.3f')
Client_39_new = format(Max_802_11_MAC_Payload_Goodput_4, '.3f')
@@ -1248,7 +1324,7 @@ class n11_calculator():
MAC_Goodput_Per_802_11_Client_6 = Max_802_11_MAC_Payload_Goodput_6 / 50
MAC_Goodput_Per_802_11_Client_7 = Max_802_11_MAC_Payload_Goodput_7 / 100
Client_43_new = format(MAC_Goodput_Per_802_11_Client_1, '.3f')
self.Client_43_new = format(MAC_Goodput_Per_802_11_Client_1, '.3f')
Client_44_new = format(MAC_Goodput_Per_802_11_Client_2, '.3f')
Client_45_new = format(MAC_Goodput_Per_802_11_Client_3, '.3f')
Client_46_new = format(MAC_Goodput_Per_802_11_Client_4, '.3f')
@@ -1268,7 +1344,7 @@ class n11_calculator():
Offered_Load_8023_Side_5 = Max_MAC_MSDU_Rate_5 * Ethernet_value * 8 / 1000000
Offered_Load_8023_Side_6 = Max_MAC_MSDU_Rate_6 * Ethernet_value * 8 / 1000000
Offered_Load_8023_Side_7 = Max_MAC_MSDU_Rate_7 * Ethernet_value * 8 / 1000000
Client_50_new = format(Offered_Load_8023_Side_1, '.3f')
self.Client_50_new = format(Offered_Load_8023_Side_1, '.3f')
Client_51_new = format(Offered_Load_8023_Side_2, '.3f')
Client_52_new = format(Offered_Load_8023_Side_3, '.3f')
Client_53_new = format(Offered_Load_8023_Side_4, '.3f')
@@ -1277,7 +1353,7 @@ class n11_calculator():
Client_56_new = format(Offered_Load_8023_Side_7, '.3f')
else:
Client_50_new = "N/A"
self.Client_50_new = "N/A"
Client_51_new = "N/A"
Client_52_new = "N/A"
Client_53_new = "N/A"
@@ -1294,7 +1370,7 @@ class n11_calculator():
IP_Goodput_802_11_8023_5 = Max_MAC_MSDU_Rate_5 * ip_1 * 8 / 1000000
IP_Goodput_802_11_8023_6 = Max_MAC_MSDU_Rate_6 * ip_1 * 8 / 1000000
IP_Goodput_802_11_8023_7 = Max_MAC_MSDU_Rate_7 * ip_1 * 8 / 1000000
Client_57_new = format(IP_Goodput_802_11_8023_1, '.3f')
self.Client_57_new = format(IP_Goodput_802_11_8023_1, '.3f')
Client_58_new = format(IP_Goodput_802_11_8023_2, '.3f')
Client_59_new = format(IP_Goodput_802_11_8023_3, '.3f')
Client_60_new = format(IP_Goodput_802_11_8023_4, '.3f')
@@ -1303,7 +1379,7 @@ class n11_calculator():
Client_63_new = format(IP_Goodput_802_11_8023_7, '.3f')
else:
Client_57_new = "N/A"
self.Client_57_new = "N/A"
Client_58_new = "N/A"
Client_59_new = "N/A"
Client_60_new = "N/A"
@@ -1315,31 +1391,31 @@ class n11_calculator():
# c53
if "Data" in self.Traffic_Type:
Maximum_Theoretical_R_value = "N/A"
Estimated_MOS_Score = "N/A"
self.Maximum_Theoretical_R_value = "N/A"
self.Estimated_MOS_Score = "N/A"
else:
if "G.711" in self.Codec_Type_Voice_Traffic:
Maximum_Theoretical_R_value = 85.9
if "G.711" in self.Codec_Type:
self.Maximum_Theoretical_R_value = 85.9
else:
if "G.723" in self.Codec_Type_Voice_Traffic:
Maximum_Theoretical_R_value = 72.9
if "G.723" in self.Codec_Type:
self.Maximum_Theoretical_R_value = 72.9
else:
if "G.729" in self.Codec_Type_Voice_Traffic:
Maximum_Theoretical_R_value = 81.7
if "G.729" in self.Codec_Type:
self.Maximum_Theoretical_R_value = 81.7
else:
Maximum_Theoretical_R_value = 93.2
self.Maximum_Theoretical_R_value = 93.2
if Maximum_Theoretical_R_value < 0:
Estimated_MOS_Score = 1
if self.Maximum_Theoretical_R_value < 0:
self.Estimated_MOS_Score = 1
else:
if Maximum_Theoretical_R_value > 100:
Estimated_MOS_Score = 4.5
if self.Maximum_Theoretical_R_value > 100:
self.Estimated_MOS_Score = 4.5
else:
Estimated_MOS_Score_1 = (
1 + 0.035 * Maximum_Theoretical_R_value + Maximum_Theoretical_R_value * (
Maximum_Theoretical_R_value - 60) * (
100 - Maximum_Theoretical_R_value) * 7 * 0.000001)
Estimated_MOS_Score = format(Estimated_MOS_Score_1, '.2f')
self.Estimated_MOS_Score_1 = (
1 + 0.035 * self.Maximum_Theoretical_R_value + self.Maximum_Theoretical_R_value * (
self.Maximum_Theoretical_R_value - 60) * (
100 - self.Maximum_Theoretical_R_value) * 7 * 0.000001)
self.Estimated_MOS_Score = format(self.Estimated_MOS_Score_1, '.2f')
# Voice_Call_Range
try:
@@ -1376,58 +1452,57 @@ class n11_calculator():
pass
if "Data" in self.Traffic_Type:
Maximum_Bidirectional_Voice_Calls = "N/A"
self.Maximum_Bidirectional_Voice_Calls = "N/A"
else:
Maximum_Bidirectional_Voice_Calls = round(Maximum_Bidirectional, 2)
self.Maximum_Bidirectional_Voice_Calls = round(Maximum_Bidirectional, 2)
def get_result(self):
print("\n" + "******************Station : 11nCalculator*****************************" + "\n")
print("Theoretical Maximum Offered Load" + "\n")
print("1 Client:")
All_theoretical_output = {'MAC PPDU Interval(usec)': Client_1_new, 'Max PPDU Rate(fps)': Client_8_new,
'Max MAC MPDU Rate': Client_15_new,
'Max MAC MSDU Rate': Client_22_new,
'Max. 802.11 MAC Frame Data Rate(Mb/s)': Client_29_new,
'Max. 802.11 MAC Payload Goodput(Mb/s)': Client_36_new,
'MAC Goodput Per 802.11 Client(Mb/s)': Client_43_new,
'Offered Load (802.3 Side)(Mb/s)': Client_50_new,
'IP Goodput (802.11 -> 802.3)(Mb/s)': Client_57_new}
All_theoretical_output = {'MAC PPDU Interval(usec)': self.Client_1_new,
'Max PPDU Rate(fps)': self.Client_8_new,
'Max MAC MPDU Rate': self.Client_15_new,
'Max MAC MSDU Rate': self.Client_22_new,
'Max. 802.11 MAC Frame Data Rate(Mb/s)': self.Client_29_new,
'Max. 802.11 MAC Payload Goodput(Mb/s)': self.Client_36_new,
'MAC Goodput Per 802.11 Client(Mb/s)': self.Client_43_new,
'Offered Load (802.3 Side)(Mb/s)': self.Client_50_new,
'IP Goodput (802.11 -> 802.3)(Mb/s)': self.Client_57_new}
print(json.dumps(All_theoretical_output, indent=4))
print("\n" + "Theroretical Voice Call Capacity" + "\n")
All_theoretical_voice = {'Maximum Theoretical R-value': Maximum_Theoretical_R_value,
'Estimated MOS Score': Estimated_MOS_Score,
'Maximum Bidirectional Voice Calls(calls)': Maximum_Bidirectional_Voice_Calls}
All_theoretical_voice = {'Maximum Theoretical R-value': self.Maximum_Theoretical_R_value,
'Estimated MOS Score': self.Estimated_MOS_Score,
'Maximum Bidirectional Voice Calls(calls)': self.Maximum_Bidirectional_Voice_Calls}
print(json.dumps(All_theoretical_voice, indent=4))
##Class to take all user input (802.11ac Standard)
class ac11_calculator():
class ac11_calculator(n11_calculator):
def __init__(self, Traffic_Type, Data_Voice_MCS, spatial, Channel_Bandwidth, Guard_Interval_value,
Highest_Basic_str, Encryption, QoS,
Highest_Basic_str, Encryption, QoS,IP_Packets_MSDU_str, MAC_Frames_per_A_MPDU_str, BSS_Basic_Rate, MAC_MPDU_Size_Data_Traffic,
Codec_Type, CWmin, RTS_CTS,PLCP = None,RTS_CTS_Handshake=None,CTS_to_self=None):
super().__init__(Traffic_Type, Data_Voice_MCS, Channel_Bandwidth, Guard_Interval_value, Highest_Basic_str,
Encryption, QoS,
IP_Packets_MSDU_str, MAC_Frames_per_A_MPDU_str, BSS_Basic_Rate, MAC_MPDU_Size_Data_Traffic,
Codec_Type_Voice_Traffic, CWmin, RTS_CTS):
self.Traffic_Type = Traffic_Type
self.Data_Voice_MCS = Data_Voice_MCS
self.Channel_Bandwidth = Channel_Bandwidth
self.Guard_Interval_value = Guard_Interval_value
self.Highest_Basic_str = Highest_Basic_str
self.Encryption = Encryption
self.QoS = QoS
self.IP_Packets_MSDU_str = IP_Packets_MSDU_str
self.MAC_Frames_per_A_MPDU_str = MAC_Frames_per_A_MPDU_str
self.BSS_Basic_Rate = BSS_Basic_Rate
self.MAC_MPDU_Size_Data_Traffic = MAC_MPDU_Size_Data_Traffic
self.Codec_Type_Voice_Traffic = Codec_Type_Voice_Traffic
self.CWmin = CWmin
self.RTS_CTS = RTS_CTS
Codec_Type, PLCP, CWmin, RTS_CTS_Handshake, CTS_to_self)
self.spatial = spatial
self.RTS_CTS = RTS_CTS
# This function is for calculate intermediate values and Theoretical values
def input_parameter(self):
def calculate(self):
SIFS = 16.00
DIFS = 34.00
@@ -1572,16 +1647,16 @@ class ac11_calculator():
MeanBackoff = CWmin_leave_alone_for_default * Slot_Time / 2
IP_Packets_MSDU = int(self.IP_Packets_MSDU_str)
if "Mixed" in self.Codec_Type_Voice_Traffic:
if "Mixed" in self.Codec_Type:
plcp = 1
elif "Greenfield" in self.Codec_Type_Voice_Traffic:
elif "Greenfield" in self.Codec_Type:
plcp = 2
RTS_CTS_Handshake = 1
if "No" in self.RTS_CTS:
CTS_to_self_protection = 1
CTS_to_self = 1
elif "Yes" in self.RTS_CTS:
CTS_to_self_protection = 2
CTS_to_self = 2
# g24 QoS Hdr
@@ -1836,7 +1911,7 @@ class ac11_calculator():
if RTS_CTS_Handshake == 2:
CTS_to_self_Handshake_Overhead = 0
else:
if CTS_to_self_protection == 2:
if CTS_to_self == 2:
if "20" in self.Channel_Bandwidth:
CTS_to_self_Handshake_Overhead = 20 + 4 * int((22 + 14 * 8 + 24 * 4 - 1) / (24 * 4)) + SIFS
else:
@@ -1869,7 +1944,7 @@ class ac11_calculator():
MAC_PPDU_Interval_1 = RTS_CTS_Handshake_Overhead + CTS_to_self_Handshake_Overhead + Ttxframe + Ack_Response_Overhead + BlockAck_Response_Overhead + DIFS + (
MeanBackoff / 1)
Client_1_new = format(MAC_PPDU_Interval_1, '.2f')
self.Client_1_new = format(MAC_PPDU_Interval_1, '.2f')
MAC_PPDU_Interval_2 = RTS_CTS_Handshake_Overhead + CTS_to_self_Handshake_Overhead + Ttxframe + Ack_Response_Overhead + BlockAck_Response_Overhead + DIFS + (
MeanBackoff / 2)
Client_2_new = format(MAC_PPDU_Interval_2, '.2f')
@@ -1894,7 +1969,7 @@ class ac11_calculator():
# Max PPDU Rate
Max_PPDU_Rate_1 = 1000000 / MAC_PPDU_Interval_1
Client_8_new = format(Max_PPDU_Rate_1, '.2f')
self.Client_8_new = format(Max_PPDU_Rate_1, '.2f')
Max_PPDU_Rate_2 = 1000000 / MAC_PPDU_Interval_2
Client_9_new = format(Max_PPDU_Rate_2, '.2f')
Max_PPDU_Rate_3 = 1000000 / MAC_PPDU_Interval_3
@@ -1927,7 +2002,7 @@ class ac11_calculator():
Max_MAC_MPDU_Rate_6 = Max_PPDU_Rate_6
Max_MAC_MPDU_Rate_7 = Max_PPDU_Rate_7
Client_15_new = round(Max_MAC_MPDU_Rate_1)
self.Client_15_new = round(Max_MAC_MPDU_Rate_1)
Client_16_new = round(Max_MAC_MPDU_Rate_2)
Client_17_new = round(Max_MAC_MPDU_Rate_3)
Client_18_new = round(Max_MAC_MPDU_Rate_4)
@@ -1955,7 +2030,7 @@ class ac11_calculator():
Max_MAC_MSDU_Rate_6 = Max_MAC_MPDU_Rate_6
Max_MAC_MSDU_Rate_7 = Max_MAC_MPDU_Rate_7
Client_22_new = round(Max_MAC_MSDU_Rate_1)
self.Client_22_new = round(Max_MAC_MSDU_Rate_1)
Client_23_new = round(Max_MAC_MSDU_Rate_2)
Client_24_new = round(Max_MAC_MSDU_Rate_3)
Client_25_new = round(Max_MAC_MSDU_Rate_4)
@@ -1973,7 +2048,7 @@ class ac11_calculator():
Max_802_11_MAC_Frame_Data_Rate_6 = Max_MAC_MPDU_Rate_6 * MAC_MPDU_Size * 8 / 1000000
Max_802_11_MAC_Frame_Data_Rate_7 = Max_MAC_MPDU_Rate_7 * MAC_MPDU_Size * 8 / 1000000
Client_29_new = format(Max_802_11_MAC_Frame_Data_Rate_1, '.3f')
self.Client_29_new = format(Max_802_11_MAC_Frame_Data_Rate_1, '.3f')
Client_30_new = format(Max_802_11_MAC_Frame_Data_Rate_2, '.3f')
Client_31_new = format(Max_802_11_MAC_Frame_Data_Rate_3, '.3f')
Client_32_new = format(Max_802_11_MAC_Frame_Data_Rate_4, '.3f')
@@ -1991,7 +2066,7 @@ class ac11_calculator():
Max_802_11_MAC_Payload_Goodput_6 = MSDU * 8 * Max_MAC_MSDU_Rate_6 / 1000000
Max_802_11_MAC_Payload_Goodput_7 = MSDU * 8 * Max_MAC_MSDU_Rate_7 / 1000000
Client_36_new = format(Max_802_11_MAC_Payload_Goodput_1, '.3f')
self.Client_36_new = format(Max_802_11_MAC_Payload_Goodput_1, '.3f')
Client_37_new = format(Max_802_11_MAC_Payload_Goodput_2, '.3f')
Client_38_new = format(Max_802_11_MAC_Payload_Goodput_3, '.3f')
Client_39_new = format(Max_802_11_MAC_Payload_Goodput_4, '.3f')
@@ -2009,7 +2084,7 @@ class ac11_calculator():
MAC_Goodput_Per_802_11_Client_6 = Max_802_11_MAC_Payload_Goodput_6 / 50
MAC_Goodput_Per_802_11_Client_7 = Max_802_11_MAC_Payload_Goodput_7 / 100
Client_43_new = format(MAC_Goodput_Per_802_11_Client_1, '.3f')
self.Client_43_new = format(MAC_Goodput_Per_802_11_Client_1, '.3f')
Client_44_new = format(MAC_Goodput_Per_802_11_Client_2, '.3f')
Client_45_new = format(MAC_Goodput_Per_802_11_Client_3, '.3f')
Client_46_new = format(MAC_Goodput_Per_802_11_Client_4, '.3f')
@@ -2028,7 +2103,7 @@ class ac11_calculator():
Offered_Load_8023_Side_5 = Max_MAC_MSDU_Rate_5 * Ethernet_value * 8 / 1000000
Offered_Load_8023_Side_6 = Max_MAC_MSDU_Rate_6 * Ethernet_value * 8 / 1000000
Offered_Load_8023_Side_7 = Max_MAC_MSDU_Rate_7 * Ethernet_value * 8 / 1000000
Client_50_new = format(Offered_Load_8023_Side_1, '.3f')
self.Client_50_new = format(Offered_Load_8023_Side_1, '.3f')
Client_51_new = format(Offered_Load_8023_Side_2, '.3f')
Client_52_new = format(Offered_Load_8023_Side_3, '.3f')
Client_53_new = format(Offered_Load_8023_Side_4, '.3f')
@@ -2037,7 +2112,7 @@ class ac11_calculator():
Client_56_new = format(Offered_Load_8023_Side_7, '.3f')
else:
Client_50_new = "N/A"
self.Client_50_new = "N/A"
Client_51_new = "N/A"
Client_52_new = "N/A"
Client_53_new = "N/A"
@@ -2054,7 +2129,7 @@ class ac11_calculator():
IP_Goodput_802_11_8023_5 = Max_MAC_MSDU_Rate_5 * ip_1 * 8 / 1000000
IP_Goodput_802_11_8023_6 = Max_MAC_MSDU_Rate_6 * ip_1 * 8 / 1000000
IP_Goodput_802_11_8023_7 = Max_MAC_MSDU_Rate_7 * ip_1 * 8 / 1000000
Client_57_new = format(IP_Goodput_802_11_8023_1, '.3f')
self.Client_57_new = format(IP_Goodput_802_11_8023_1, '.3f')
Client_58_new = format(IP_Goodput_802_11_8023_2, '.3f')
Client_59_new = format(IP_Goodput_802_11_8023_3, '.3f')
Client_60_new = format(IP_Goodput_802_11_8023_4, '.3f')
@@ -2063,7 +2138,7 @@ class ac11_calculator():
Client_63_new = format(IP_Goodput_802_11_8023_7, '.3f')
else:
Client_57_new = "N/A"
self.Client_57_new = "N/A"
Client_58_new = "N/A"
Client_59_new = "N/A"
Client_60_new = "N/A"
@@ -2074,20 +2149,20 @@ class ac11_calculator():
# Theoretical Voice Call Capacity
if "Data" in self.Traffic_Type:
Maximum_Theoretical_R_value = "N/A"
Estimated_MOS_Score = "N/A"
self.Maximum_Theoretical_R_value = "N/A"
self.Estimated_MOS_Score = "N/A"
else:
Maximum_Theoretical_R_value = 85.9
if Maximum_Theoretical_R_value < 0:
Estimated_MOS_Score = 1
self.Maximum_Theoretical_R_value = 85.9
if self.Maximum_Theoretical_R_value < 0:
self.Estimated_MOS_Score = 1
else:
if Maximum_Theoretical_R_value > 100:
Estimated_MOS_Score = 4.5
if self.Maximum_Theoretical_R_value > 100:
self.Estimated_MOS_Score = 4.5
else:
Estimated_MOS_Score_1 = (1 + 0.035 * Maximum_Theoretical_R_value + Maximum_Theoretical_R_value * (
Maximum_Theoretical_R_value - 60) * (100 - Maximum_Theoretical_R_value) * 7 * 0.000001)
Estimated_MOS_Score = format(Estimated_MOS_Score_1, '.2f')
Estimated_MOS_Score_1 = (1 + 0.035 * self.Maximum_Theoretical_R_value + self.Maximum_Theoretical_R_value * (
self.Maximum_Theoretical_R_value - 60) * (100 - self.Maximum_Theoretical_R_value) * 7 * 0.000001)
self.Estimated_MOS_Score = format(Estimated_MOS_Score_1, '.2f')
# Voice_Call_Range
@@ -2126,26 +2201,29 @@ class ac11_calculator():
pass
if "Data" in self.Traffic_Type:
Maximum_Bidirectional_Voice_Calls = "N/A"
self.Maximum_Bidirectional_Voice_Calls = "N/A"
else:
Maximum_Bidirectional_Voice_Calls = round(Maximum_Bidirectional, 2)
self.Maximum_Bidirectional_Voice_Calls = round(Maximum_Bidirectional, 2)
def get_result(self):
print("\n" + "******************Station : 11ac Calculator*****************************" + "\n")
print("Theoretical Maximum Offered Load" + "\n")
print("1 Client:")
All_theoretical_output = {'MAC PPDU Interval(usec)': Client_1_new, 'Max PPDU Rate(fps)': Client_8_new,
'Max MAC MPDU Rate': Client_15_new,
'Max MAC MSDU Rate': Client_22_new,
'Max. 802.11 MAC Frame Data Rate(Mb/s)': Client_29_new,
'Max. 802.11 MAC Payload Goodput(Mb/s)': Client_36_new,
'MAC Goodput Per 802.11 Client(Mb/s)': Client_43_new,
'Offered Load (802.3 Side)(Mb/s)': Client_50_new,
'IP Goodput (802.11 -> 802.3)(Mb/s)': Client_57_new}
All_theoretical_output = {'MAC PPDU Interval(usec)': self.Client_1_new, 'Max PPDU Rate(fps)': self.Client_8_new,
'Max MAC MPDU Rate': self.Client_15_new,
'Max MAC MSDU Rate': self.Client_22_new,
'Max. 802.11 MAC Frame Data Rate(Mb/s)': self.Client_29_new,
'Max. 802.11 MAC Payload Goodput(Mb/s)': self.Client_36_new,
'MAC Goodput Per 802.11 Client(Mb/s)': self.Client_43_new,
'Offered Load (802.3 Side)(Mb/s)': self.Client_50_new,
'IP Goodput (802.11 -> 802.3)(Mb/s)': self.Client_57_new}
print(json.dumps(All_theoretical_output, indent=4))
print("\n" + "Theroretical Voice Call Capacity" + "\n")
All_theoretical_voice = {'Maximum Theoretical R-value': Maximum_Theoretical_R_value,
'Estimated MOS Score': Estimated_MOS_Score,
'Maximum Bidirectional Voice Calls(calls)': Maximum_Bidirectional_Voice_Calls}
print(json.dumps(All_theoretical_voice, indent=4))
All_theoretical_voice = {'Maximum Theoretical R-value': self.Maximum_Theoretical_R_value,
'Estimated MOS Score': self.Estimated_MOS_Score,
'Maximum Bidirectional Voice Calls(calls)': self.Maximum_Bidirectional_Voice_Calls}
print(json.dumps(All_theoretical_voice, indent=4))

View File

@@ -16,6 +16,7 @@ if sys.version_info[0] != 3:
import argparse
import json
import logging
import pprint
import traceback
import time
from time import sleep
@@ -25,11 +26,7 @@ try:
import thread
except ImportError:
import _thread as thread
import pprint
import LANforge
from LANforge import LFRequest
from LANforge import LFUtils
from LANforge.LFUtils import NA
cre={
"phy": re.compile(r'^(1\.\d+):\s+(\S+)\s+\(phy', re.I),
@@ -69,29 +66,46 @@ rebank = {
"ifname" : re.compile("IFNAME=(\S+)")
}
websock = None
host = "localhost"
base_url = None
port = 8081
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def usage():
print("""Example: __file__ --host 192.168.1.101 --port 8081\n""")
def main():
global websock
host = "localhost"
base_url = "ws://%s:8081"%host
resource_id = 1 # typically you're using resource 1 in stand alone realm
# global host
# global base_url
# resource_id = 1 # typically you're using resource 1 in stand alone realm
parser = argparse.ArgumentParser(description="test creating a station")
parser.add_argument("-m", "--host", type=str, help="json host to connect to")
parser.add_argument("-m", "--host", type=str, help="websocket host to connect to")
parser.add_argument("-p", "--port", type=str, help="websoket port")
args = None
host = "unset"
base_url = "unset"
try:
args = parser.parse_args()
if (args.host is not None):
host = args.host,
baseurl = base_url = "ws://%s:8081"%host
args = parser.parse_args()
if (args.host is None):
host = "localhost"
elif (type(args) is tuple) or (type(args) is list):
host = args.host[0]
else:
host = args.host
base_url = "ws://%s:%s" % (host, port)
except Exception as e:
logging.exception(e)
usage()
exit(2)
print("Exception: "+e)
logging.exception(e)
usage()
exit(2)
# open websocket
# print("Main: base_url: %s, host:%s, port:%s" % (base_url, host, port))
websock = start_websocket(base_url, websock)
@@ -125,16 +139,16 @@ def sock_filter(wsock, text):
if (test in message["details"]):
return;
except KeyError:
print ("Message lacks key 'details'")
print("Message lacks key 'details'")
try:
if ("wifi-event" in message.keys()):
for test in ignore:
#print (" is ",test, " in ", message["wifi-event"])
# print (" is ",test, " in ", message["wifi-event"])
if (test in message["wifi-event"]):
return;
except KeyError:
print("Message lacks key 'wifi-event'" )
print("Message lacks key 'wifi-event'")
if (("time" in message.keys()) and ("timestamp" in message.keys())):
return
@@ -150,27 +164,28 @@ def sock_filter(wsock, text):
station_name = match_result.group(1)
if (message["is_alert"]):
print ("alert: ", message["details"])
#LFUtils.debug_printer.pprint(message)
print("alert: ", message["details"])
# LFUtils.debug_printer.pprint(message)
return
else:
#LFUtils.debug_printer.pprint(message)
# LFUtils.debug_printer.pprint(message)
if (" IP change from " in message["details"]):
if (" to 0.0.0.0" in messsage["details"]):
print ("e: %s.%s lost IP address",[resource,station_name])
print("e: %s.%s lost IP address", [resource, station_name])
else:
print ("e: %s.%s gained IP address",[resource,station_name])
print("e: %s.%s gained IP address", [resource, station_name])
if ("Link DOWN" in message["details"]):
return # duplicates alert
return # duplicates alert
print ("event: ", message["details"])
print("event: ", message["details"])
return
if ("wifi-event" in message.keys()):
if ("CTRL-EVENT-CONNECTED" in message["wifi-event"]):
# redunant
return
if (("CTRL-EVENT-CONNECTED - Connection to " in message["wifi-event"]) and (" complete" in message["wifi-event"])):
if (("CTRL-EVENT-CONNECTED - Connection to " in message["wifi-event"]) and (
" complete" in message["wifi-event"])):
return;
if ((": assoc " in message["wifi-event"]) and ("status: 0: Successful" in message["wifi-event"])):
return
@@ -178,61 +193,61 @@ def sock_filter(wsock, text):
try:
match_result = cre["phy"].match(message["wifi-event"])
if (match_result is not None):
#LFUtils.debug_printer.pprint(match_result)
#LFUtils.debug_printer.pprint(match_result.groups())
# LFUtils.debug_printer.pprint(match_result)
# LFUtils.debug_printer.pprint(match_result.groups())
resource = match_result.group(1)
station_name = match_result.group(2)
else:
match_result = cre["ifname"].match(message["wifi-event"])
#LFUtils.debug_printer.pprint(match_result)
#LFUtils.debug_printer.pprint(match_result.groups())
# LFUtils.debug_printer.pprint(match_result)
# LFUtils.debug_printer.pprint(match_result.groups())
if (match_result is not None):
resource = match_result.group(1)
station_name = match_result.group(2)
else:
print ("Is there some other combination??? :", message["wifi-event"])
print("Is there some other combination??? :", message["wifi-event"])
station_name = 'no-sta'
resource_name = 'no-resource'
print ("bleh!")
print("bleh!")
except Exception as ex2:
print ("No regex match:")
print("No regex match:")
print(repr(ex2))
traceback.print_exc()
sleep(1)
#print ("Determined station name: as %s.%s"%(resource, station_name))
# print ("Determined station name: as %s.%s"%(resource, station_name))
if ((": auth ") and ("status: 0: Successful" in message["wifi-event"])):
match_result = cre["auth"].match(message["wifi-event"])
if (match_result and match_result.groups()):
bssid = match_result.group(1)
print ("station %s.%s auth with %s"%(resource,station_name,bssid))
print("station %s.%s auth with %s" % (resource, station_name, bssid))
return
else:
print ("station %s.%s auth with ??"%(resource,station_name))
print("station %s.%s auth with ??" % (resource, station_name))
LFUtils.debug_printer.pprint(match_result)
if ("Associated with " in message["wifi-event"]):
match_result = cre["associated"].match(message["wifi-event"])
if (match_result and match_result.groups()):
bssid = match_result.group(1)
print ("station %s.%s assocated with %s"%(resource,station_name,bssid))
print("station %s.%s assocated with %s" % (resource, station_name, bssid))
return
else:
print ("station %s.%s assocated with ??"%(resource,station_name))
print("station %s.%s assocated with ??" % (resource, station_name))
LFUtils.debug_printer.pprint(match_result)
if (" - Connection to " in message["wifi-event"]):
match_result = cre["connected"].match(message["wifi-event"])
if (match_result and match_result.groups()):
bssid = match_result.group(1)
print ("station %s.%s connected to %s"%(resource,station_name,bssid))
print("station %s.%s connected to %s" % (resource, station_name, bssid))
return
else:
print ("station %s.%s connected to ??"%(resource,station_name))
print("station %s.%s connected to ??" % (resource, station_name))
LFUtils.debug_printer.pprint(match_result)
if ("disconnected" in message["wifi-event"]):
print ("Station %s.%s down"%(resource,station_name))
print("Station %s.%s down" % (resource, station_name))
return
if ("Trying to associate with " in message["wifi-event"]):
@@ -240,10 +255,10 @@ def sock_filter(wsock, text):
if (match_result and match_result.groups()):
bssid = match_result.group(1)
print ("station %s.%s associating with %s"%(resource,station_name,bssid))
print("station %s.%s associating with %s" % (resource, station_name, bssid))
return
else:
print ("station %s.%s associating with ??"%(resource,station_name))
print("station %s.%s associating with ??" % (resource, station_name))
LFUtils.debug_printer.pprint(match_result)
if ("Trying to authenticate" in message["wifi-event"]):
@@ -251,10 +266,10 @@ def sock_filter(wsock, text):
if (match_result and match_result.groups()):
bssid = match_result.group(1)
print ("station %s.%s authenticating with %s"%(resource,station_name,bssid))
print("station %s.%s authenticating with %s" % (resource, station_name, bssid))
return
else:
print ("station %s.%s authenticating with ??"%(resource,station_name))
print("station %s.%s authenticating with ??" % (resource, station_name))
LFUtils.debug_printer.pprint(match_result)
if ("Authenticated" in message["wifi-event"]):
@@ -262,67 +277,70 @@ def sock_filter(wsock, text):
LFUtils.debug_printer.pprint(match_result)
if (match_result and match_result.groups()):
bssid = match_result.group(1)
print ("station %s.%s authenticated with %s"%(resource,station_name,bssid))
print("station %s.%s authenticated with %s" % (resource, station_name, bssid))
else:
print ("station %s.%s authenticated with ??"%(resource,station_name))
print("station %s.%s authenticated with ??" % (resource, station_name))
print ("w: ", message["wifi-event"])
print("w: ", message["wifi-event"])
else:
print ("\nUnhandled: ")
print("\nUnhandled: ")
LFUtils.debug_printer.pprint(message)
except KeyError as kerr:
print ("# ----- Bad Key: ----- ----- ----- ----- ----- ----- ----- ----- ----- -----")
print ("input: ",text)
print (repr(kerr))
print("# ----- Bad Key: ----- ----- ----- ----- ----- ----- ----- ----- ----- -----")
print("input: ", text)
print(repr(kerr))
traceback.print_exc()
print ("# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----")
print("# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----")
sleep(1)
return
except json.JSONDecodeError as derr:
print ("# ----- Decode err: ----- ----- ----- ----- ----- ----- ----- ----- ----- -----")
print ("input: ",text)
print (repr(derr))
print("# ----- Decode err: ----- ----- ----- ----- ----- ----- ----- ----- ----- -----")
print("input: ", text)
print(repr(derr))
traceback.print_exc()
print ("# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----")
print("# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----")
sleep(1)
return
except Exception as ex:
print ("# ----- Exception: ----- ----- ----- ----- ----- ----- ----- ----- ----- -----")
print("# ----- Exception: ----- ----- ----- ----- ----- ----- ----- ----- ----- -----")
print(repr(ex))
print ("input: ",text)
print("input: ", text)
LFUtils.debug_printer.pprint(message)
traceback.print_exc()
print ("# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----")
print("# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----")
sleep(1)
return
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
def m_error(wsock, err):
print ("# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----\n")
print("# ----- Error: ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----\n")
LFUtils.debug_printer.pprint(err)
print ("# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----\n")
print("# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----\n")
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
def m_open(wsock):
def run(*args):
time.sleep(0.1)
#ping = json.loads();
# ping = json.loads();
wsock.send('{"text":"ping"}')
thread.start_new_thread(run, ())
print ("started websocket client")
print("Connected...")
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
def m_close(wsock):
LFUtils.debug_printer.pprint(wsock)
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
def start_websocket(uri, websock):
#websocket.enableTrace(True)
websock = websocket.WebSocketApp(uri,
on_message = sock_filter,
on_error = m_error,
on_close = m_close)
on_message=sock_filter,
on_error=m_error,
on_close=m_close)
websock.on_open = m_open
websock.run_forever()
return websock

View File

@@ -1,109 +0,0 @@
#!/usr/bin/env python3
import sys
import os
if sys.version_info[0] != 3:
print("This script requires Python 3")
exit(1)
if 'py-json' not in sys.path:
sys.path.append(os.path.join(os.path.abspath('..'), 'py-json'))
import LANforge
from LANforge.lfcli_base import LFCliBase
from LANforge import LFUtils
import realm
import argparse
import time
import pprint
class IPv4Test(LFCliBase):
def __init__(self, ssid, security, password, sta_list=None, number_template="00000", host="localhost", port=8080, radio ="wiphy0",_debug_on=False,
_exit_on_error=False,
_exit_on_fail=False):
super().__init__(host, port, _debug=_debug_on, _halt_on_error=_exit_on_error, _exit_on_fail=_exit_on_fail)
self.host = host
self.port = port
self.ssid = ssid
self.security = security
self.password = password
self.sta_list = sta_list
self.timeout = 120
self.radio=radio
self.number_template = number_template
self.debug = _debug_on
self.local_realm = realm.Realm(lfclient_host=self.host, lfclient_port=self.port)
self.station_profile = self.local_realm.new_station_profile()
self.station_profile.lfclient_url = self.lfclient_url
self.station_profile.ssid = self.ssid
self.station_profile.ssid_pass = self.password,
self.station_profile.security = self.security
self.station_profile.number_template_ = self.number_template
self.station_profile.mode = 0
def build(self):
# Build stations
self.station_profile.use_security(self.security, self.ssid, self.password)
self.station_profile.set_number_template(self.number_template)
print("Creating stations")
self.station_profile.set_command_flag("add_sta", "create_admin_down", 1)
self.station_profile.set_command_param("set_port", "report_timer", 1500)
self.station_profile.set_command_flag("set_port", "rpt_timer", 1)
self.station_profile.create(radio=self.radio, sta_names_=self.sta_list, debug=self.debug)
self.station_profile.admin_up()
if self.local_realm.wait_for_ip(station_list=self.sta_list, debug=self.debug, timeout_sec=30):
self._pass("Station build finished")
self.exit_success()
else:
self._fail("Stations not able to acquire IP. Please check network input.")
self.exit_fail()
def cleanup(self, sta_list):
self.station_profile.cleanup(sta_list)
LFUtils.wait_until_ports_disappear(base_url=self.lfclient_url, port_list=sta_list,
debug=self.debug)
def main():
parser = LFCliBase.create_basic_argparse(
prog='example_open_connection.py',
# formatter_class=argparse.RawDescriptionHelpFormatter,
formatter_class=argparse.RawTextHelpFormatter,
epilog='''\
Example code that creates a specified amount of stations on a specified SSID using Open security.
''',
description='''\
example_open_connection.py
--------------------
Generic command example:
python3 ./example_open_connection.py
--mgr localhost
--mgr_port 8080
--num_stations 3
--radio wiphy1
--ssid netgear-open
--passwd [BLANK]
--debug
''')
args = parser.parse_args()
num_sta = 2
if (args.num_stations is not None) and (int(args.num_stations) > 0):
num_sta = int(args.num_stations)
station_list = LFUtils.portNameSeries(prefix_="sta",
start_id_=0,
end_id_=num_sta-1,
padding_number_=10000)
ip_test = IPv4Test(host=args.mgr, port=args.mgr_port, ssid=args.ssid, password=args.passwd,
security="open", radio=args.radio, sta_list=station_list)
ip_test.cleanup(station_list)
ip_test.timeout = 60
ip_test.build()
if __name__ == "__main__":
main()

View File

@@ -1,109 +0,0 @@
#!/usr/bin/env python3
import sys
import os
if sys.version_info[0] != 3:
print("This script requires Python 3")
exit(1)
if 'py-json' not in sys.path:
sys.path.append(os.path.join(os.path.abspath('..'), 'py-json'))
import LANforge
from LANforge.lfcli_base import LFCliBase
from LANforge import LFUtils
import realm
import argparse
import time
import pprint
class IPv4Test(LFCliBase):
def __init__(self, ssid, security, password, sta_list=None, number_template="00000", radio = "wiphy0",_debug_on=False, host="locahost", port=8080,
_exit_on_error=False,
_exit_on_fail=False):
super().__init__(host, port, _debug=_debug_on, _halt_on_error=_exit_on_error, _exit_on_fail=_exit_on_fail)
self.host = host
self.port = port
self.radio = radio
self.ssid = ssid
self.security = security
self.password = password
self.sta_list = sta_list
self.timeout = 120
self.number_template = number_template
self.debug = _debug_on
self.local_realm = realm.Realm(lfclient_host=self.host, lfclient_port=self.port)
self.station_profile = self.local_realm.new_station_profile()
self.station_profile.lfclient_url = self.lfclient_url
self.station_profile.ssid = self.ssid
self.station_profile.ssid_pass = self.password,
self.station_profile.security = self.security
self.station_profile.number_template_ = self.number_template
self.station_profile.mode = 0
def build(self):
# Build stations
self.station_profile.use_security(self.security, self.ssid, self.password)
self.station_profile.set_number_template(self.number_template)
print("Creating stations")
self.station_profile.set_command_flag("add_sta", "create_admin_down", 1)
self.station_profile.set_command_param("set_port", "report_timer", 1500)
self.station_profile.set_command_flag("set_port", "rpt_timer", 1)
self.station_profile.create(radio=self.radio, sta_names_=self.sta_list, debug=self.debug)
self.station_profile.admin_up()
if self.local_realm.wait_for_ip(station_list=self.sta_list, debug=self.debug, timeout_sec=30):
self._pass("Station build finished")
self.exit_success()
else:
self._fail("Stations not able to acquire IP. Please check network input.")
self.exit_fail()
def cleanup(self, sta_list):
self.station_profile.cleanup(sta_list)
LFUtils.wait_until_ports_disappear(base_url=self.lfclient_url, port_list=sta_list,
debug=self.debug)
def main():
parser = LFCliBase.create_basic_argparse(
prog='example_wep_connection.py',
# formatter_class=argparse.RawDescriptionHelpFormatter,
formatter_class=argparse.RawTextHelpFormatter,
epilog='''\
Example code that creates a specified amount of stations on a specified SSID using WEP security.
''',
description='''\
example_wep_connection.py
--------------------
Generic command example:
python3 ./example_wep_connection.py
--host localhost
--port 8080
--num_stations 3
--radio wiphy1
--ssid jedway-wep-48
--passwd jedway-wep-48
--debug
''')
args = parser.parse_args()
num_sta = 2
if (args.num_stations is not None) and (int(args.num_stations) > 0):
num_stations_converted = int(args.num_stations)
num_sta = num_stations_converted
station_list = LFUtils.portNameSeries(prefix_="sta",
start_id_=0,
end_id_=num_sta-1,
padding_number_=10000)
ip_test = IPv4Test(host=args.mgr,port=args.mgr_port, ssid=args.ssid, password=args.passwd,
security="wep", radio=args.radio, sta_list=station_list)
ip_test.cleanup(station_list)
ip_test.timeout = 60
ip_test.build()
if __name__ == "__main__":
main()

View File

@@ -1,109 +0,0 @@
#!/usr/bin/env python3
import sys
import os
if sys.version_info[0] != 3:
print("This script requires Python 3")
exit(1)
if 'py-json' not in sys.path:
sys.path.append(os.path.join(os.path.abspath('..'), 'py-json'))
import LANforge
from LANforge.lfcli_base import LFCliBase
from LANforge import LFUtils
import realm
import argparse
import time
import pprint
class IPv4Test(LFCliBase):
def __init__(self, ssid, security, password, sta_list=None,host="localhost", port=8080, number_template="00000", radio="wiphy0",_debug_on=False,
_exit_on_error=False,
_exit_on_fail=False):
super().__init__(host, port, _debug=_debug_on, _halt_on_error=_exit_on_error, _exit_on_fail=_exit_on_fail)
self.host = host
self.port = port
self.ssid = ssid
self.radio = radio
self.security = security
self.password = password
self.sta_list = sta_list
self.timeout = 120
self.number_template = number_template
self.debug = _debug_on
self.local_realm = realm.Realm(lfclient_host=self.host, lfclient_port=self.port)
self.station_profile = self.local_realm.new_station_profile()
self.station_profile.lfclient_url = self.lfclient_url
self.station_profile.ssid = self.ssid
self.station_profile.ssid_pass = self.password,
self.station_profile.security = self.security
self.station_profile.number_template_ = self.number_template
self.station_profile.mode = 0
def build(self):
# Build stations
self.station_profile.use_security(self.security, self.ssid, self.password)
self.station_profile.set_number_template(self.number_template)
print("Creating stations")
self.station_profile.set_command_flag("add_sta", "create_admin_down", 1)
self.station_profile.set_command_param("set_port", "report_timer", 1500)
self.station_profile.set_command_flag("set_port", "rpt_timer", 1)
self.station_profile.create(radio=self.radio, sta_names_=self.sta_list, debug=self.debug)
self.station_profile.admin_up()
if self.local_realm.wait_for_ip(station_list=self.sta_list, debug=self.debug, timeout_sec=30):
self._pass("Station build finished")
self.exit_success()
else:
self._fail("Stations not able to acquire IP. Please check network input.")
self.exit_fail()
def cleanup(self, sta_list):
self.station_profile.cleanup(sta_list)
LFUtils.wait_until_ports_disappear(base_url=self.lfclient_url, port_list=sta_list,
debug=self.debug)
def main():
parser = LFCliBase.create_basic_argparse(
prog='example_wpa2_connection.py',
# formatter_class=argparse.RawDescriptionHelpFormatter,
formatter_class=argparse.RawTextHelpFormatter,
epilog='''\
Example code that creates a specified amount of stations on a specified SSID using WPA2 security.
''',
description='''\
example_wpa2_connection.py
--------------------
Generic command example
python3 ./example_wpa2_connection.py
--host localhost
--port 8080
--num_stations 3
--ssid netgear-wpa2
--passwd admin123-wpa2
--radio wiphy1
--debug
''')
args = parser.parse_args()
num_sta = 2
if (args.num_stations is not None) and (int(args.num_stations) > 0):
num_stations_converted = int(args.num_stations)
num_sta = num_stations_converted
station_list = LFUtils.portNameSeries(prefix_="sta",
start_id_=0,
end_id_=num_sta-1,
padding_number_=10000,
radio=args.radio)
ip_test = IPv4Test(host=args.mgr, port=args.mgr_port, ssid=args.ssid, password=args.passwd, radio=args.radio,
security="wpa2", sta_list=station_list)
ip_test.cleanup(station_list)
ip_test.timeout = 60
ip_test.build()
if __name__ == "__main__":
main()

View File

@@ -1,110 +0,0 @@
#!/usr/bin/env python3
import sys
import os
if sys.version_info[0] != 3:
print("This script requires Python 3")
exit(1)
if 'py-json' not in sys.path:
sys.path.append(os.path.join(os.path.abspath('..'), 'py-json'))
import LANforge
from LANforge.lfcli_base import LFCliBase
from LANforge import LFUtils
import realm
import argparse
import time
import pprint
class IPv4Test(LFCliBase):
def __init__(self, ssid, security, password, host="localhost", port=8080,sta_list=None, number_template="00000", radio = "wiphy0",_debug_on=False,
_exit_on_error=False,
_exit_on_fail=False):
super().__init__(host, port, _debug=_debug_on, _halt_on_error=_exit_on_error, _exit_on_fail=_exit_on_fail)
self.host = host
self.port = port
self.ssid = ssid
self.radio = radio
self.security = security
self.password = password
self.sta_list = sta_list
self.timeout = 120
self.number_template = number_template
self.debug = _debug_on
self.local_realm = realm.Realm(lfclient_host=self.host, lfclient_port=self.port)
self.station_profile = self.local_realm.new_station_profile()
self.station_profile.lfclient_url = self.lfclient_url
self.station_profile.ssid = self.ssid
self.station_profile.ssid_pass = self.password,
self.station_profile.security = self.security
self.station_profile.number_template_ = self.number_template
self.station_profile.mode = 0
def build(self):
# Build stations
#print("We've gotten into the build stations function")
self.station_profile.use_security(self.security, self.ssid, self.password)
self.station_profile.set_number_template(self.number_template)
print("Creating stations")
self.station_profile.set_command_flag("add_sta", "create_admin_down", 1)
self.station_profile.set_command_param("set_port", "report_timer", 1500)
self.station_profile.set_command_flag("set_port", "rpt_timer", 1)
self.station_profile.create(radio=self.radio, sta_names_=self.sta_list, debug=self.debug)
self.station_profile.admin_up()
if self.local_realm.wait_for_ip(station_list=self.sta_list, debug=self.debug, timeout_sec=30):
self._pass("Station build finished")
self.exit_success()
else:
self._fail("Stations not able to acquire IP. Please check network input.")
self.exit_fail()
def cleanup(self, sta_list):
self.station_profile.cleanup(sta_list)
LFUtils.wait_until_ports_disappear(base_url=self.lfclient_url, port_list=sta_list,
debug=self.debug)
def main():
parser = LFCliBase.create_basic_argparse(
prog='example_wpa3_connection.py',
# formatter_class=argparse.RawDescriptionHelpFormatter,
formatter_class=argparse.RawTextHelpFormatter,
epilog='''\
Example code that creates a specified amount of stations on a specified SSID using WPA3 security.
''',
description='''\
example_wpa3_connection.py
--------------------
Generic command example:
python3 ./example_wpa3_connection.py
--host localhost
--port 8080
--num_stations 3
--ssid netgear-wpa3
--passwd admin123-wpa3
--radio wiphy1
--debug
''')
args = parser.parse_args()
num_sta = 2
if (args.num_stations is not None) and (int(args.num_stations) > 0):
num_stations_converted = int(args.num_stations)
num_sta = num_stations_converted
station_list = LFUtils.portNameSeries(prefix_="sta",
start_id_=0,
end_id_=num_sta-1,
padding_number_=10000,
radio=args.radio)
ip_test = IPv4Test(host=args.mgr, port=args.mgr_port, ssid=args.ssid, password=args.passwd, radio=args.radio,
security="wpa3", sta_list=station_list)
ip_test.cleanup(station_list)
ip_test.timeout = 60
ip_test.build()
if __name__ == "__main__":
main()

View File

@@ -1,114 +0,0 @@
#!/usr/bin/env python3
import sys
import os
if sys.version_info[0] != 3:
print("This script requires Python 3")
exit(1)
if 'py-json' not in sys.path:
sys.path.append(os.path.join(os.path.abspath('..'), 'py-json'))
import argparse
import LANforge
from LANforge.lfcli_base import LFCliBase
from LANforge import LFUtils
import realm
import time
import pprint
class IPv4Test(LFCliBase):
def __init__(self, ssid, security, password, sta_list=None, host="locahost", port=8080, number_template="00000", radio ="wiphy0", _debug_on=False,
_exit_on_error=False,
_exit_on_fail=False):
super().__init__(host, port, _debug=_debug_on, _halt_on_error=_exit_on_error, _exit_on_fail=_exit_on_fail)
self.host = host
self.port = port
self.ssid = ssid
self.radio= radio
self.security = security
self.password = password
self.sta_list = sta_list
self.timeout = 120
self.number_template = number_template
self.debug = _debug_on
self.local_realm = realm.Realm(lfclient_host=self.host, lfclient_port=self.port)
self.station_profile = self.local_realm.new_station_profile()
self.station_profile.lfclient_url = self.lfclient_url
self.station_profile.ssid = self.ssid
self.station_profile.ssid_pass = self.password,
self.station_profile.security = self.security
self.station_profile.number_template_ = self.number_template
self.station_profile.mode = 0
def build(self):
# Build stations
self.station_profile.use_security(self.security, self.ssid, self.password)
self.station_profile.set_number_template(self.number_template)
print("Creating stations")
self.station_profile.set_command_flag("add_sta", "create_admin_down", 1)
self.station_profile.set_command_param("set_port", "report_timer", 1500)
self.station_profile.set_command_flag("set_port", "rpt_timer", 1)
self.station_profile.create(radio=self.radio, sta_names_=self.sta_list, debug=self.debug)
self.station_profile.admin_up()
if self.local_realm.wait_for_ip(station_list=self.sta_list, debug=self.debug, timeout_sec=30):
self._pass("Station build finished")
self.exit_success()
else:
self._fail("Stations not able to acquire IP. Please check network input.")
self.exit_fail()
def cleanup(self, sta_list):
self.station_profile.cleanup(sta_list)
LFUtils.wait_until_ports_disappear(base_url=self.lfclient_url, port_list=sta_list,
debug=self.debug)
def main():
parser = LFCliBase.create_basic_argparse(
prog='example_wpa_connection.py',
# formatter_class=argparse.RawDescriptionHelpFormatter,
formatter_class=argparse.RawTextHelpFormatter,
epilog='''\
Example code that creates a specified amount of stations on a specified SSID using WPA security.
''',
description='''\
example_wpa_connection.py
--------------------
Generic command example:
python3 ./example_wpa_connection.py
--host localhost
--port 8080
--num_stations 3
--ssid netgear-wpa
--passwd admin123-wpa
--radio wiphy1
--debug
''')
args = parser.parse_args()
num_sta = 2
if (args.num_stations is not None) and (int(args.num_stations) > 0):
num_stations_converted = int(args.num_stations)
num_sta = num_stations_converted
station_list = LFUtils.portNameSeries(prefix_="sta",
start_id_=0,
end_id_=num_sta-1,
padding_number_=10000,
radio=args.radio)
ip_test = IPv4Test(host=args.mgr, port=args.mgr_port, ssid=args.ssid, password=args.passwd, radio=args.radio,
security="wpa", sta_list=station_list)
ip_test.cleanup(station_list)
ip_test.timeout = 60
ip_test.build()
if __name__ == "__main__":
main()

File diff suppressed because it is too large Load Diff

View File

@@ -38,7 +38,8 @@ class FileAdapter(object):
pass # leave it to logging to flush properly
################################################################################
# cisco controller class :This class in the future will be moved to its own file
# cisco controller class :This class will be left in this file to allow for the
# Scaling and Performance to be self contained and not impact other tests
################################################################################
class cisco_():
@@ -49,8 +50,9 @@ class cisco_():
#./cisco_wifi_ctl.py --scheme ssh -d 172.19.36.168 -p <controller_pw> --port 23 --action summary --series 9800 --log stdout
def controller_show_summary(self):
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,self.args.cisco_user,
self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series, self.args.cisco_band,"summary"))
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,
self.args.cisco_passwd,self.args.cisco_ap,self.args.cisco_series,self.args.cisco_band,"summary"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -73,8 +75,9 @@ class cisco_():
#./cisco_wifi_ctl.py --scheme ssh -d 172.19.36.168 -p <controller_pw> --port 23 --action advanced --series 9800 --log stdout
def controller_show_ap_summary(self):
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,self.args.cisco_user,
self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series, self.args.cisco_band,"advanced"))
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,
self.args.cisco_passwd,self.args.cisco_ap,self.args.cisco_series,self.args.cisco_band,"advanced"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -93,8 +96,9 @@ class cisco_():
#show wlan summary
def controller_show_wlan_summary(self):
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,self.args.cisco_user,
self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series, self.args.cisco_band,"show wlan summary"))
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,
self.args.cisco_passwd,self.args.cisco_ap,self.args.cisco_series,self.args.cisco_band,"show wlan summary"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -115,11 +119,12 @@ class cisco_():
#./cisco_wifi_ctl.py --scheme ssh -d 172.19.36.168 -p <controller_pw> --port 23 -a "9120-Chamber-1" --band a --action disable --series 9800
def controller_disable_ap(self):
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,self.args.cisco_user,
self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series, self.args.cisco_band,"disable"))
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,
self.args.cisco_passwd,self.args.cisco_ap,self.args.cisco_series,self.args.cisco_band,"disable"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d",
self.args.cisco_ctlr, "-u",self.args.cisco_user, "-p", self.args.cisco_passwd,
"-a", self.args.cisco_ap,"--series", self.args.cisco_series, "--band", self.args.cisco_band, "--action", "disable"],
capture_output=self.args.cap_ctl_out, check=True)
@@ -138,8 +143,9 @@ class cisco_():
#./cisco_wifi_ctl.py --scheme ssh -d 172.19.36.168 -p <controller_pw> --port 23 -a "9120-Chamber-1" --band a --action disable_wlan --series 9800
def controller_disable_wlan(self):
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,self.args.cisco_user,
self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series, self.args.cisco_band,"disable_wlan"))
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,
self.args.cisco_passwd,self.args.cisco_ap,self.args.cisco_series,self.args.cisco_band,"disable_wlan"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -162,8 +168,9 @@ class cisco_():
def controller_disable_network_5ghz(self):
if self.args.cisco_series == "9800":
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,self.args.cisco_user,
self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series, self.args.cisco_band,"disable_network_5ghz"))
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,
self.args.cisco_passwd,self.args.cisco_ap,self.args.cisco_series,self.args.cisco_band,"disable_network_5ghz"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -181,8 +188,8 @@ class cisco_():
exit(1)
else:
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
self.args.cisco_band,"cmd","config 802.11a disable network"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
@@ -206,8 +213,9 @@ class cisco_():
def controller_disable_network_24ghz(self):
if self.args.cisco_series == "9800":
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,self.args.cisco_user,
self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series, self.args.cisco_band,"disable_network_24ghz"))
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,
self.args.cisco_passwd,self.args.cisco_ap,self.args.cisco_series,self.args.cisco_band,"disable_network_24ghz"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -225,8 +233,8 @@ class cisco_():
exit(1)
else:
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
self.args.cisco_band,"cmd","config 802.11b disable network"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
@@ -252,8 +260,9 @@ class cisco_():
def controller_role_manual(self):
if self.args.cisco_series == "9800":
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,self.args.cisco_user,
self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series, self.args.cisco_band,"manual"))
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,
self.args.cisco_passwd,self.args.cisco_ap,self.args.cisco_series,self.args.cisco_band,"manual"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -278,8 +287,9 @@ class cisco_():
def controller_role_auto(self):
if self.args.cisco_series == "9800":
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,self.args.cisco_user,
self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series, self.args.cisco_band,"auto"))
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,
self.args.cisco_passwd,self.args.cisco_ap,self.args.cisco_series,self.args.cisco_band,"auto"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -302,8 +312,8 @@ class cisco_():
#./cisco_wifi_ctl.py --scheme ssh -d 172.19.36.168 -p <controller_pw> --port 23 -a "9120-Chamber-1" --band a --action txPower --value 5 --series 9800
def controller_set_tx_power(self):
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,
self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
self.args.cisco_band,"txPower", self.args.cisco_tx_power )) # TODO fix txPower to tx_power in cisco_wifi_ctl.py
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -328,8 +338,8 @@ class cisco_():
# 3504 : (Cisco Controller) >config 802.11a channel ap APA453.0E7B.CF9C 52
def controller_set_channel(self):
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,
self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
self.args.cisco_band,"channel", self.args.cisco_channel ))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -352,8 +362,8 @@ class cisco_():
#./cisco_wifi_ctl.py --scheme ssh -d 172.19.36.168 -p <controller_pw> --port 23 -a "9120-Chamber-1" --band a --action bandwidth --value 40 --series 9800
def controller_set_bandwidth(self):
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,
self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
self.args.cisco_band,"channel", self.args.cisco_chan_width ))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -377,8 +387,8 @@ class cisco_():
def controller_create_wlan(self):
if self.args.cisco_series == "9800":
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} wlan {} wlanID {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,
self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} wlan {} wlanID {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
self.args.cisco_band,"create_wlan", self.args.cisco_wlan, self.args.cisco_wlanID ))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -403,8 +413,8 @@ class cisco_():
def controller_set_wireless_tag_policy(self):
if self.args.cisco_series == "9800":
try:
logg.info("scheme {} ctlr {} user {} passwd {} AP {} series {} band {} action {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,
self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
self.args.cisco_band,"wireless_tag_policy" ))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -429,8 +439,8 @@ class cisco_():
#./cisco_wifi_ctl.py --scheme ssh -d 172.19.36.168 -p <controller_pw> --port 23 -a "9120-Chamber-1" --band a --action enable_wlan --series 9800
def controller_enable_wlan(self):
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,
self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
self.args.cisco_band,"enable_wlan"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -454,8 +464,8 @@ class cisco_():
def controller_enable_network_5ghz(self):
if self.args.cisco_series == "9800":
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,
self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
self.args.cisco_band,"enable_network_5ghz"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -474,8 +484,8 @@ class cisco_():
exit(1)
else:
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
self.args.cisco_band,"cmd","config 802.11a enable network"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
@@ -500,8 +510,8 @@ class cisco_():
def controller_enable_network_24ghz(self):
if self.args.cisco_series == "9800":
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,
self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
self.args.cisco_band,"enable_network_24ghz"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -520,8 +530,8 @@ class cisco_():
exit(1)
else:
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {} value: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
self.args.cisco_band,"cmd","config 802.11b enable network"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
@@ -545,8 +555,8 @@ class cisco_():
#./cisco_wifi_ctl.py --scheme ssh -d 172.19.36.168 -p <controller_pw> --port 23 -a "9120-Chamber-1" --band a --action enable --series 9800
def controller_enable_ap(self):
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,
self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series,
self.args.cisco_band,"enable"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,
@@ -942,8 +952,9 @@ class L3VariableTime(LFCliBase):
return
try:
logg.info("scheme: {} ctlr: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,self.args.cisco_ctlr,self.args.cisco_user,
self.args.cisco_passwd, self.args.cisco_ap, self.args.cisco_series, self.args.cisco_band,"summary"))
logg.info("scheme: {} ctlr: {} port: {} prompt: {} user: {} passwd: {} AP: {} series: {} band: {} action: {}".format(self.args.cisco_scheme,
self.args.cisco_ctlr,self.args.cisco_port,self.args.prompt,self.args.cisco_user,
self.args.cisco_passwd,self.args.cisco_ap,self.args.cisco_series,self.args.cisco_band,"summary"))
ctl_output = subprocess.run(["../cisco_wifi_ctl.py", "--scheme", self.args.cisco_scheme, "--prompt", self.args.prompt, "--port", self.args.cisco_port, "-d", self.args.cisco_ctlr, "-u",
self.args.cisco_user, "-p", self.args.cisco_passwd,

View File

@@ -204,9 +204,13 @@ python3 ./test_ipv4_variable_time.py
optional_args.add_argument('--ap',help='Used to force a connection to a particular AP')
optional_args.add_argument('--report_file',help='where you want to store results')
optional_args.add_argument('--output_format', help='choose either csv or xlsx')
<<<<<<< HEAD
optional_args.add_argument('--a_min', help='--a_min bps rate minimum for side_a', default=256000)
optional_args.add_argument('--b_min', help='--b_min bps rate minimum for side_b', default=256000)
optional_args.add_argument('--test_duration', help='--test_duration sets the duration of the test', default="2m")
=======
optional_args.add_argument('--show', help='display results of test in terminal',default=True)
>>>>>>> e9a071eff8cfb397f9534ea865f8450e43078cee
args = parser.parse_args()
num_sta = 2
@@ -258,13 +262,17 @@ python3 ./test_ipv4_variable_time.py
ip_var_test.start(False, False)
layer3connections=','.join([[*x.keys()][0] for x in ip_var_test.l3cxprofile.json_get('endp')['endpoint']])
ip_var_test.l3cxprofile.monitor(col_names=['Name','Tx Rate','Rx Rate','Tx PDUs','Rx PDUs'],
try:
layer3connections=','.join([[*x.keys()][0] for x in ip_var_test.local_realm.json_get('endp')['endpoint']])
except:
raise ValueError('Try setting the upstream port flag if your device does not have an eth1 port')
ip_var_test.l3cxprofile.monitor(col_names=['Name','Tx Rate','Rx Rate','Tx PDUs','Rx PDUs','Rx Drop % A', 'Rx Drop % B', 'Bps Rx A', 'Bps Rx B', 'Rx Rate', 'Cx Estab'],
report_file=report_f,
duration_sec=ip_var_test.local_realm.parse_time(args.test_duration).total_seconds(),
created_cx= layer3connections,
output_format=output,
script_name='test_ipv4_variable_time',
show=show,
arguments=args)
ip_var_test.stop()

View File

@@ -1,565 +1,395 @@
""" file under progress not ffor testing
""" file under progress not ffor testing - AP R7800
"""
import time
import threading
import os
import paramiko
from queue import Queue
from cx_time import IPv4Test
class DFS_TESTING:
def __init__(self):
def _init_(self):
pass
def set_dfs_channel_in_ap(self):
ssh = paramiko.SSHClient() # creating shh client object we use this object to connect to router
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # automatically adds the missing host key
ssh.connect('192.168.200.190', port=22, username='root', password='Lanforge12345!xzsawq@!')
stdin, stdout, stderr = ssh.exec_command('conf_set system:wlanSettings:wlanSettingTable:wlan1:channel 52')
output = stdout.readlines()
print('\n'.join(output))
time.sleep(1)
exit(0)
def create_station_on_GUI(self,y1,y2):
global var1
self.y1 = y1
self.y2 = y2
cmd = "python3 sta_cx.py --mgr 192.168.200.13 --num_stations 1 --ssid TestAP95 --passwd lanforge --security wpa2 --radio wiphy0"
print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/home/lanforge/lanforge-scripts/py-scripts')
print("Current working directory: {0}".format(os.getcwd()))
x = os.popen(cmd).read()
print("station created")
y1 ='station created'
with open("data.txt", "w")as f:
f.write(x)
f.close()
file = open("data.txt", "r")
for i in file:
if "channel associated is " in i:
my_list = list(i.split(" "))
print(my_list[3])
print(type(my_list[3]))
var1 = my_list[3]
print(var1)
var = var1.replace("\n", "")
if var == "52" or var == "56" or var == "60" or var == "64" or var == "100" or var == "104" or var == "108" or var == "112" or var == "116" or var == "120" or var == "124" or var == "128" or var == "132" or var == "136" or var == "140":
print('Station is on DFS Channel')
self.y2 = 'station is on DFS Channel'
else:
print('Station is on Non DFS channel')
self.y2 = 'Station is on Non DFS channel'
return (self.y1 , self.y2)
''' ########### HACKRF ####################### '''
def generate_radar_at_ch52(self, r):
self.r = r
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5260000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
#print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.r = "Radar detected"
return self.r
def generate_radar_at_ch56(self):
def generate_radar_at_ch56(self,q):
self.q =q
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5280000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.q = "Radar detected"
return self.q
def generate_radar_at_ch60(self):
def generate_radar_at_ch60(self,w):
self.w = w
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5300000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.w = "Radar detected"
return self.w
def generate_radar_at_ch64(self):
def generate_radar_at_ch64(self,e):
self.e = e
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5320000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.e = "Radar detected"
return self.e
def generate_radar_at_ch100(self,r):
self.r = r
def generate_radar_at_ch100(self,f):
self.f = f
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5500000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.f = "Radar received"
return self.f
self.r = "Radar received"
return self.r
def generate_radar_at_ch104(self):
def generate_radar_at_ch104(self,t):
self.t = t
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5520000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.t = "Radar detected"
return self.t
def generate_radar_at_ch108(self):
def generate_radar_at_ch108(self,u):
self.u=u
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5540000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.u = "Radar detected"
return self.u
def generate_radar_at_ch112(self):
def generate_radar_at_ch112(self,i):
self.i=i
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5560000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.i = "Radar detected"
return self.i
def generate_radar_at_ch116(self):
def generate_radar_at_ch116(self,o):
self.o =o
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5280000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.o = "Radar detected"
return self.o
def generate_radar_at_ch120(self):
def generate_radar_at_ch120(self,p):
self.p=p
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5600000"
#print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.p = "Radar detected"
return self.p
def generate_radar_at_ch124(self):
def generate_radar_at_ch124(self,a):
self.a=a
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5620000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.a = "Radar detected"
return self.a
def generate_radar_at_ch128(self):
def generate_radar_at_ch128(self,s):
self.s=s
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5640000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.s = "Radar detected"
return self.s
def generate_radar_at_ch132(self):
def generate_radar_at_ch132(self,d):
self.d = d
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5660000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.d = "Radar detected"
return self.d
def generate_radar_at_ch136(self):
def generate_radar_at_ch136(self,h):
self.h=h
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5680000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.h = "Radar detected"
return self.h
def generate_radar_at_ch140(self):
def generate_radar_at_ch140(self,j):
self.j = j
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5700000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
self.j = "Radar detected"
return self.j
def hackrf_status_off(self):
cmd = "sudo python lf_hackrf.py --pulse_width 1 --pulse_interval 1428 --pulse_count 18 --sweep_time 1000 --freq 5220000"
# print("Current working directory: {0}".format(os.getcwd()))
os.chdir('/usr/lib64/python2.7/site-packages/')
# print("Current working directory: {0}".format(os.getcwd()))
os.system(cmd)
def monitor_station_channel(self,m):
self.m = m
obj = IPv4Test(_host="192.168.200.13",
_port=8080,
_ssid="TestAP95",
_password="lanforge",
_security="wpa2",
_radio="wiphy0")
obj.cleanup(obj.sta_list)
obj.build()
obj.station_profile.admin_up()
obj.local_realm.wait_for_ip(obj.sta_list)
time.sleep(30)
var = obj.json_get("/port/1/1/sta0000?fields=channel")
var_1 = var['interface']['channel']
self.m = var_1
return self.m
def aps_radio_off(self):
pass
def aps_not_switch_automatically(self):
pass
def check_ap_channel_switching_time(self):
pass
def main():
dfs = DFS_TESTING()
que = Queue()
''' algorithm and sequence to be followed '''
print("Hackrf is ON")
print("press s --> enter --> q to stop hackrf")
dfs.hackrf_status_off()
print("Now hackrf is OFF")
#set channel on ap //netgear
threads_list = []
t1 = threading.Thread(target=lambda q, arg1, arg2: q.put(dfs.create_station_on_GUI(arg1, arg2)), args=(que, "", ""))
t1.start()
threads_list.append(t1)
t1.join()
# Check thread's return value
global my_var
result = que.get()
print("hi i reached", result)
my_var = result
list_1 = list(my_var)
print("my list", list_1)
if any("station is on DFS Channel" in s for s in list_1):
t2 = threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch52(arg1)), args=(que, ""))
t2.start()
threads_list.append(t2)
t2.join()
x = que.get()
print("result", x)
else:
print("radar unreachable")
t3=threading.Thread(target=lambda q, arg1: q.put(dfs.monitor_station_channel(arg1)), args=(que, ""))
t3.start()
threads_list.append(t3)
t3.join()
y = que.get()
print("channel after radar is ", y)
if (y != "52"):
print("station is on Non DFS Channel")
else:
if y == "52":
print("station is on DFS Channel")
t4 = threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch52(arg1)), args=(que, ""))
t4.start()
t4.join()
elif y == "56":
print("station is on DFS Channel 56")
t5 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch56(arg1)), args=(que, ""))
t5.start()
t5.join()
elif y == "60":
print("station is on DFS Channel 60")
t6 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch60(arg1)), args=(que, ""))
t6.start()
t6.join()
elif y == "64":
print("station is on DFS Channel 64")
t7 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch64(arg1)), args=(que, ""))
t7.start()
t7.join()
elif y == "100":
print("station is on DFS Channel 100")
t8 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch100(arg1)), args=(que, ""))
t8.start()
t8.join()
elif y == "104":
print("station is on DFS Channel 104")
t9 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch104(arg1)), args=(que, ""))
t9.start()
t9.join()
elif y == "108":
print("station is on DFS Channel 108")
t10 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch108(arg1)), args=(que, ""))
t10.start()
t10.join()
elif y == "112":
print("station is on DFS Channel 112")
t11 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch112(arg1)), args=(que, ""))
t11.start()
t11.join()
elif y == "116":
print("station is on DFS Channel 116")
t12 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch116(arg1)), args=(que, ""))
t12.start()
t12.join()
elif y == "120":
print("station is on DFS Channel 120")
t13 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch120(arg1)), args=(que, ""))
t13.start()
t13.join()
elif y == "124":
print("station is on DFS Channel 124")
t14 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch124(arg1)), args=(que, ""))
t14.start()
t14.join()
elif y == "128":
print("station is on DFS Channel 128")
t15 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch128(arg1)), args=(que, ""))
t15.start()
t15.join()
elif y == "132":
print("station is on DFS Channel 132")
t16 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch132(arg1)), args=(que, ""))
t16.start()
t16.join()
elif y == "136":
print("station is on DFS Channel 136")
t17 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch136(arg1)), args=(que, ""))
t17.start()
t17.join()
elif y == "140":
print("station is on DFS Channel 140")
t18 =threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch140(arg1)), args=(que, ""))
t18.start()
t18.join()
else:
print("station is on NON DFS Channel")
@@ -569,81 +399,43 @@ def main():
"""t2 = threading.Thread(target=lambda q, arg1: q.put(dfs.generate_radar_at_ch52(arg1)), args=(que, ""))
t2.start()
threads_list.append(t2)
t2.join()"""
# Join all the threads
"""for t in threads_list:
t.join()"""
"""print("my var", my_var)
empty_list = []
list = empty_list.append(my_var)
print("list", list)"""
'''t2 = threading.Thread(target=dfs.generate_radar_at_ch100())
t2.start()
t2.join()
print("radar received")
t3 = threading.Thread(target=dfs.create_station_on_GUI())
t3.start()
t3.join()
print("station reassociated")'''
'''dfs.hackrf_status_off()
dfs.aps_radio_off()
dfs.aps_not_switch_automatically()
#generate radar and check for all dfs channels
dfs.check_ap_channel_switching_time()
#after testing turn off hackrf'''
@@ -651,15 +443,5 @@ def main():
if __name__ == '__main__':
main()

View File

@@ -310,7 +310,10 @@ Actions can be:
if args.session is None:
print("requires --session")
return
response_o = status_messages.json_get("/status-msg/"+args.session)
if args.key is None:
print("requires --key")
return
response_o = status_messages.json_get("/status-msg/%s/%s"%(args.session, args.key))
pprint(response_o)
return

View File

@@ -1,4 +1,7 @@
#!/usr/bin/env python3
"""
This is an outdated example. Please see modern py-scripts/test_X example scripts.
"""
import sys
if sys.version_info[0] != 3:
print("This script requires Python 3")

View File

@@ -1,66 +1,53 @@
'''
Candela Technologies Inc.
Info : Standard Script for WLAN Capacity Calculator
Date :
Author : Anjali Rahamatkar
'''
import argparse
import sys
import os
from pip._internal.utils import logging
if 'py-json' not in sys.path:
sys.path.append(os.path.join(os.path.abspath('..'), 'py-json'))
import wlan_test
import wlan_theoretical_sta
# main method
def main():
ap = argparse.ArgumentParser(description="WLAN Capacity Calculator")
# Station : 11abg
parse = wlan_theoretical_sta.abg11_calculator.create_argparse( prog='wlan_capacity_calculator.py',
formatter_class=argparse.RawTextHelpFormatter,
epilog='''\
This python script calculates the theoretical value of three different stations( 11abg/11n/11ac)''',
description='''\
wlan_capacity_calculator.py
---------------------------------------------------------------------------
ap.add_argument("-sta", "--station", help="Enter Station Name : [11abg,11n,11ac](by Default 11abg)")
ap.add_argument("-t", "--traffic", help="Enter the Traffic Type : [Data,Voice](by Default Data)")
ap.add_argument("-p", "--phy",
help="Enter the PHY Bit Rate of Data Flow : [1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54](by Default 54)")
ap.add_argument("-e", "--encryption", help="Enter the Encryption : [None, WEP , TKIP, CCMP](by Default None)")
ap.add_argument("-q", "--qos", help="Enter the QoS = : [No, Yes](by Default [No for 11abg] and [Yes for 11n])")
ap.add_argument("-m", "--mac",
help="Enter the 802.11 MAC Frame : [Any Value](by Default [106 for 11abg] and [1538 for 11n])")
ap.add_argument("-b", "--basic", nargs='+',
help="Enter the Basic Rate Set : [1,2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54]"
" (by Default [1 2 5.5 11 6 12] for 11abg, [6 12 24] for 11n/11ac])")
ap.add_argument("-pre", "--preamble", help="Enter Preamble value : [ Short, Long, N/A](by Default Short)")
ap.add_argument("-s", "--slot", help="Enter the Slot Time : [Short, Long, N/A](by Default Short)")
ap.add_argument("-co", "--codec", help="Enter the Codec Type (Voice Traffic): {[ G.711 , G.723 , G.729]"
"by Default G.723 for 11abg, G.711 for 11n} and"
"{['Mixed','Greenfield'] by Default Mixed for 11ac}")
ap.add_argument("-r", "--rts", help="Enter the RTS/CTS Handshake : [No, Yes](by Default No)")
ap.add_argument("-c", "--cts", help="Enter the CTS-to-self (protection) : [No, Yes](by Default No)")
# Station : 11n and 11ac
ap.add_argument("-d", "--data",
help="Enter the Data/Voice MCS Index : ['0','1','2','3','4','5','6','7','8','9','10',"
"'11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26',"
"'27','28','29','30','31']by Default 7")
ap.add_argument("-ch", "--channel", help="Enter the Channel Bandwidth = : ['20','40'] by Default 40 for 11n and "
"['20','40','80'] by Default 80 for 11ac")
ap.add_argument("-gu", "--guard", help="Enter the Guard Interval = : ['400','800'] (by Default 400)")
ap.add_argument("-high", "--highest",
help="Enter the Highest Basic MCS = : ['0','1','2','3','4','5','6','7','8','9',"
"'10','11','12','13','14','15','16','17','18','19','20','21','22','23','24',"
"'25','26','27','28','29','30','31'](by Default 1)")
ap.add_argument("-pl", "--plcp",
help="Enter the PLCP Configuration = : ['Mixed','Greenfield'] (by Default Mixed) for 11n")
ap.add_argument("-ip", "--ip", help="Enter the IP Packets per A-MSDU = : ['0','1','2','3','4','5','6','7','8','9',"
"'10','11','12','13','14','15','16','17','18','19','20'] (by Default 0)")
ap.add_argument("-mc", "--mc",
help="Enter the MAC Frames per A-MPDU = : ['0','1','2','3','4','5','6','7','8',"
"'9','10','11','12','13','14','15','16','17','18','19','20','21','22','23',"
"'24','25','26','27','28','29','30','31','32','33','34','35','36','37','38',"
"'39','40','41','42','43','44','45','46','47','48','49','50','51','52','53',"
"'54','55','56','57','58','59','60','61','62','63','64'](by Default [42 for 11n] and [64 for 11ac])")
ap.add_argument("-cw", "--cwin", help="Enter the CWmin (leave alone for default) = : [Any Value] (by Default 15)")
ap.add_argument("-spa", "--spatial", help="Enter the Spatial Streams = [1,2,3,4] (by Default 4)")
ap.add_argument("-rc", "--rtscts", help="Enter the RTS/CTS Handshake and CTS-to-self "
" = ['No','Yes'] (by Default No for 11ac)")
Example of command line to run(11ac Station):
./wlan_capacity_calculator.py
-sta 11ac
-t Voice
-d 9
-spa 3
-ch 20
-gu 800
-high 1
-e TKIP
-q Yes
-ip 3
-mc 0
-b 6 12 24 54
-m 1518
-co Greenfield
-cw 15
''')
try:
args = ap.parse_args()
args = parse.parse_args()
# Station
if (args.station is not None):
Calculator_name = args.station
@@ -238,22 +225,26 @@ def main():
# Select station(802.11a/b/g/n/ac standards)
if "11abg" in Calculator_name:
Station1 = wlan_test.abg11_calculator(traffic_name, phy_name, encryption_name, qos_name, mac_name, basic_name,
Station1 = wlan_theoretical_sta.abg11_calculator(traffic_name, phy_name, encryption_name, qos_name, mac_name, basic_name,
preamble_name, slot_name, codec_name, rts_name, cts_name)
Station1.input_parameter()
Station1.calculate()
Station1.get_result()
if "11n" in Calculator_name:
Station2 = wlan_test.n11_calculator(traffic_name, data_name, channel_name, guard_name, highest_name, encryption_name,
Station2 = wlan_theoretical_sta.n11_calculator(traffic_name, data_name, channel_name, guard_name, highest_name, encryption_name,
qos_name, ip_name,
mc_name, basic_name, mac_name,
codec_name, plcp_name, cwin_name, rts_name, cts_name)
Station2.input_parameter()
Station2.calculate()
Station2.get_result()
if "11ac" in Calculator_name:
Station3 = wlan_test.ac11_calculator(traffic_name, data_name, spatial_name, channel_name, guard_name, highest_name,
Station3 = wlan_theoretical_sta.ac11_calculator(traffic_name, data_name, spatial_name, channel_name, guard_name, highest_name,
encryption_name
, qos_name, ip_name, mc_name, basic_name, mac_name,
codec_name, cwin_name, rtscts_name)
Station3.input_parameter()
Station3.calculate()
Station3.get_result()
if __name__ == "__main__":
main()
main()