mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-01 03:07:56 +00:00
realm
This commit is contained in:
193
cisco_ap_ctl.py
Normal file
193
cisco_ap_ctl.py
Normal 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()
|
||||
|
||||
####
|
||||
####
|
||||
####
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
@@ -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__':
|
||||
|
||||
####
|
||||
####
|
||||
####
|
||||
####
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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))
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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() | ||||