mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-11-03 20:27:54 +00:00 
			
		
		
		
	wifi_ctl_9800_3504.py : added the show ap wlan summary Signed-off-by: Chuck SmileyRekiere <chuck.smileyrekiere@candelatech.com>
		
			
				
	
	
		
			896 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			896 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
"""
 | 
						|
NAME: cc_module_9800_3504.py
 | 
						|
 | 
						|
PURPOSE:
 | 
						|
controller module for communicating to a cisco 9800 or 3504 controller
 | 
						|
This module can be dynamically imported
 | 
						|
 | 
						|
SETUP:
 | 
						|
None
 | 
						|
 | 
						|
EXAMPLE:
 | 
						|
    There is a unit test included to try sample command scenarios
 | 
						|
 | 
						|
 | 
						|
COPYWRITE
 | 
						|
    Copyright 2021 Candela Technologies Inc
 | 
						|
    License: Free to distribute and modify. LANforge systems must be licensed.
 | 
						|
 | 
						|
INCLUDE_IN_README
 | 
						|
"""
 | 
						|
 | 
						|
import sys
 | 
						|
if sys.version_info[0] != 3:
 | 
						|
    print("This script requires Python 3")
 | 
						|
    exit()
 | 
						|
 | 
						|
import argparse
 | 
						|
import logging
 | 
						|
import importlib
 | 
						|
import os
 | 
						|
import subprocess
 | 
						|
from pprint import pformat
 | 
						|
 | 
						|
sys.path.append(os.path.join(os.path.abspath(__file__ + "../../")))
 | 
						|
 | 
						|
logger = logging.getLogger(__name__)
 | 
						|
lf_logger_config = importlib.import_module("py-scripts.lf_logger_config")
 | 
						|
 | 
						|
 | 
						|
class create_controller_series_object:
 | 
						|
    def __init__(self,
 | 
						|
                 scheme=None,
 | 
						|
                 dest=None,
 | 
						|
                 user=None,
 | 
						|
                 passwd=None,
 | 
						|
                 prompt=None,
 | 
						|
                 series=None,
 | 
						|
                 band=None,
 | 
						|
                 ap=None,
 | 
						|
                 port=None,
 | 
						|
                 timeout=None,
 | 
						|
                 pwd=None
 | 
						|
                 ):
 | 
						|
        if scheme is None:
 | 
						|
            raise ValueError('Controller scheme must be set: serial, ssh or telnet')
 | 
						|
        else:
 | 
						|
            self.scheme = scheme
 | 
						|
        if dest is None:
 | 
						|
            raise ValueError('Controller dest must be set: and IP or localhost')
 | 
						|
        else:
 | 
						|
            self.dest = dest
 | 
						|
        if user is None:
 | 
						|
            raise ValueError('Controller user must be set')
 | 
						|
        else:
 | 
						|
            self.user = user
 | 
						|
        if passwd is None:
 | 
						|
            raise ValueError('Controller passwd must be set')
 | 
						|
        else:
 | 
						|
            self.passwd = passwd
 | 
						|
        if prompt is None:
 | 
						|
            raise ValueError('Controller prompt must be set: WLC1')
 | 
						|
        else:
 | 
						|
            self.prompt = prompt
 | 
						|
        if series is None:
 | 
						|
            raise ValueError('Controller series must be set: 9800 or 3504')
 | 
						|
        else:
 | 
						|
            self.series = series
 | 
						|
 | 
						|
        if ap is None:
 | 
						|
            raise ValueError('Controller AP  must be set')
 | 
						|
        else:
 | 
						|
            self.ap = ap
 | 
						|
        if band is None:
 | 
						|
            raise ValueError('Controller band  must be set')
 | 
						|
        else:
 | 
						|
            self.band = band
 | 
						|
        if port is None:
 | 
						|
            raise ValueError('Controller port  must be set')
 | 
						|
        else:
 | 
						|
            self.port = port
 | 
						|
 | 
						|
        if timeout is None:
 | 
						|
            logger.info("timeout not set default to 10 sec")
 | 
						|
            self.timeout = '10'
 | 
						|
        else:
 | 
						|
            self.timeout = timeout
 | 
						|
 | 
						|
        self.bandwidth = None
 | 
						|
        self.wlan = None
 | 
						|
        self.wlanID = None
 | 
						|
        self.wlanSSID = None
 | 
						|
        self.security_key = None
 | 
						|
        self.wlanpw = None
 | 
						|
        self.tag_policy = None
 | 
						|
        self.policy_profile = None
 | 
						|
        self.tx_power = None
 | 
						|
        self.channel = None
 | 
						|
        self.bandwidth = None
 | 
						|
        self.action = None
 | 
						|
        self.value = None
 | 
						|
        self.command = []
 | 
						|
        self.command_extend = []
 | 
						|
        self.info = "Cisco 9800 Controller Series"
 | 
						|
        self.pwd = pwd
 | 
						|
 | 
						|
    # TODO update the wifi_ctl_9800_3504 to use 24g, 5g, 6g
 | 
						|
 | 
						|
    def convert_band(self):
 | 
						|
        if self.band == '24g':
 | 
						|
            self.band = 'b'
 | 
						|
        elif self.band == '5g':
 | 
						|
            self.band = 'a'
 | 
						|
        elif self.band == '6g':
 | 
						|
            self.band = '6g'
 | 
						|
        elif self.band == 'a' or self.band == 'b':
 | 
						|
            pass
 | 
						|
        else:
 | 
						|
            logger.critical("band needs to be set 24g 5g or 6g")
 | 
						|
            raise ValueError("band needs to be set 24g 5g or 6g")
 | 
						|
 | 
						|
    # TODO consolidate the command formats
 | 
						|
    def send_command(self):
 | 
						|
        # for backward compatibility wifi_ctl_9800_3504 expects 'a' for 5g and 'b' for 24b
 | 
						|
        self.convert_band()
 | 
						|
        logger.info("action {action}".format(action=self.action))
 | 
						|
 | 
						|
        # Command base
 | 
						|
        if self.pwd is None:
 | 
						|
            self.command = ["./wifi_ctl_9800_3504.py", "--scheme", self.scheme, "--dest", self.dest,
 | 
						|
                            "--user", self.user, "--passwd", self.passwd, "--prompt", self.prompt,
 | 
						|
                            "--series", self.series, "--ap", self.ap, "--band", self.band, "--port", self.port]
 | 
						|
        else:
 | 
						|
            self.command = [str(str(self.pwd) + "/wifi_ctl_9800_3504.py"), "--scheme", self.scheme, "--dest", self.dest,
 | 
						|
                            "--user", self.user, "--passwd", self.passwd, "--prompt", self.prompt,
 | 
						|
                            "--series", self.series, "--ap", self.ap, "--band", self.band, "--port", self.port]
 | 
						|
        # Generate command
 | 
						|
        if self.action in ['cmd', 'txPower', 'channel', 'bandwidth']:
 | 
						|
 | 
						|
            self.command_extend = ["--action", self.action, "--value", self.value]
 | 
						|
            self.command.extend(self.command_extend)
 | 
						|
 | 
						|
        elif self.action in ["create_wlan", "create_wlan_wpa2", "create_wlan_wpa3"]:
 | 
						|
 | 
						|
            if self.action in ["create_wlan"]:
 | 
						|
                self.command_extend = ["--action", self.action, "--wlan", self.wlan,
 | 
						|
                                       "--wlanID", self.wlanID, "--wlanSSID", self.wlanSSID]
 | 
						|
            else:
 | 
						|
                self.command_extend = ["--action", self.action, "--wlan", self.wlan,
 | 
						|
                                       "--wlanID", self.wlanID, "--wlanSSID", self.wlanSSID, "--security_key", self.security_key]
 | 
						|
            self.command.extend(self.command_extend)
 | 
						|
 | 
						|
        elif self.action in ["enable_wlan", "disable_wlan", "delete_wlan"]:
 | 
						|
 | 
						|
            self.command_extend = ["--action", self.action, "--wlan", self.wlan]
 | 
						|
            self.command.extend(self.command_extend)
 | 
						|
 | 
						|
        elif self.action in ["wireless_tag_policy"]:
 | 
						|
 | 
						|
            self.command_extend = ["--action", self.action, "--wlan", self.wlan, "--tag_policy", self.tag_policy, "--policy_profile", self.policy_profile]
 | 
						|
            self.command.extend(self.command_extend)
 | 
						|
 | 
						|
        # possible need to look for exact command
 | 
						|
        elif self.action in ["summary", "show_radio", "no_logging_console", "line_console_0", "show_ap_wlan_summary", "show_wlan_summary",
 | 
						|
                             "advanced", "disable", "disable_network_5ghz", "disable_network_24ghz",
 | 
						|
                             "manual", "auto", "enable_network_5ghz", "enable_network_24ghz", "enable"]:
 | 
						|
 | 
						|
            self.command_extend = ["--action", self.action]
 | 
						|
            self.command.extend(self.command_extend)
 | 
						|
 | 
						|
        else:
 | 
						|
            logger.critical("action {action} not supported".format(action=self.action))
 | 
						|
            raise ValueError("action {action} not supported".format(action=self.action))
 | 
						|
 | 
						|
        # logger.info(pformat(self.command))
 | 
						|
        logger.info(self.command)
 | 
						|
        # TODO change the subprocess.run to pOpen
 | 
						|
        summary_output = ''
 | 
						|
        summary = subprocess.Popen(self.command, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
 | 
						|
        for line in iter(summary.stdout.readline, ''):
 | 
						|
            logger.debug(line)
 | 
						|
            summary_output += line
 | 
						|
            # sys.stdout.flush() # please see comments regarding the necessity of this line
 | 
						|
        summary.wait()
 | 
						|
        logger.info(summary_output)  # .decode('utf-8', 'ignore'))
 | 
						|
        # logger.info(advanced.stderr.decode('utf-8', 'ignore'))
 | 
						|
        return summary_output
 | 
						|
 | 
						|
    def show_ap_config_slots(self):
 | 
						|
        logger.info("show ap config slots")
 | 
						|
        self.action = "cmd"
 | 
						|
        self.value = "show ap config slots"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # NOTE: need to do _no_logging_console and line_console_0 at the beginning of every session
 | 
						|
    # to avoid unexpected log messages showing up
 | 
						|
 | 
						|
    # this command will disable debug logging to the terminal which causes issues with pexpect
 | 
						|
    def no_logging_console(self):
 | 
						|
        logger.info("no_logging_console")
 | 
						|
        self.action = "no_logging_console"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # Note: needed to be set for tx power script
 | 
						|
    def line_console_0(self):
 | 
						|
        logger.info("line_console_0")
 | 
						|
        self.action = "line_console_0"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def show_controllers_dot11Radio_0(self):
 | 
						|
        logger.info("show radio")
 | 
						|
        self.action = "show_radio"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def show_ap_summary(self):
 | 
						|
        logger.info("show ap summary")
 | 
						|
        self.action = "summary"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def show_ap_wlan_summary(self):
 | 
						|
        logger.info("show ap wlan summary")
 | 
						|
        self.action = "show_ap_wlan_summary"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def show_wlan_summary(self):
 | 
						|
        logger.info("show_wlan_summary")
 | 
						|
        self.action = "show_wlan_summary"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def show_ap_dot11_5gz_summary(self):
 | 
						|
        logger.info("show_ap_dot11_5gz_summary")
 | 
						|
        self.band = '5g'
 | 
						|
        self.action = "advanced"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def show_ap_dot11_24gz_summary(self):
 | 
						|
        logger.info("show_ap_dot11_24gz_summary")
 | 
						|
        self.band = '24g'
 | 
						|
        self.action = "advanced"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def show_ap_dot11_5gz_shutdown(self):
 | 
						|
        logger.info("ap name {name} dot11 5ghz shutdown")
 | 
						|
        self.band = '5g'
 | 
						|
        self.action = "disable"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def show_ap_dot11_24gz_shutdown(self):
 | 
						|
        logger.info("ap name {name} dot11 24ghz shutdown")
 | 
						|
        self.band = '24g'
 | 
						|
        self.action = "disable"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def wlan_shutdown(self):
 | 
						|
        logger.info("wlan {wlan} shutdown wlanID {wlanID} wlanSSID {wlanSSID}".format(wlan=self.wlan, wlanID=self.wlanID, wlanSSID=self.wlanSSID))
 | 
						|
        self.action = "disable_wlan"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def ap_dot11_5ghz_shutdown(self):
 | 
						|
        logger.info("ap dot11 5ghz shutdown")
 | 
						|
        self.action = "disable_network_5ghz"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def ap_dot11_24ghz_shutdown(self):
 | 
						|
        logger.info("wlan {wlan} shutdown".format(wlan=self.wlan))
 | 
						|
        self.action = "disable_network_24ghz"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def ap_dot11_5ghz_radio_role_manual_client_serving(self):
 | 
						|
        logger.info("ap name {ap_name} dot11 5ghz radio role manual client-serving".format(ap_name=self.ap))
 | 
						|
        self.band = '5g'
 | 
						|
        self.action = "manual"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def ap_dot11_24ghz_radio_role_manual_client_serving(self):
 | 
						|
        logger.info("ap name {ap_name} dot11 24ghz radio role manual client-serving".format(ap_name=self.ap))
 | 
						|
        self.band = '24g'
 | 
						|
        self.action = "manual"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def ap_dot11_5ghz_radio_role_auto(self):
 | 
						|
        logger.info("ap name {ap_name} dot11 5ghz radio role auto".format(ap_name=self.ap))
 | 
						|
        self.band = '5g'
 | 
						|
        self.action = "auto"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def ap_dot11_24ghz_radio_role_auto(self):
 | 
						|
        logger.info("ap name {ap_name} dot11 5ghz radio role auto".format(ap_name=self.ap))
 | 
						|
        self.band = '24g'
 | 
						|
        self.action = "auto"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def config_dot11_5ghz_disable_network(self):
 | 
						|
        logger.info("config_dot11_5ghz_disable_network")
 | 
						|
        self.action = "cmd"
 | 
						|
        self.value = "config 802.11a disable network"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def config_dot11_24ghz_disable_network(self):
 | 
						|
        logger.info("config_dot11_24ghz_disable_network")
 | 
						|
        self.action = "cmd"
 | 
						|
        self.value = "config 802.11b disable network"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # txPower
 | 
						|
    def config_dot11_6ghz_tx_power(self):
 | 
						|
        logger.info("config_dot11_6ghz_tx_power")
 | 
						|
        self.band = '6g'
 | 
						|
        self.action = "txPower"
 | 
						|
        self.value = "{tx_power}".format(tx_power=self.tx_power)
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def config_dot11_5ghz_tx_power(self):
 | 
						|
        logger.info("config_dot11_5ghz_tx_power")
 | 
						|
        self.band = '5g'
 | 
						|
        self.action = "txPower"
 | 
						|
        self.value = "{tx_power}".format(tx_power=self.tx_power)
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def config_dot11_24ghz_tx_power(self):
 | 
						|
        logger.info("config_dot11_24ghz_tx_power")
 | 
						|
        self.band = '24g'
 | 
						|
        self.action = "txPower"
 | 
						|
        self.value = "{tx_power}".format(tx_power=self.tx_power)
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # set channel
 | 
						|
    def config_dot11_6ghz_channel(self):
 | 
						|
        logger.info("config_dot11_5ghz_channel {channel}".format(channel=self.channel))
 | 
						|
        self.band = '6g'
 | 
						|
        self.action = "channel"
 | 
						|
        self.value = "{channel}".format(channel=self.channel)
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def config_dot11_5ghz_channel(self):
 | 
						|
        logger.info("config_dot11_5ghz_channel {channel}".format(channel=self.channel))
 | 
						|
        self.band = '5g'
 | 
						|
        self.action = "channel"
 | 
						|
        self.value = "{channel}".format(channel=self.channel)
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def config_dot11_24ghz_channel(self):
 | 
						|
        logger.info("config_dot11_24ghz_channel {channel}".format(channel=self.channel))
 | 
						|
        self.action = "channel"
 | 
						|
        self.value = "{channel}".format(channel=self.channel)
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # set bandwidth
 | 
						|
    def config_dot11_6ghz_channel_width(self):
 | 
						|
        logger.info("config_dot11_6ghz_channel width {bandwidth}".format(bandwidth=self.bandwidth))
 | 
						|
        self.band = '6g'
 | 
						|
        self.action = "bandwidth"
 | 
						|
        self.value = "{bandwidth}".format(bandwidth=self.bandwidth)
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    def config_dot11_5ghz_channel_width(self):
 | 
						|
        logger.info("config_dot11_5ghz_channel width {bandwidth}".format(bandwidth=self.bandwidth))
 | 
						|
        self.band = '5g'
 | 
						|
        self.action = "bandwidth"
 | 
						|
        self.value = "{bandwidth}".format(bandwidth=self.bandwidth)
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # TODO 24ghz is always 20 Mhz
 | 
						|
    def config_dot11_24ghz_channel_width(self):
 | 
						|
        logger.info("config_dot11_24ghz_channel width {bandwidth}".format(bandwidth=self.bandwidth))
 | 
						|
        self.band = '24g'
 | 
						|
        self.action = "bandwidth"
 | 
						|
        self.value = "{bandwidth}".format(bandwidth=self.bandwidth)
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # delete_wlan (may need to get the wlan from the summary)
 | 
						|
 | 
						|
    def config_no_wlan(self):
 | 
						|
        logger.info("config_no_wlan {wlan}".format(wlan=self.wlan))
 | 
						|
        self.action = "delete_wlan"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # configure open wlan , commands sent
 | 
						|
    #    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"]:
 | 
						|
 | 
						|
    def config_wlan_open(self):
 | 
						|
        logger.info("config_wlan wlan: Profile name {wlan} wlanID {wlanID} wlanSSID {wlanSSID}".format(wlan=self.wlan, wlanID=self.wlanID, wlanSSID=self.wlanSSID))
 | 
						|
        self.action = "create_wlan"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # TODO ability to pass in psk
 | 
						|
    # configuration for wpa2, commands
 | 
						|
    #    for command in [
 | 
						|
    #        "assisted-roaming dual-list",
 | 
						|
    #        "bss-transition dual-list",
 | 
						|
    #        "radio policy dot11 24ghz",
 | 
						|
    #        "radio policy dot11 5ghz",
 | 
						|
    #        "security wpa psk set-key ascii 0 hello123",
 | 
						|
    #        "no security wpa akm dot1x",
 | 
						|
    #        "security wpa akm psk"
 | 
						|
    #        "no shutdown"]:
 | 
						|
    # configure wpa2
 | 
						|
    def config_wlan_wpa2(self):
 | 
						|
        logger.info("config_wlan_wpa2 wlan: Profile name {wlan} wlanID {wlanID} wlanSSID {wlanSSID} security_key {security_key}".format(wlan=self.wlan, wlanID=self.wlanID, wlanSSID=self.wlanSSID, security_key=self.security_key))
 | 
						|
        self.action = "create_wlan_wpa2"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # configuration for wpa3, commands
 | 
						|
    #    for command in [
 | 
						|
    #        "assisted-roaming dual-list"
 | 
						|
    #        "radio policy dot11 6ghz"
 | 
						|
    #        "no security ft adaptive"
 | 
						|
    #        "no security wpa wpa2"
 | 
						|
    #        "security wpa psk set-key ascii 0 hello123"
 | 
						|
    #        "no security wpa akm dot1x"
 | 
						|
    #        "security wpa akm sae"
 | 
						|
    #        "security wpa akm sae pwe h2e"
 | 
						|
    #        "security wpa wpa3"
 | 
						|
    #        "security pmf mandatory"
 | 
						|
    #        "no shutdown"]:
 | 
						|
 | 
						|
    # configure wpa3
 | 
						|
    # TODO pass in
 | 
						|
 | 
						|
    def config_wlan_wpa3(self):
 | 
						|
        logger.info("config_wlan_wpa3 wlan: Profile name {wlan} wlanID {wlanID} wlanSSID {wlanSSID}".format(wlan=self.wlan, wlanID=self.wlanID, wlanSSID=self.wlanSSID))
 | 
						|
        self.action = "create_wlan_wpa3"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # config wireless tag policy and policy_profile
 | 
						|
    # this may need to be split up
 | 
						|
    # WCL1 : RM204-TB1 , WLC2 : RM204-TB2
 | 
						|
    # policy_profile = 'default-policy-profile'
 | 
						|
    # TODO remove hardcoded 'default-policy-profile' make configurable
 | 
						|
 | 
						|
    def config_wireless_tag_policy_and_policy_profile(self):
 | 
						|
        logger.info("config_wireless_tag_policy: Profile name {wlan} tag policy {tag_policy} ".format(wlan=self.wlan, tag_policy=self.tag_policy))
 | 
						|
        self.action = "wireless_tag_policy"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # enable_wlan
 | 
						|
    def config_enable_wlan_send_no_shutdown(self):
 | 
						|
        logger.info("config_enable_wlan_send_no_shutdown: Profile name {wlan} wlanID {wlanID} wlanSSID {wlanSSID}".format(wlan=self.wlan, wlanID=self.wlanID, wlanSSID=self.wlanSSID))
 | 
						|
        self.action = "enable_wlan"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # enable_network_5ghz
 | 
						|
    def config_no_ap_dot11_5ghz_shutdown(self):
 | 
						|
        logger.info("config_no_ap_dot11_5ghz_shutdown (enable network 5ghz): Profile name {wlan} wlanID {wlanID} wlanSSID {wlanSSID}".format(wlan=self.wlan, wlanID=self.wlanID, wlanSSID=self.wlanSSID))
 | 
						|
        self.action = "enable_network_5ghz"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # enable_network_24ghz
 | 
						|
    def config_no_ap_dot11_24ghz_shutdown(self):
 | 
						|
        logger.info("config_no_ap_dot11_24ghz_shutdown (enable network 24ghz): Profile name {wlan} wlanID {wlanID} wlanSSID {wlanSSID}".format(wlan=self.wlan, wlanID=self.wlanID, wlanSSID=self.wlanSSID))
 | 
						|
        self.action = "enable_network_24ghz"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # enable ap 5ghz
 | 
						|
    def config_ap_no_dot11_5ghz_shutdown(self):
 | 
						|
        logger.info("ap name %s dot11 5ghz shutdown {ap}  (enable ap)".format(ap=self.ap))
 | 
						|
        self.band = '5g'
 | 
						|
        self.action = "enable"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
    # enable ap 24ghz
 | 
						|
    def config_ap_no_dot11_24ghz_shutdown(self):
 | 
						|
        logger.info("ap name %s dot11 24ghz shutdown {ap} (enable ap)".format(ap=self.ap))
 | 
						|
        self.band = '24g'
 | 
						|
        self.action = "enable"
 | 
						|
        summary = self.send_command()
 | 
						|
        return summary
 | 
						|
 | 
						|
 | 
						|
# This next section is to allow for tests to be created without
 | 
						|
# please do not delete
 | 
						|
# modifying existing tests.
 | 
						|
 | 
						|
# This sample runs thought dumping status
 | 
						|
def sample_test_dump_status(cs):
 | 
						|
    cs.show_ap_config_slots()
 | 
						|
    cs.show_ap_summary()
 | 
						|
    cs.no_logging_console()
 | 
						|
    cs.line_console_0()
 | 
						|
    cs.show_wlan_summary()
 | 
						|
    cs.show_ap_dot11_5gz_summary()
 | 
						|
 | 
						|
 | 
						|
# This sample runs though the sequence of commands used
 | 
						|
# by tx_power script
 | 
						|
 | 
						|
# TODO unit test for 6g wlan, 5g wlan, 2g wlan, and all three
 | 
						|
def sample_test_tx_power_sequence(cs):
 | 
						|
 | 
						|
    # series of commands to create a wlan , similiar to how tx_power works.
 | 
						|
    # pass in the ap and band from the command line
 | 
						|
    # cs.ap = 'APA453.0E7B.CF9C'
 | 
						|
    # cs.band = '5g'
 | 
						|
 | 
						|
    logger.info("sample_test_tx_power_sequence")
 | 
						|
    # This needs to be here to disable and delete
 | 
						|
    cs.wlan = 'wpa2_wlan_3'
 | 
						|
    cs.wlanID = '3'
 | 
						|
    cs.wlanSSID = 'wpa2_wlan_3'
 | 
						|
    cs.tx_power = '1'
 | 
						|
 | 
						|
    cs.tag_policy = 'RM204-TB1'
 | 
						|
    cs.policy_profile = 'default-policy-profile'
 | 
						|
 | 
						|
    # no_logging_console
 | 
						|
    cs.no_logging_console()
 | 
						|
    # line_console_0
 | 
						|
    cs.line_console_0()
 | 
						|
    # summary
 | 
						|
    cs.show_ap_summary()
 | 
						|
 | 
						|
    # disable
 | 
						|
    cs.show_ap_dot11_5gz_shutdown()
 | 
						|
    cs.show_ap_dot11_24gz_shutdown()
 | 
						|
 | 
						|
    # disable_wlan
 | 
						|
    cs.wlan_shutdown()
 | 
						|
    # disable_network_5ghz
 | 
						|
    cs.ap_dot11_5ghz_shutdown()
 | 
						|
    # disable_network_24ghz
 | 
						|
    cs.ap_dot11_24ghz_shutdown()
 | 
						|
    # manual
 | 
						|
    cs.ap_dot11_5ghz_radio_role_manual_client_serving()
 | 
						|
    cs.ap_dot11_24ghz_radio_role_manual_client_serving()
 | 
						|
 | 
						|
    # Configuration for 5g
 | 
						|
 | 
						|
    # txPower
 | 
						|
    cs.config_dot11_5ghz_tx_power()
 | 
						|
    cs.bandwidth = '20'
 | 
						|
    # bandwidth (to set to 20 if channel change does not support)
 | 
						|
    cs.config_dot11_5ghz_channel_width()
 | 
						|
    cs.channel = '100'
 | 
						|
    # channel
 | 
						|
    cs.config_dot11_5ghz_channel()
 | 
						|
    cs.bandwidth = '40'
 | 
						|
    # bandwidth
 | 
						|
    cs.config_dot11_5ghz_channel_width()
 | 
						|
    # show_wlan_summary
 | 
						|
    cs.show_wlan_summary()
 | 
						|
 | 
						|
    # Configuration for 6g
 | 
						|
    # txPower
 | 
						|
    # cs.config_dot11_6ghz_tx_power()
 | 
						|
    # cs.bandwidth = '20'
 | 
						|
    # # bandwidth (to set to 20 if channel change does not support)
 | 
						|
    # cs.config_dot11_6ghz_channel_width()
 | 
						|
    # cs.channel = '36'
 | 
						|
    # # channel
 | 
						|
    # cs.config_dot11_6ghz_channel()
 | 
						|
    # cs.bandwidth = '40'
 | 
						|
    # # bandwidth
 | 
						|
    # cs.config_dot11_6ghz_channel_width()
 | 
						|
    # # show_wlan_summary
 | 
						|
    # cs.show_wlan_summary()
 | 
						|
 | 
						|
    # delete_wlan
 | 
						|
    # TODO (there were two in tx_power the logs)
 | 
						|
    # need to check if wlan present
 | 
						|
    # delete wlan
 | 
						|
    cs.config_no_wlan()
 | 
						|
 | 
						|
    # Create open
 | 
						|
    # cs.wlan = 'open-wlan_3'
 | 
						|
    # cs.wlanID = '3'
 | 
						|
    # cs.wlanSSID = 'open-wlan_3'
 | 
						|
 | 
						|
    # create_wlan  open
 | 
						|
    # cs.wlan = 'open-wlan'
 | 
						|
    # cs.wlanID = '1'
 | 
						|
    # cs.wlanSSID = 'open-wlan'
 | 
						|
    # cs.config_wlan_open()
 | 
						|
 | 
						|
    # create_wlan_wpa2
 | 
						|
    cs.config_wlan_wpa2()
 | 
						|
 | 
						|
    # create_wlan_wpa3
 | 
						|
    # cs.wlan = 'wpa3_wlan_4'
 | 
						|
    # cs.wlanID = '4'
 | 
						|
    # cs.wlanSSID = 'wpa3_wlan_4'
 | 
						|
    # cs.security_key = 'hello123'
 | 
						|
    # cs.config_wlan_wpa3()
 | 
						|
 | 
						|
    # wireless_tag_policy
 | 
						|
    cs.config_wireless_tag_policy_and_policy_profile()
 | 
						|
    # enable_wlan
 | 
						|
    cs.config_enable_wlan_send_no_shutdown()
 | 
						|
    # enable_network_5ghz
 | 
						|
    cs.config_no_ap_dot11_5ghz_shutdown()
 | 
						|
    # enable_network_24ghz
 | 
						|
    # cs.config_no_ap_dot11_5ghz_shutdown()
 | 
						|
    # enable
 | 
						|
    cs.config_ap_no_dot11_5ghz_shutdown()
 | 
						|
    # config_ap_no_dot11_24ghz_shutdown
 | 
						|
    # advanced
 | 
						|
    cs.show_ap_dot11_5gz_summary()
 | 
						|
    # cs.show_ap_dot11_24gz_summary()
 | 
						|
    # show_wlan_summary
 | 
						|
    cs.show_wlan_summary()
 | 
						|
 | 
						|
 | 
						|
def test_config_tx_power_5g_open(cs):
 | 
						|
 | 
						|
    logger.info("test_config_tx_power_open")
 | 
						|
    # configure once at the top
 | 
						|
    cs.wlan = 'open-wlan-15'
 | 
						|
    cs.wlanID = '15'
 | 
						|
    cs.wlanSSID = 'open-wlan-15'
 | 
						|
    cs.config_wlan_open()
 | 
						|
 | 
						|
    # wireless_tag_policy
 | 
						|
    cs.tag_policy = 'RM204-TB1'
 | 
						|
    cs.policy_profile = 'default-policy-profile'
 | 
						|
    cs.config_wireless_tag_policy_and_policy_profile()
 | 
						|
 | 
						|
    cs.tx_power = '1'
 | 
						|
    cs.channel = '100'
 | 
						|
    cs.bandwidth = '40'
 | 
						|
 | 
						|
    # no_logging_console
 | 
						|
    cs.no_logging_console()
 | 
						|
    # line_console_0
 | 
						|
    cs.line_console_0()
 | 
						|
    # summary
 | 
						|
    cs.show_ap_summary()
 | 
						|
 | 
						|
    # disable
 | 
						|
    cs.show_ap_dot11_5gz_shutdown()
 | 
						|
    cs.show_ap_dot11_24gz_shutdown()
 | 
						|
 | 
						|
    # disable_wlan only need wlan
 | 
						|
    cs.wlan_shutdown()
 | 
						|
    # disable_network_5ghz
 | 
						|
    cs.ap_dot11_5ghz_shutdown()
 | 
						|
    # disable_network_24ghz
 | 
						|
    cs.ap_dot11_24ghz_shutdown()
 | 
						|
    # manual
 | 
						|
    cs.ap_dot11_5ghz_radio_role_manual_client_serving()
 | 
						|
    cs.ap_dot11_24ghz_radio_role_manual_client_serving()
 | 
						|
 | 
						|
    # Configuration for 5g
 | 
						|
 | 
						|
    # txPower
 | 
						|
    cs.config_dot11_5ghz_tx_power()
 | 
						|
    # bandwidth (to set to 20 if channel change does not support)
 | 
						|
    cs.bandwidth = '20'
 | 
						|
    cs.config_dot11_5ghz_channel_width()
 | 
						|
    # channel
 | 
						|
    cs.config_dot11_5ghz_channel()
 | 
						|
    # bandwidth
 | 
						|
    cs.bandwidth = '40'
 | 
						|
    cs.config_dot11_5ghz_channel_width()
 | 
						|
    # show_wlan_summary
 | 
						|
    cs.show_wlan_summary()
 | 
						|
 | 
						|
    # delete_wlan
 | 
						|
    # TODO (there were two in tx_power the logs)
 | 
						|
    # need to check if wlan present
 | 
						|
    # delete wlan
 | 
						|
    # cs.config_no_wlan()
 | 
						|
 | 
						|
    # create_wlan  open
 | 
						|
 | 
						|
    # enable_wlan
 | 
						|
    cs.config_enable_wlan_send_no_shutdown()
 | 
						|
    # enable_network_5ghz
 | 
						|
    cs.config_no_ap_dot11_5ghz_shutdown()
 | 
						|
    # enable_network_24ghz
 | 
						|
    cs.config_no_ap_dot11_24ghz_shutdown()
 | 
						|
    # enable
 | 
						|
    cs.config_ap_no_dot11_5ghz_shutdown()
 | 
						|
    cs.config_ap_no_dot11_24ghz_shutdown()
 | 
						|
    # config_ap_no_dot11_24ghz_shutdown
 | 
						|
    # advanced
 | 
						|
    cs.show_ap_dot11_5gz_summary()
 | 
						|
    cs.show_ap_dot11_24gz_summary()
 | 
						|
    # show_wlan_summary
 | 
						|
    cs.show_wlan_summary()
 | 
						|
 | 
						|
 | 
						|
def test_config_tx_power_wpa2(cs):
 | 
						|
 | 
						|
    logger.info("sample_test_tx_power_sequence")
 | 
						|
 | 
						|
    # no_logging_console
 | 
						|
    cs.no_logging_console()
 | 
						|
    # line_console_0
 | 
						|
    cs.line_console_0()
 | 
						|
    # summary
 | 
						|
    cs.show_ap_summary()
 | 
						|
 | 
						|
    # disable
 | 
						|
    cs.show_ap_dot11_5gz_shutdown()
 | 
						|
    cs.show_ap_dot11_24gz_shutdown()
 | 
						|
    # This needs to be here to disable and delete
 | 
						|
    cs.wlan = 'wpa2_wlan_3'
 | 
						|
 | 
						|
    # disable_wlan
 | 
						|
    cs.wlan_shutdown()
 | 
						|
    # disable_network_5ghz
 | 
						|
    cs.ap_dot11_5ghz_shutdown()
 | 
						|
    # disable_network_24ghz
 | 
						|
    cs.ap_dot11_24ghz_shutdown()
 | 
						|
    # manual
 | 
						|
    cs.ap_dot11_5ghz_radio_role_manual_client_serving()
 | 
						|
    # cs.ap_dot11_24ghz_radio_role_manual_client_serving()
 | 
						|
    cs.tx_power = '1'
 | 
						|
 | 
						|
    # Configuration for 5g
 | 
						|
 | 
						|
    # txPower
 | 
						|
    cs.config_dot11_5ghz_tx_power()
 | 
						|
    cs.bandwidth = '20'
 | 
						|
    # bandwidth (to set to 20 if channel change does not support)
 | 
						|
    cs.config_dot11_5ghz_channel_width()
 | 
						|
    cs.channel = '100'
 | 
						|
    # channel
 | 
						|
    cs.config_dot11_5ghz_channel()
 | 
						|
    cs.bandwidth = '40'
 | 
						|
    # bandwidth
 | 
						|
    cs.config_dot11_5ghz_channel_width()
 | 
						|
    # show_wlan_summary
 | 
						|
    cs.show_wlan_summary()
 | 
						|
 | 
						|
    # delete_wlan
 | 
						|
    # TODO (there were two in tx_power the logs)
 | 
						|
    # need to check if wlan present
 | 
						|
    cs.wlan = 'wpa2_wlan_3'
 | 
						|
 | 
						|
    # delete wlan
 | 
						|
    cs.config_no_wlan()
 | 
						|
 | 
						|
    # create_wlan_wpa2
 | 
						|
    cs.wlan = 'wpa2_wlan_3'
 | 
						|
    cs.wlanID = '3'
 | 
						|
    cs.wlanSSID = 'wpa2_wlan_3'
 | 
						|
    cs.security_key = 'hello123'
 | 
						|
    cs.config_wlan_wpa2()
 | 
						|
 | 
						|
    # wireless_tag_policy
 | 
						|
    cs.tag_policy = 'RM204-TB1'
 | 
						|
    cs.policy_profile = 'default-policy-profile'
 | 
						|
    cs.config_wireless_tag_policy_and_policy_profile()
 | 
						|
    # enable_wlan
 | 
						|
    cs.config_enable_wlan_send_no_shutdown()
 | 
						|
    # enable_network_5ghz
 | 
						|
    cs.config_no_ap_dot11_5ghz_shutdown()
 | 
						|
    # enable_network_24ghz
 | 
						|
    # cs.config_no_ap_dot11_24ghz_shutdown()
 | 
						|
    # enable
 | 
						|
    cs.config_ap_no_dot11_5ghz_shutdown()
 | 
						|
    # config_ap_no_dot11_24ghz_shutdown
 | 
						|
    # advanced
 | 
						|
    cs.show_ap_dot11_5gz_summary()
 | 
						|
    # cs.show_ap_dot11_24gz_summary()
 | 
						|
    # show_wlan_summary
 | 
						|
    cs.show_wlan_summary()
 | 
						|
 | 
						|
 | 
						|
# unit test for 9800 3504 controller
 | 
						|
def main():
 | 
						|
    # arguments
 | 
						|
    parser = argparse.ArgumentParser(
 | 
						|
        prog='cc_9800_3504.py',
 | 
						|
        formatter_class=argparse.RawTextHelpFormatter,
 | 
						|
        epilog='''\
 | 
						|
            cc_9800_3504.py: wrapper for interface to a controller library
 | 
						|
            ''',
 | 
						|
        description='''\
 | 
						|
NAME: cc_module_9800_3504.py
 | 
						|
 | 
						|
PURPOSE:
 | 
						|
controller module for communicating to a cisco 9800 or 3504 controller
 | 
						|
This module can be dynamically imported
 | 
						|
 | 
						|
SETUP:
 | 
						|
None
 | 
						|
 | 
						|
EXAMPLE:
 | 
						|
./cc_module_9800_3504.py --scheme ssh --dest localhost --port 8887 --user admin --passwd Cisco123 --ap APA453.0E7B.CF9C --series 9800 --prompt "WLC1" --timeout 10 --band '5g'
 | 
						|
 | 
						|
COPYWRITE
 | 
						|
    Copyright 2021 Candela Technologies Inc
 | 
						|
    License: Free to distribute and modify. LANforge systems must be licensed.
 | 
						|
 | 
						|
INCLUDE_IN_README
 | 
						|
---------
 | 
						|
            ''')
 | 
						|
 | 
						|
# sample command
 | 
						|
# ./cc_module_9800_3504.py --scheme ssh --dest localhost --port 8887 --user admin --passwd Cisco123 --ap APA453.0E7B.CF9C --series 9800 --prompt "WLC1" --timeout 10 --band '5g'
 | 
						|
    parser.add_argument("--dest", type=str, help="address of the cisco controller", required=True)
 | 
						|
    parser.add_argument("--port", type=str, help="control port on the controller", required=True)
 | 
						|
    parser.add_argument("--user", type=str, help="credential login/username", required=True)
 | 
						|
    parser.add_argument("--passwd", type=str, help="credential password", required=True)
 | 
						|
    parser.add_argument("--ap", type=str, help="ap name APA453.0E7B.CF9C", required=True)
 | 
						|
    parser.add_argument("--prompt", type=str, help="controller prompt", required=True)
 | 
						|
    parser.add_argument("--band", type=str, help="band to test 24g, 5g, 6g", required=True)
 | 
						|
    parser.add_argument("--series", type=str, help="controller series", choices=["9800", "3504"], required=True)
 | 
						|
    parser.add_argument("--scheme", type=str, choices=["serial", "ssh", "telnet"], help="Connect via serial, ssh or telnet")
 | 
						|
    parser.add_argument("--timeout", type=str, help="timeout value", default=3)
 | 
						|
 | 
						|
    args = parser.parse_args()
 | 
						|
 | 
						|
    # set up logger , do not delete
 | 
						|
    logger_config = lf_logger_config.lf_logger_config()
 | 
						|
 | 
						|
    cs = create_controller_series_object(
 | 
						|
        scheme=args.scheme,
 | 
						|
        dest=args.dest,
 | 
						|
        user=args.user,
 | 
						|
        passwd=args.passwd,
 | 
						|
        prompt=args.prompt,
 | 
						|
        series=args.series,
 | 
						|
        ap=args.ap,
 | 
						|
        port=args.port,
 | 
						|
        band=args.band,
 | 
						|
        timeout=args.timeout)
 | 
						|
 | 
						|
    # TODO add ability to select tests
 | 
						|
    # cs.show_ap_summary()
 | 
						|
    summary = cs.show_ap_wlan_summary()
 | 
						|
    logger.info(summary)
 | 
						|
 | 
						|
    # sample to dump status
 | 
						|
    # sample_test_dump_status(cs=cs)
 | 
						|
 | 
						|
    # test sequences used by tx_power
 | 
						|
    # sample_test_tx_power_sequence(cs=cs)
 | 
						|
 | 
						|
    # test_config_tx_power_5g_open(cs=cs)
 | 
						|
 | 
						|
    # test_config_tx_power_wpa2(cs=cs)
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    main()
 |