mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-01 03:07:56 +00:00
13773 lines
636 KiB
Python
13773 lines
636 KiB
Python
#!/usr/bin/env python3
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Generated by LANforge JsonApiPythonGenerator, Thu Aug 05 18:19:37 PDT 2021
|
|
- - WORK IN PROGRESS - -
|
|
The API this library provides is actively being changed.
|
|
This file expects to live in py-json/LANforge directory.
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
import keyword
|
|
import pprint
|
|
import time
|
|
from enum import Enum
|
|
from enum import IntFlag
|
|
from . import LFRequest
|
|
from .lfcli_base import LFCliBase
|
|
|
|
class LFJsonGet(LFCliBase):
|
|
def __init__(self, lfclient_host='localhost',
|
|
lfclient_port=8080,
|
|
debug_=False,
|
|
_exit_on_error=False,
|
|
_exit_on_fail=False,
|
|
_proxy_str=None,
|
|
_capture_signal_list=()
|
|
):
|
|
super().__init__(_lfjson_host=lfclient_host,
|
|
_lfjson_port=lfclient_port,
|
|
_debug=debug_,
|
|
_exit_on_error=_exit_on_error,
|
|
_exit_on_fail=_exit_on_fail,
|
|
_proxy_str=_proxy_str,
|
|
_capture_signal_list=_capture_signal_list)
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Extract fields from this response using the expected keys:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
def extractValues(self, response=None, singular_key=None, plural_key=None):
|
|
if (singular_key is None) or (plural_key is None) or (not singular_key) or (not plural_key):
|
|
raise ValueError("extractValues wants non-empty response, singular_key and plural_key")
|
|
|
|
if (singular_key in response) and (not response[ singular_key ]):
|
|
return []
|
|
elif ( singular_key in response) and ( type(response[ singular_key ]) is dict):
|
|
return [ response[ singular_key ] ]
|
|
elif ( plural_key in response) and (not response[ plural_key ]):
|
|
return []
|
|
else:
|
|
return response[ plural_key ]
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <ATTENUATOR> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/attenuator/
|
|
/attenuator/$shelf_id
|
|
/attenuator/$shelf_id/$resource_id
|
|
/attenuator/$shelf_id/$resource_id/$port_id
|
|
/attenuators/
|
|
/attenuators/$shelf_id
|
|
/attenuators/$shelf_id/$resource_id
|
|
/attenuators/$shelf_id/$resource_id/$port_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
entity+id, module+1, module+2, module+3, module+4, module+5, module+6, module+7,
|
|
module+8, name, script, state, temperature
|
|
Example URL: /attenuator?fields=entity+id,module+1
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_attenuator( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'entity id': X
|
|
'module 1': X
|
|
'module 2': X
|
|
'module 3': X
|
|
'module 4': X
|
|
'module 5': X
|
|
'module 6': X
|
|
'module 7': X
|
|
'module 8': X
|
|
'name': X
|
|
'script': X
|
|
'state': X
|
|
'temperature': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_attenuator(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/attenuator"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="attenuator",
|
|
plural_key="attenuators")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CHAMBER> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/chamber/
|
|
/chamber/$chamber_name
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
chamber, chamber+connections, chamber+resources, chamber+type, duts, entity+id,
|
|
flags, hide, isolation, marked, open, reported+rotation+%28deg%29, reported+rpm,
|
|
reported+tilt+%28deg%29, resource, rotation+%28deg%29, rpm, smas, tilt+%28deg%29, turntable,
|
|
turntable+type, virtual
|
|
Example URL: /chamber?fields=chamber,chamber+connections
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_chamber( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'chamber': X
|
|
'chamber connections': X
|
|
'chamber resources': X
|
|
'chamber type': X
|
|
'duts': X
|
|
'entity id': X
|
|
'flags': X
|
|
'hide': X
|
|
'isolation': X
|
|
'marked': X
|
|
'open': X
|
|
'reported rotation (deg)': X
|
|
'reported rpm ': X
|
|
'reported tilt (deg)': X
|
|
'resource': X
|
|
'rotation (deg)': X
|
|
'rpm': X
|
|
'smas': X
|
|
'tilt (deg)': X
|
|
'turntable': X
|
|
'turntable type': X
|
|
'virtual': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_chamber(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/chamber"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="chamber",
|
|
plural_key="chambers")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CONTROL> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/control/$command
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
na
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_control( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'na': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_control(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/control"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="",
|
|
plural_key="")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CX> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/cx/
|
|
/cx/$cx_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
avg+rtt, bps+rx+a, bps+rx+b, drop+pkts+a, drop+pkts+b, eid, endpoints+%28a%C2%A0%E2%86%94%C2%A0b%29,
|
|
entity+id, name, pkt+rx+a, pkt+rx+b, rpt+timer, rx+drop+%25+a, rx+drop+%25+b,
|
|
state, type
|
|
Example URL: /cx?fields=avg+rtt,bps+rx+a
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_cx( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'avg rtt': X
|
|
'bps rx a': X
|
|
'bps rx b': X
|
|
'drop pkts a': X
|
|
'drop pkts b': X
|
|
'eid': X
|
|
'endpoints (a ↔ b)': X
|
|
'entity id': X
|
|
'name': X
|
|
'pkt rx a': X
|
|
'pkt rx b': X
|
|
'rpt timer': X
|
|
'rx drop % a': X
|
|
'rx drop % b': X
|
|
'state': X
|
|
'type': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_cx(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/cx"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="",
|
|
plural_key="")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <DUT> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/dut/
|
|
/dut/$name
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
api+version, bssid-1, bssid-2, bssid-3, bssid-4, bssid-5, bssid-6, bssid-7,
|
|
bssid-8, dut, eap-id, entity+id, hw+info, image+file, lan, mgt+ip, model+number,
|
|
notes, num+ant+radio+1, num+ant+radio+2, num+ant+radio+3, password-1, password-2,
|
|
password-3, password-4, password-5, password-6, password-7, password-8, serial+number,
|
|
serial+port, ssid-1, ssid-2, ssid-3, ssid-4, ssid-5, ssid-6, ssid-7, ssid-8,
|
|
sw+info, wan
|
|
Example URL: /dut?fields=api+version,bssid-1
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_dut( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'api version': X
|
|
'bssid-1': X
|
|
'bssid-2': X
|
|
'bssid-3': X
|
|
'bssid-4': X
|
|
'bssid-5': X
|
|
'bssid-6': X
|
|
'bssid-7': X
|
|
'bssid-8': X
|
|
'dut': X
|
|
'eap-id': X
|
|
'entity id': X
|
|
'hw info': X
|
|
'image file': X
|
|
'lan': X
|
|
'mgt ip': X
|
|
'model number': X
|
|
'notes': X
|
|
'num ant radio 1': X
|
|
'num ant radio 2': X
|
|
'num ant radio 3': X
|
|
'password-1': X
|
|
'password-2': X
|
|
'password-3': X
|
|
'password-4': X
|
|
'password-5': X
|
|
'password-6': X
|
|
'password-7': X
|
|
'password-8': X
|
|
'serial number': X
|
|
'serial port': X
|
|
'ssid-1': X
|
|
'ssid-2': X
|
|
'ssid-3': X
|
|
'ssid-4': X
|
|
'ssid-5': X
|
|
'ssid-6': X
|
|
'ssid-7': X
|
|
'ssid-8': X
|
|
'sw info': X
|
|
'wan': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_dut(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/dut"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="dut",
|
|
plural_key="duts")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <ENDP> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/endp/
|
|
/endp/$endp_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
1st+rx, a%2Fb, bursty, crc+fail, cwnd, cx+active, cx+estab, cx+estab%2Fs, cx+to,
|
|
delay, destination+addr, dropped, dup+pkts, eid, elapsed, entity+id, jitter,
|
|
max+pdu, max+rate, min+pdu, min+rate, mng, name, ooo+pkts, pattern, pdu%2Fs+rx,
|
|
pdu%2Fs+tx, pps+rx+ll, pps+tx+ll, rcv+buf, replays, run, rx+ber, rx+bytes,
|
|
rx+drop+%25, rx+dup+%25, rx+ooo+%25, rx+pdus, rx+pkts+ll, rx+rate, rx+rate+%281%C2%A0min%29,
|
|
rx+rate+%28last%29, rx+rate+ll, rx+wrong+dev, script, send+buf, source+addr,
|
|
tcp+mss, tcp+rtx, tx+bytes, tx+pdus, tx+pkts+ll, tx+rate, tx+rate+%281%C2%A0min%29,
|
|
tx+rate+%28last%29, tx+rate+ll # hidden columns:
|
|
drop-count-5m, latency-5m, rt-latency-5m, rx-silence-5m
|
|
|
|
Example URL: /endp?fields=1st+rx,a%2Fb
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_endp( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'1st rx': X
|
|
'a/b': X
|
|
'bursty': X
|
|
'crc fail': X
|
|
'cwnd': X
|
|
'cx active': X
|
|
'cx estab': X
|
|
'cx estab/s': X
|
|
'cx to': X
|
|
'delay': X
|
|
'destination addr': X
|
|
'dropped': X
|
|
'dup pkts': X
|
|
'eid': X
|
|
'elapsed': X
|
|
'entity id': X
|
|
'jitter': X
|
|
'max pdu': X
|
|
'max rate': X
|
|
'min pdu': X
|
|
'min rate': X
|
|
'mng': X
|
|
'name': X
|
|
'ooo pkts': X
|
|
'pattern': X
|
|
'pdu/s rx': X
|
|
'pdu/s tx': X
|
|
'pps rx ll': X
|
|
'pps tx ll': X
|
|
'rcv buf': X
|
|
'replays': X
|
|
'run': X
|
|
'rx ber': X
|
|
'rx bytes': X
|
|
'rx drop %': X
|
|
'rx dup %': X
|
|
'rx ooo %': X
|
|
'rx pdus': X
|
|
'rx pkts ll': X
|
|
'rx rate': X
|
|
'rx rate (1 min)': X
|
|
'rx rate (last)': X
|
|
'rx rate ll': X
|
|
'rx wrong dev': X
|
|
'script': X
|
|
'send buf': X
|
|
'source addr': X
|
|
'tcp mss': X
|
|
'tcp rtx': X
|
|
'tx bytes': X
|
|
'tx pdus': X
|
|
'tx pkts ll': X
|
|
'tx rate': X
|
|
'tx rate (1 min)': X
|
|
'tx rate (last)': X
|
|
'tx rate ll': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_endp(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/endp"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="endpoint",
|
|
plural_key="endpoint")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <EVENTS> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/events/
|
|
/events/$event_id
|
|
/events/before/$event_id
|
|
/events/between/$start_event_id/$end_event_id
|
|
/events/last/$event_count
|
|
/events/since/$event_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
eid, entity+id, event, event+description, id, name, priority, time-stamp,
|
|
type
|
|
Example URL: /events?fields=eid,entity+id
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_events( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'eid': X
|
|
'entity id': X
|
|
'event': X
|
|
'event description': X
|
|
'id': X
|
|
'name': X
|
|
'priority': X
|
|
'time-stamp': X
|
|
'type': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_events(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/events"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="alert",
|
|
plural_key="alerts")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <FILEIO> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/fileio/
|
|
/fileio/$endp_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
buf-rd, buf-wr, bytes-rd, bytes-wr, crc+fail, eid, entity+id, files+%23, files-read,
|
|
files-wr, io+fail, max-file-sz, max-rd-bps, max-rw-sz, max-wr-bps, min-file-sz,
|
|
min-rd-bps, min-rw-sz, min-wr-bps, name, read-bps, rpt+timer, rx-bps-20s,
|
|
status, tx-bps-20s, type, write-bps
|
|
Example URL: /fileio?fields=buf-rd,buf-wr
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_fileio( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'buf-rd': X
|
|
'buf-wr': X
|
|
'bytes-rd': X
|
|
'bytes-wr': X
|
|
'crc fail': X
|
|
'eid': X
|
|
'entity id': X
|
|
'files #': X
|
|
'files-read': X
|
|
'files-wr': X
|
|
'io fail': X
|
|
'max-file-sz': X
|
|
'max-rd-bps': X
|
|
'max-rw-sz': X
|
|
'max-wr-bps': X
|
|
'min-file-sz': X
|
|
'min-rd-bps': X
|
|
'min-rw-sz': X
|
|
'min-wr-bps': X
|
|
'name': X
|
|
'read-bps': X
|
|
'rpt timer': X
|
|
'rx-bps-20s': X
|
|
'status': X
|
|
'tx-bps-20s': X
|
|
'type': X
|
|
'write-bps': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_fileio(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/fileio"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="endpoint",
|
|
plural_key="endpoint")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <GENERIC> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/generic/
|
|
/generic/$endp_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
bps+rx, bps+tx, command, dropped, eid, elapsed, entity+id, last+results,
|
|
name, pdu%2Fs+rx, pdu%2Fs+tx, rpt+timer, rpt%23, rx+bytes, rx+pkts, status, tx+bytes,
|
|
tx+pkts, type
|
|
Example URL: /generic?fields=bps+rx,bps+tx
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_generic( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'bps rx': X
|
|
'bps tx': X
|
|
'command': X
|
|
'dropped': X
|
|
'eid': X
|
|
'elapsed': X
|
|
'entity id': X
|
|
'last results': X
|
|
'name': X
|
|
'pdu/s rx': X
|
|
'pdu/s tx': X
|
|
'rpt timer': X
|
|
'rpt#': X
|
|
'rx bytes': X
|
|
'rx pkts': X
|
|
'status': X
|
|
'tx bytes': X
|
|
'tx pkts': X
|
|
'type': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_generic(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/generic"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="endpoint",
|
|
plural_key="endpoints")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <GUI-CLI> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/gui-cli/
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
na
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_gui_cli( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'na': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_gui_cli(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/gui-cli"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="",
|
|
plural_key="")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <LAYER4> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/layer4/
|
|
/layer4/$endp_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
%21conn, acc.+denied, bad-proto, bad-url, bytes-rd, bytes-wr, dns-avg, dns-max,
|
|
dns-min, eid, elapsed, entity+id, fb-avg, fb-max, fb-min, ftp-host, ftp-port,
|
|
ftp-stor, http-p, http-r, http-t, login-denied, name, nf+%284xx%29, other-err,
|
|
read, redir, rpt+timer, rslv-h, rslv-p, rx+rate, rx+rate+%281%C2%A0min%29, status,
|
|
timeout, total-err, total-urls, tx+rate, tx+rate+%281%C2%A0min%29, type, uc-avg,
|
|
uc-max, uc-min, urls%2Fs, write # hidden columns:
|
|
rpt-time
|
|
|
|
Example URL: /layer4?fields=%21conn,acc.+denied
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_layer4( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'!conn': X
|
|
'acc. denied': X
|
|
'bad-proto': X
|
|
'bad-url': X
|
|
'bytes-rd': X
|
|
'bytes-wr': X
|
|
'dns-avg': X
|
|
'dns-max': X
|
|
'dns-min': X
|
|
'eid': X
|
|
'elapsed': X
|
|
'entity id': X
|
|
'fb-avg': X
|
|
'fb-max': X
|
|
'fb-min': X
|
|
'ftp-host': X
|
|
'ftp-port': X
|
|
'ftp-stor': X
|
|
'http-p': X
|
|
'http-r': X
|
|
'http-t': X
|
|
'login-denied': X
|
|
'name': X
|
|
'nf (4xx)': X
|
|
'other-err': X
|
|
'read': X
|
|
'redir': X
|
|
'rpt timer': X
|
|
'rslv-h': X
|
|
'rslv-p': X
|
|
'rx rate': X
|
|
'rx rate (1 min)': X
|
|
'status': X
|
|
'timeout': X
|
|
'total-err': X
|
|
'total-urls': X
|
|
'tx rate': X
|
|
'tx rate (1 min)': X
|
|
'type': X
|
|
'uc-avg': X
|
|
'uc-max': X
|
|
'uc-min': X
|
|
'urls/s': X
|
|
'write': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_layer4(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/layer4"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="endpoint",
|
|
plural_key="endpoint")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <PORT> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/port/
|
|
/port/$shelf_id
|
|
/port/$shelf_id/$resource_id
|
|
/port/$shelf_id/$resource_id/$port_id
|
|
/ports/
|
|
/ports/$shelf_id
|
|
/ports/$shelf_id/$resource_id
|
|
/ports/$shelf_id/$resource_id/$port_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
4way+time+%28us%29, activity, alias, anqp+time+%28us%29, ap, beacon, bps+rx, bps+rx+ll,
|
|
bps+tx, bps+tx+ll, bytes+rx+ll, bytes+tx+ll, channel, collisions, connections,
|
|
crypt, cx+ago, cx+time+%28us%29, device, dhcp+%28ms%29, down, entity+id, gateway+ip,
|
|
ip, ipv6+address, ipv6+gateway, key%2Fphrase, login-fail, login-ok, logout-fail,
|
|
logout-ok, mac, mask, misc, mode, mtu, no+cx+%28us%29, noise, parent+dev, phantom,
|
|
port, port+type, pps+rx, pps+tx, qlen, reset, retry+failed, rx+bytes, rx+crc,
|
|
rx+drop, rx+errors, rx+fifo, rx+frame, rx+length, rx+miss, rx+over, rx+pkts,
|
|
rx-rate, sec, signal, ssid, status, time-stamp, tx+abort, tx+bytes, tx+crr,
|
|
tx+errors, tx+fifo, tx+hb, tx+pkts, tx+wind, tx-failed+%25, tx-rate, wifi+retries,
|
|
# hidden columns:
|
|
beacon_rx_signal, port_cur_flags_h, port_cur_flags_l, port_supported_flags_h,
|
|
port_supported_flags_l, resource, rx_multicast, tx_dropped
|
|
|
|
Example URL: /port?fields=4way+time+%28us%29,activity
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_port( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'4way time (us)': X
|
|
'activity': X
|
|
'alias': X
|
|
'anqp time (us)': X
|
|
'ap': X
|
|
'beacon': X
|
|
'bps rx': X
|
|
'bps rx ll': X
|
|
'bps tx': X
|
|
'bps tx ll': X
|
|
'bytes rx ll': X
|
|
'bytes tx ll': X
|
|
'channel': X
|
|
'collisions': X
|
|
'connections': X
|
|
'crypt': X
|
|
'cx ago': X
|
|
'cx time (us)': X
|
|
'device': X
|
|
'dhcp (ms)': X
|
|
'down': X
|
|
'entity id': X
|
|
'gateway ip': X
|
|
'ip': X
|
|
'ipv6 address': X
|
|
'ipv6 gateway': X
|
|
'key/phrase': X
|
|
'login-fail': X
|
|
'login-ok': X
|
|
'logout-fail': X
|
|
'logout-ok': X
|
|
'mac': X
|
|
'mask': X
|
|
'misc': X
|
|
'mode': X
|
|
'mtu': X
|
|
'no cx (us)': X
|
|
'noise': X
|
|
'parent dev': X
|
|
'phantom': X
|
|
'port': X
|
|
'port type': X
|
|
'pps rx': X
|
|
'pps tx': X
|
|
'qlen': X
|
|
'reset': X
|
|
'retry failed': X
|
|
'rx bytes': X
|
|
'rx crc': X
|
|
'rx drop': X
|
|
'rx errors': X
|
|
'rx fifo': X
|
|
'rx frame': X
|
|
'rx length': X
|
|
'rx miss': X
|
|
'rx over': X
|
|
'rx pkts': X
|
|
'rx-rate': X
|
|
'sec': X
|
|
'signal': X
|
|
'ssid': X
|
|
'status': X
|
|
'time-stamp': X
|
|
'tx abort': X
|
|
'tx bytes': X
|
|
'tx crr': X
|
|
'tx errors': X
|
|
'tx fifo': X
|
|
'tx hb': X
|
|
'tx pkts': X
|
|
'tx wind': X
|
|
'tx-failed %': X
|
|
'tx-rate': X
|
|
'wifi retries': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_port(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/port"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="interface",
|
|
plural_key="interfaces")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <QUIT> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/quit
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
na
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_quit( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'na': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_quit(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/quit"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="",
|
|
plural_key="")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <RADIOSTATUS> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/radiostatus/
|
|
/radiostatus/$eid
|
|
/radiostatus/$shelf_id/$resource_id/$port_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
_links, antenna, ap, capabilities, channel, country, driver, entity+id, firmware+version,
|
|
frag, frequency, max_sta, max_vap, max_vifs, monitors_down, monitors_up,
|
|
phantom, port, resource, rts, stations_down, stations_up, tx-power, vaps_down,
|
|
vaps_up, verbose+debug
|
|
Example URL: /radiostatus?fields=_links,antenna
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_radiostatus( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'_links': X
|
|
'antenna': X
|
|
'ap': X
|
|
'capabilities': X
|
|
'channel': X
|
|
'country': X
|
|
'driver': X
|
|
'entity id': X
|
|
'firmware version': X
|
|
'frag': X
|
|
'frequency': X
|
|
'max_sta': X
|
|
'max_vap': X
|
|
'max_vifs': X
|
|
'monitors_down': X
|
|
'monitors_up': X
|
|
'phantom': X
|
|
'port': X
|
|
'resource': X
|
|
'rts': X
|
|
'stations_down': X
|
|
'stations_up': X
|
|
'tx-power': X
|
|
'vaps_down': X
|
|
'vaps_up': X
|
|
'verbose debug': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_radiostatus(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/radiostatus"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="radio",
|
|
plural_key="radios")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <RESOURCE> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/resource/
|
|
/resource/$shelf_id
|
|
/resource/$shelf_id/$resource_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
bps-rx-3s, bps-tx-3s, cli-port, cpu, ctrl-ip, ctrl-port, eid, entity+id,
|
|
free+mem, free+swap, gps, hostname, hw+version, load, max+if-up, max+staged,
|
|
mem, phantom, ports, rx+bytes, shelf, sta+up, sw+version, swap, tx+bytes,
|
|
# hidden columns:
|
|
timestamp
|
|
|
|
Example URL: /resource?fields=bps-rx-3s,bps-tx-3s
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_resource( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'bps-rx-3s': X
|
|
'bps-tx-3s': X
|
|
'cli-port': X
|
|
'cpu': X
|
|
'ctrl-ip': X
|
|
'ctrl-port': X
|
|
'eid': X
|
|
'entity id': X
|
|
'free mem': X
|
|
'free swap': X
|
|
'gps': X
|
|
'hostname': X
|
|
'hw version': X
|
|
'load': X
|
|
'max if-up': X
|
|
'max staged': X
|
|
'mem': X
|
|
'phantom': X
|
|
'ports': X
|
|
'rx bytes': X
|
|
'shelf': X
|
|
'sta up': X
|
|
'sw version': X
|
|
'swap': X
|
|
'tx bytes': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_resource(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/resource"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="resource",
|
|
plural_key="resources")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <SCAN> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/scan-results/
|
|
/scan-results/$shelf_id/$resource_id/$port_id
|
|
/scan-results/$shelf_id/$resource_id/$port_id/$bssid
|
|
/scan/
|
|
/scan/$shelf_id/$resource_id/$port_id
|
|
/scan/$shelf_id/$resource_id/$port_id/$bssid
|
|
/scanresults/
|
|
/scanresults/$shelf_id/$resource_id/$port_id
|
|
/scanresults/$shelf_id/$resource_id/$port_id/$bssid
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
na
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_scan( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'na': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_scan(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/scan"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="scan-results",
|
|
plural_key="scan-results")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <STATIONS> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/stations/
|
|
/stations/$mac
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
ap, auth-for, capabilities, entity+id, idle, roam-duration, rx+bytes, rx+pkts,
|
|
rx+rate, signal, station+bssid, tx+bytes, tx+pkts, tx+rate, tx+retries, tx-failed,
|
|
|
|
Example URL: /stations?fields=ap,auth-for
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_stations( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'ap': X
|
|
'auth-for': X
|
|
'capabilities': X
|
|
'entity id': X
|
|
'idle': X
|
|
'roam-duration': X
|
|
'rx bytes': X
|
|
'rx pkts': X
|
|
'rx rate': X
|
|
'signal': X
|
|
'station bssid': X
|
|
'tx bytes': X
|
|
'tx pkts': X
|
|
'tx rate': X
|
|
'tx retries': X
|
|
'tx-failed': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_stations(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/stations"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="station",
|
|
plural_key="stations")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <STATUS-MSG> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/status-msg/
|
|
/status-msg/$session
|
|
/status-msg/$session/$id
|
|
/status-msg/$session/$id/ws-msg,...
|
|
/status-msg/$session/all
|
|
/status-msg/$session/this
|
|
/status-msg/sessions
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
na
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_status_msg( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'na': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_status_msg(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/status-msg"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="sessions/messages",
|
|
plural_key="sessions/messages")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <TEST-GROUP> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/test-group/
|
|
/test-group/$id
|
|
/test-groups/
|
|
/test-groups/$id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
cross+connects, entity+id, name, run, script
|
|
Example URL: /test-group?fields=cross+connects,entity+id
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_test_group( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'cross connects': X
|
|
'entity id': X
|
|
'name': X
|
|
'run': X
|
|
'script': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_test_group(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/test-group"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="groups",
|
|
plural_key="groups")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <TEXT> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/text/
|
|
/text/$group
|
|
/text/$group/$class
|
|
/text/$group/$class/$key
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
eid, name, text, type
|
|
Example URL: /text?fields=eid,name
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_text( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'eid': X
|
|
'name': X
|
|
'text': X
|
|
'type': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_text(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/text"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="record",
|
|
plural_key="records")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <VOIP> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/voip-endp/
|
|
/voip-endp/$endp_id
|
|
/voip-ep/
|
|
/voip-ep/$endp_id
|
|
/voip/
|
|
/voip/$cx_id
|
|
/voip_endp/
|
|
/voip_endp/$endp_id
|
|
/voip_ep/
|
|
/voip_ep/$endp_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
bps+rx+a, bps+rx+b, delay+a+%E2%86%90+b, delay+a+%E2%86%92+b, eid, endpoints+%28a%C2%A0%E2%86%94%C2%A0b%29,
|
|
entity+id, jitter+a+%E2%86%90+b, jitter+a+%E2%86%92+b, name, pkt+tx+a%C2%A0%E2%86%90%C2%A0b,
|
|
pkt+tx+a%C2%A0%E2%86%92%C2%A0b, rpt+timer, rx+drop+%25+a, rx+drop+%25+b, state,
|
|
type
|
|
Example URL: /voip?fields=bps+rx+a,bps+rx+b
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_voip( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'bps rx a': X
|
|
'bps rx b': X
|
|
'delay a ← b': X
|
|
'delay a → b': X
|
|
'eid': X
|
|
'endpoints (a ↔ b)': X
|
|
'entity id': X
|
|
'jitter a ← b': X
|
|
'jitter a → b': X
|
|
'name': X
|
|
'pkt tx a ← b': X
|
|
'pkt tx a → b': X
|
|
'rpt timer': X
|
|
'rx drop % a': X
|
|
'rx drop % b': X
|
|
'state': X
|
|
'type': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_voip(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/voip"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="connection",
|
|
plural_key="connections")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <VOIP-ENDP> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/voip-endp/
|
|
/voip-endp/$endp_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
calls+answered, calls+attempted, calls+completed, calls+failed, cf+404, cf+408,
|
|
cf+busy, cf+canceled, delay, destination+addr, dropped, dup+pkts, eid, elapsed,
|
|
entity+id, jb+cur, jb+over, jb+silence, jb+under, jitter, mng, name, ooo+pkts,
|
|
pesq, pesq+bklg, pesq%23, reg+state, rst, rtp+rtt, run, rx+bytes, rx+pkts,
|
|
source+addr, state, tx+bytes, tx+pkts, vad+pkts
|
|
Example URL: /voip-endp?fields=calls+answered,calls+attempted
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_voip_endp( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'calls answered': X
|
|
'calls attempted': X
|
|
'calls completed': X
|
|
'calls failed': X
|
|
'cf 404': X
|
|
'cf 408': X
|
|
'cf busy': X
|
|
'cf canceled': X
|
|
'delay': X
|
|
'destination addr': X
|
|
'dropped': X
|
|
'dup pkts': X
|
|
'eid': X
|
|
'elapsed': X
|
|
'entity id': X
|
|
'jb cur': X
|
|
'jb over': X
|
|
'jb silence': X
|
|
'jb under': X
|
|
'jitter': X
|
|
'mng': X
|
|
'name': X
|
|
'ooo pkts': X
|
|
'pesq': X
|
|
'pesq bklg': X
|
|
'pesq#': X
|
|
'reg state': X
|
|
'rst': X
|
|
'rtp rtt': X
|
|
'run': X
|
|
'rx bytes': X
|
|
'rx pkts': X
|
|
'source addr': X
|
|
'state': X
|
|
'tx bytes': X
|
|
'tx pkts': X
|
|
'vad pkts': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_voip_endp(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/voip-endp"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="endpoint",
|
|
plural_key="endpoints")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <VR> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/vr-cx/
|
|
/vr-cx/$shelf_id/$resource_id/$port_id
|
|
/vr/
|
|
/vr/$shelf_id/$resource_id
|
|
/vrcx/
|
|
/vrcx/$shelf_id/$resource_id/$port_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
active+ipv6+router, bgp+4byte+as, bgp+damping, bgp+peers, cluster+id, collision+domain+id,
|
|
confederation+id, damping+half+life, damping+max+suppress, damping+reuse,
|
|
damping+suppress, entity+id, height, ipv6+radv, is+bgp+reflector, local+as,
|
|
multicast+routing, name, netsmith-state, notes, pad, ripv2, router+connections,
|
|
router+id, router+id, use+confederation, use+existing+cfg, use+ospf, use+rip+dft+route,
|
|
using+bgp, using+olsr, width, x, xorp+sha, y
|
|
Example URL: /vr?fields=active+ipv6+router,bgp+4byte+as
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_vr( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'active ipv6 router': X
|
|
'bgp 4byte as': X
|
|
'bgp damping': X
|
|
'bgp peers': X
|
|
'cluster id': X
|
|
'collision domain id': X
|
|
'confederation id': X
|
|
'damping half life': X
|
|
'damping max suppress': X
|
|
'damping reuse': X
|
|
'damping suppress': X
|
|
'entity id': X
|
|
'height': X
|
|
'ipv6 radv': X
|
|
'is bgp reflector': X
|
|
'local as': X
|
|
'multicast routing': X
|
|
'name': X
|
|
'netsmith-state': X
|
|
'notes': X
|
|
'pad': X
|
|
'ripv2': X
|
|
'router connections': X
|
|
'router id': X
|
|
'router id': X
|
|
'use confederation ': X
|
|
'use existing cfg': X
|
|
'use ospf': X
|
|
'use rip dft route': X
|
|
'using bgp': X
|
|
'using olsr': X
|
|
'width': X
|
|
'x': X
|
|
'xorp sha': X
|
|
'y': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_vr(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/vr"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="virtual-routers",
|
|
plural_key="virtual-routers")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <VRCX> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/vrcx/
|
|
/vrcx/$shelf_id/$resource_id/$port_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
entity+id, height, interface+cost, local-a, local-b, netsmith-state, remote-a,
|
|
remote-b, resource, rip+metric, vrrp+id, vrrp+interval, vrrp+ip, vrrp+ip-prefix,
|
|
vrrp+priority, wan+link, width, x, y
|
|
Example URL: /vrcx?fields=entity+id,height
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_vrcx( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'entity id': X
|
|
'height': X
|
|
'interface cost': X
|
|
'local-a': X
|
|
'local-b': X
|
|
'netsmith-state': X
|
|
'remote-a': X
|
|
'remote-b': X
|
|
'resource': X
|
|
'rip metric': X
|
|
'vrrp id': X
|
|
'vrrp interval': X
|
|
'vrrp ip': X
|
|
'vrrp ip-prefix': X
|
|
'vrrp priority': X
|
|
'wan link': X
|
|
'width': X
|
|
'x': X
|
|
'y': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_vrcx(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/vrcx"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="router-connections",
|
|
plural_key="router-connections")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <WL> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/wl-endp/
|
|
/wl-endp/$wl_ep_id
|
|
/wl-ep/
|
|
/wl-ep/$wl_ep_id
|
|
/wl/
|
|
/wl/$wl_id
|
|
/wl_endp/
|
|
/wl_endp/$wl_ep_id
|
|
/wl_ep/
|
|
/wl_ep/$wl_ep_id
|
|
/wlendp/$wl_ep_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
bps+rx+a, bps+rx+b, eid, endpoints+%28a%C2%A0%E2%86%94%C2%A0b%29, entity+id, k-m,
|
|
name, pkt+tx+a%C2%A0%E2%86%90%C2%A0b, pkt+tx+a%C2%A0%E2%86%92%C2%A0b, rpt+timer,
|
|
state
|
|
Example URL: /wl?fields=bps+rx+a,bps+rx+b
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_wl( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'bps rx a': X
|
|
'bps rx b': X
|
|
'eid': X
|
|
'endpoints (a ↔ b)': X
|
|
'entity id': X
|
|
'k-m': X
|
|
'name': X
|
|
'pkt tx a ← b': X
|
|
'pkt tx a → b': X
|
|
'rpt timer': X
|
|
'state': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_wl(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/wl"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="",
|
|
plural_key="")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <WL-ENDP> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/wl-endp/
|
|
/wl-endp/$wl_ep_id
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
buffer, corrupt+1, corrupt+2, corrupt+3, corrupt+4, corrupt+5, corrupt+6,
|
|
delay, dropfreq+%25, dropped, dup+pkts, dupfreq+%25, eid, elapsed, extrabuf,
|
|
failed-late, jitfreq+%25, max+rate, maxjitter, maxlate, name, ooo+pkts, qdisc,
|
|
reordfrq+%25, run, rx+bytes, rx+pkts, script, serdelay, tx+bytes, tx+drop+%25,
|
|
tx+pkts, tx+rate, tx-failed, wps
|
|
Example URL: /wl-endp?fields=buffer,corrupt+1
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_wl_endp( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'buffer': X
|
|
'corrupt 1': X
|
|
'corrupt 2': X
|
|
'corrupt 3': X
|
|
'corrupt 4': X
|
|
'corrupt 5': X
|
|
'corrupt 6': X
|
|
'delay': X
|
|
'dropfreq %': X
|
|
'dropped': X
|
|
'dup pkts': X
|
|
'dupfreq %': X
|
|
'eid': X
|
|
'elapsed': X
|
|
'extrabuf': X
|
|
'failed-late': X
|
|
'jitfreq %': X
|
|
'max rate': X
|
|
'maxjitter': X
|
|
'maxlate': X
|
|
'name': X
|
|
'ooo pkts': X
|
|
'qdisc': X
|
|
'reordfrq %': X
|
|
'run': X
|
|
'rx bytes': X
|
|
'rx pkts': X
|
|
'script': X
|
|
'serdelay': X
|
|
'tx bytes': X
|
|
'tx drop %': X
|
|
'tx pkts': X
|
|
'tx rate': X
|
|
'tx-failed': X
|
|
'wps': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_wl_endp(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/wl-endp"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="endpoint",
|
|
plural_key="endpoint")
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <WS-MSG> type requests
|
|
|
|
...examples how to call method(s) here...
|
|
Request one of these URLs:
|
|
/ws-msg/
|
|
/ws-msg/$sessionid
|
|
|
|
When requesting specific column names, they need to be URL Encoded.
|
|
na
|
|
|
|
Example py-json call:
|
|
record = LFJsonGet.get_ws_msg( eid_list=['1.234', '1.344'],
|
|
requested_col_names=['all'],
|
|
debug_=True)
|
|
|
|
The data returned is going to look like:
|
|
{
|
|
'na': X
|
|
}
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def get_ws_msg(self,
|
|
eid_list=None,
|
|
requested_col_names='list',
|
|
debug_=False):
|
|
debug_ |= self.debug
|
|
url = "/ws-msg"
|
|
found_all = 0
|
|
if (eid_list is None) or (len(eid_list) < 1):
|
|
raise ValueError("no entity id in request")
|
|
if (requested_col_names is None) or (len(requested_col_names) < 1):
|
|
raise ValueError("requested_col_names must be a list of column names, a column name, or 'list' or 'all'")
|
|
trimmed_fields = []
|
|
if (isinstance(requested_col_names, str)):
|
|
if not requested_col_names.strip():
|
|
raise ValueError("column name cannot be blank")
|
|
trimmed_fields.append(requested_col_names.strip())
|
|
if (isinstance(requested_col_names, list)):
|
|
all_found=0
|
|
for field in requested_col_names:
|
|
if not field.strip():
|
|
raise ValueError("column names cannot be blank")
|
|
field = field.strip()
|
|
if field.find(" ") > -1 :
|
|
raise ValueError("field should be URL encoded: [%s]" % (field))
|
|
if (field == 'all') or (field == 'list'):
|
|
found_all = 1
|
|
trimmed_fields.append(field)
|
|
if isinstance(eid_list, list):
|
|
url += "/1/%s" % (",".join(eid_list))
|
|
else:
|
|
url += "/1/%s" % eid_list
|
|
|
|
if (found_all != 0) and (len(trimmed_fields) > 0):
|
|
url += "?fields=%s" % (",".join(trimmed_fields))
|
|
|
|
response = self.json_get(url, debug_=debug_)
|
|
if response is None:
|
|
return None
|
|
return self.extractValues(response=response,
|
|
singular_key="",
|
|
plural_key="")
|
|
#
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
|
|
These are POST requests
|
|
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class LFJsonPost(LFCliBase):
|
|
def __init__(self, lfclient_host='localhost',
|
|
lfclient_port=8080,
|
|
debug_=False,
|
|
_exit_on_error=False,
|
|
_exit_on_fail=False,
|
|
_proxy_str=None,
|
|
_capture_signal_list=()
|
|
):
|
|
super().__init__(_lfjson_host=lfclient_host,
|
|
_lfjson_port=lfclient_port,
|
|
_debug=debug_,
|
|
_exit_on_error=_exit_on_error,
|
|
_exit_on_fail=_exit_on_fail,
|
|
_proxy_str=_proxy_str,
|
|
_capture_signal_list=_capture_signal_list)
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_ARM_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_arm_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_arm_endp(self,
|
|
alias=None, # Name of endpoint.
|
|
cpu_id=None, # Preferred CPU ID on which this endpoint should run.
|
|
mx_pkt_sz=None, # Maximum packet size, including all Ethernet headers.
|
|
pkt_sz=None, # Minimum packet size, including all Ethernet headers.
|
|
port=None, # Port number.
|
|
pps=None, # Packets per second to generate.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf name/id.
|
|
tos=None, # The Type of Service, can be HEX. See set_endp_tos for details.
|
|
type=None, # Endpoint Type : arm_udp
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_arm_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias" : alias,
|
|
"cpu_id" : cpu_id,
|
|
"mx_pkt_sz" : mx_pkt_sz,
|
|
"pkt_sz" : pkt_sz,
|
|
"port" : port,
|
|
"pps" : pps,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"tos" : tos,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/add_arm_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_BGP_PEER> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_bgp_peer
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_bgp_peer_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
ENABLE_PEER = 0x1 # Set this to zero if you don't want this peer enabled.
|
|
PEER_CLIENT = 0x2 # Sets corresponding Xorp flag in BGP Peer section.
|
|
PEER_CONFED_MEMBER = 0x4 # Sets corresponding Xorp flag in BGP Peer section.
|
|
PEER_UNICAST_V4 = 0x8 # Sets corresponding Xorp flag in BGP Peer section.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_bgp_peer_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_bgp_peer_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_bgp_peer_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_bgp_peer_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_add_bgp_peer(self,
|
|
p_as=None, # BGP Peer Autonomous System number, 0-65535
|
|
delay_open_time=None, # BGP Peer delay open time.
|
|
flags=None, # Virtual router BGP Peer flags, see above for definitions.
|
|
holdtime=None, # BGP Peer hold-time.
|
|
local_dev=None, # BGP Peer Local interface.
|
|
nexthop=None, # BGP Peer Nexthop, IPv4 Address.
|
|
nexthop6=None, # BGP Peer IPv6 Nexthop address.
|
|
peer_id=None, # BGP Peer Identifier: IPv4 Address
|
|
peer_index=None, # Peer index in this virtual router (0-7).
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf name/id.
|
|
vr_id=None, # Name of virtual router.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_bgp_peer(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"as" : p_as,
|
|
"delay_open_time" : delay_open_time,
|
|
"flags" : flags,
|
|
"holdtime" : holdtime,
|
|
"local_dev" : local_dev,
|
|
"nexthop" : nexthop,
|
|
"nexthop6" : nexthop6,
|
|
"peer_id" : peer_id,
|
|
"peer_index" : peer_index,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"vr_id" : vr_id,
|
|
}
|
|
response = self.json_post("/cli-json/add_bgp_peer",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_BOND> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_bond
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_bond(self,
|
|
network_devs=None, # Comma-separated list of network devices: eth1,eth2,eth3...
|
|
port=None, # Name of the bond device.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_bond(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"network_devs" : network_devs,
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/add_bond",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_BR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_br
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_br_br_flags(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_br_br_flags.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_br_br_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
none = 0 # no features
|
|
stp_enabled = 1 # Enable Spanning Tree Protocol (STP)
|
|
|
|
|
|
def post_add_br(self,
|
|
br_aging_time=None, # MAC aging time, in seconds, 32-bit number.
|
|
br_flags=None, # Bridge flags, see above.
|
|
br_forwarding_delay=None, # How long to wait until the bridge will start forwarding packets.
|
|
br_hello_time=None, # How often does the bridge send out STP hello packets.
|
|
br_max_age=None, # How long until STP considers a non-responsive bridge dead.
|
|
br_priority=None, # Bridge priority, 16-bit number.
|
|
network_devs=None, # Comma-separated list of network devices: eth1,eth2,eth3...
|
|
port=None, # Name of the bridge device.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_br(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"br_aging_time" : br_aging_time,
|
|
"br_flags" : br_flags,
|
|
"br_forwarding_delay" : br_forwarding_delay,
|
|
"br_hello_time" : br_hello_time,
|
|
"br_max_age" : br_max_age,
|
|
"br_priority" : br_priority,
|
|
"network_devs" : network_devs,
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/add_br",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_CD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_cd
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_cd_flags(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_cd_flags.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_cd_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
ERR = 2 # Set to kernel mode.
|
|
RUNNING = 1 # Set to running state.
|
|
|
|
|
|
def post_add_cd(self,
|
|
alias=None, # Name of Collision Domain.
|
|
bps=None, # Maximum speed at which this collision domain can run.
|
|
flags=None, # See above. Leave blank or use 'NA' for no default values.
|
|
report_timer=None, # How often to report stats.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf name/id.
|
|
state=None, # RUNNING or STOPPED (default is RUNNING). Use this to start/stop.
|
|
type=None, # CD Type: WIFI, WISER_SURFACE, WISER_SURFACE_AIR, WISER_AIR_AIR, WISER_NCW
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_cd(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias" : alias,
|
|
"bps" : bps,
|
|
"flags" : flags,
|
|
"report_timer" : report_timer,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"state" : state,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/add_cd",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_CD_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_cd_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_cd_endp(self,
|
|
cd=None, # Name of Collision Domain.
|
|
endp=None, # Endpoint name/id.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_cd_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cd" : cd,
|
|
"endp" : endp,
|
|
}
|
|
response = self.json_post("/cli-json/add_cd_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_CD_VR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_cd_vr
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_cd_vr(self,
|
|
cd=None, # Name of Collision Domain.
|
|
vr=None, # Virtual-Router name/ID.
|
|
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_cd_vr(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cd" : cd,
|
|
"vr" : vr,
|
|
}
|
|
response = self.json_post("/cli-json/add_cd_vr",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_CHAMBER> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_chamber
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_chamber_chamber_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
OPEN = 0x4 # (3) Door is open, no real isolation right now.
|
|
PHANTOM = 0x1 # (1) Chamber is not actually here right now.
|
|
VIRTUAL = 0x2 # (2) No real chamber, open-air grouping of equipment.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_chamber_chamber_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_chamber_chamber_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_chamber_chamber_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_chamber_chamber_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_add_chamber(self,
|
|
chamber_type=None, # Chamber type, see above. Use 1 for Medium if uncertain.
|
|
dut_name1=None, # Name of first DUT in this chamber or NA
|
|
dut_name2=None, # Name of second DUT in this chamber or NA
|
|
dut_name3=None, # Name of third DUT in this chamber or NA
|
|
dut_name4=None, # Name of fourth DUT in this chamber or NA
|
|
flags=None, # Flag field for Chamber, see above.
|
|
flags_mask=None, # Mask of what flags to pay attention to, or NA for all.
|
|
height=None, # Height to be used when drawn in the LANforge-GUI.
|
|
isolation=None, # Estimated isolation in db for this chamber.
|
|
lanforge1=None, # EID of first LANforge Resource in this chamber or NA
|
|
lanforge2=None, # EID of second LANforge Resource in this chamber or NA
|
|
lanforge3=None, # EID of third LANforge Resource in this chamber or NA
|
|
lanforge4=None, # EID of fourth LANforge Resource in this chamber or NA
|
|
name=None, # Name of Chamber, unique identifier.
|
|
resource=None, # LANforge Resource ID for controlling turn-table via serial protocol.
|
|
sma_count=None, # Number of SMA connectors on this chamber, default is 16.
|
|
turntable_type=None, # Turn-Table type: see above.
|
|
width=None, # Width to be used when drawn in the LANforge-GUI.
|
|
x=None, # X coordinate to be used when drawn in the LANforge-GUI.
|
|
y=None, # Y coordinate to be used when drawn in the LANforge-GUI.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_chamber(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"chamber_type" : chamber_type,
|
|
"dut_name1" : dut_name1,
|
|
"dut_name2" : dut_name2,
|
|
"dut_name3" : dut_name3,
|
|
"dut_name4" : dut_name4,
|
|
"flags" : flags,
|
|
"flags_mask" : flags_mask,
|
|
"height" : height,
|
|
"isolation" : isolation,
|
|
"lanforge1" : lanforge1,
|
|
"lanforge2" : lanforge2,
|
|
"lanforge3" : lanforge3,
|
|
"lanforge4" : lanforge4,
|
|
"name" : name,
|
|
"resource" : resource,
|
|
"sma_count" : sma_count,
|
|
"turntable_type" : turntable_type,
|
|
"width" : width,
|
|
"x" : x,
|
|
"y" : y,
|
|
}
|
|
response = self.json_post("/cli-json/add_chamber",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_CHAMBER_CX> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_chamber_cx
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_chamber_cx_chamber_cx_flags(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_chamber_cx_chamber_cx_flags.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_chamber_cx_chamber_cx_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
CONNECTED = 1 # (1) Connected to something. If flag is not set, connection is open to the air (maybe with antenna)
|
|
TERMINATED = 2 # (2) Connection is terminated, signal shall not pass!
|
|
|
|
|
|
def post_add_chamber_cx(self,
|
|
a_id=None, # EidAntenna in string format for A side connection.
|
|
atten_id=None, # EID for the Attenuator module if one is inline on this connection.
|
|
b_id=None, # EidAntenna in string format for B side connection.
|
|
connection_idx=None, # Connection index, currently up to 32 connections supported (0-31)
|
|
flags=None, # Flag field for Chamber Connection, see above.
|
|
flags_mask=None, # Mask of what flags to pay attention to, or NA for all.
|
|
internal=None, # Internal (1) or not (0): Internal connections are no longer supported.
|
|
min_atten=None, # Specify minimum attenuation in 10ths of a db. Distance logic will not set atten below this.
|
|
name=None, # Name of Chamber, unique identifier.
|
|
zrssi2=None, # Specify 2.4Ghz zero-attenuation RSSI in 10ths of a db. Distance logic will consider this in its calculations.
|
|
zrssi5=None, # Specify 5Ghz zero-attenuation RSSI in 10ths of a db. Distance logic will consider this in its calculations.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_chamber_cx(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"a_id" : a_id,
|
|
"atten_id" : atten_id,
|
|
"b_id" : b_id,
|
|
"connection_idx" : connection_idx,
|
|
"flags" : flags,
|
|
"flags_mask" : flags_mask,
|
|
"internal" : internal,
|
|
"min_atten" : min_atten,
|
|
"name" : name,
|
|
"zrssi2" : zrssi2,
|
|
"zrssi5" : zrssi5,
|
|
}
|
|
response = self.json_post("/cli-json/add_chamber_cx",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_CHAMBER_PATH> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_chamber_path
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_chamber_path(self,
|
|
chamber=None, # Chamber Name.
|
|
content=None, # [BLANK] will erase all content, any other text will be appended to existing text. <tt escapearg='false'>Unescaped Value</tt>
|
|
path=None, # Path Name
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_chamber_path(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"chamber" : chamber,
|
|
"content" : content,
|
|
"path" : path,
|
|
}
|
|
response = self.json_post("/cli-json/add_chamber_path",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_CHANNEL_GROUP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_channel_group
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_channel_group_types(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_channel_group_types.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_channel_group_types.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
clear = "clear" # Channel(s) are bundled into a single span. No conversion or
|
|
e_m = "e&m" # Channel(s) are signalled using E&M signalling (specific
|
|
fcshdlc = "fcshdlc" # The zapdel driver performs HDLC encoding and decoding on the
|
|
fxogs = "fxogs" # Channel(s) are signalled using FXO Groundstart protocol.
|
|
fxoks = "fxoks" # Channel(s) are signalled using FXO Koolstart protocol.
|
|
fxols = "fxols" # Channel(s) are signalled using FXO Loopstart protocol.
|
|
fxsgs = "fxsgs" # Channel(s) are signalled using FXS Groundstart protocol.
|
|
fxsks = "fxsks" # Channel(s) are signalled using FXS Koolstart protocol.
|
|
fxsls = "fxsls" # Channel(s) are signalled using FXS Loopstart protocol.
|
|
indclear = "indclear" # Like 'clear' except all channels are treated individually and
|
|
nethdlc = "nethdlc" # The zaptel driver bundles the channels together into an
|
|
rawhdlc = "rawhdlc" # The zaptel driver performs HDLC encoding and decoding on the
|
|
unused = "unused" # No signalling is performed, each channel in the list remains idle
|
|
|
|
|
|
def post_add_channel_group(self,
|
|
alias=None, # Name for this Channel Group.
|
|
channels=None, # List of channels to add to this group.
|
|
idle_flag=None, # Idle flag (byte) for this channel group, for instance: 0x7e
|
|
mtu=None, # MTU (and MRU) for this channel group. Must be a multiple of the number of channels if configuring a T1 WanLink.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf name/id.
|
|
span_num=None, # The span number. First span is 1, second is 2...
|
|
type=None, # The channel-type. Use 'clear' for PPP links.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_channel_group(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias" : alias,
|
|
"channels" : channels,
|
|
"idle_flag" : idle_flag,
|
|
"mtu" : mtu,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"span_num" : span_num,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/add_channel_group",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_CX> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_cx
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_cx(self,
|
|
alias=None, # Name of the Cross Connect to create.
|
|
rx_endp=None, # Name of Receiving endpoint.
|
|
test_mgr=None, # Name of test-manager to create the CX on.
|
|
tx_endp=None, # Name of Transmitting endpoint.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_cx(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias" : alias,
|
|
"rx_endp" : rx_endp,
|
|
"test_mgr" : test_mgr,
|
|
"tx_endp" : tx_endp,
|
|
}
|
|
response = self.json_post("/cli-json/add_cx",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_DUT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_dut
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_dut_dut_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
p_11r = 0x200 # Use .11r connection logic on all ssids, deprecated, see add_dut_ssid.
|
|
AP_MODE = 0x2 # (2) DUT acts as AP.
|
|
DHCPD_LAN = 0x40 # Provides DHCP server on LAN port
|
|
DHCPD_WAN = 0x80 # Provides DHCP server on WAN port
|
|
EAP_PEAP = 0x800 # Use EAP-PEAP connection logic on all ssids, deprecated, see add_dut_ssid.
|
|
EAP_TTLS = 0x400 # Use EAP-TTLS connection logic on all ssids, deprecated, see add_dut_ssid.
|
|
INACTIVE = 0x4 # (3) Ignore this in ChamberView, etc
|
|
NOT_DHCPCD = 0x1000 # Station/edge device that is NOT using DHCP.
|
|
STA_MODE = 0x1 # (1) DUT acts as Station.
|
|
WEP = 0x8 # Use WEP encryption on all ssids, deprecated, see add_dut_ssid.
|
|
WPA = 0x10 # Use WPA encryption on all ssids, deprecated, see add_dut_ssid.
|
|
WPA2 = 0x20 # Use WPA2 encryption on all ssids, deprecated, see add_dut_ssid.
|
|
WPA3 = 0x100 # Use WPA3 encryption on all ssids, deprecated, see add_dut_extras.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_dut_dut_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_dut_dut_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_dut_dut_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_dut_dut_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_add_dut(self,
|
|
antenna_count1=None, # Antenna count for first radio.
|
|
antenna_count2=None, # Antenna count for second radio.
|
|
antenna_count3=None, # Antenna count for third radio.
|
|
api_id=None, # DUT API Identifier (none specified yet)
|
|
bssid1=None, # BSSID for first radio.
|
|
bssid2=None, # BSSID for second radio.
|
|
bssid3=None, # BSSID for third radio.
|
|
eap_id=None, # EAP Identifier, for EAP-PEAP.
|
|
flags=None, # Flag field for DUT, see above.
|
|
flags_mask=None, # Optional mask to specify what DUT flags are being set.
|
|
hw_version=None, # DUT Hardware Version information
|
|
img_file=None, # File-Name for image to represent DUT.
|
|
lan_port=None, # IP/Mask for LAN port
|
|
mgt_ip=None, # Management IP Address to access DUT
|
|
model_num=None, # DUT Model information
|
|
name=None, # Name of DUT, cannot contain '.'
|
|
passwd1=None, # WiFi Password that can be used to connect to DUT
|
|
passwd2=None, # WiFi Password that can be used to connect to DUT
|
|
passwd3=None, # WiFi Password that can be used to connect to DUT
|
|
serial_num=None, # DUT Identifier (serial-number, etc)
|
|
serial_port=None, # Resource and Serial port name on LANforge that connects to DUT (1.2.ttyS0). Serial port does not need to be on resource holding wan_port or lan_port
|
|
ssid1=None, # WiFi SSID that can be used to connect to DUT
|
|
ssid2=None, # WiFi SSID that can be used to connect to DUT
|
|
ssid3=None, # WiFi SSID that can be used to connect to DUT
|
|
sw_version=None, # DUT Software Version information
|
|
top_left_x=None, # X Location for Chamber View.
|
|
top_left_y=None, # X Location for Chamber View.
|
|
wan_port=None, # IP/Mask for WAN port
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_dut(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"antenna_count1" : antenna_count1,
|
|
"antenna_count2" : antenna_count2,
|
|
"antenna_count3" : antenna_count3,
|
|
"api_id" : api_id,
|
|
"bssid1" : bssid1,
|
|
"bssid2" : bssid2,
|
|
"bssid3" : bssid3,
|
|
"eap_id" : eap_id,
|
|
"flags" : flags,
|
|
"flags_mask" : flags_mask,
|
|
"hw_version" : hw_version,
|
|
"img_file" : img_file,
|
|
"lan_port" : lan_port,
|
|
"mgt_ip" : mgt_ip,
|
|
"model_num" : model_num,
|
|
"name" : name,
|
|
"passwd1" : passwd1,
|
|
"passwd2" : passwd2,
|
|
"passwd3" : passwd3,
|
|
"serial_num" : serial_num,
|
|
"serial_port" : serial_port,
|
|
"ssid1" : ssid1,
|
|
"ssid2" : ssid2,
|
|
"ssid3" : ssid3,
|
|
"sw_version" : sw_version,
|
|
"top_left_x" : top_left_x,
|
|
"top_left_y" : top_left_y,
|
|
"wan_port" : wan_port,
|
|
}
|
|
response = self.json_post("/cli-json/add_dut",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_DUT_NOTES> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_dut_notes
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_dut_notes(self,
|
|
dut=None, # DUT Name.
|
|
text=None, # [BLANK] will erase all, any other text will be appended to existing text. <tt escapearg='false'>Unescaped Value</tt>
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_dut_notes(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"dut" : dut,
|
|
"text" : text,
|
|
}
|
|
response = self.json_post("/cli-json/add_dut_notes",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_DUT_SSID> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_dut_ssid
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_dut_ssid_dut_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
p_11r = 0x200 # Use .11r connection logic
|
|
EAP_PEAP = 0x800 # Use EAP-PEAP connection logic
|
|
EAP_TTLS = 0x400 # Use EAP-TTLS connection logic
|
|
WEP = 0x8 # Use WEP encryption
|
|
WPA = 0x10 # Use WPA encryption
|
|
WPA2 = 0x20 # Use WPA2 encryption
|
|
WPA3 = 0x100 # Use WPA3 encryption
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_dut_ssid_dut_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_dut_ssid_dut_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_dut_ssid_dut_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_dut_ssid_dut_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_add_dut_ssid(self,
|
|
bssid=None, # BSSID for cooresponding SSID.
|
|
name=None, # Name of DUT, cannot contain '.'
|
|
passwd=None, # WiFi Password that can be used to connect to DUT
|
|
ssid=None, # WiFi SSID that can be used to connect to DUT
|
|
ssid_flags=None, # SSID flags, see above.
|
|
ssid_flags_mask=None, # SSID flags mask
|
|
ssid_idx=None, # Index of the SSID. Zero-based indexing: (0 - 7)
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_dut_ssid(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"bssid" : bssid,
|
|
"name" : name,
|
|
"passwd" : passwd,
|
|
"ssid" : ssid,
|
|
"ssid_flags" : ssid_flags,
|
|
"ssid_flags_mask" : ssid_flags_mask,
|
|
"ssid_idx" : ssid_idx,
|
|
}
|
|
response = self.json_post("/cli-json/add_dut_ssid",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_endp_payload_pattern(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_endp_payload_pattern.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_endp_payload_pattern.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
PRBS_11_8_10 = "PRBS_11_8_10" # PRBS (see above)
|
|
PRBS_15_0_14 = "PRBS_15_0_14" # PRBS (see above)
|
|
PRBS_4_0_3 = "PRBS_4_0_3" # Use linear feedback shift register to generate pseudo random sequence.
|
|
PRBS_7_0_6 = "PRBS_7_0_6" # PRBS (see above)
|
|
custom = "custom" # Enter your own payload with the set_endp_payload cmd.
|
|
decreasing = "decreasing" # bytes start at FF and decrease, wrapping if needed
|
|
increasing = "increasing" # bytes start at 00 and increase, wrapping if needed
|
|
ones = "ones" # payload is all ones (FF)
|
|
random = "random" # generate a new random payload each time sent
|
|
random_fixed = "random_fixed" # means generate one random payload, and send it over and over again.
|
|
zeros = "zeros" # payload is all zeros (00)
|
|
|
|
class add_endp_type(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_endp_type.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_endp_type.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
custom_ether = "custom_ether" # LF frames with custom options, use with playback
|
|
custom_mc_udp = "custom_mc_udp" # LF Multicast UDP IPv4
|
|
custom_tcp = "custom_tcp" # LF TCP IPv4 frame with custom options
|
|
custom_udp = "custom_udp" # LF UDP IPv4 frame with custom options
|
|
lf = "lf" # LF protocol
|
|
lf_sctp = "lf_sctp" # SCTP IPv4 protocol
|
|
lf_sctp6 = "lf_sctp6" # SCTP IPv6 protocol
|
|
lf_tcp = "lf_tcp" # TCP IPv4 connection
|
|
lf_tcp6 = "lf_tcp6" # TCP IPv6 connection
|
|
lf_udp = "lf_udp" # UDP IPv4 connection
|
|
lf_udp6 = "lf_udp6" # UDP IPv6 connection
|
|
mc_udp = "mc_udp" # LF Multicast IPv4
|
|
|
|
|
|
def post_add_endp(self,
|
|
alias=None, # Name of endpoint.
|
|
ip_port=None, # IP Port: IP port for layer three endpoints. Use -1 to let the LANforge server automatically configure the ip_port. Layer 2 endpoints will ignore
|
|
is_pkt_sz_random=None, # Yes means use random sized packets, anything else means NO.
|
|
is_rate_bursty=None, # Yes means bursty, anything else means NO.
|
|
max_pkt=None, # Maximum packet size, including all headers. 0 means 'same', -1 means AUTO (5.3.2+)
|
|
max_rate=None, # Maximum transmit rate (bps), used if in bursty mode.
|
|
min_pkt=None, # Minimum packet size, including all headers. -1 means AUTO (5.3.2+)
|
|
min_rate=None, # Minimum transmit rate (bps), or only rate if not bursty.
|
|
multi_conn=None, # If > 0, will create separate process with this many connections per endpoint. See AUTO_HELPER flag
|
|
payload_pattern=None, # Payload pattern, see above.
|
|
port=None, # Port/Interface name or number.
|
|
resource=None, # Resource number.
|
|
send_bad_crc_per_million=None, # If NIC supports it, will randomly send X per million packets with bad ethernet Frame Check Sum.
|
|
shelf=None, # Shelf name/id.
|
|
ttl=None, # Time-to-live, used by UDP Multicast Endpoints only.
|
|
type=None, # Endpoint Type: See above.
|
|
use_checksum=None, # Yes means checksum the payload, anything else means NO.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias" : alias,
|
|
"ip_port" : ip_port,
|
|
"is_pkt_sz_random" : is_pkt_sz_random,
|
|
"is_rate_bursty" : is_rate_bursty,
|
|
"max_pkt" : max_pkt,
|
|
"max_rate" : max_rate,
|
|
"min_pkt" : min_pkt,
|
|
"min_rate" : min_rate,
|
|
"multi_conn" : multi_conn,
|
|
"payload_pattern" : payload_pattern,
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"send_bad_crc_per_million" : send_bad_crc_per_million,
|
|
"shelf" : shelf,
|
|
"ttl" : ttl,
|
|
"type" : type,
|
|
"use_checksum" : use_checksum,
|
|
}
|
|
response = self.json_post("/cli-json/add_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_EVENT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_event
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_event(self,
|
|
details=None, # Event text description. Cannot include double-quote characters.
|
|
event_id=None, # Numeric ID for the event to modify, or 'new' if creating a new one.
|
|
name=None, # Event entity name.
|
|
priority=None, # See set_event_priority for available priorities.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_event(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"details" : details,
|
|
"event_id" : event_id,
|
|
"name" : name,
|
|
"priority" : priority,
|
|
}
|
|
response = self.json_post("/cli-json/add_event",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_FILE_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_file_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_file_endp_fio_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
AUTO_MOUNT = 0x2 # (2) Attempt to mount with the provided information if not already mounted.
|
|
AUTO_UNMOUNT = 0x4 # (4) Attempt to un-mount when stopping test.
|
|
CHECK_MOUNT = 0x1 # (1) Attempt to verify NFS and SMB mounts match the configured values.
|
|
O_APPEND = 0x200 # (512) Open files for writing with O_APPEND instead
|
|
O_DIRECT = 0x8 # (8) Open file with O_DIRECT flag, disables caching. Must use block-size read/write calls.
|
|
O_LARGEFILE = 0x20 # (32) Open files with O_LARGEFILE. This allows greater than 2GB files on 32-bit systems.
|
|
UNLINK_BW = 0x10 # (16) Unlink file before writing. This works around issues with CIFS for some file-servers.
|
|
UNMOUNT_FORCE = 0x40 # (64) Use -f flag when calling umount
|
|
UNMOUNT_LAZY = 0x80 # (128) Use -l flag when calling umount
|
|
USE_FSTATFS = 0x100 # (256) Use fstatfs system call to verify file-system type when opening files.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_file_endp_fio_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_file_endp_fio_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_file_endp_fio_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_file_endp_fio_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class add_file_endp_payload_pattern(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_file_endp_payload_pattern.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_file_endp_payload_pattern.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
PRBS_11_8_10 = "PRBS_11_8_10" # PRBS (see above)
|
|
PRBS_15_0_14 = "PRBS_15_0_14" # PRBS (see above)
|
|
PRBS_4_0_3 = "PRBS_4_0_3" # Use linear feedback shift register to generate pseudo random sequence.
|
|
PRBS_7_0_6 = "PRBS_7_0_6" # PRBS (see above)
|
|
custom = "custom" # Enter your own payload with the set_endp_payload cmd.
|
|
decreasing = "decreasing" # bytes start at FF and decrease, wrapping if needed.
|
|
increasing = "increasing" # bytes start at 00 and increase, wrapping if needed.
|
|
ones = "ones" # Payload is all ones (FF).
|
|
random = "random" # generate a new random payload each time sent.
|
|
random_fixed = "random_fixed" # Means generate one random payload, and send it over
|
|
zeros = "zeros" # Payload is all zeros (00).
|
|
|
|
|
|
def post_add_file_endp(self,
|
|
alias=None, # Name of endpoint.
|
|
directory=None, # The directory to read/write in. Absolute path suggested.
|
|
fio_flags=None, # File-IO flags, see above for details.
|
|
max_read_rate=None, # Maximum read rate, bits-per-second.
|
|
max_write_rate=None, # Maximum write rate, bits-per-second.
|
|
min_read_rate=None, # Minimum read rate, bits-per-second.
|
|
min_write_rate=None, # Minimum write rate, bits-per-second.
|
|
mount_dir=None, # Directory to mount/unmount (if blank, will use 'directory').
|
|
mount_options=None, # Optional mount options, passed to the mount command. 'NONE' clears.
|
|
payload_pattern=None, # Payload pattern, see above.
|
|
port=None, # Port number.
|
|
prefix=None, # The prefix of the file(s) to read/write.
|
|
resource=None, # Resource number.
|
|
retry_timer=None, # Number of miliseconds to retry errored IO calls before giving up.
|
|
server_mount=None, # The server to mount, ex: 192.168.100.5/exports/test1
|
|
shelf=None, # Shelf name/id.
|
|
type=None, # Endpoint Type : fe_generic, fe_nfs, fe_nfs4, fe_cifs, fe_iscsi, fe_cifs/ip6, fe_nfs/ip6, fe_nfs4/ip6, fe_smb2, fe_smb2/ip6 fe_smb21 fe_smb21/ip6 fe_smb30 fe_smb30/ip6
|
|
volume=None, # iSCSI volume to mount
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_file_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias" : alias,
|
|
"directory" : directory,
|
|
"fio_flags" : fio_flags,
|
|
"max_read_rate" : max_read_rate,
|
|
"max_write_rate" : max_write_rate,
|
|
"min_read_rate" : min_read_rate,
|
|
"min_write_rate" : min_write_rate,
|
|
"mount_dir" : mount_dir,
|
|
"mount_options" : mount_options,
|
|
"payload_pattern" : payload_pattern,
|
|
"port" : port,
|
|
"prefix" : prefix,
|
|
"resource" : resource,
|
|
"retry_timer" : retry_timer,
|
|
"server_mount" : server_mount,
|
|
"shelf" : shelf,
|
|
"type" : type,
|
|
"volume" : volume,
|
|
}
|
|
response = self.json_post("/cli-json/add_file_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_GEN_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_gen_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_gen_endp(self,
|
|
alias=None, # Name of endpoint.
|
|
port=None, # Port number.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf name/id.
|
|
type=None, # Endpoint Type : gen_generic
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_gen_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias" : alias,
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/add_gen_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_GRE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_gre
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_gre(self,
|
|
local_lower_ip=None, # The local lower-level IP to use.
|
|
port=None, # Name of the GRE to create, suggested to start with 'gre'
|
|
remote_lower_ip=None, # The remote lower-level IP to use.
|
|
report_timer=None, # Report timer for this port, leave blank or use NA for defaults.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_gre(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"local_lower_ip" : local_lower_ip,
|
|
"port" : port,
|
|
"remote_lower_ip" : remote_lower_ip,
|
|
"report_timer" : report_timer,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/add_gre",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_GROUP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_group
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_group_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
group_total_rates = 0x4 # Set rates as total for group.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_group_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_group_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_group_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_group_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_add_group(self,
|
|
flags=None, # Flags for this group, see above.
|
|
flags_mask=None, # Mask for flags that we care about, use 0xFFFFFFFF or leave blank for all.
|
|
name=None, # The name of the test group. Must be unique across all groups.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_group(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"flags" : flags,
|
|
"flags_mask" : flags_mask,
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/add_group",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_L4_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_l4_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_l4_endp_http_auth_type(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
BASIC = 0x1 # Basic authentication
|
|
DIGEST = 0x2 # Digest (MD5) authentication
|
|
GSSNEGOTIATE = 0x4 # GSS authentication
|
|
NTLM = 0x8 # NTLM authentication
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_l4_endp_http_auth_type.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_l4_endp_http_auth_type.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_l4_endp_http_auth_type.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_l4_endp_http_auth_type.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class add_l4_endp_proxy_auth_type(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
BASIC = 0x1 # 1 Basic authentication
|
|
BIND_DNS = 0x200 # 512 Make DNS requests go out endpoints Port.
|
|
DIGEST = 0x2 # 2 Digest (MD5) authentication
|
|
DISABLE_EPSV = 0x1000 # 4096 Disable FTP EPSV option
|
|
DISABLE_PASV = 0x800 # 2048 Disable FTP PASV option (will use PORT command)
|
|
GSSNEGOTIATE = 0x4 # 4 GSS authentication
|
|
INCLUDE_HEADERS = 0x100 # 256 especially for IMAP
|
|
NTLM = 0x8 # 8 NTLM authentication
|
|
USE_DEFLATE_COMPRESSION = 0x80 # 128 Use deflate compression
|
|
USE_GZIP_COMPRESSION = 0x40 # 64 Use gzip compression
|
|
USE_IPV6 = 0x400 # 1024 Resolve URL is IPv6. Will use IPv4 if not selected.
|
|
USE_PROXY_CACHE = 0x20 # 32 Use proxy cache
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_l4_endp_proxy_auth_type.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_l4_endp_proxy_auth_type.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_l4_endp_proxy_auth_type.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_l4_endp_proxy_auth_type.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class add_l4_endp_type(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
l4_generic = 0x0 # Layer 4 type
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_l4_endp_type.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_l4_endp_type.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_l4_endp_type.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_l4_endp_type.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_add_l4_endp(self,
|
|
alias=None, # Name of endpoint.
|
|
block_size=None, # TFTP Block size, in bytes.
|
|
dns_cache_timeout=None, # In seconds, how long to cache DNS lookups. 0 means no caching at all.
|
|
http_auth_type=None, # Bit-field for allowable http-authenticate methods.
|
|
ip_addr=None, # Local IP address, for binding to specific secondary IP.
|
|
max_speed=None, # In bits-per-second, can rate limit upload or download speed of the URL contents. 0 means infinite.
|
|
port=None, # Port number.
|
|
proxy_auth_type=None, # Bit-field for allowable proxy-authenticate methods.
|
|
proxy_port=None, # HTTP Proxy port if you are using a proxy.
|
|
proxy_server=None, # The name of our proxy server if using one.
|
|
proxy_userpwd=None, # The user-name and password for proxy authentication, format: <tt>user:passwd</tt>.
|
|
quiesce_after=None, # Quiesce test after this many URLs have been processed.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf name/id.
|
|
smtp_from=None, # SMTP From address.
|
|
ssl_cert_fname=None, # Name of SSL Certs file.
|
|
timeout=None, # How long to wait for a connection, in milliseconds
|
|
type=None, # Endpoint Type : <tt>l4_generic</tt>
|
|
url=None, # The URL, see syntax above. Can also be a local file.
|
|
url_rate=None, # How often should we process the URL(s), per 10 minutes.<ul><li>600: 1/s<li>1200: 2/s<li>1800: 3/s<li>2400: 4/s</ul>
|
|
user_agent=None, # User-Agent string. Leave blank for default. Also SMTP-TO: <a@b.com><c@d.com>...<q@x.com>
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_l4_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias" : alias,
|
|
"block_size" : block_size,
|
|
"dns_cache_timeout" : dns_cache_timeout,
|
|
"http_auth_type" : http_auth_type,
|
|
"ip_addr" : ip_addr,
|
|
"max_speed" : max_speed,
|
|
"port" : port,
|
|
"proxy_auth_type" : proxy_auth_type,
|
|
"proxy_port" : proxy_port,
|
|
"proxy_server" : proxy_server,
|
|
"proxy_userpwd" : proxy_userpwd,
|
|
"quiesce_after" : quiesce_after,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"smtp_from" : smtp_from,
|
|
"ssl_cert_fname" : ssl_cert_fname,
|
|
"timeout" : timeout,
|
|
"type" : type,
|
|
"url" : url,
|
|
"url_rate" : url_rate,
|
|
"user_agent" : user_agent,
|
|
}
|
|
response = self.json_post("/cli-json/add_l4_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_MONITOR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_monitor
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_monitor_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
disable_ht40 = 0x800 # Disable HT-40 even if hardware and AP support it.
|
|
disable_ht80 = 0x8000000 # Disable HT80 (for AC chipset NICs only)
|
|
ht160_enable = 0x100000000 # Enable HT160 mode.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_monitor_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_monitor_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_monitor_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_monitor_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_add_monitor(self,
|
|
aid=None, # AID, may be used when sniffing on /AX radios.
|
|
ap_name=None, # Name for this Monitor interface, for example: moni0
|
|
bssid=None, # BSSID to use when sniffing on /AX radios, optional.
|
|
flags=None, # Flags for this monitor interface.
|
|
flags_mask=None, # Flags mask for this monitor interface.
|
|
radio=None, # Name of the physical radio interface, for example: wiphy0
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_monitor(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"aid" : aid,
|
|
"ap_name" : ap_name,
|
|
"bssid" : bssid,
|
|
"flags" : flags,
|
|
"flags_mask" : flags_mask,
|
|
"radio" : radio,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/add_monitor",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_MVLAN> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_mvlan
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_mvlan(self,
|
|
flags=None, # 0x1: Create admin-down.
|
|
index=None, # Optional: The index of the VLAN, (the <b>4</b> in <tt>eth0#4</tt>)
|
|
mac=None, # The MAC address, can also use parent-pattern in 5.3.8 and higher: <tt>xx:xx:xx:*:*:xx</tt>
|
|
old_name=None, # The temporary name, used for configuring un-discovered hardware.
|
|
port=None, # Port number of an existing Ethernet interface.
|
|
report_timer=None, # Report timer for this port, leave blank or use NA for defaults.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_mvlan(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"flags" : flags,
|
|
"index" : index,
|
|
"mac" : mac,
|
|
"old_name" : old_name,
|
|
"port" : port,
|
|
"report_timer" : report_timer,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/add_mvlan",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_PPP_LINK> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_ppp_link
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_ppp_link(self,
|
|
auth=None, # YES if you want to authenticate. Default is NO.
|
|
channel_groups=None, # List of channel groups, see above.
|
|
debug=None, # YES for debug, otherwise debugging for the ppp connection is off.
|
|
down_time_max_ms=None, # Maximum length of downtime (ms) for PPP link between runs, or 0 for the link to be always up.
|
|
down_time_min_ms=None, # Minimum length of downtime (ms) for PPP link between runs, or 0 for the link to be always up.
|
|
dst_ip=None, # Destination IP address for this PPP connection.
|
|
extra_args=None, # Extra arguments to be passed directly to the pppd server.
|
|
holdoff=None, # Seconds between attempt to bring link back up if it dies, suggest 1.
|
|
lcp_echo_failure=None, # LCP echo failures before we determine links is dead, suggest 5.
|
|
lcp_echo_interval=None, # Seconds between LCP echos, suggest 1.
|
|
mlppp_descriptor=None, # A unique key for use with multi-link PPP connections.
|
|
persist=None, # YES if you want to persist the connection. This is suggested.
|
|
pppoe_transport_port=None, # Port number (or name) for underlying PPPoE transport.
|
|
resource=None, # Resource (machine) number.
|
|
run_time_max_ms=None, # Maximum uptime (ms) for PPP link during an experiment, or 0 for the link to be always up.
|
|
run_time_min_ms=None, # Minimum uptime (ms) for PPP link during an experiment, or 0 for the link to be always up.
|
|
shelf=None, # Shelf name/id.
|
|
src_ip=None, # Source IP address for this PPP connection.
|
|
transport_type=None, # What sort of transport this ppp link uses.
|
|
tty_transport_device=None, # TTY device for PPP links associated with TTYs.
|
|
unit=None, # Unit number for the PPP link. ie, the 7 in ppp7.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_ppp_link(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"auth" : auth,
|
|
"channel_groups" : channel_groups,
|
|
"debug" : debug,
|
|
"down_time_max_ms" : down_time_max_ms,
|
|
"down_time_min_ms" : down_time_min_ms,
|
|
"dst_ip" : dst_ip,
|
|
"extra_args" : extra_args,
|
|
"holdoff" : holdoff,
|
|
"lcp_echo_failure" : lcp_echo_failure,
|
|
"lcp_echo_interval" : lcp_echo_interval,
|
|
"mlppp_descriptor" : mlppp_descriptor,
|
|
"persist" : persist,
|
|
"pppoe_transport_port" : pppoe_transport_port,
|
|
"resource" : resource,
|
|
"run_time_max_ms" : run_time_max_ms,
|
|
"run_time_min_ms" : run_time_min_ms,
|
|
"shelf" : shelf,
|
|
"src_ip" : src_ip,
|
|
"transport_type" : transport_type,
|
|
"tty_transport_device" : tty_transport_device,
|
|
"unit" : unit,
|
|
}
|
|
response = self.json_post("/cli-json/add_ppp_link",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_PROFILE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_profile
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_profile_profile_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
p_11r = 0x40 # Use 802.11r roaming setup.
|
|
BSS_TRANS = 0x400 # Enable BSS Transition logic
|
|
DHCP_SERVER = 0x1 # This should provide DHCP server.
|
|
EAP_PEAP = 0x200 # Enable EAP-PEAP
|
|
EAP_TTLS = 0x80 # Use 802.1x EAP-TTLS
|
|
NAT = 0x100 # Enable NAT if this object is in a virtual router
|
|
SKIP_DHCP_ROAM = 0x10 # Ask station to not re-do DHCP on roam.
|
|
WEP = 0x2 # Use WEP encryption
|
|
WPA = 0x4 # Use WPA encryption
|
|
WPA2 = 0x8 # Use WPA2 encryption
|
|
WPA3 = 0x20 # Use WPA3 encryption
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_profile_profile_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_profile_profile_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_profile_profile_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_profile_profile_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class add_profile_wifi_mode(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_profile_wifi_mode.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_profile_wifi_mode.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
p_802_11a = "802.11a" # 802.11a
|
|
AUTO = "AUTO" # 802.11g
|
|
aAX = "aAX" # 802.11a-AX (6E disables /n and /ac)
|
|
abg = "abg" # 802.11abg
|
|
abgn = "abgn" # 802.11abgn
|
|
abgnAC = "abgnAC" # 802.11abgn-AC
|
|
abgnAX = "abgnAX" # 802.11abgn-AX
|
|
an = "an" # 802.11an
|
|
anAC = "anAC" # 802.11an-AC
|
|
anAX = "anAX" # 802.11an-AX
|
|
as_is = "as_is" # Make no changes to current configuration
|
|
b = "b" # 802.11b
|
|
bg = "bg" # 802.11bg
|
|
bgn = "bgn" # 802.11bgn
|
|
bgnAC = "bgnAC" # 802.11bgn-AC
|
|
bgnAX = "bgnAX" # 802.11bgn-AX
|
|
bond = "bond" # Bonded pair of Ethernet ports.
|
|
bridged_ap = "bridged_ap" # AP device in bridged mode. The EIDs may specify radio and bridged port.
|
|
client = "client" # Client-side non-WiFi device (Ethernet port, for instance).
|
|
g = "g" # 802.11g
|
|
mobile_sta = "mobile_sta" # Mobile station device. Expects to connect to DUT AP(s) and upstream LANforge.
|
|
monitor = "monitor" # Monitor device/sniffer. The EIDs may specify which radios to use.
|
|
peer = "peer" # Edge device, client or server (Ethernet port, for instance).
|
|
rdd = "rdd" # Pair of redirect devices, typically associated with VR to act as traffic endpoint
|
|
routed_ap = "routed_ap" # AP in routed mode. The EIDs may specify radio and upstream port.
|
|
sta = "sta" # Station device, most likely non mobile. The EIDs may specify radio(s) to use.
|
|
uplink = "uplink" # Uplink towards rest of network (can go in virtual router and do NAT)
|
|
upstream = "upstream" # Upstream server device. The EIDs may specify which ports to use.
|
|
vlan = "vlan" # 802.1q VLAN. Specify VID with the 'freq' option.
|
|
|
|
|
|
def post_add_profile(self,
|
|
alias_prefix=None, # Port alias prefix, aka hostname prefix.
|
|
antenna=None, # Antenna count for this profile.
|
|
bandwidth=None, # 0 (auto), 20, 40, 80 or 160
|
|
eap_id=None, # EAP Identifier
|
|
flags_mask=None, # Specify what flags to set.
|
|
freq=None, # WiFi frequency to be used, 0 means default.
|
|
instance_count=None, # Number of devices (stations, vdevs, etc)
|
|
mac_pattern=None, # Optional MAC-Address pattern, for instance: xx:xx:xx:*:*:xx
|
|
name=None, # Profile Name.
|
|
passwd=None, # WiFi Password to be used (AP Mode), [BLANK] means no password.
|
|
profile_flags=None, # Flags for this profile, see above.
|
|
profile_type=None, # Profile type: See above.
|
|
ssid=None, # WiFi SSID to be used, [BLANK] means any.
|
|
vid=None, # Vlan-ID (only valid for vlan profiles).
|
|
wifi_mode=None, # WiFi Mode for this profile.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_profile(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias_prefix" : alias_prefix,
|
|
"antenna" : antenna,
|
|
"bandwidth" : bandwidth,
|
|
"eap_id" : eap_id,
|
|
"flags_mask" : flags_mask,
|
|
"freq" : freq,
|
|
"instance_count" : instance_count,
|
|
"mac_pattern" : mac_pattern,
|
|
"name" : name,
|
|
"passwd" : passwd,
|
|
"profile_flags" : profile_flags,
|
|
"profile_type" : profile_type,
|
|
"ssid" : ssid,
|
|
"vid" : vid,
|
|
"wifi_mode" : wifi_mode,
|
|
}
|
|
response = self.json_post("/cli-json/add_profile",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_PROFILE_NOTES> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_profile_notes
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_profile_notes(self,
|
|
dut=None, # Profile Name.
|
|
text=None, # [BLANK] will erase all, any other text will be appended to existing text. <tt escapearg='false'>Unescaped Value</tt>
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_profile_notes(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"dut" : dut,
|
|
"text" : text,
|
|
}
|
|
response = self.json_post("/cli-json/add_profile_notes",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_RDD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_rdd
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_rdd(self,
|
|
peer_ifname=None, # The peer (other) RedirectDevice in this pair.
|
|
port=None, # Name of the Redirect Device to create.
|
|
report_timer=None, # Report timer for this port, leave blank or use NA for defaults.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_rdd(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"peer_ifname" : peer_ifname,
|
|
"port" : port,
|
|
"report_timer" : report_timer,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/add_rdd",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_SEC_IP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_sec_ip
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_sec_ip(self,
|
|
ip_list=None, # IP1/prefix,IP2/prefix,...IPZ/prefix.
|
|
port=None, # Name of network device (Port) to which these IPs will be added.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_sec_ip(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"ip_list" : ip_list,
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/add_sec_ip",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_STA> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_sta
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_sta_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
p_80211r_pmska_cache = 0x4000000 # Enable oportunistic PMSKA caching for WPA2 (Related to 802.11r).
|
|
p_80211u_additional = 0x100000 # AP requires additional step for access (802.11u Interworking)
|
|
p_80211u_auto = 0x40000 # Enable 802.11u (Interworking) Auto-internetworking feature. Always enabled currently.
|
|
p_80211u_e911 = 0x200000 # AP claims emergency services reachable (802.11u Interworking)
|
|
p_80211u_e911_unauth = 0x400000 # AP provides Unauthenticated emergency services (802.11u Interworking)
|
|
p_80211u_enable = 0x20000 # Enable 802.11u (Interworking) feature.
|
|
p_80211u_gw = 0x80000 # AP Provides access to internet (802.11u Interworking)
|
|
p_8021x_radius = 0x2000000 # Use 802.1x (RADIUS for AP).
|
|
create_admin_down = 0x1000000000 # Station should be created admin-down.
|
|
custom_conf = 0x20 # Use Custom wpa_supplicant config file.
|
|
disable_twt = 0x100000000000 # Disable TWT mode
|
|
disable_fast_reauth = 0x200000000 # Disable fast_reauth option for virtual stations.
|
|
disable_gdaf = 0x1000000 # AP: Disable DGAF (used by HotSpot 2.0).
|
|
disable_ht80 = 0x8000000 # Disable HT80 (for AC chipset NICs only)
|
|
disable_roam = 0x80000000 # Disable automatic station roaming based on scan results.
|
|
disable_sgi = 0x4000 # Disable SGI (Short Guard Interval).
|
|
hs20_enable = 0x800000 # Enable Hotspot 2.0 (HS20) feature. Requires WPA-2.
|
|
ht160_enable = 0x100000000 # Enable HT160 mode.
|
|
ht40_disable = 0x800 # Disable HT-40 even if hardware and AP support it.
|
|
ibss_mode = 0x20000000 # Station should be in IBSS mode.
|
|
lf_sta_migrate = 0x8000 # OK-To-Migrate (Allow station migration between LANforge radios)
|
|
mesh_mode = 0x400000000 # Station should be in MESH mode.
|
|
no_supp_op_class_ie = 0x4000000000 # Do not include supported-oper-class-IE in assoc requests. May work around AP bugs.
|
|
osen_enable = 0x40000000 # Enable OSEN protocol (OSU Server-only Authentication)
|
|
passive_scan = 0x2000 # Use passive scanning (don't send probe requests).
|
|
power_save_enable = 0x800000000 # Station should enable power-save. May not work in all drivers/configurations.
|
|
scan_ssid = 0x1000 # Enable SCAN-SSID flag in wpa_supplicant.
|
|
txo_enable = 0x8000000000 # Enable/disable tx-offloads, typically managed by set_wifi_txo command
|
|
use_bss_transition = 0x80000000000 # Enable BSS transition.
|
|
use_wpa3 = 0x10000000000 # Enable WPA-3 (SAE Personal) mode.
|
|
verbose = 0x10000 # Verbose-Debug: Increase debug info in wpa-supplicant and hostapd logs.
|
|
wds_mode = 0x2000000000 # WDS station (sort of like a lame mesh), not supported on ath10k
|
|
wep_enable = 0x200 # Use wpa_supplicant configured for WEP encryption.
|
|
wpa2_enable = 0x400 # Use wpa_supplicant configured for WPA2 encryption.
|
|
wpa_enable = 0x10 # Enable WPA
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_sta_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_sta_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_sta_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_sta_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class add_sta_mode(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_sta_mode.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_sta_mode.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
p_802_11a = 1 # 802.11a
|
|
AUTO = 0 # 802.11g
|
|
aAX = 15 # 802.11a-AX (6E disables /n and /ac)
|
|
abg = 4 # 802.11abg
|
|
abgn = 5 # 802.11abgn
|
|
abgnAC = 8 # 802.11abgn-AC
|
|
abgnAX = 12 # 802.11abgn-AX
|
|
an = 10 # 802.11an
|
|
anAC = 9 # 802.11an-AC
|
|
anAX = 14 # 802.11an-AX
|
|
b = 2 # 802.11b
|
|
bg = 7 # 802.11bg
|
|
bgn = 6 # 802.11bgn
|
|
bgnAC = 11 # 802.11bgn-AC
|
|
bgnAX = 13 # 802.11bgn-AX
|
|
g = 3 # 802.11g
|
|
|
|
class add_sta_rate(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_sta_rate.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_sta_rate.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
p_a_g = "/a/g" # 6 Mbps, 9 Mbps, 12 Mbps, 18 Mbps, 24 Mbps, 36 Mbps, 48 Mbps, 54 Mbps
|
|
p_b = "/b" # 1Mbps, 2Mbps, 5.5 Mbps, 11 Mbps
|
|
DEFAULT = "DEFAULT" # Use maximum available speed
|
|
MCS0_76 = "MCS0-76" # /n rates
|
|
p_bitmap_ = "[bitmap]" # <b>'0xff 00 ...'</b> to directly specify the MCS bitmap.
|
|
|
|
|
|
def post_add_sta(self,
|
|
ampdu_density=None, # 0-7, or 0xFF to not set.
|
|
ampdu_factor=None, # 0-3, or 0xFF to not set.
|
|
ap=None, # The Access Point BSSID this Virtual STA should be associated with (example: <tt>00:11:22:33:4:55</tt>, or <tt>DEFAULT</tt> for any).
|
|
flags=None, # Flags for this interface (see above.)
|
|
flags_mask=None, # If set, only these flags will be considered.
|
|
ieee80211w=None, # Management Frame Protection: 0: disabled, 1: optional, 2: Required.
|
|
key=None, # Encryption key (WEP, WPA, WPA2, WPA3, etc) for this Virtual STA. Prepend with 0x for ascii-hex input.
|
|
mac=None, # The MAC address, can also use parent-pattern in 5.3.8 and higher: <tt>xx:xx:xx:*:*:xx</tt>
|
|
max_amsdu=None, # 1 == enabled, 0 == disabled, 0xFF == do not set.
|
|
mode=None, # WiFi mode: <ul><li>0: AUTO, <li>1: 802.11a</li> <li>2: b</li> <li>3: g</li> <li>4: abg</li> <li>5: abgn</li> <li>6: bgn</li> <li>7: bg</li> <li>8: abgnAC</li> <li>9 anAC</li> <li>10 an</li><li>11 bgnAC</li><li>12 abgnAX</li><li>13 bgnAX</li><li>14 anAX</li><li>15 aAX</li></ul>
|
|
nickname=None, # Nickname for this Virtual STA. (No longer used)
|
|
radio=None, # Name of the physical radio interface, for example: wiphy0
|
|
rate=None, # Max rate, see help above.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
ssid=None, # SSID for this Virtual STA. Use [BLANK] for empty SSID. Start with <tt>0x</tt> for HEX interpretation.
|
|
sta_br_ip=None, # IP Address for station bridging. Set to 0.0.0.0 to use MAC bridging.
|
|
sta_name=None, # Name for this Virtual STA, for example: sta0
|
|
wpa_cfg_file=None, # WPA Supplicant config file.
|
|
x_coord=None, # Floating point number.
|
|
y_coord=None, # Floating point number.
|
|
z_coord=None, # Floating point number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_sta(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"ampdu_density" : ampdu_density,
|
|
"ampdu_factor" : ampdu_factor,
|
|
"ap" : ap,
|
|
"flags" : flags,
|
|
"flags_mask" : flags_mask,
|
|
"ieee80211w" : ieee80211w,
|
|
"key" : key,
|
|
"mac" : mac,
|
|
"max_amsdu" : max_amsdu,
|
|
"mode" : mode,
|
|
"nickname" : nickname,
|
|
"radio" : radio,
|
|
"rate" : rate,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"ssid" : ssid,
|
|
"sta_br_ip" : sta_br_ip,
|
|
"sta_name" : sta_name,
|
|
"wpa_cfg_file" : wpa_cfg_file,
|
|
"x_coord" : x_coord,
|
|
"y_coord" : y_coord,
|
|
"z_coord" : z_coord,
|
|
}
|
|
response = self.json_post("/cli-json/add_sta",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_T1_SPAN> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_t1_span
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_t1_span_buildout(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_t1_span_buildout.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_t1_span_buildout.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
p_15db = 6 # -15db (CSU)
|
|
p_22_5db = 7 # -22.5db (CSU)
|
|
p_7_5db = 5 # -7.5db (CSU)
|
|
p_0db = 8 # 0db (CSU)
|
|
p_133_ft = 0 # 1-133 feet
|
|
p_266_ft = 1 # 122-266 feet
|
|
p_399_ft = 2 # 266-399 feet
|
|
p_533_ft = 3 # 399-533 feet
|
|
p_655_ft = 4 # 533-655 feet
|
|
|
|
|
|
def post_add_t1_span(self,
|
|
buildout=None, # Buildout, Integer, see above.
|
|
coding=None, # Coding: T1: ami or b8zs. E1: ami or hdb3
|
|
cpu_id=None, # CPU identifier (A, B, etc) for multiport Sangoma resources.
|
|
first_channel=None, # The first DS0 channel for this span.
|
|
framing=None, # Framing: T1: esf or d4. E1: cas or ccs.
|
|
mtu=None, # MTU for this span (used by in-band management, if at all).
|
|
pci_bus=None, # PCI Bus number, needed for Sangoma resources.
|
|
pci_slot=None, # PCI slot number, needed for Sangoma resources.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf name/id.
|
|
span_num=None, # The span number. First span is 1, second is 2...
|
|
timing=None, # Timing: 0 == do not use, 1 == primary, 2 == secondary..
|
|
type=None, # Currently supported types are: Sangoma_T1, Sangoma_E1, Digium_T1
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_t1_span(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"buildout" : buildout,
|
|
"coding" : coding,
|
|
"cpu_id" : cpu_id,
|
|
"first_channel" : first_channel,
|
|
"framing" : framing,
|
|
"mtu" : mtu,
|
|
"pci_bus" : pci_bus,
|
|
"pci_slot" : pci_slot,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"span_num" : span_num,
|
|
"timing" : timing,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/add_t1_span",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_TEXT_BLOB> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_text_blob
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_text_blob(self,
|
|
name=None, # Text name, for instance '2-AP-test-case'
|
|
text=None, # [BLANK] will erase all, any other text will be appended to existing text. <tt escapearg='false'>Unescaped Value</tt>
|
|
type=None, # Text type identifier stream, for instance 'cv-connectivity'
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_text_blob(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
"text" : text,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/add_text_blob",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_TGCX> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_tgcx
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_tgcx(self,
|
|
cxname=None, # The name of the CX.
|
|
tgname=None, # The name of the test group.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_tgcx(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cxname" : cxname,
|
|
"tgname" : tgname,
|
|
}
|
|
response = self.json_post("/cli-json/add_tgcx",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_THRESHOLD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_threshold
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_threshold_thresh_id(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_threshold_thresh_id.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_threshold_thresh_id.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
Delete_Marked = -3 # Delete any marked.
|
|
Mark_All = -2 # Mark all
|
|
|
|
class add_threshold_thresh_type(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_threshold_thresh_type.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_threshold_thresh_type.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
NO_RX_SINCE = 6 # Have not received any bytes/packets in specified time.
|
|
RX_BPS_RATE_OOR_1m = 5 # rx-bps over last 1 minute is out of range.
|
|
RX_BPS_RATE_OOR_30S = 3 # rx-bps over last 30 seconds is out of range.
|
|
RX_BPS_RATE_OOR_3S = 1 # rx-bps over last 3 seconds is out of range.
|
|
TT_RX_DROP_OOR = 8 # RX Drop percentage is out of range (per-million).
|
|
TT_RX_LAT_OOR = 7 # Latency running-average out of range.
|
|
TX_BPS_RATE_OOR_1m = 4 # tx-bps over last 1 minute is out of range.
|
|
TX_BPS_RATE_OOR_30S = 2 # tx-bps over last 30 seconds is out of range.
|
|
TX_BPS_RATE_OOR_3S = 0 # tx-bps over last 3 seconds is out of range.
|
|
|
|
|
|
def post_add_threshold(self,
|
|
endp=None, # Endpoint name or ID.
|
|
thresh_id=None, # Threshold ID. If adding new threshold, use -1, otherwise use correct ID.
|
|
thresh_max=None, # Maximum acceptable value for this threshold.
|
|
thresh_min=None, # Minimum acceptable value for this threshold.
|
|
thresh_type=None, # Threshold type, integer, (see above).
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_threshold(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endp" : endp,
|
|
"thresh_id" : thresh_id,
|
|
"thresh_max" : thresh_max,
|
|
"thresh_min" : thresh_min,
|
|
"thresh_type" : thresh_type,
|
|
}
|
|
response = self.json_post("/cli-json/add_threshold",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_TM> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_tm
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_tm(self,
|
|
name=None, # The name of the test manager. Must be unique across test managers.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_tm(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/add_tm",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_TRAFFIC_PROFILE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_traffic_profile
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_traffic_profile_traffic_profile_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
BI_DIRECTIONAL = 0x2 # Should we do bi-directional traffic?
|
|
IPERF_UDP = 0x4 # If Iperf, should use UDP. If not set, then will use TCP.
|
|
UP = 0x1 # Upload direction (this not set means download)
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_traffic_profile_traffic_profile_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_traffic_profile_traffic_profile_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_traffic_profile_traffic_profile_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_traffic_profile_traffic_profile_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class add_traffic_profile_wifi_mode(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_traffic_profile_wifi_mode.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_traffic_profile_wifi_mode.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
Iperf3_Client = "Iperf3-Client" # iperf3 client
|
|
Iperf3_Server = "Iperf3-Server" # iperf3 server
|
|
as_is = "as_is" # Make no changes to current configuration
|
|
http = "http" # Not yet implemented
|
|
https = "https" # Not yet implemented
|
|
tcp = "tcp"
|
|
udp = "udp"
|
|
|
|
|
|
def post_add_traffic_profile(self,
|
|
instance_count=None, # Number of connections per device
|
|
max_pdu=None, # Minimum PDU size
|
|
max_speed=None, # Opposite-Direction Speed in bps.
|
|
min_pdu=None, # Minimum PDU size
|
|
min_speed=None, # Opposite-Direction Speed in bps.
|
|
name=None, # Profile Name.
|
|
tos=None, # IP Type-of-Service
|
|
traffic_profile_flags=None, # Flags for this profile, none defined at this point.
|
|
traffic_profile_flags_mask=None, # Specify what flags to set.
|
|
type=None, # Profile type: See above..
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_traffic_profile(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"instance_count" : instance_count,
|
|
"max_pdu" : max_pdu,
|
|
"max_speed" : max_speed,
|
|
"min_pdu" : min_pdu,
|
|
"min_speed" : min_speed,
|
|
"name" : name,
|
|
"tos" : tos,
|
|
"traffic_profile_flags" : traffic_profile_flags,
|
|
"traffic_profile_flags_mask" : traffic_profile_flags_mask,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/add_traffic_profile",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_TRAFFIC_PROFILE_NOTES> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_traffic_profile_notes
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_traffic_profile_notes(self,
|
|
dut=None, # Profile Name.
|
|
text=None, # [BLANK] will erase all, any other text will be appended to existing text. <tt escapearg='false'>Unescaped Value</tt>
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_traffic_profile_notes(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"dut" : dut,
|
|
"text" : text,
|
|
}
|
|
response = self.json_post("/cli-json/add_traffic_profile_notes",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_VAP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_vap
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_vap_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
p_80211h_enable = 0x10000000 # Enable 802.11h (needed for running on DFS channels) Requires 802.11d.
|
|
p_80211r_pmska_cache = 0x4000000 # Enable oportunistic PMSKA caching for WPA2 (Related to 802.11r).
|
|
p_80211u_additional = 0x100000 # AP requires additional step for access (802.11u Interworking)
|
|
p_80211u_auto = 0x40000 # Enable 802.11u (Interworking) Auto-internetworking feature. Always enabled currently.
|
|
p_80211u_e911 = 0x200000 # AP claims emergency services reachable (802.11u Interworking)
|
|
p_80211u_e911_unauth = 0x400000 # AP provides Unauthenticated emergency services (802.11u Interworking)
|
|
p_80211u_enable = 0x20000 # Enable 802.11u (Interworking) feature.
|
|
p_80211u_gw = 0x80000 # AP Provides access to internet (802.11u Interworking)
|
|
p_8021x_radius = 0x2000000 # Use 802.1x (RADIUS for AP).
|
|
create_admin_down = 0x1000000000 # Station should be created admin-down.
|
|
disable_dgaf = 0x1000000 # AP Disable DGAF (used by HotSpot 2.0).
|
|
disable_ht40 = 0x800 # Disable HT-40 (will use HT-20 if available).
|
|
disable_ht80 = 0x8000000 # Disable HT80 (for AC chipset NICs only)
|
|
enable_80211d = 0x40 # Enable 802.11D to broadcast country-code & channels in VAPs
|
|
enable_wpa = 0x10 # Enable WPA
|
|
hostapd_config = 0x20 # Use Custom hostapd config file.
|
|
hs20_enable = 0x800000 # Enable Hotspot 2.0 (HS20) feature. Requires WPA-2.
|
|
ht160_enable = 0x100000000 # Enable HT160 mode.
|
|
osen_enable = 0x40000000 # Enable OSEN protocol (OSU Server-only Authentication)
|
|
pri_sec_ch_enable = 0x100 # Enable Primary/Secondary channel switch.
|
|
short_preamble = 0x80 # Allow short-preamble
|
|
use_bss_load = 0x20000000000 # Enable BSS Load IE in Beacons and Probe Responses (.11e).
|
|
use_bss_transition = 0x80000000000 # Enable BSS transition.
|
|
use_rrm_report = 0x40000000000 # Enable Radio measurements IE in beacon and probe responses.
|
|
use_wpa3 = 0x10000000000 # Enable WPA-3 (SAE Personal) mode.
|
|
verbose = 0x10000 # Verbose-Debug: Increase debug info in wpa-supplicant and hostapd logs.
|
|
wep_enable = 0x200 # Enable WEP Encryption
|
|
wpa2_enable = 0x400 # Enable WPA2 Encryption
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_vap_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_vap_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_vap_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_vap_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class add_vap_mode(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_vap_mode.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_vap_mode.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
p_802_11a = 1 # 802.11a
|
|
AUTO = 0 # 802.11g
|
|
aAX = 15 # 802.11a-AX (6E disables /n and /ac)
|
|
abg = 4 # 802.11abg
|
|
abgn = 5 # 802.11abgn
|
|
abgnAC = 8 # 802.11abgn-AC
|
|
abgnAX = 12 # 802.11abgn-AX
|
|
an = 10 # 802.11an
|
|
anAC = 9 # 802.11an-AC
|
|
anAX = 14 # 802.11an-AX
|
|
b = 2 # 802.11b
|
|
bg = 7 # 802.11bg
|
|
bgn = 6 # 802.11bgn
|
|
bgnAC = 11 # 802.11bgn-AC
|
|
bgnAX = 13 # 802.11bgn-AX
|
|
g = 3 # 802.11g
|
|
|
|
|
|
def post_add_vap(self,
|
|
ap_name=None, # Name for this Virtual AP, for example: vap0
|
|
beacon=None, # The beacon interval, in 1kus (1.024 ms), default 100, range: 15..65535
|
|
custom_cfg=None, # Custom hostapd config file, if you want to craft your own config.
|
|
dtim_period=None, # DTIM period, range 1..255. Default 2.
|
|
flags=None, # Flags for this interface (see above.)
|
|
flags_mask=None, # If set, only these flags will be considered.
|
|
frag_thresh=None, # UN-USED, Was Fragmentation threshold, which is now set with set_wifi_radio, use NA
|
|
ieee80211w=None, # Management Frame Protection: 0: disabled, 1: optional, 2: Required.
|
|
key=None, # Encryption key for this Virtual AP. Prepend with 0x for ascii-hex representation.
|
|
mac=None, # The MAC address, can also use parent-pattern in 5.3.8 and higher: <tt>xx:xx:xx:*:*:xx</tt>
|
|
max_sta=None, # Maximum number of Stations allowed to join this AP (1..2007)
|
|
mode=None, # WiFi mode: see table
|
|
radio=None, # Name of the physical radio interface, for example: wiphy0
|
|
rate=None, # Max rate, see help for add_vsta
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
ssid=None, # SSID for this Virtual AP.
|
|
x_coord=None, # Floating point number.
|
|
y_coord=None, # Floating point number.
|
|
z_coord=None, # Floating point number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_vap(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"ap_name" : ap_name,
|
|
"beacon" : beacon,
|
|
"custom_cfg" : custom_cfg,
|
|
"dtim_period" : dtim_period,
|
|
"flags" : flags,
|
|
"flags_mask" : flags_mask,
|
|
"frag_thresh" : frag_thresh,
|
|
"ieee80211w" : ieee80211w,
|
|
"key" : key,
|
|
"mac" : mac,
|
|
"max_sta" : max_sta,
|
|
"mode" : mode,
|
|
"radio" : radio,
|
|
"rate" : rate,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"ssid" : ssid,
|
|
"x_coord" : x_coord,
|
|
"y_coord" : y_coord,
|
|
"z_coord" : z_coord,
|
|
}
|
|
response = self.json_post("/cli-json/add_vap",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_VENUE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_venue
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_venue_freq_24(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
ALL = 0xffff # ALL
|
|
Ch_1 = 0x1 # Channel 1
|
|
Ch_2 = 0x2 # Channel 2
|
|
Ch_3 = 0x4 # Channel 3
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_venue_freq_24.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_venue_freq_24.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_venue_freq_24.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_venue_freq_24.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class add_venue_freq_5(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
Ch_100 = 0x800 # Channel 100 5500
|
|
Ch_104 = 0x1000 # Channel 104 5520
|
|
Ch_108 = 0x2000 # Channel 108 5540
|
|
Ch_112 = 0x4000 # Channel 112 5560
|
|
Ch_116 = 0x8000 # Channel 116 5580
|
|
Ch_120 = 0x10000 # Channel 120 5600
|
|
Ch_124 = 0x20000 # Channel 124 5620
|
|
Ch_128 = 0x40000 # Channel 128 5640
|
|
Ch_132 = 0x80000 # Channel 132 5660
|
|
Ch_136 = 0x100000 # Channel 136 5680
|
|
Ch_140 = 0x200000 # Channel 140 5700
|
|
Ch_149 = 0x400000 # Channel 149 5745
|
|
Ch_153 = 0x800000 # Channel 153 5765
|
|
Ch_157 = 0x1000000 # Channel 157 5785
|
|
Ch_161 = 0x2000000 # Channel 161 5805
|
|
Ch_165 = 0x4000000 # Channel 165 5825
|
|
Ch_36 = 0x1 # Channel 36 5180
|
|
Ch_38 = 0x2 # Channel 38 5190
|
|
Ch_40 = 0x4 # Channel 40 5200
|
|
Ch_42 = 0x8 # Channel 42 5210
|
|
Ch_44 = 0x10 # Channel 44 5220
|
|
Ch_46 = 0x20 # Channel 46 5230
|
|
Ch_48 = 0x40 # Channel 48 5240
|
|
Ch_52 = 0x80 # Channel 52 5260
|
|
Ch_56 = 0x100 # Channel 56 5280
|
|
Ch_60 = 0x200 # Channel 60 5300
|
|
Ch_64 = 0x400 # Channel 64 5320
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_venue_freq_5.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_venue_freq_5.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_venue_freq_5.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_venue_freq_5.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_add_venue(self,
|
|
description=None, # User-supplied description, ie: <tt>Big City Ball Park</tt>; 47-characters max.
|
|
freq_24=None, # Frequency list for 2.4Ghz band, see above.
|
|
freq_5=None, # Frequency list for 5Ghz band, see above.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
venu_id=None, # Number to uniquely identify this venue on this resource.
|
|
x1=None, # Floating point coordinate for lower-left corner.
|
|
x2=None, # Floating point coordinate for upper-right corner.
|
|
y1=None, # Floating point coordinate for lower-left corner.
|
|
y2=None, # Floating point coordinate for upper-right corner.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_venue(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"description" : description,
|
|
"freq_24" : freq_24,
|
|
"freq_5" : freq_5,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"venu_id" : venu_id,
|
|
"x1" : x1,
|
|
"x2" : x2,
|
|
"y1" : y1,
|
|
"y2" : y2,
|
|
}
|
|
response = self.json_post("/cli-json/add_venue",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_VLAN> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_vlan
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_vlan(self,
|
|
old_name=None, # The temporary name, used for configuring un-discovered hardware.
|
|
port=None, # Port number of an existing Ethernet interface.
|
|
report_timer=None, # Report timer for this port, leave blank or use NA for defaults.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
vid=None, # The VLAN-ID for this 802.1Q VLAN interface.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_vlan(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"old_name" : old_name,
|
|
"port" : port,
|
|
"report_timer" : report_timer,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"vid" : vid,
|
|
}
|
|
response = self.json_post("/cli-json/add_vlan",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_VOIP_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_voip_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_voip_endp(self,
|
|
alias=None, # Name of endpoint.
|
|
auth_user_name=None, # Use this field for authentication user name. AUTO or blank mean use phone number.
|
|
display_name=None, # User-Name to be displayed. Use AUTO to display phone number.
|
|
gateway_port=None, # IP Port for SIP gateway (defaults to 5060).
|
|
ip_addr=None, # Use this IP for local IP address. Useful when there are multiple IPs on a port.
|
|
peer_phone_num=None, # Use AUTO to use phone number of peer endpoint, otherwise specify a number: user[@host[:port]]
|
|
phone_num=None, # Phone number for Endpoint
|
|
port=None, # Port number or name.
|
|
proxy_passwd=None, # Password to be used when registering with proxy/gateway.
|
|
resource=None, # Resource number.
|
|
rtp_port=None, # RTP port to use for send and receive.
|
|
rx_sound_file=None, # File name to save received PCM data to. Will be in WAV format, or AUTO
|
|
shelf=None, # Shelf name/id.
|
|
sip_gateway=None, # SIP Gateway/Proxy Name, this is who to register with, or AUTO
|
|
tx_sound_file=None, # File name containing the sound sample we will be playing.
|
|
vad_max_timer=None, # How often should we force a packet, even if VAD is on.
|
|
vad_timer=None, # How much silence (milliseconds) before VAD is enabled.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_voip_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias" : alias,
|
|
"auth_user_name" : auth_user_name,
|
|
"display_name" : display_name,
|
|
"gateway_port" : gateway_port,
|
|
"ip_addr" : ip_addr,
|
|
"peer_phone_num" : peer_phone_num,
|
|
"phone_num" : phone_num,
|
|
"port" : port,
|
|
"proxy_passwd" : proxy_passwd,
|
|
"resource" : resource,
|
|
"rtp_port" : rtp_port,
|
|
"rx_sound_file" : rx_sound_file,
|
|
"shelf" : shelf,
|
|
"sip_gateway" : sip_gateway,
|
|
"tx_sound_file" : tx_sound_file,
|
|
"vad_max_timer" : vad_max_timer,
|
|
"vad_timer" : vad_timer,
|
|
}
|
|
response = self.json_post("/cli-json/add_voip_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_VR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_vr
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_vr_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
p_4BYTE_AS_NUMBER = 0x40 # Sets corresponding Xorp flag.
|
|
BGP_CONFED = 0x100 # Configure BGP in a confederation.
|
|
BGP_DAMPING = 0x200 # Enable BGP damping section in Xorp configuration file.
|
|
ENABLE_BGP = 0x20 # Set this to zero if you don't want BGP on this VR.
|
|
RIP_ACCEPT_DR = 0x800 # Tell RIP to accept default-routes.
|
|
ROUTE_REFLECTOR = 0x80 # Act as BGP Route Reflector.
|
|
USE_IPV6 = 0x10 # Enable IPv6 OSPF routing for this virtual router.
|
|
USE_IPV6_RADVD = 0x8 # Enable IPv6 RADV Daemon for interfaces in this virtual router.
|
|
USE_RIP = 0x400 # Enable RIP routing protocol in Xorp.
|
|
USE_XORP_MCAST = 0x2 # Enable Xorp Multicast routing (requires OSPF to be enabled currently)
|
|
USE_XORP_OLSR = 0x1000 # Enable OLSR routing protocol in Xorp.
|
|
USE_XORP_OSPF = 0x1 # Enable Xorp router daemon with OSPF (IPv4) protocol
|
|
USE_XORP_SHA = 0x4 # Enable Telcordia's Xorp SHA option (requires OSPF to be enabled)
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_vr_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_vr_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_vr_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_vr_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_add_vr(self,
|
|
alias=None, # Name of virtual router.
|
|
flags=None, # Virtual router flags, see above for definitions.
|
|
height=None, # Height to be used when drawn in the LANforge-GUI.
|
|
notes=None, # Notes for this Virtual Router. Put in quotes if the notes include white-space.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf name/id.
|
|
vr_id=None, # Leave blank, use NA or 0xFFFF unless you are certain of the value you want to enter.
|
|
width=None, # Width to be used when drawn in the LANforge-GUI.
|
|
x=None, # X coordinate to be used when drawn in the LANforge-GUI.
|
|
y=None, # Y coordinate to be used when drawn in the LANforge-GUI.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_vr(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias" : alias,
|
|
"flags" : flags,
|
|
"height" : height,
|
|
"notes" : notes,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"vr_id" : vr_id,
|
|
"width" : width,
|
|
"x" : x,
|
|
"y" : y,
|
|
}
|
|
response = self.json_post("/cli-json/add_vr",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_VR_BGP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_vr_bgp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_vr_bgp_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
p_4BYTE_AS_NUMBER = 0x40 # Sets corresponding Xorp flag.
|
|
BGP_CONFED = 0x100 # Configure BGP in a confederation.
|
|
BGP_DAMPING = 0x200 # Enable BGP damping section in Xorp configuration file.
|
|
ENABLE_BGP = 0x20 # Set this to zero if you don't want BGP on this VR.
|
|
ROUTE_REFLECTOR = 0x80 # Act as BGP Route Reflector.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_vr_bgp_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_vr_bgp_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_vr_bgp_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_vr_bgp_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_add_vr_bgp(self,
|
|
bgp_id=None, # BGP Identifier: IPv4 Address
|
|
cluster_id=None, # Cluster ID, IPv4 Address. Use NA if not clustering.
|
|
confed_id=None, # Confederation ID 1-65535. Use NA if not in a confederation.
|
|
flags=None, # Virtual router BGP flags, see above for definitions.
|
|
half_life=None, # Halflife in minutes for damping configuration.
|
|
local_as=None, # BGP Autonomous System number, 1-65535
|
|
max_suppress=None, # Maximum hold down time in minutes for damping configuration.
|
|
resource=None, # Resource number.
|
|
reuse=None, # Route flag damping reuse threshold, in minutes.
|
|
shelf=None, # Shelf name/id.
|
|
suppress=None, # Route flag damping cutoff threshold, in minutes.
|
|
vr_id=None, # Name of virtual router.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_vr_bgp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"bgp_id" : bgp_id,
|
|
"cluster_id" : cluster_id,
|
|
"confed_id" : confed_id,
|
|
"flags" : flags,
|
|
"half_life" : half_life,
|
|
"local_as" : local_as,
|
|
"max_suppress" : max_suppress,
|
|
"resource" : resource,
|
|
"reuse" : reuse,
|
|
"shelf" : shelf,
|
|
"suppress" : suppress,
|
|
"vr_id" : vr_id,
|
|
}
|
|
response = self.json_post("/cli-json/add_vr_bgp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_VRCX> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_vrcx
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_vrcx_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
custom_dhcpd = 0x400 # Use custom DHCP config file
|
|
dhcpd_enabled = 0x200 # Serve IPv4 DHCP on this interface
|
|
ipv6_enabled = 0x2000 # Serve IPv6 DHCP on this interface
|
|
nat_enabled = 0x100 # This connection will NAT outgoing packets
|
|
subnet_0 = 0x1 # Specify subnet 0
|
|
subnet_1 = 0x2 # Specify subnet 1
|
|
subnet_2 = 0x4 # Specify subnet 2
|
|
subnet_3 = 0x8 # Specify subnet 3
|
|
subnet_4 = 0x10 # Specify subnet 4
|
|
subnet_5 = 0x20 # Specify subnet 5
|
|
subnet_6 = 0x40 # Specify subnet 6
|
|
subnet_7 = 0x80 # Specify subnet 7
|
|
use_multicast = 0x800 # Use this interface for multicast and-rp
|
|
use_vrrp = 0x1000 # Use this interface for VRRP
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_vrcx_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+add_vrcx_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_vrcx_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+add_vrcx_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_add_vrcx(self,
|
|
dhcp_dns=None, # IP Address of DNS server.
|
|
dhcp_dns6=None, # IPv6 Address of DNS server.
|
|
dhcp_domain=None, # DHCP Domain name to serve.
|
|
dhcp_lease_time=None, # DHCP Lease time (in seconds)
|
|
dhcp_max=None, # Minimum IP address range to serve.
|
|
dhcp_max6=None, # Minimum IPv6 address to serve.
|
|
dhcp_min=None, # Minimum IP address range to serve.
|
|
dhcp_min6=None, # Minimum IPv6 address to serve.
|
|
flags=None, # Flags, specify if subnets 0-7 are in use, see above for others.
|
|
height=None, # Height to be used when drawn in the LANforge-GUI.
|
|
interface_cost=None, # If using OSPF, this sets the cost for this link (1-65535).
|
|
local_dev=None, # Name of port A, the local network device pair.
|
|
local_dev_b=None, # Name of port B for the local redirect device pair.
|
|
nexthop=None, # The next-hop to use when routing packets out this interface.
|
|
ospf_area=None, # If using OSPF, this sets the OSPF area for this interface. Default is 0.0.0.0.
|
|
remote_dev=None, # Name the remote network device.
|
|
remote_dev_b=None, # Name of port B for the remote network device.
|
|
resource=None, # Resource number.
|
|
rip_metric=None, # If using RIP, this determines the RIP metric (cost), (1-15, 15 is infinite).
|
|
shelf=None, # Shelf name/id.
|
|
subnets=None, # Subnets associated with this link, format: 1.1.1.1/24,1.1.2.1/16...
|
|
vr_name=None, # Virtual Router this endpoint belongs to. Use 'FREE_LIST' to add a stand-alone endpoint.
|
|
vrrp_id=None, # VRRP id, must be unique in this virtual router (1-255)
|
|
vrrp_interval=None, # VRRP broadcast message interval, in seconds (1-255)
|
|
vrrp_ip=None, # VRRP IPv4 address..ignored if not flagged for VRRP.
|
|
vrrp_ip_prefix=None, # Number of bits in subnet mask, ie 24 for 255.255.255.0
|
|
vrrp_priority=None, # VRRP Priority (1-255, higher is more priority.)
|
|
wanlink=None, # The name of the WanLink that connects the two B ports.
|
|
width=None, # Width to be used when drawn in the LANforge-GUI.
|
|
x=None, # X coordinate to be used when drawn in the LANforge-GUI.
|
|
y=None, # Y coordinate to be used when drawn in the LANforge-GUI.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_vrcx(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"dhcp_dns" : dhcp_dns,
|
|
"dhcp_dns6" : dhcp_dns6,
|
|
"dhcp_domain" : dhcp_domain,
|
|
"dhcp_lease_time" : dhcp_lease_time,
|
|
"dhcp_max" : dhcp_max,
|
|
"dhcp_max6" : dhcp_max6,
|
|
"dhcp_min" : dhcp_min,
|
|
"dhcp_min6" : dhcp_min6,
|
|
"flags" : flags,
|
|
"height" : height,
|
|
"interface_cost" : interface_cost,
|
|
"local_dev" : local_dev,
|
|
"local_dev_b" : local_dev_b,
|
|
"nexthop" : nexthop,
|
|
"ospf_area" : ospf_area,
|
|
"remote_dev" : remote_dev,
|
|
"remote_dev_b" : remote_dev_b,
|
|
"resource" : resource,
|
|
"rip_metric" : rip_metric,
|
|
"shelf" : shelf,
|
|
"subnets" : subnets,
|
|
"vr_name" : vr_name,
|
|
"vrrp_id" : vrrp_id,
|
|
"vrrp_interval" : vrrp_interval,
|
|
"vrrp_ip" : vrrp_ip,
|
|
"vrrp_ip_prefix" : vrrp_ip_prefix,
|
|
"vrrp_priority" : vrrp_priority,
|
|
"wanlink" : wanlink,
|
|
"width" : width,
|
|
"x" : x,
|
|
"y" : y,
|
|
}
|
|
response = self.json_post("/cli-json/add_vrcx",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_VRCX2> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_vrcx2
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_add_vrcx2(self,
|
|
local_dev=None, # Name of port A for the connection.
|
|
nexthop6=None, # The IPv6 next-hop to use when routing packets out this interface.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf name/id.
|
|
subnets6=None, # IPv6 Subnets associated with this link, format: aaaa:bbbb::0/64,cccc:dddd:eeee::0/64...
|
|
vr_name=None, # Virtual Router this endpoint belongs to. Use 'FREE_LIST' to add a stand-alone endpoint.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_vrcx2(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"local_dev" : local_dev,
|
|
"nexthop6" : nexthop6,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"subnets6" : subnets6,
|
|
"vr_name" : vr_name,
|
|
}
|
|
response = self.json_post("/cli-json/add_vrcx2",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADD_WL_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#add_wl_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class add_wl_endp_wle_flags(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
add_wl_endp_wle_flags.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+add_wl_endp_wle_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
SHOW_WP = 1 # Show WanPaths in wanlink endpoint table in GUI
|
|
|
|
|
|
def post_add_wl_endp(self,
|
|
alias=None, # Name of WanPath.
|
|
cpu_id=None, # The CPU/thread that this process should run on (kernel-mode only).
|
|
description=None, # Description for this endpoint, put in single quotes if it contains spaces.
|
|
dest_ip=None, # Selection filter: Destination IP.
|
|
dest_ip_mask=None, # Selection filter: Destination IP MASK.
|
|
drop_every_xth_pkt=None, # YES to periodically drop every Xth pkt, NO to drop packets randomly.
|
|
drop_freq=None, # How often, out of 1,000,000 packets, should we purposefully drop a packet.
|
|
dup_every_xth_pkt=None, # YES to periodically duplicate every Xth pkt, NO to duplicate packets randomly.
|
|
dup_freq=None, # How often, out of 1,000,000 packets, should we purposefully duplicate a packet.
|
|
extra_buffer=None, # The extra amount of bytes to buffer before dropping pkts, in units of 1024, use -1 for AUTO.
|
|
ignore_bandwidth=None, # Should we ignore the bandwidth settings from the playback file? YES, NO, or NA.
|
|
ignore_dup=None, # Should we ignore the Duplicate Packet settings from the playback file? YES, NO, or NA.
|
|
ignore_latency=None, # Should we ignore the latency settings from the playback file? YES, NO, or NA.
|
|
ignore_loss=None, # Should we ignore the packet-loss settings from the playback file? YES, NO, or NA.
|
|
jitter_freq=None, # How often, out of 1,000,000 packets, should we apply random jitter.
|
|
latency=None, # The base latency added to all packets, in milliseconds (or add 'us' suffix for microseconds)
|
|
max_drop_amt=None, # Maximum amount of packets to drop in a row. Default is 1.
|
|
max_jitter=None, # The maximum jitter, in milliseconds (or add 'us' suffix for microseconds)
|
|
max_lateness=None, # Maximum amount of un-intentional delay before pkt is dropped. Default is AUTO
|
|
max_rate=None, # Maximum transmit rate (bps) for this WanLink.
|
|
max_reorder_amt=None, # Maximum amount of packets by which to reorder, Default is 10.
|
|
min_drop_amt=None, # Minimum amount of packets to drop in a row. Default is 1.
|
|
min_reorder_amt=None, # Minimum amount of packets by which to reorder, Default is 1.
|
|
playback_capture=None, # ON or OFF, should we play back a WAN capture file?
|
|
playback_capture_file=None, # Name of the WAN capture file to play back.
|
|
playback_loop=None, # Should we loop the playback file, YES or NO or NA.
|
|
port=None, # Port number.
|
|
reorder_every_xth_pkt=None, # YES to periodically reorder every Xth pkt, NO to reorder packets randomly.
|
|
reorder_freq=None, # How often, out of 1,000,000 packets, should we make a packet out of order.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf name/id.
|
|
source_ip=None, # Selection filter: Source IP.
|
|
source_ip_mask=None, # Selection filter: Source IP MASK.
|
|
speed=None, # The maximum speed this WanLink will accept (bps).
|
|
test_mgr=None, # The name of the Test-Manager this WanPath is to use. Leave blank for no restrictions.
|
|
wanlink=None, # Name of WanLink to which we are adding this WanPath.
|
|
wle_flags=None, # WanLink Endpoint specific flags, see above.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_add_wl_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias" : alias,
|
|
"cpu_id" : cpu_id,
|
|
"description" : description,
|
|
"dest_ip" : dest_ip,
|
|
"dest_ip_mask" : dest_ip_mask,
|
|
"drop_every_xth_pkt" : drop_every_xth_pkt,
|
|
"drop_freq" : drop_freq,
|
|
"dup_every_xth_pkt" : dup_every_xth_pkt,
|
|
"dup_freq" : dup_freq,
|
|
"extra_buffer" : extra_buffer,
|
|
"ignore_bandwidth" : ignore_bandwidth,
|
|
"ignore_dup" : ignore_dup,
|
|
"ignore_latency" : ignore_latency,
|
|
"ignore_loss" : ignore_loss,
|
|
"jitter_freq" : jitter_freq,
|
|
"latency" : latency,
|
|
"max_drop_amt" : max_drop_amt,
|
|
"max_jitter" : max_jitter,
|
|
"max_lateness" : max_lateness,
|
|
"max_rate" : max_rate,
|
|
"max_reorder_amt" : max_reorder_amt,
|
|
"min_drop_amt" : min_drop_amt,
|
|
"min_reorder_amt" : min_reorder_amt,
|
|
"playback_capture" : playback_capture,
|
|
"playback_capture_file" : playback_capture_file,
|
|
"playback_loop" : playback_loop,
|
|
"port" : port,
|
|
"reorder_every_xth_pkt" : reorder_every_xth_pkt,
|
|
"reorder_freq" : reorder_freq,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"source_ip" : source_ip,
|
|
"source_ip_mask" : source_ip_mask,
|
|
"speed" : speed,
|
|
"test_mgr" : test_mgr,
|
|
"wanlink" : wanlink,
|
|
"wle_flags" : wle_flags,
|
|
}
|
|
response = self.json_post("/cli-json/add_wl_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/ADMIN> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#admin
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_admin(self,
|
|
arg1=None, # Argument 1: xorp-port | scan-rslts-file | iface-name | iface-eid | rfgen-message | id
|
|
arg2=None, # Argument 2: scan key | message | angle | dest-radio
|
|
arg3=None, # Argument 3: noprobe | migrate-sta-mac-pattern
|
|
arg5=None, # Argument 4: table-speed
|
|
cmd=None, # Admin command: resync_clock|write_xorp_cfg|scan_complete|ifup_post_complete|flush_complete|req_migrate|rfgen|chamber|clean_logs
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_admin(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"arg1" : arg1,
|
|
"arg2" : arg2,
|
|
"arg3" : arg3,
|
|
"arg5" : arg5,
|
|
"cmd" : cmd,
|
|
}
|
|
response = self.json_post("/cli-json/admin",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/APPLY_VR_CFG> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#apply_vr_cfg
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_apply_vr_cfg(self,
|
|
resource=None, # The number of the resource in question, or 'ALL'.
|
|
shelf=None, # The number of the shelf in question, or 'ALL'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_apply_vr_cfg(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/apply_vr_cfg",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/BLINK_ATTENUATOR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#blink_attenuator
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_blink_attenuator(self,
|
|
resource=None, # Resource number.
|
|
serno=None, # Serial number for requested Attenuator, or 'all'.
|
|
shelf=None, # Shelf number, usually 1.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_blink_attenuator(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"serno" : serno,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/blink_attenuator",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/C_SHOW_PORTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#c_show_ports
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class c_show_ports_probe_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
BRIDGE = 0x8 # 8 include bridges
|
|
EASY_IP_INFO = 0x10 # 16 Everything but gateway information, which is expensive to probe.
|
|
ETHTOOL = 0x4 # 4 include ethtool results
|
|
GW = 0x20 # 32 include gateway information
|
|
GW_FORCE_REFRESH = 0x40 # 64 Force GW (re)probe. Otherwise, cached values *might* be used.
|
|
MII = 0x2 # 2 include MII
|
|
WIFI = 0x1 # 1 include wifi stations
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
c_show_ports_probe_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+c_show_ports_probe_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
c_show_ports_probe_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+c_show_ports_probe_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_c_show_ports(self,
|
|
port=None, # Port number, or 'all'.
|
|
probe_flags=None, # See above, add them together for multiple probings. Leave blank if you want stats only.
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_c_show_ports(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"port" : port,
|
|
"probe_flags" : probe_flags,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/c_show_ports",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/CANCEL_VR_CFG> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#cancel_vr_cfg
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_cancel_vr_cfg(self,
|
|
resource=None, # The number of the resource in question, or 'ALL'.
|
|
shelf=None, # The number of the shelf in question, or 'ALL'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_cancel_vr_cfg(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/cancel_vr_cfg",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/CLEAR_CD_COUNTERS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#clear_cd_counters
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_clear_cd_counters(self,
|
|
cd_name=None, # Name of Collision Domain, or 'all'. Null argument is same as 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_clear_cd_counters(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cd_name" : cd_name,
|
|
}
|
|
response = self.json_post("/cli-json/clear_cd_counters",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/CLEAR_CX_COUNTERS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#clear_cx_counters
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_clear_cx_counters(self,
|
|
cx_name=None, # Name of Cross Connect, or 'all'. Null argument is same as 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_clear_cx_counters(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cx_name" : cx_name,
|
|
}
|
|
response = self.json_post("/cli-json/clear_cx_counters",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/CLEAR_ENDP_COUNTERS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#clear_endp_counters
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_clear_endp_counters(self,
|
|
endp_name=None, # Name of Endpoint, or 'all'. Null argument is same as 'all'.
|
|
incr_seqno=None, # Enter 'YES' if you want the target to increment the cfg-seq-no.
|
|
just_latency=None, # Enter 'YES' if you only want to clear latency counters, and see above for RXGAP.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_clear_endp_counters(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endp_name" : endp_name,
|
|
"incr_seqno" : incr_seqno,
|
|
"just_latency" : just_latency,
|
|
}
|
|
response = self.json_post("/cli-json/clear_endp_counters",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/CLEAR_GROUP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#clear_group
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_clear_group(self,
|
|
name=None, # The name of the test group.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_clear_group(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/clear_group",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/CLEAR_PORT_COUNTERS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#clear_port_counters
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class clear_port_counters_extra(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
clear_port_counters_extra.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+clear_port_counters_extra.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
dhcp4_lease = "dhcp4_lease" # Remove dhcp lease files for IPv4 DHCP
|
|
dhcp6_lease = "dhcp6_lease" # Remove dhcp lease files for IPv6 DHCP
|
|
dhcp_leases = "dhcp_leases" # Remove dhcp lease files for IPv4 and IPv6 DHCP
|
|
|
|
|
|
def post_clear_port_counters(self,
|
|
extra=None, # Clear something else instead: dhcp4_lease | dhcp6_lease | dhcp_leases
|
|
port=None, # The number of the port in question, or 'ALL'.
|
|
resource=None, # The number of the resource in question, or 'ALL'.
|
|
shelf=None, # The number of the shelf in question, or 'ALL'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_clear_port_counters(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"extra" : extra,
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/clear_port_counters",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/CLEAR_RESOURCE_COUNTERS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#clear_resource_counters
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_clear_resource_counters(self,
|
|
resource=None, # The number of the resource in question, or 'ALL'.
|
|
shelf=None, # The number of the shelf in question, or 'ALL'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_clear_resource_counters(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/clear_resource_counters",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/CLEAR_WP_COUNTERS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#clear_wp_counters
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_clear_wp_counters(self,
|
|
endp_name=None, # Name of WanLink Endpoint.
|
|
wp_name=None, # Name of WanPath to clear.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_clear_wp_counters(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endp_name" : endp_name,
|
|
"wp_name" : wp_name,
|
|
}
|
|
response = self.json_post("/cli-json/clear_wp_counters",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/CREATE_CLIENT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#create_client
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_create_client(self,
|
|
name=None, # A single name with no white-spaces (15 characters or less)
|
|
password=None, # Can be blank or 'NA' if no password is set, otherwise must be the password. Use IGNORE for no change.
|
|
super_user=None, # 1 If you want this user to have Administrative powers, 0 or blank otherwise.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_create_client(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
"password" : password,
|
|
"super_user" : super_user,
|
|
}
|
|
response = self.json_post("/cli-json/create_client",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/DIAG> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#diag
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_diag(self,
|
|
arg1=None, # Optional: Endpoint name to diag.
|
|
type=None, # Default (blank) is everything, options: alerts, license, counters, fds, clients, endpoints, shelf, iobuffer.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_diag(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"arg1" : arg1,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/diag",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/DISCOVER> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#discover
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_discover(self,
|
|
disconnect=None, # Set to 'disconnect' to force disconnect to remote resource process.
|
|
resource=None, # Resource ID. Use if discovering Attenuators.
|
|
shelf=None, # Shelf-ID, only used if discovering Attenuators.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_discover(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"disconnect" : disconnect,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/discover",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/DO_PESQ> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#do_pesq
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_do_pesq(self,
|
|
endp_name=None, # Name of Endpoint.
|
|
result_file_name=None, # The name of the file received by the endpoint.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_do_pesq(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endp_name" : endp_name,
|
|
"result_file_name" : result_file_name,
|
|
}
|
|
response = self.json_post("/cli-json/do_pesq",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/FILE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#file
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_file(self,
|
|
card=None, # Card ID
|
|
cmd=None, # Only 'Download' supported for now, 'Upload' reserved for future use.
|
|
filename=None, # File to transfer.
|
|
shelf=None, # Shelf ID
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_file(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"card" : card,
|
|
"cmd" : cmd,
|
|
"filename" : filename,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/file",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/FLASH_ATTENUATOR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#flash_attenuator
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_flash_attenuator(self,
|
|
filename=None, # File to use when uploading to attenuator.
|
|
resource=None, # Resource number.
|
|
serno=None, # Serial number for requested Attenuator, or 'all'.
|
|
shelf=None, # Shelf number, usually 1.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_flash_attenuator(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"filename" : filename,
|
|
"resource" : resource,
|
|
"serno" : serno,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/flash_attenuator",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/GETAVGLATENCY> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#getavglatency
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_getavglatency(self,
|
|
aorb=None, # For AtoB, enter 'B', for BtoA, enter 'A'.
|
|
cx=None, # Cross-connect or Test-Group name
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_getavglatency(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"aorb" : aorb,
|
|
"cx" : cx,
|
|
}
|
|
response = self.json_post("/cli-json/getavglatency",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/GETINRXBPS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#getinrxbps
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_getinrxbps(self,
|
|
aorb=None, # For endpoint a, enter 'A', for endpoint b, enter 'B'.
|
|
cx=None, # Cross-connect or Test-Group name
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_getinrxbps(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"aorb" : aorb,
|
|
"cx" : cx,
|
|
}
|
|
response = self.json_post("/cli-json/getinrxbps",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/GETINRXRATE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#getinrxrate
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_getinrxrate(self,
|
|
aorb=None, # For endpoint a, enter 'A', for endpoint b, enter 'B'.
|
|
cx=None, # Cross-connect or Test-Group name
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_getinrxrate(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"aorb" : aorb,
|
|
"cx" : cx,
|
|
}
|
|
response = self.json_post("/cli-json/getinrxrate",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/GETINTXRATE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#getintxrate
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_getintxrate(self,
|
|
aorb=None, # For endpoint a, enter 'A', for endpoint b, enter 'B'.
|
|
cx=None, # Cross-connect or Test-Group name
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_getintxrate(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"aorb" : aorb,
|
|
"cx" : cx,
|
|
}
|
|
response = self.json_post("/cli-json/getintxrate",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/GETIPADD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#getipadd
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_getipadd(self,
|
|
aorb=None, # For endpoint a, enter 'A', for endpoint b, enter 'B'.
|
|
cx=None, # Cross-connect name
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_getipadd(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"aorb" : aorb,
|
|
"cx" : cx,
|
|
}
|
|
response = self.json_post("/cli-json/getipadd",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/GETMAC> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#getmac
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_getmac(self,
|
|
aorb=None, # For endpoint a, enter 'A', for endpoint b, enter 'B'.
|
|
cx=None, # Cross-connect name
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_getmac(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"aorb" : aorb,
|
|
"cx" : cx,
|
|
}
|
|
response = self.json_post("/cli-json/getmac",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/GETMASK> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#getmask
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_getmask(self,
|
|
aorb=None, # For endpoint a, enter 'A', for endpoint b, enter 'B'.
|
|
cx=None, # Cross-connect name
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_getmask(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"aorb" : aorb,
|
|
"cx" : cx,
|
|
}
|
|
response = self.json_post("/cli-json/getmask",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/GETPKTDROPS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#getpktdrops
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_getpktdrops(self,
|
|
aorb=None, # For AtoB, enter 'B', for BtoA, enter 'A'.
|
|
cx=None, # Cross-connect or Test-Group name
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_getpktdrops(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"aorb" : aorb,
|
|
"cx" : cx,
|
|
}
|
|
response = self.json_post("/cli-json/getpktdrops",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/GETRXENDPERRPKTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#getrxendperrpkts
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_getrxendperrpkts(self,
|
|
aorb=None, # For AtoB, enter 'B', for BtoA, enter 'A'.
|
|
cx=None, # Cross-connect or Test-Group name
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_getrxendperrpkts(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"aorb" : aorb,
|
|
"cx" : cx,
|
|
}
|
|
response = self.json_post("/cli-json/getrxendperrpkts",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/GETRXPKTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#getrxpkts
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_getrxpkts(self,
|
|
aorb=None, # For endpoint a, enter 'A', for endpoint b, enter 'B'.
|
|
cx=None, # Cross-connect or Test-Group name
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_getrxpkts(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"aorb" : aorb,
|
|
"cx" : cx,
|
|
}
|
|
response = self.json_post("/cli-json/getrxpkts",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/GETRXPORTERRPKTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#getrxporterrpkts
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_getrxporterrpkts(self,
|
|
aorb=None, # For AtoB, enter 'B', for BtoA, enter 'A'.
|
|
cx=None, # Cross-connect name
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_getrxporterrpkts(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"aorb" : aorb,
|
|
"cx" : cx,
|
|
}
|
|
response = self.json_post("/cli-json/getrxporterrpkts",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/GETTXPKTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#gettxpkts
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_gettxpkts(self,
|
|
aorb=None, # For endpoint a, enter 'A', for endpoint b, enter 'B'.
|
|
cx=None, # Cross-connect or Test-Group name
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_gettxpkts(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"aorb" : aorb,
|
|
"cx" : cx,
|
|
}
|
|
response = self.json_post("/cli-json/gettxpkts",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/GOSSIP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#gossip
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_gossip(self,
|
|
message=None, # Message to show to others currently logged on. <tt escapearg='false'>Unescaped Value</tt>
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_gossip(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"message" : message,
|
|
}
|
|
response = self.json_post("/cli-json/gossip",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/HELP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#help
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_help(self,
|
|
command=None, # The command to get help for. Can be 'all', or blank.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_help(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"command" : command,
|
|
}
|
|
response = self.json_post("/cli-json/help",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/INIT_WISER> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#init_wiser
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_init_wiser(self,
|
|
file_name=None, # The WISER file name for the desired emulation, or 'NA' for empty string.
|
|
node_count=None, # The number of WISER nodes for the desired emulation, or 'NA' for empty string.
|
|
resource=None, # The number of the resource in question.
|
|
shelf=None, # The number of the shelf in question.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_init_wiser(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"file_name" : file_name,
|
|
"node_count" : node_count,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/init_wiser",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/LICENSES> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#licenses
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_licenses(self,
|
|
popup=None, # If 'popup', then cause a GUI popup msg, otherwise, just show text.
|
|
show_file=None, # If 'yes', then show the license file, not the parsed license information.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_licenses(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"popup" : popup,
|
|
"show_file" : show_file,
|
|
}
|
|
response = self.json_post("/cli-json/licenses",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/LOAD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#load
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_load(self,
|
|
action=None, # Should be 'append' or 'overwrite'.
|
|
clean_chambers=None, # If yes, then Chambers will be cleaned up when overwrite is selected, otherwise they will be kept.
|
|
clean_dut=None, # If yes, then DUT will be cleaned up when overwrite is selected, otherwise they will be kept.
|
|
clean_profiles=None, # If yes, then clean all profiles when overwrite is selected, otherwise they will be kept.
|
|
name=None, # The name of the database to load. (DFLT is the default)
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_load(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"action" : action,
|
|
"clean_chambers" : clean_chambers,
|
|
"clean_dut" : clean_dut,
|
|
"clean_profiles" : clean_profiles,
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/load",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/LOG_LEVEL> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#log_level
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class log_level_level(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
ALL = 0xffffffff # Log everything
|
|
CUST1 = 0x10000 # Cust-1, latency info (65536)
|
|
DB = 0x80 # Database related logging (128)
|
|
DBG = 0x20 # debug (32)
|
|
DBG2 = 0x1000 # very verbose logging (4096)
|
|
DIS = 0x1 # disasters (1)
|
|
ERR = 0x2 # errors (2)
|
|
INF = 0x8 # info (8)
|
|
LIO = 0x2000 # IO logging (8192)
|
|
LL_PROF = 0x8000 # Profiling information (32768)
|
|
OUT1 = 0x4000 # Some std-out logging (16384)
|
|
PARSE = 0x800 # PARSE specific (2048)
|
|
SCRIPT = 0x400 # Scripting specific stuff (1024)
|
|
SEC = 0x40 # log security violations (64)
|
|
TRC = 0x10 # function trace (16)
|
|
WRN = 0x4 # warnings (4)
|
|
XMT = 0x100 # Output going to clients (256)
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
log_level_level.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+log_level_level.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
log_level_level.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+log_level_level.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_log_level(self,
|
|
level=None, # Integer corresponding to the logging flags.
|
|
target=None, # Options: 'gnu' | [file-endp-name].
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_log_level(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"level" : level,
|
|
"target" : target,
|
|
}
|
|
response = self.json_post("/cli-json/log_level",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/LOG_MSG> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#log_msg
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_log_msg(self,
|
|
message=None, # Message to log. <tt escapearg='false'>Unescaped Value</tt>
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_log_msg(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"message" : message,
|
|
}
|
|
response = self.json_post("/cli-json/log_msg",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/LOGIN> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#login
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_login(self,
|
|
name=None, # A single name with no white-spaces (15 characters or less)
|
|
password=None, # Can be blank or 'NA' if no password is set, otherwise must be the password.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_login(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
"password" : password,
|
|
}
|
|
response = self.json_post("/cli-json/login",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/MOTD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#motd
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_motd(self,
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_motd(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
}
|
|
response = self.json_post("/cli-json/motd",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/NC_SHOW_CD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#nc_show_cd
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_nc_show_cd(self,
|
|
collision_domain=None, # Name of the Collision Domain, or 'all'.
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_nc_show_cd(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"collision_domain" : collision_domain,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/nc_show_cd",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/NC_SHOW_CHANNEL_GROUPS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#nc_show_channel_groups
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_nc_show_channel_groups(self,
|
|
channel_name=None, # Name of the channel, or 'all'.
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_nc_show_channel_groups(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"channel_name" : channel_name,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/nc_show_channel_groups",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/NC_SHOW_ENDPOINTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#nc_show_endpoints
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_nc_show_endpoints(self,
|
|
endpoint=None, # Name of endpoint, or 'all'.
|
|
extra=None, # See above.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_nc_show_endpoints(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endpoint" : endpoint,
|
|
"extra" : extra,
|
|
}
|
|
response = self.json_post("/cli-json/nc_show_endpoints",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/NC_SHOW_PESQ> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#nc_show_pesq
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_nc_show_pesq(self,
|
|
endpoint=None, # Name of endpoint, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_nc_show_pesq(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endpoint" : endpoint,
|
|
}
|
|
response = self.json_post("/cli-json/nc_show_pesq",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/NC_SHOW_PORTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#nc_show_ports
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class nc_show_ports_probe_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
BRIDGE = 0x8 # 8 include bridges
|
|
EASY_IP_INFO = 0x10 # 16 Everything but gateway information, which is expensive to probe.
|
|
ETHTOOL = 0x4 # 4 include ethtool results
|
|
GW = 0x20 # 32 include gateway information
|
|
GW_FORCE_REFRESH = 0x40 # 64 Force GW (re)probe. Otherwise, cached values *might* be used.
|
|
MII = 0x2 # 2 include MII
|
|
WIFI = 0x1 # 1 include wifi stations
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
nc_show_ports_probe_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+nc_show_ports_probe_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
nc_show_ports_probe_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+nc_show_ports_probe_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_nc_show_ports(self,
|
|
port=None, # Port number, or 'all'.
|
|
probe_flags=None, # See above, add them together for multiple probings. Leave blank if you want stats only.
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_nc_show_ports(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"port" : port,
|
|
"probe_flags" : probe_flags,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/nc_show_ports",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/NC_SHOW_PPP_LINKS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#nc_show_ppp_links
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_nc_show_ppp_links(self,
|
|
link_num=None, # Ppp-Link number of the span, or 'all'.
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_nc_show_ppp_links(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"link_num" : link_num,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/nc_show_ppp_links",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/NC_SHOW_SPANS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#nc_show_spans
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_nc_show_spans(self,
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
span_number=None, # Span-Number of the span, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_nc_show_spans(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"span_number" : span_number,
|
|
}
|
|
response = self.json_post("/cli-json/nc_show_spans",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/NC_SHOW_VR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#nc_show_vr
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_nc_show_vr(self,
|
|
resource=None, # Resource number, or 'all'.
|
|
router=None, # Name of the Virtual Router, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_nc_show_vr(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"router" : router,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/nc_show_vr",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/NC_SHOW_VRCX> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#nc_show_vrcx
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_nc_show_vrcx(self,
|
|
cx_name=None, # Name of the Virtual Router Connection, or 'all'.
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_nc_show_vrcx(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cx_name" : cx_name,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/nc_show_vrcx",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/NOTIFY_DHCP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#notify_dhcp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_notify_dhcp(self,
|
|
cmd=None, # set/down/timeout/info: What does DHCP want us to do?
|
|
netmask=None, # New subnet mask.
|
|
new_dns=None, # New DNS server(s) for use by this interface.
|
|
new_ip=None, # New IP address.
|
|
new_ip6=None, # New Global IPv6 address: ipv6/prefix
|
|
new_mtu=None, # New MTU.
|
|
new_router=None, # One or more default routers. LANforge will only use the first one.
|
|
port=None, # Interface name.
|
|
reason=None, # DHCP reason, informational mostly.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_notify_dhcp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cmd" : cmd,
|
|
"netmask" : netmask,
|
|
"new_dns" : new_dns,
|
|
"new_ip" : new_ip,
|
|
"new_ip6" : new_ip6,
|
|
"new_mtu" : new_mtu,
|
|
"new_router" : new_router,
|
|
"port" : port,
|
|
"reason" : reason,
|
|
}
|
|
response = self.json_post("/cli-json/notify_dhcp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/PORT_RESET_COMPLETED> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#port_reset_completed
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_port_reset_completed(self,
|
|
extra=None, # IP for SECIP, blank for others.
|
|
port=None, # The port in question.
|
|
type=None, # SUNOS, NORMAL, or SECIP..let us know what kind of reset completed.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_port_reset_completed(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"extra" : extra,
|
|
"port" : port,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/port_reset_completed",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/PROBE_PORT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#probe_port
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_probe_port(self,
|
|
key=None, # Unique identifier for this request. Usually left blank.<br/>
|
|
port=None, # Port number or name
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_probe_port(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"key" : key,
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/probe_port",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/PROBE_PORTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#probe_ports
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_probe_ports(self,
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_probe_ports(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/probe_ports",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/QUIESCE_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#quiesce_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_quiesce_endp(self,
|
|
endp_name=None, # Name of the endpoint, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_quiesce_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endp_name" : endp_name,
|
|
}
|
|
response = self.json_post("/cli-json/quiesce_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/QUIESCE_GROUP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#quiesce_group
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_quiesce_group(self,
|
|
name=None, # The name of the test group, or 'all'
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_quiesce_group(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/quiesce_group",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/QUIT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#quit
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_quit(self,
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_quit(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
}
|
|
response = self.json_post("/cli-json/quit",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/REBOOT_OS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#reboot_os
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_reboot_os(self,
|
|
resource=None, # Resource number, or ALL.
|
|
shelf=None, # Shelf number, or ALL.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_reboot_os(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/reboot_os",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/REPORT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#report
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_report(self,
|
|
reporting_on=None, # Should we globally enable/disable reporting. (YES, NO or NA)
|
|
rpt_dir=None, # Directory in which reports should be saved.
|
|
save_endps=None, # Should we save endpoint reports or not. (YES, NO or NA)
|
|
save_ports=None, # Should we save Port reports or not. (YES, NO or NA)
|
|
save_resource=None, # Should we save Resource reports or not. (YES, NO or NA)
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_report(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"reporting_on" : reporting_on,
|
|
"rpt_dir" : rpt_dir,
|
|
"save_endps" : save_endps,
|
|
"save_ports" : save_ports,
|
|
"save_resource" : save_resource,
|
|
}
|
|
response = self.json_post("/cli-json/report",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RESET_PORT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#reset_port
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class reset_port_pre_ifdown(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
reset_port_pre_ifdown.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+reset_port_pre_ifdown.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
P_IN = "P-IN" # Only call the portal login (do not reset drivers/supplicant/dhcp)
|
|
P_OUT = "P-OUT" # Only call the portal logout (do not reset drivers/supplicant/dhcp)
|
|
YES = "YES" # (include logout) Call portal-bot.pl ... <b>--logout</b> before going down.
|
|
|
|
|
|
def post_reset_port(self,
|
|
port=None, # Port number to reset, or ALL.
|
|
pre_ifdown=None, # See above. Leave blank or use NA if unsure.
|
|
reset_ospf=None, # If set to 'NO' or 'NA', then OSPF will not be updated. Otherwise, it will be updated.
|
|
resource=None, # Resource number, or ALL.
|
|
shelf=None, # Shelf number, or ALL.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_reset_port(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"port" : port,
|
|
"pre_ifdown" : pre_ifdown,
|
|
"reset_ospf" : reset_ospf,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/reset_port",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RESET_SERIAL_SPAN> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#reset_serial_span
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_reset_serial_span(self,
|
|
resource=None, # Resource (machine) number.
|
|
shelf=None, # Shelf number
|
|
span=None, # Serial-Span number to reset.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_reset_serial_span(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"span" : span,
|
|
}
|
|
response = self.json_post("/cli-json/reset_serial_span",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_ATTENUATOR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_attenuator
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_attenuator(self,
|
|
resource=None, # Resource number
|
|
serno=None, # Serial number for requested Attenuator.
|
|
shelf=None, # Shelf number, usually 1
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_attenuator(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"serno" : serno,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/rm_attenuator",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_CD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_cd
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_cd(self,
|
|
cd=None, # Name of Collision Domain.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_cd(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cd" : cd,
|
|
}
|
|
response = self.json_post("/cli-json/rm_cd",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_CD_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_cd_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_cd_endp(self,
|
|
cd=None, # Name of Collision Domain.
|
|
endp=None, # Endpoint name/id.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_cd_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cd" : cd,
|
|
"endp" : endp,
|
|
}
|
|
response = self.json_post("/cli-json/rm_cd_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_CD_VR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_cd_vr
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_cd_vr(self,
|
|
cd=None, # Name of Collision Domain.
|
|
endp=None, # Virtual-Router name/id.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_cd_vr(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cd" : cd,
|
|
"endp" : endp,
|
|
}
|
|
response = self.json_post("/cli-json/rm_cd_vr",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_CHAMBER> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_chamber
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_chamber(self,
|
|
chamber=None, # Chamber name, or 'ALL'
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_chamber(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"chamber" : chamber,
|
|
}
|
|
response = self.json_post("/cli-json/rm_chamber",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_CHAMBER_PATH> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_chamber_path
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_chamber_path(self,
|
|
chamber=None, # Chamber Name.
|
|
path=None, # Path Name, use 'ALL' to delete all paths.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_chamber_path(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"chamber" : chamber,
|
|
"path" : path,
|
|
}
|
|
response = self.json_post("/cli-json/rm_chamber_path",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_CHANNEL_GROUP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_channel_group
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_channel_group(self,
|
|
channel_name=None, # Name of the channel, or 'all'.
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_channel_group(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"channel_name" : channel_name,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/rm_channel_group",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_CLIENT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_client
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_client(self,
|
|
client_name=None, # Name of the client profile you wish to remove.
|
|
client_password=None, # Client password. Not required if we are super-user.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_client(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"client_name" : client_name,
|
|
"client_password" : client_password,
|
|
}
|
|
response = self.json_post("/cli-json/rm_client",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_CX> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_cx
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_cx(self,
|
|
cx_name=None, # Name of the cross-connect, or 'all'.
|
|
test_mgr=None, # Name of test-mgr, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_cx(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cx_name" : cx_name,
|
|
"test_mgr" : test_mgr,
|
|
}
|
|
response = self.json_post("/cli-json/rm_cx",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_DB> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_db
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_db(self,
|
|
db_name=None, # Name of the database to delete.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_db(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"db_name" : db_name,
|
|
}
|
|
response = self.json_post("/cli-json/rm_db",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_DUT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_dut
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_dut(self,
|
|
shelf=None, # DUT name, or 'ALL'
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_dut(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/rm_dut",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_endp(self,
|
|
endp_name=None, # Name of the endpoint, or 'YES_ALL'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endp_name" : endp_name,
|
|
}
|
|
response = self.json_post("/cli-json/rm_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_EVENT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_event
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_event(self,
|
|
event_id=None, # Numeric event-id, or 'all'
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_event(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"event_id" : event_id,
|
|
}
|
|
response = self.json_post("/cli-json/rm_event",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_GROUP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_group
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_group(self,
|
|
name=None, # The name of the test group.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_group(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/rm_group",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_PPP_LINK> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_ppp_link
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_ppp_link(self,
|
|
resource=None, # Resource number that holds this PppLink.
|
|
shelf=None, # Name/id of the shelf.
|
|
unit_num=None, # Unit-Number for the PppLink to be deleted.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_ppp_link(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"unit_num" : unit_num,
|
|
}
|
|
response = self.json_post("/cli-json/rm_ppp_link",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_PROFILE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_profile
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_profile(self,
|
|
name=None, # Profile name, or 'ALL'
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_profile(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/rm_profile",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_RESOURCE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_resource
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_resource(self,
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_resource(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/rm_resource",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_RFGEN> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_rfgen
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_rfgen(self,
|
|
resource=None, # Resource number
|
|
shelf=None, # Shelf number, usually 1
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_rfgen(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/rm_rfgen",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_SEC_IP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_sec_ip
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_sec_ip(self,
|
|
ip_list=None, # IP1/prefix,IP2/prefix,...IPZ/prefix, or ALL
|
|
port=None, # Name of network device (Port) from which these IPs will be removed.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_sec_ip(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"ip_list" : ip_list,
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/rm_sec_ip",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_SPAN> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_span
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_span(self,
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
span_num=None, # Span-Number of the channel, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_span(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"span_num" : span_num,
|
|
}
|
|
response = self.json_post("/cli-json/rm_span",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_TEST_MGR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_test_mgr
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_test_mgr(self,
|
|
test_mgr=None, # Name of the test manager to be removed.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_test_mgr(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"test_mgr" : test_mgr,
|
|
}
|
|
response = self.json_post("/cli-json/rm_test_mgr",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_TEXT_BLOB> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_text_blob
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_text_blob(self,
|
|
name=None, # Text Blob Name, or 'ALL'
|
|
type=None, # Text Blob type, or 'ALL'
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_text_blob(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/rm_text_blob",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_TGCX> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_tgcx
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_tgcx(self,
|
|
cxname=None, # The name of the CX.
|
|
tgname=None, # The name of the test group.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_tgcx(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cxname" : cxname,
|
|
"tgname" : tgname,
|
|
}
|
|
response = self.json_post("/cli-json/rm_tgcx",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_THRESHOLD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_threshold
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_threshold(self,
|
|
endp=None, # Endpoint name or ID.
|
|
thresh_id=None, # Threshold ID to remove. Use 'all' to remove all.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_threshold(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endp" : endp,
|
|
"thresh_id" : thresh_id,
|
|
}
|
|
response = self.json_post("/cli-json/rm_threshold",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_TRAFFIC_PROFILE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_traffic_profile
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_traffic_profile(self,
|
|
name=None, # Profile name, or 'ALL'
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_traffic_profile(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/rm_traffic_profile",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_VENUE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_venue
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_venue(self,
|
|
resource=None, # Resource number, or 'ALL'
|
|
shelf=None, # Shelf number.
|
|
venu_id=None, # Number to uniquely identify this venue on this resource, or 'ALL'
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_venue(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"venu_id" : venu_id,
|
|
}
|
|
response = self.json_post("/cli-json/rm_venue",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_VLAN> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_vlan
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_vlan(self,
|
|
port=None, # Port number or name of the virtual interface.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_vlan(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/rm_vlan",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_VR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_vr
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_vr(self,
|
|
resource=None, # Resource number, or 'all'.
|
|
router_name=None, # Virtual Router name, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_vr(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"router_name" : router_name,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/rm_vr",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_VRCX> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_vrcx
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_vrcx(self,
|
|
connection_name=None, # Virtual Router Connection name, or 'all'.
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
vr_id=None, # If not removing from the free-list, then supply the virtual-router name/ID here. Leave blank or use NA for free-list.
|
|
vrcx_only=None, # If we should NOT delete underlying auto-created objects, enter 'vrcx_only' here, otherwise leave blank or use NA.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_vrcx(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"connection_name" : connection_name,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"vr_id" : vr_id,
|
|
"vrcx_only" : vrcx_only,
|
|
}
|
|
response = self.json_post("/cli-json/rm_vrcx",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RM_WANPATH> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rm_wanpath
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rm_wanpath(self,
|
|
endp_name=None, # Name of the endpoint.
|
|
wp_name=None, # Name of the wanpath.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rm_wanpath(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endp_name" : endp_name,
|
|
"wp_name" : wp_name,
|
|
}
|
|
response = self.json_post("/cli-json/rm_wanpath",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/RPT_SCRIPT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#rpt_script
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_rpt_script(self,
|
|
endp=None, # Endpoint name or ID.
|
|
flags=None, # See above for description of the defined flags.
|
|
group_action=None, # All or Sequential.
|
|
loop_count=None, # How many times to loop before stopping (0 is infinite).
|
|
name=None, # Script name.
|
|
private=None, # Private encoding for the particular script.
|
|
type=None, # One of: NONE, Script2544, ScriptHunt, ScriptWL
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_rpt_script(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endp" : endp,
|
|
"flags" : flags,
|
|
"group_action" : group_action,
|
|
"loop_count" : loop_count,
|
|
"name" : name,
|
|
"private" : private,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/rpt_script",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SCAN_WIFI> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#scan_wifi
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class scan_wifi_extra(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
scan_wifi_extra.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+scan_wifi_extra.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
NA = "NA" # (or left blank) the system does a full scan
|
|
dump = "dump" # then only cached values are returned
|
|
trigger_freq__freq_ = "trigger freq [freq]" # scan exactly those frequencies
|
|
|
|
|
|
def post_scan_wifi(self,
|
|
extra=None, # Extra arguments to the scan script, see above.
|
|
key=None, # Unique identifier for this request. Usually left blank.
|
|
port=None, # Port number or name of the virtual interface.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_scan_wifi(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"extra" : extra,
|
|
"key" : key,
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/scan_wifi",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_ARM_INFO> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_arm_info
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_arm_info_arm_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
random_payload = 0x10000 # Use random payload sizes instead of linear increase
|
|
rel_tstamp = 0x400 # Use Relative Timestamps. This will increase performance
|
|
slow_start = 0x2000 # Use slow-start logic. This ramps up
|
|
udp_checksum = 0x4000 # Use UDP Checksums.
|
|
use_gw_mac = 0x1000 # Use default gateway's MAC for destination MAC.
|
|
use_tcp = 0x8000 # Use TCP instead of UDP protocol. (Note this is NOT stateful TCP!)
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_arm_info_arm_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_arm_info_arm_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_arm_info_arm_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_arm_info_arm_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_set_arm_info(self,
|
|
arm_flags=None, # Armageddon-related flags, see above for details.
|
|
burst=None, # Burst amount, can significantly improve throughput with some modern drivers, similar to 'multi_pkts', and uses the 'xmit_more' linux skb option.
|
|
dst_mac=None, # The destination MAC address.
|
|
dst_mac_count=None, # How many destination MACs to iterate through.
|
|
ip_dst_max=None, # Maximum destination IP address to use.
|
|
ip_dst_min=None, # Minimum destination IP address to use.
|
|
ip_src_max=None, # Maximum source IP address to use.
|
|
ip_src_min=None, # Minimum source IP address to use.
|
|
max_pkt_size=None, # Maximum packet size, including all Ethernet headers (but not CRC).
|
|
min_pkt_size=None, # Minimum packet size, including all Ethernet headers (but not CRC).
|
|
multi_pkts=None, # The number of identical packets to send before creating a new one.
|
|
name=None, # Name of the Endpoint we are setting.
|
|
pkts_to_send=None, # The number of packets to send. Set to zero for infinite.
|
|
src_mac=None, # The source MAC address.
|
|
src_mac_count=None, # How many source MACs to iterate through.
|
|
udp_dst_max=None, # Minimum destination UDP port.
|
|
udp_dst_min=None, # Minimum destination UDP port.
|
|
udp_src_max=None, # Maximum source UDP port.
|
|
udp_src_min=None, # Minimum source UDP port.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_arm_info(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"arm_flags" : arm_flags,
|
|
"burst" : burst,
|
|
"dst_mac" : dst_mac,
|
|
"dst_mac_count" : dst_mac_count,
|
|
"ip_dst_max" : ip_dst_max,
|
|
"ip_dst_min" : ip_dst_min,
|
|
"ip_src_max" : ip_src_max,
|
|
"ip_src_min" : ip_src_min,
|
|
"max_pkt_size" : max_pkt_size,
|
|
"min_pkt_size" : min_pkt_size,
|
|
"multi_pkts" : multi_pkts,
|
|
"name" : name,
|
|
"pkts_to_send" : pkts_to_send,
|
|
"src_mac" : src_mac,
|
|
"src_mac_count" : src_mac_count,
|
|
"udp_dst_max" : udp_dst_max,
|
|
"udp_dst_min" : udp_dst_min,
|
|
"udp_src_max" : udp_src_max,
|
|
"udp_src_min" : udp_src_min,
|
|
}
|
|
response = self.json_post("/cli-json/set_arm_info",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_ATTENUATOR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_attenuator
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_attenuator(self,
|
|
atten_idx=None, # Attenuator index, or 'all'.
|
|
mode=None, # 0 == normal attenuator, 1 == pulse mode (API Tech 4205A modules directly connected via USB only)
|
|
pulse_count=None, # Number of pulses (0-255)
|
|
pulse_interval_ms=None, # Time between pulses, in mili-seconds (0-60000).
|
|
pulse_time_ms=None, # Time interval between pulse groups in miliseconds (1-60000)
|
|
pulse_width_us5=None, # Pulse width in units of 1/2 micro second. So, if you want 1.5us, use value 3 (0-60000)
|
|
resource=None, # Resource number.
|
|
serno=None, # Serial number for requested Attenuator, or 'all'.
|
|
shelf=None, # Shelf number, usually 1.
|
|
val=None, # Requested attenution in 1/10ths of dB (ddB).
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_attenuator(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"atten_idx" : atten_idx,
|
|
"mode" : mode,
|
|
"pulse_count" : pulse_count,
|
|
"pulse_interval_ms" : pulse_interval_ms,
|
|
"pulse_time_ms" : pulse_time_ms,
|
|
"pulse_width_us5" : pulse_width_us5,
|
|
"resource" : resource,
|
|
"serno" : serno,
|
|
"shelf" : shelf,
|
|
"val" : val,
|
|
}
|
|
response = self.json_post("/cli-json/set_attenuator",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_CHAMBER> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_chamber
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_chamber(self,
|
|
chamber=None, # Chamber name
|
|
cur_rotation=None, # Primarily used to store the last known rotation for turntables that do not report absolute position. Use NA or leave blank if unsure.
|
|
position=None, # Absolute position in degrees.
|
|
speed_rpm=None, # Speed in rpm (floating point number is accepted
|
|
tilt=None, # Absolute tilt in degrees.
|
|
turntable=None, # Turn-table address, for instance: 192.168.1.22:3001
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_chamber(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"chamber" : chamber,
|
|
"cur_rotation" : cur_rotation,
|
|
"position" : position,
|
|
"speed_rpm" : speed_rpm,
|
|
"tilt" : tilt,
|
|
"turntable" : turntable,
|
|
}
|
|
response = self.json_post("/cli-json/set_chamber",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_CX_REPORT_TIMER> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_cx_report_timer
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_cx_report_timer(self,
|
|
cx_name=None, # Name of cross-connect, or 'all'.
|
|
cxonly=None, # If you want to set the timer for ONLY the CX, and not
|
|
milliseconds=None, # Report timer length in milliseconds.
|
|
test_mgr=None, # Name of the test manager, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_cx_report_timer(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cx_name" : cx_name,
|
|
"cxonly" : cxonly,
|
|
"milliseconds" : milliseconds,
|
|
"test_mgr" : test_mgr,
|
|
}
|
|
response = self.json_post("/cli-json/set_cx_report_timer",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_CX_STATE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_cx_state
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_cx_state_cx_state(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_cx_state_cx_state.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_cx_state_cx_state.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
DELETED = "DELETED" # Deletes the CX(s).
|
|
QUIESCE = "QUIESCE" # Stop transmitting and gracefully stop cross-connect.
|
|
RUNNING = "RUNNING" # Sets the CX(s) in the running state.
|
|
STOPPED = "STOPPED" # Sets the CX(s) in the stopped state.
|
|
SWITCH = "SWITCH" # Sets the CX(s) in the running state, stopping any conflicting tests.
|
|
|
|
|
|
def post_set_cx_state(self,
|
|
cx_name=None, # Name of the cross-connect, or 'all'.
|
|
cx_state=None, # One of: RUNNING, SWITCH, QUIESCE, STOPPED, or DELETED.
|
|
test_mgr=None, # Name of the test-manager, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_cx_state(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cx_name" : cx_name,
|
|
"cx_state" : cx_state,
|
|
"test_mgr" : test_mgr,
|
|
}
|
|
response = self.json_post("/cli-json/set_cx_state",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_ENDP_ADDR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_endp_addr
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_endp_addr(self,
|
|
ip=None, # The IP Address. Used for TCP/IP and UDP/IP protocols.
|
|
mac=None, # The MAC address. Only needed for LANforge protocol Endpoints.
|
|
max_port=None, # The Maximum IP Port. Used for TCP/IP and UDP/IP protocols.
|
|
min_port=None, # The Minimum IP Port. Used for TCP/IP and UDP/IP protocols.
|
|
name=None, # The name of the endpoint we are configuring.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_endp_addr(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"ip" : ip,
|
|
"mac" : mac,
|
|
"max_port" : max_port,
|
|
"min_port" : min_port,
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/set_endp_addr",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_ENDP_DETAILS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_endp_details
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_endp_details(self,
|
|
conn_timeout=None, # For TCP, the max time in miliseconds to wait for connection to establish.
|
|
dst_mac=None, # Destination MAC address, used for custom Ethernet replays.
|
|
max_conn_timer=None, # The maximum duration (in ms) this connection should run before re-establishing.
|
|
max_ip_port=None, # The maximum IP Port value. (The value for min ip port is set through the add_endp/ip_port parameter.) If greater than min, each connection will use a random value between min and max.
|
|
max_reconn_pause=None, # The maximum time between re-connects, in ms.
|
|
mcast_src_ip=None, # Multicast source address (used in SSM mode, multicast endpoints only)
|
|
mcast_src_port=None, # Multicast source address (used in SSM mode, multicast endpoints only)
|
|
min_conn_timer=None, # The minimum duration (in ms) this connection should run before re-establishing.
|
|
min_reconn_pause=None, # The minimum time between re-connects, in ms.
|
|
name=None, # The name of the endpoint we are configuring.
|
|
pkts_to_send=None, # Number of packets to send before stopping. 0 means infinite.
|
|
rcvbuf_size=None, # The receive buffer (window) size. Zero for AUTO
|
|
sndbuf_size=None, # The sending buffer (window) size. Zero for AUTO
|
|
tcp_delack_segs=None, # NA: No longer supported.
|
|
tcp_max_delack=None, # NA: No longer supported.
|
|
tcp_min_delack=None, # NA: No longer supported.
|
|
tcp_mss=None, # TCP Maximum Segment Size, affects packet size on the wire (88 - 32767).
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_endp_details(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"conn_timeout" : conn_timeout,
|
|
"dst_mac" : dst_mac,
|
|
"max_conn_timer" : max_conn_timer,
|
|
"max_ip_port" : max_ip_port,
|
|
"max_reconn_pause" : max_reconn_pause,
|
|
"mcast_src_ip" : mcast_src_ip,
|
|
"mcast_src_port" : mcast_src_port,
|
|
"min_conn_timer" : min_conn_timer,
|
|
"min_reconn_pause" : min_reconn_pause,
|
|
"name" : name,
|
|
"pkts_to_send" : pkts_to_send,
|
|
"rcvbuf_size" : rcvbuf_size,
|
|
"sndbuf_size" : sndbuf_size,
|
|
"tcp_delack_segs" : tcp_delack_segs,
|
|
"tcp_max_delack" : tcp_max_delack,
|
|
"tcp_min_delack" : tcp_min_delack,
|
|
"tcp_mss" : tcp_mss,
|
|
}
|
|
response = self.json_post("/cli-json/set_endp_details",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_ENDP_FILE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_endp_file
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_endp_file(self,
|
|
file=None, # The file name to read the playback packets from.
|
|
name=None, # The name of the endpoint we are configuring.
|
|
playback=None, # Should we playback the capture or not? ON or OFF.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_endp_file(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"file" : file,
|
|
"name" : name,
|
|
"playback" : playback,
|
|
}
|
|
response = self.json_post("/cli-json/set_endp_file",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_ENDP_FLAG> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_endp_flag
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_endp_flag_flag(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_endp_flag_flag.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_endp_flag_flag.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
AutoHelper = "AutoHelper" # Automatically run on helper process
|
|
ClearPortOnStart = "ClearPortOnStart" # clear stats on start
|
|
DoChecksum = "DoChecksum" # Enable checksumming
|
|
EnableConcurrentSrcIP = "EnableConcurrentSrcIP" # Concurrent source IPs?
|
|
EnableLinearSrcIP = "EnableLinearSrcIP" # linearized source IPs
|
|
EnableLinearSrcIPPort = "EnableLinearSrcIPPort" # linearized IP ports
|
|
EnableRndSrcIP = "EnableRndSrcIP" # randomize source IP
|
|
KernelMode = "KernelMode" # Enable kernel mode
|
|
QuiesceAfterDuration = "QuiesceAfterDuration" # quiesce after time period
|
|
QuiesceAfterRange = "QuiesceAfterRange" # quiesce after range of bytes
|
|
Unmanaged = "Unmanaged" # Set endpoint unmanaged
|
|
UseAutoNAT = "UseAutoNAT" # NAT friendly behavior
|
|
|
|
|
|
def post_set_endp_flag(self,
|
|
flag=None, # The name of the flag.
|
|
name=None, # The name of the endpoint we are configuring.
|
|
val=None, # Either 1 (for on), or 0 (for off).
|
|
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_endp_flag(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"flag" : flag,
|
|
"name" : name,
|
|
"val" : val,
|
|
}
|
|
response = self.json_post("/cli-json/set_endp_flag",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_ENDP_PAYLOAD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_endp_payload
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_endp_payload_payload_type(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_endp_payload_payload_type.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_endp_payload_payload_type.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
PRBS_11_8_10 = "PRBS_11_8_10" # PRBS (see above)
|
|
PRBS_15_0_14 = "PRBS_15_0_14" # PRBS (see above)
|
|
PRBS_4_0_3 = "PRBS_4_0_3" # Use linear feedback shift register to generate pseudo random sequence.
|
|
PRBS_7_0_6 = "PRBS_7_0_6" # PRBS (see above)
|
|
custom = "custom" # Enter your own payload with the set_endp_payload
|
|
decreasing = "decreasing" # bytes start at FF and decrease, wrapping if needed.
|
|
increasing = "increasing" # bytes start at 00 and increase, wrapping if needed.
|
|
ones = "ones" # Payload is all ones (FF).
|
|
random = "random" # generate a new random payload each time sent.
|
|
random_fixed = "random_fixed" # means generate one random payload, and send it over and over again.
|
|
zeros = "zeros" # Payload is all zeros (00).
|
|
|
|
|
|
def post_set_endp_payload(self,
|
|
name=None, # The name of the endpoint we are configuring.
|
|
payload=None, # For custom payloads, enter the payload in hex, up to 2048 bytes. <tt escapearg='false'>Unescaped Value</tt>
|
|
payload_type=None, # The payload type. See help for add_endp.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_endp_payload(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
"payload" : payload,
|
|
"payload_type" : payload_type,
|
|
}
|
|
response = self.json_post("/cli-json/set_endp_payload",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_ENDP_PLD_BOUNDS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_endp_pld_bounds
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_endp_pld_bounds(self,
|
|
is_random=None, # YES if random, anything else for NO.
|
|
max_pld_size=None, # The maximum payload size, in bytes.
|
|
min_pld_size=None, # The minimum payload size, in bytes.
|
|
name=None, # The name of the endpoint we are configuring.
|
|
use_checksum=None, # YES if use checksum on payload, anything else for NO.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_endp_pld_bounds(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"is_random" : is_random,
|
|
"max_pld_size" : max_pld_size,
|
|
"min_pld_size" : min_pld_size,
|
|
"name" : name,
|
|
"use_checksum" : use_checksum,
|
|
}
|
|
response = self.json_post("/cli-json/set_endp_pld_bounds",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_ENDP_PROXY> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_endp_proxy
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_endp_proxy(self,
|
|
enabled=None, # YES or NO to enable or disable proxying.
|
|
endp_name=None, # Name of endpoint.
|
|
proxy_ip=None, # Proxy IP Address.
|
|
proxy_ip_port=None, # Proxy IP Port.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_endp_proxy(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"enabled" : enabled,
|
|
"endp_name" : endp_name,
|
|
"proxy_ip" : proxy_ip,
|
|
"proxy_ip_port" : proxy_ip_port,
|
|
}
|
|
response = self.json_post("/cli-json/set_endp_proxy",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_ENDP_QUIESCE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_endp_quiesce
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_endp_quiesce(self,
|
|
name=None, # The name of the endpoint we are configuring.
|
|
quiesce=None, # The number of seconds to quiesce this endpoint when told to quiesce.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_endp_quiesce(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
"quiesce" : quiesce,
|
|
}
|
|
response = self.json_post("/cli-json/set_endp_quiesce",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_ENDP_REPORT_TIMER> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_endp_report_timer
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_endp_report_timer(self,
|
|
endp_name=None, # Name of endpoint.
|
|
milliseconds=None, # Report timer length in milliseconds.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_endp_report_timer(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endp_name" : endp_name,
|
|
"milliseconds" : milliseconds,
|
|
}
|
|
response = self.json_post("/cli-json/set_endp_report_timer",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_ENDP_TOS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_endp_tos
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_endp_tos_tos(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_endp_tos_tos.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_endp_tos_tos.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
LOWCOST = "LOWCOST"
|
|
LOWDELAY = "LOWDELAY"
|
|
RELIABILITY = "RELIABILITY"
|
|
THROUGHPUT = "THROUGHPUT"
|
|
|
|
|
|
def post_set_endp_tos(self,
|
|
name=None, # The name of the endpoint we are configuring.
|
|
priority=None, # The socket priority, can be any positive number.
|
|
tos=None, # The Type of Service, can be HEX, see above.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_endp_tos(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
"priority" : priority,
|
|
"tos" : tos,
|
|
}
|
|
response = self.json_post("/cli-json/set_endp_tos",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_ENDP_TX_BOUNDS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_endp_tx_bounds
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_endp_tx_bounds(self,
|
|
is_bursty=None, # YES if bursty, anything else for NO.
|
|
max_tx_rate=None, # The maximum transmit rate, in bits per second (bps).
|
|
min_tx_rate=None, # The minimum transmit rate, in bits per second (bps).
|
|
name=None, # The name of the endpoint we are configuring.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_endp_tx_bounds(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"is_bursty" : is_bursty,
|
|
"max_tx_rate" : max_tx_rate,
|
|
"min_tx_rate" : min_tx_rate,
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/set_endp_tx_bounds",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_EVENT_INTEREST> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_event_interest
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_event_interest_ei_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
CLEAR = 0x0 # will clear interest
|
|
SET = 0x1 # set interest flag
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_event_interest_ei_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_event_interest_ei_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_event_interest_ei_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_event_interest_ei_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class set_event_interest_events1(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
BAD_TOS = 0x400000 # Endpoint has bad ToS values configured.
|
|
Bad_MAC = 0x100000 # Invalid MAC address configured.
|
|
Cleared = 0x2000 # Counters were cleared for some entity.
|
|
Connect = 0x100 # WiFi interface connected to AP.
|
|
Custom = 0x4 # Custom event (generated by USER in GUI or CLI).
|
|
DHCP_Fail = 0x8000 # DHCP Failed, maybe out of leases?
|
|
DHCP_Timeout = 0x10000 # Timed out talking to DHCP server.
|
|
DHCP4_Error = 0x20000 # DHCP gave out duplicated IP address.
|
|
DHCP6_Error = 0x40000 # DHCPv6 gave out duplicated IPv6 address.
|
|
Disconnect = 0x80 # WiFi interface disconnected from AP.
|
|
Endp_Started = 0x40 # Endpoint was started.
|
|
Endp_Stopped = 0x20 # Endpoint stopped for some reason.
|
|
Link_Down = 0x1 # Notify when Interface Link goes DOWN.
|
|
Link_Errors = 0x4000 # Port shows low-level link errors.
|
|
Link_Up = 0x2 # Notify when Interface Link goes UP.
|
|
Login = 0x400 # CLI/GUI user connected to LANforge.
|
|
Logout = 0x200 # CLI/GUI user disconnected from LANforge.
|
|
Migrated = 0x200000 # Port (station network interface) migrated.
|
|
NO_RX_SINCE = 0x800000 # Endpoint threshold alert.
|
|
NO_RX_SINCE_CLEARED = 0x1000000 # Endpoint threshold alert cleared.
|
|
RX_BPS_OOR_1M = 0x20000000 # Endpoint threshold alert.
|
|
RX_BPS_OOR_1M_CLEARED = 0x40000000 # Endpoint threshold alert cleared.
|
|
RX_BPS_OOR_30S = 0x8000000 # Endpoint threshold alert.
|
|
RX_BPS_OOR_30S_CLEARED = 0x10000000 # Endpoint threshold alert cleared.
|
|
RX_BPS_OOR_3S = 0x2000000 # Endpoint threshold alert.
|
|
RX_BPS_OOR_3S_CLEARED = 0x4000000 # Endpoint threshold alert cleared.
|
|
Resource_Down = 0x8 # Resource has crashed, rebooted, etc.
|
|
Resource_Up = 0x10 # Resource has connected to manager.
|
|
Start_Reports = 0x1000 # Start saving report data files (CSV).
|
|
Stop_Reports = 0x800 # Stop saving report data files (CSV).
|
|
TX_BPS_OOR_3S = 0x80000000 # Endpoint threshold alert.
|
|
WiFi_Config = 0x80000 # WiFi Configuration Error.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_event_interest_events1.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_event_interest_events1.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_event_interest_events1.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_event_interest_events1.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class set_event_interest_events2(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
FW_CRASH = 0x800 # Firmware for entity has crashed.
|
|
FW_FAIL = 0x1000 # Firmware failed powerup, may require reboot.
|
|
IFDOWN_FAIL = 0x8000 # IFDOWN-PRE Script (ifup --logout) returned error code.
|
|
IFDOWN_OK = 0x10000 # IFDOWN-PRE Script (ifup --logout) completed successfully.
|
|
IFUP_FAIL = 0x2000 # IFUP-POST Script returned error code.
|
|
IFUP_OK = 0x4000 # IFUP-POST Script completed successfully.
|
|
RX_DROP_OOR_1M = 0x200 # Endpoint threshold alert.
|
|
RX_DROP_OOR_1M_CLEARED = 0x400 # Endpoint threshold alert cleared.
|
|
RX_DROP_OOR_3S = 0x80 # Endpoint threshold alert.
|
|
RX_DROP_OOR_3S_CLEARED = 0x100 # Endpoint threshold alert cleared.
|
|
RX_LAT_OOR = 0x20 # Endpoint threshold alert.
|
|
RX_LAT_OOR_CLEARED = 0x40 # Endpoint threshold alert cleared.
|
|
TX_BPS_OOR_1M = 0x8 # Endpoint threshold alert.
|
|
TX_BPS_OOR_1M_CLEARED = 0x10 # Endpoint threshold alert cleared.
|
|
TX_BPS_OOR_30S = 0x2 # Endpoint threshold alert.
|
|
TX_BPS_OOR_30S_CLEARED = 0x4 # Endpoint threshold alert cleared.
|
|
TX_BPS_OOR_3S_CLEARED = 0x1 # Endpoint threshold alert cleared.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_event_interest_events2.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_event_interest_events2.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_event_interest_events2.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_event_interest_events2.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_set_event_interest(self,
|
|
ei_flags=None, # Event Interest flags, see above.
|
|
event_cnt=None, # Maximum number of events to store.
|
|
events1=None, # See description for possible values.
|
|
events2=None, # See description for possible values.
|
|
events3=None, # See description for possible values.
|
|
events4=None, # See description for possible values.
|
|
var1=None, # Currently un-used.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_event_interest(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"ei_flags" : ei_flags,
|
|
"event_cnt" : event_cnt,
|
|
"events1" : events1,
|
|
"events2" : events2,
|
|
"events3" : events3,
|
|
"events4" : events4,
|
|
"var1" : var1,
|
|
}
|
|
response = self.json_post("/cli-json/set_event_interest",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_EVENT_PRIORITY> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_event_priority
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_event_priority_event(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_event_priority_event.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_event_priority_event.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
Bad_MAC = 20 # Invalid MAC address configured.
|
|
Cleared = 13 # Counters were cleared for some entity.
|
|
Connect = 8 # WiFi interface connected to AP.
|
|
Custom = 2 # Custom event (generated by USER in GUI or CLI).
|
|
DHCP_Fail = 15 # DHCP Failed, maybe out of leases?
|
|
DHCP_Timeout = 16 # Timed out talking to DHCP server.
|
|
DHCP4_Error = 17 # DHCP gave out duplicated IP address.
|
|
DHCP6_Error = 18 # DHCPv6 gave out duplicated IPv6 address.
|
|
Disconnect = 7 # WiFi interface disconnected from AP.
|
|
Endp_Started = 6 # Endpoint was started.
|
|
Endp_Stopped = 5 # Endpoint stopped for some reason.
|
|
Link_Down = 0 # Notify when Interface Link goes UP.
|
|
Link_Errors = 14 # Port shows low-level link errors.
|
|
Link_Up = 1 # Notify when Interface Link goes DOWN.
|
|
Login = 10 # CLI/GUI user connected to LANforge.
|
|
Logout = 9 # CLI/GUI user disconnected from LANforge.
|
|
Migrated = 21 # Port (station network interface) migrated.
|
|
Resource_Down = 3 # Resource has crashed, rebooted, etc.
|
|
Resource_Up = 4 # Resource has connected to manager.
|
|
Start_Reports = 12 # Start saving report data files (CSV).
|
|
Stop_Reports = 11 # Stop saving report data files (CSV).
|
|
WiFi_Config = 19 # WiFi Configuration Error.
|
|
|
|
class set_event_priority_priority(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_event_priority_priority.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_event_priority_priority.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
AUTO = "AUTO" # Let event creator decide the priority.
|
|
CRITICAL = "CRITICAL"
|
|
DEBUG = "DEBUG"
|
|
FATAL = "FATAL"
|
|
INFO = "INFO"
|
|
WARNING = "WARNING"
|
|
|
|
|
|
def post_set_event_priority(self,
|
|
event=None, # Number or name for the event, see above.
|
|
priority=None, # Number or name for the priority.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_event_priority(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"event" : event,
|
|
"priority" : priority,
|
|
}
|
|
response = self.json_post("/cli-json/set_event_priority",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_FE_INFO> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_fe_info
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_fe_info(self,
|
|
directory=None, # The directory to read/write in. Absolute path suggested.
|
|
io_direction=None, # Should we be reading or writing: options: read, write
|
|
max_file_size=None, # The maximum file size, in bytes.
|
|
max_rw_sz=None, # Maximum read/write size, in bytes.
|
|
min_file_size=None, # The minimum file size, in bytes.
|
|
min_rw_sz=None, # Minimum read/write size, in bytes.
|
|
name=None, # The name of the file endpoint we are configuring.
|
|
num_files=None, # Number of files to create when writing.
|
|
prefix=None, # The prefix of the file(s) to read/write.
|
|
quiesce_after_files=None, # If non-zero, quiesce test after this many files have been read/written.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_fe_info(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"directory" : directory,
|
|
"io_direction" : io_direction,
|
|
"max_file_size" : max_file_size,
|
|
"max_rw_sz" : max_rw_sz,
|
|
"min_file_size" : min_file_size,
|
|
"min_rw_sz" : min_rw_sz,
|
|
"name" : name,
|
|
"num_files" : num_files,
|
|
"prefix" : prefix,
|
|
"quiesce_after_files" : quiesce_after_files,
|
|
}
|
|
response = self.json_post("/cli-json/set_fe_info",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_FLAG> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_flag
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_flag_flag(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_flag_flag.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_flag_flag.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
brief = "brief" # Request more abbreviated output to various commands.
|
|
prompt_newlines = "prompt_newlines" # Add a newline after every prompt. Can help with scripts
|
|
push_all_rpts = "push_all_rpts" # If enabled, server will send port, endpoint, and other
|
|
push_endp_rpts = "push_endp_rpts" # If enabled, server will send endpoint reports without
|
|
request_keyed_text = "request_keyed_text" # Normally most keyed-text events are only sent to the GUI
|
|
stream_events = "stream_events" # Normally the CLI will not show Events (as seen in the Event
|
|
|
|
|
|
def post_set_flag(self,
|
|
client=None, # Specify the user, if it is not the current user. Requires admin privileges.
|
|
flag=None, # The name of the flag.
|
|
val=None, # Either 1 (for on), or 0 (for off).
|
|
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_flag(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"client" : client,
|
|
"flag" : flag,
|
|
"val" : val,
|
|
}
|
|
response = self.json_post("/cli-json/set_flag",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_GEN_CMD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_gen_cmd
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_gen_cmd(self,
|
|
command=None, # The rest of the command line arguments. <tt escapearg='false'>Unescaped Value</tt>
|
|
name=None, # The name of the file endpoint we are configuring.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_gen_cmd(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"command" : command,
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/set_gen_cmd",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_GPS_INFO> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_gps_info
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_gps_info(self,
|
|
altitude=None, # Altitude, assumes units are Meters.
|
|
ew=None, # East or west (Longitude).
|
|
lattitude=None, # The lattitude, as read from a GPS device.
|
|
longitude=None, # The longitude, as ready from a GPS device.
|
|
ns=None, # North or South (Latitude).
|
|
resource=None, # Resource number for the port to be modified.
|
|
shelf=None, # Shelf number for the port to be modified, or SELF.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_gps_info(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"altitude" : altitude,
|
|
"ew" : ew,
|
|
"lattitude" : lattitude,
|
|
"longitude" : longitude,
|
|
"ns" : ns,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/set_gps_info",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_IFUP_SCRIPT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_ifup_script
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_ifup_script(self,
|
|
flags=None, # Currently un-defined, use NA
|
|
port=None, # WiFi interface name or number.
|
|
post_ifup_script=None, # Script name with optional args, will run after interface comes up and gets IP. <tt escapearg='false'>Unescaped Value</tt>
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_ifup_script(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"flags" : flags,
|
|
"port" : port,
|
|
"post_ifup_script" : post_ifup_script,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/set_ifup_script",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_LICENSE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_license
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_license(self,
|
|
licenses=None, # License keys all appended into a single line. <tt escapearg='false'>Unescaped Value</tt>
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_license(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"licenses" : licenses,
|
|
}
|
|
response = self.json_post("/cli-json/set_license",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_MC_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_mc_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_mc_endp(self,
|
|
mcast_dest_port=None, # Multicast destination IP Port, for example: 55000
|
|
mcast_group=None, # Multicast group IP, ie: 224.1.1.2 IPv6 supported as well.
|
|
name=None, # The name of the endpoint we are configuring.
|
|
rcv_mcast=None, # Should we attempt to receive? Values: Yes or No
|
|
ttl=None, # Time to live for the multicast packets generated.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_mc_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"mcast_dest_port" : mcast_dest_port,
|
|
"mcast_group" : mcast_group,
|
|
"name" : name,
|
|
"rcv_mcast" : rcv_mcast,
|
|
"ttl" : ttl,
|
|
}
|
|
response = self.json_post("/cli-json/set_mc_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_PASSWORD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_password
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_password(self,
|
|
client=None, # Specify the client. If left blank, will use current client.
|
|
new_password=None, # New password, or 'NA' for blank password.
|
|
old_password=None, # Old password, or 'NA' for blank password.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_password(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"client" : client,
|
|
"new_password" : new_password,
|
|
"old_password" : old_password,
|
|
}
|
|
response = self.json_post("/cli-json/set_password",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_POLL_MODE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_poll_mode
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_poll_mode(self,
|
|
mode=None, # 'polling' or 'push'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_poll_mode(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"mode" : mode,
|
|
}
|
|
response = self.json_post("/cli-json/set_poll_mode",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_PORT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_port
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_port_cmd_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
abort_if_scripts = 0x400 # Forceably abort all ifup/down scripts on this Port.
|
|
force_MII_probe = 0x4 # Force MII probe
|
|
from_dhcp = 0x200 # Settings come from DHCP client.
|
|
from_user = 0x80 # from_user (Required to change Mgt Port config
|
|
new_gw_probe = 0x20 # Force new GW probe
|
|
new_gw_probe_dev = 0x40 # Force new GW probe for ONLY this interface
|
|
no_hw_probe = 0x8 # Don't probe hardware
|
|
probe_wifi = 0x10 # Probe WIFI
|
|
reset_transceiver = 0x1 # Reset transciever
|
|
restart_link_neg = 0x2 # Restart link negotiation
|
|
skip_port_bounce = 0x100 # skip-port-bounce (Don't ifdown/up
|
|
use_pre_ifdown = 0x800 # Call pre-ifdown script before bringing interface down.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_port_cmd_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_port_cmd_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_port_cmd_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_port_cmd_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class set_port_current_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
adv_100bt_fd = 0x800000 # advert-100bt-FD
|
|
adv_100bt_hd = 0x400000 # advert-100bt-HD
|
|
adv_10bt_fd = 0x200000 # advert-10bt-FD
|
|
adv_10bt_hd = 0x100000 # advert-10bt-HD
|
|
adv_10g_fd = 0x800000000 # advert-10G-FD
|
|
adv_2_5g_fd = 0x400000000 # advert-2.5G-FD
|
|
adv_5g_fd = 0x400000000000000 # Advertise 5Gbps link speed.
|
|
adv_flow_ctl = 0x8000000 # advert-flow-control
|
|
auto_neg = 0x100 # auto-negotiate
|
|
aux_mgt = 0x800000000000 # Enable Auxillary-Management flag for this port.
|
|
fixed_100bt_fd = 0x10 # Fixed-100bt-FD
|
|
fixed_100bt_hd = 0x8 # Fixed-100bt-HD
|
|
fixed_10bt_fd = 0x4 # Fixed-10bt-FD
|
|
fixed_10bt_hd = 0x2 # Fixed-10bt-HD (half duplex)
|
|
ftp_enabled = 0x400000000000 # Enable FTP (vsftpd) service for this port.
|
|
gro_enabled = 0x4000000000 # GRO-Enabled
|
|
gso_enabled = 0x10000000000 # GSO-Enabled
|
|
http_enabled = 0x200000000000 # Enable HTTP (nginx) service for this port.
|
|
if_down = 0x1 # Interface Down
|
|
ignore_dhcp = 0x2000000000000 # Don't set DHCP acquired IP on interface,
|
|
ipsec_client = 0x40000000000000 # Enable client IPSEC xfrm on this port.
|
|
ipsec_concentrator = 0x80000000000000 # Enable concentrator (upstream) IPSEC xfrm on this port.
|
|
lro_enabled = 0x2000000000 # LRO-Enabled
|
|
no_dhcp_rel = 0x80000000000 # No-DHCP-Release
|
|
no_dhcp_restart = 0x1000000000000 # Disable restart of DHCP on link connect (ie, wifi).
|
|
no_ifup_post = 0x4000000000000 # Skip ifup-post script if we can detect that we
|
|
promisc = 0x10000000 # PROMISC
|
|
radius_enabled = 0x20000000000000 # Enable RADIUS service (using hostapd as radius server)
|
|
rxfcs = 0x40000000000 # RXFCS
|
|
service_dns = 0x100000000000000 # Enable DNS (dnsmasq) service on this port.
|
|
staged_ifup = 0x100000000000 # Staged-IFUP
|
|
tso_enabled = 0x1000000000 # TSO-Enabled
|
|
ufo_enabled = 0x8000000000 # UFO-Enabled
|
|
use_dhcp = 0x80000000 # USE-DHCP
|
|
use_dhcpv6 = 0x20000000000 # USE-DHCPv6
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_port_current_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_port_current_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_port_current_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_port_current_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class set_port_dhcp_client_id(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_port_dhcp_client_id.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_port_dhcp_client_id.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
NA = "NA" # Do not change from current value.
|
|
NONE = "NONE" # Do not use dhcp client ID.
|
|
p_string_ = "[string]" # Use the string for the client ID.
|
|
p__DEVNAME = "__DEVNAME" # Use the interface's name as the client ID.
|
|
p__MAC = "__MAC" # Use interface's MAC address for the client ID.
|
|
|
|
class set_port_dhcp_hostname(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_port_dhcp_hostname.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_port_dhcp_hostname.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
NA = "NA" # Do not change from current value.
|
|
NONE = "NONE" # Do not use dhcp Hostname
|
|
p_string_ = "[string]" # Use the string for the Hostname.
|
|
p__ALIAS__ = "__ALIAS__" # Use alias if set, or EID behaviour if alias is not set..
|
|
p__EID__ = "__EID__" # Use hostname 'CT-[resource-id].[port-name]'
|
|
|
|
class set_port_dhcp_vendor_id(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_port_dhcp_vendor_id.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_port_dhcp_vendor_id.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
NA = "NA" # Do not change from current value.
|
|
NONE = "NONE" # Do not use dhcp vendor ID
|
|
p_string_ = "[string]" # Use the string for the vendor ID.
|
|
|
|
class set_port_flags2(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
bypass_disconnect = 0x200 # Logically disconnect the cable (link-down)
|
|
bypass_enabled = 0x10 # Enable Bypass Device
|
|
bypass_power_down = 0x80 # Should bypass be on when we shutdown or loose power?
|
|
bypass_power_on = 0x100 # Should bypass be on when we first power up?
|
|
supports_bypass = 0x2 # Support Bypass Devices
|
|
use_stp = 0x1 # Use Spanning Tree Protocol
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_port_flags2.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_port_flags2.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_port_flags2.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_port_flags2.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class set_port_interest(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
alias = 0x1000 # Port alias
|
|
aux_mgt = 0x20000000 # Enable/disable Auxillary-Management for a port
|
|
bridge = 0x10000 # BRIDGE
|
|
bypass = 0x40000 # Bypass
|
|
command_flags = 0x1 # apply command flags
|
|
cpu_mask = 0x100000 # CPU Mask, useful for pinning process to CPU core
|
|
current_flags = 0x2 # apply current flags
|
|
dhcp = 0x4000 # including client-id.
|
|
dhcp_rls = 0x4000000 # DHCP release
|
|
dhcpv6 = 0x1000000 # Use DHCPv6
|
|
gen_offload = 0x80000 # Generic offload flags, everything but LRO
|
|
ifdown = 0x800000 # Down interface
|
|
interal_use_1 = 0x800 # (INTERNAL USE)
|
|
ip_Mask = 0x8 # IP mask
|
|
ip_address = 0x4 # IP address
|
|
ip_gateway = 0x10 # IP gateway
|
|
ipv6_addrs = 0x20000 # IPv6 Address
|
|
link_speed = 0x80 # Link speed
|
|
lro_offload = 0x200000 # LRO (Must be disabled when used in Wanlink,
|
|
mac_address = 0x20 # MAC address
|
|
mtu = 0x100 # MTU
|
|
no_apply_dhcp = 0x80000000 # Enable/disable NO-APPLY-DHCP flag for a port
|
|
no_dhcp_conn = 0x40000000 # Enable/disable NO-DHCP-ON-CONNECT flag for a port
|
|
promisc_mode = 0x400 # PROMISC mode
|
|
rpt_timer = 0x8000 # Report Timer
|
|
rx_all = 0x2000 # Rx-ALL
|
|
rxfcs = 0x2000000 # RXFCS
|
|
skip_ifup_roam = 0x100000000 # Enable/disable SKIP-IFUP-ON-ROAM flag for a port
|
|
sta_br_id = 0x400000 # WiFi Bridge identifier. 0 means no bridging.
|
|
supported_flags = 0x40 # apply supported flags
|
|
svc_ftpd = 0x10000000 # Enable/disable FTP Service for a port
|
|
svc_httpd = 0x8000000 # Enable/disable HTTP Service for a port
|
|
tx_queue_length = 0x200 # TX Queue Length
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_port_interest.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_port_interest.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_port_interest.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_port_interest.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_set_port(self,
|
|
alias=None, # A user-defined name for this interface. Can be BLANK or NA.
|
|
br_aging_time=None, # MAC aging time, in seconds, 32-bit number (or peer IP for GRE).
|
|
br_forwarding_delay=None, # How long to wait until the bridge will start forwarding packets.
|
|
br_hello_time=None, # How often does the bridge send out STP hello packets.
|
|
br_max_age=None, # How long until STP considers a non-responsive bridge dead.
|
|
br_port_cost=None, # STP Port cost for a port (this applies only to NON-BRIDGE interfaces).
|
|
br_port_priority=None, # STP Port priority for a port (this applies only to NON-BRIDGE interfaces).
|
|
br_priority=None, # Bridge priority, 16-bit number.
|
|
bypass_wdt=None, # Watch Dog Timer (in seconds) for this port. Zero (0) to disable.
|
|
cmd_flags=None, # Command Flags: See above, or NA.
|
|
cpu_mask=None, # CPU Mask for CPUs that should service this interface. Zero is don't set (let OS make the decision). This value will be applied to the proper /proc/irq/[irq-num]/smp_affinity file by the pin_irq.pl script.
|
|
current_flags=None, # See above, or NA.
|
|
current_flags_msk=None, # This sets 'interest' for flags 'Enable RADIUS service' and higher. See above, or NA.
|
|
dhcp_client_id=None, # Optional string of up to 63 bytes in length to be passed to the dhclient process. See above.
|
|
dhcp_hostname=None, # Optional string of up to 63 bytes in length to be passed to the dhclient process. Option 12, see above.
|
|
dhcp_vendor_id=None, # Optional string of up to 63 bytes in length to be passed to the dhclient process. See above.
|
|
dns_servers=None, # DNS servers for use by traffic on this port, comma-separated list, BLANK means zero-length string.
|
|
flags2=None, # Bridge & other flags, see above.
|
|
gateway=None, # IP address of the gateway device - used for IP routing, or NA.
|
|
interest=None, # Which things are we really interested in setting. Can over-ride defaults based on the other arguments.
|
|
ip_addr=None, # IP address for the port, or NA.
|
|
ipsec_concentrator=None, # IP Address of IPSec concentrator.
|
|
ipsec_local_id=None, # Local Identifier for this IPSec tunnel.
|
|
ipsec_passwd=None, # Password for IPSec, for pubkey, use: pubkey:[pem-file-name], for instance: pubkey:station.pem
|
|
ipsec_remote_id=None, # Remote Identifier for this IPSec tunnel.
|
|
ipv6_addr_global=None, # Global scoped IPv6 address.
|
|
ipv6_addr_link=None, # Link scoped IPv6 address.
|
|
ipv6_dflt_gw=None, # IPv6 default gateway.
|
|
mac=None, # MAC address to set this port to, or leave blank to not set it, or NA.
|
|
mtu=None, # Maximum Transmit Unit (MTU) for this interface. Can be blank or NA.
|
|
netmask=None, # Netmask which this port should use, or NA.
|
|
port=None, # Port number for the port to be modified.
|
|
report_timer=None, # How often, in milliseconds, should we poll stats on this interface?
|
|
resource=None, # Resource number for the port to be modified.
|
|
shelf=None, # Shelf number for the port to be modified.
|
|
sta_br_id=None, # WiFi STAtion bridge ID. Zero means none.
|
|
tx_queue_len=None, # Transmit Queue Length for this interface. Can be blank or NA.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_port(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias" : alias,
|
|
"br_aging_time" : br_aging_time,
|
|
"br_forwarding_delay" : br_forwarding_delay,
|
|
"br_hello_time" : br_hello_time,
|
|
"br_max_age" : br_max_age,
|
|
"br_port_cost" : br_port_cost,
|
|
"br_port_priority" : br_port_priority,
|
|
"br_priority" : br_priority,
|
|
"bypass_wdt" : bypass_wdt,
|
|
"cmd_flags" : cmd_flags,
|
|
"cpu_mask" : cpu_mask,
|
|
"current_flags" : current_flags,
|
|
"current_flags_msk" : current_flags_msk,
|
|
"dhcp_client_id" : dhcp_client_id,
|
|
"dhcp_hostname" : dhcp_hostname,
|
|
"dhcp_vendor_id" : dhcp_vendor_id,
|
|
"dns_servers" : dns_servers,
|
|
"flags2" : flags2,
|
|
"gateway" : gateway,
|
|
"interest" : interest,
|
|
"ip_addr" : ip_addr,
|
|
"ipsec_concentrator" : ipsec_concentrator,
|
|
"ipsec_local_id" : ipsec_local_id,
|
|
"ipsec_passwd" : ipsec_passwd,
|
|
"ipsec_remote_id" : ipsec_remote_id,
|
|
"ipv6_addr_global" : ipv6_addr_global,
|
|
"ipv6_addr_link" : ipv6_addr_link,
|
|
"ipv6_dflt_gw" : ipv6_dflt_gw,
|
|
"mac" : mac,
|
|
"mtu" : mtu,
|
|
"netmask" : netmask,
|
|
"port" : port,
|
|
"report_timer" : report_timer,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"sta_br_id" : sta_br_id,
|
|
"tx_queue_len" : tx_queue_len,
|
|
}
|
|
response = self.json_post("/cli-json/set_port",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_PORT_ALIAS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_port_alias
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_port_alias(self,
|
|
alias=None, # New alias to assign to this virtual interface.
|
|
port=None, # Physical Port identifier that owns the virtual interface.
|
|
resource=None, # Resource number for the port to be modified.
|
|
shelf=None, # Shelf number for the port to be modified.
|
|
vport=None, # Virtual port identifier. MAC for MAC-VLANs, VLAN-ID for 802.1Q vlans.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_port_alias(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"alias" : alias,
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"vport" : vport,
|
|
}
|
|
response = self.json_post("/cli-json/set_port_alias",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_PPP_LINK_STATE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_ppp_link_state
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_ppp_link_state(self,
|
|
link=None, # Unit Number of the PPP Link, or 'all'.
|
|
ppp_state=None, # One of: RUNNING, STOPPED, or DELETED.
|
|
resource=None, # Number of the Resource, or 'all'.
|
|
shelf=None, # Name of the Shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_ppp_link_state(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"link" : link,
|
|
"ppp_state" : ppp_state,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/set_ppp_link_state",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_RESOURCE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_resource
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_resource_resource_flags(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_resource_resource_flags.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_resource_resource_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
skip_load_db_on_start = 1 # Should we skip loading the DB on start?
|
|
|
|
|
|
def post_set_resource(self,
|
|
device_profiles=None, # List of profiles, see above
|
|
max_helper_count=None, # Maximum number of helper traffic generation processes. 0 means CPU-core-count (AUTO).
|
|
max_staged_bringup=None, # Maximum amount of interfaces attempting to come up at once. Default is 50
|
|
max_station_bringup=None, # Maximum amount of stations to bring up per radio per tick. Default is 12.
|
|
max_trying_ifup=None, # Maximum amount of interfaces running the network config 'ifup' logic. Default is 15
|
|
resource=None, # Number of the Resource, or <tt>all</tt>.
|
|
resource_flags=None, # System wide flags, often requires a reboot for changes to take effect.
|
|
resource_flags_mask=None, # What flags to change. If unset, default is all.
|
|
shelf=None, # Name of the Shelf, or <tt>all</tt>.
|
|
top_left_x=None, # X Location for Chamber View.
|
|
top_left_y=None, # X Location for Chamber View.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_resource(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"device_profiles" : device_profiles,
|
|
"max_helper_count" : max_helper_count,
|
|
"max_staged_bringup" : max_staged_bringup,
|
|
"max_station_bringup" : max_station_bringup,
|
|
"max_trying_ifup" : max_trying_ifup,
|
|
"resource" : resource,
|
|
"resource_flags" : resource_flags,
|
|
"resource_flags_mask" : resource_flags_mask,
|
|
"shelf" : shelf,
|
|
"top_left_x" : top_left_x,
|
|
"top_left_y" : top_left_y,
|
|
}
|
|
response = self.json_post("/cli-json/set_resource",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_RFGEN> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_rfgen
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_rfgen_rfgen_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
one_burst = 0x8 # Run for about 1 second and stop. Uses 5-sec sweep time for single pulse train.
|
|
running = 0x2 # Should we start the RF Generator or not?
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_rfgen_rfgen_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_rfgen_rfgen_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_rfgen_rfgen_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_rfgen_rfgen_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_set_rfgen(self,
|
|
bb_gain=None, # RX Gain, 0 - 62 in 2dB steps
|
|
freq_khz=None, # Center frequency in Khz
|
|
gain=None, # Main TX/RX Amp, 0 or 14 (dB), default is 14
|
|
id=None, # RF Generator ID, not used at this time, enter 'NA' or 0.
|
|
if_gain=None, # Fine-tune TX/RX Gain, 0 - 40 dB
|
|
pulse_count=None, # Number of pulses (0-255)
|
|
pulse_interval_us=None, # Time between pulses, in micro-seconds.
|
|
pulse_width_us=None, # Requested pulse width, units are in micro-seconds.
|
|
resource=None, # Resource number.
|
|
rfgen_flags=None, # RF Generator flags, see above.
|
|
rfgen_flags_mask=None, # Mask of what flags to set, see above.
|
|
shelf=None, # Shelf number, usually 1.
|
|
sweep_time_ms=None, # Time interval between pulse groups in miliseconds
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_rfgen(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"bb_gain" : bb_gain,
|
|
"freq_khz" : freq_khz,
|
|
"gain" : gain,
|
|
"id" : id,
|
|
"if_gain" : if_gain,
|
|
"pulse_count" : pulse_count,
|
|
"pulse_interval_us" : pulse_interval_us,
|
|
"pulse_width_us" : pulse_width_us,
|
|
"resource" : resource,
|
|
"rfgen_flags" : rfgen_flags,
|
|
"rfgen_flags_mask" : rfgen_flags_mask,
|
|
"shelf" : shelf,
|
|
"sweep_time_ms" : sweep_time_ms,
|
|
}
|
|
response = self.json_post("/cli-json/set_rfgen",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_SCRIPT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_script
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_script_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
SCR_COMPLETED = 0x80 # Set automatically by LANforge.
|
|
SCR_HIDE_CONSTRAINTS = 0x2000 # Hide constraints messages.
|
|
SCR_HIDE_CSV = 0x20 # Don't print the CSV data in the report.
|
|
SCR_HIDE_HUNT = 0x800 # Hide the individual hunt steps..just show results.
|
|
SCR_HIDE_ITER_DETAILS = 0x8 # Hide iteration detail reports.
|
|
SCR_HIDE_LAT = 0x1000 # Hide latency distribution reports.
|
|
SCR_HIDE_LEGEND = 0x10 # Don't print the legend in the report.
|
|
SCR_LOOP = 0x100 # Loop script until manually stopped.
|
|
SCR_NO_KEYED_RPT = 0x2 # Script should NOT send reports to the CLI/GUI.
|
|
SCR_RUN_ON_MGR = 0x40 # Set automatically by LANforge.
|
|
SCR_SHOW_ATTENUATION = 0x4000 # Show attenuation packet stats.
|
|
SCR_SHOW_DUPS = 0x200 # Report duplicate packets.
|
|
SCR_SHOW_GOLDEN_3P = 0x20000 # Add 'golden' third-party AP graph for comparison (where available).
|
|
SCR_SHOW_GOLDEN_LF = 0x10000 # Add 'golden' LANforge graph for comparison (where available).
|
|
SCR_SHOW_OOO = 0x400 # Report out-of-order packets.
|
|
SCR_STOPPED = 0x1 # Script should NOT have any affect on the endpoint.
|
|
SCR_SYMMETRIC = 0x4 # This script should apply settings to the peer endpoing as well.
|
|
SCR_USE_MSS = 0x8000 # When setting packet size, set TCP MSS instead if endpoint supports that.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_script_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_script_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_script_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_script_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class set_script_type(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_script_type.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_script_type.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
NONE = "NONE" # Delete any existing script.
|
|
Script2544 = "Script2544" # For RFC 2544 type testing.
|
|
ScriptAtten = "ScriptAtten" # For Attenuators only.
|
|
ScriptHunt = "ScriptHunt" # Hunt for maximum speed with constraints.
|
|
ScriptWL = "ScriptWL" # For iterating through WanLink settings
|
|
|
|
|
|
def post_set_script(self,
|
|
endp=None, # Endpoint, Test Group or Attenuator name or ID.
|
|
flags=None, # See above for description of the defined flags.
|
|
group_action=None, # How to handle group script operations: ALL, Sequential
|
|
loop_count=None, # How many times to loop before stopping (0 is infinite).
|
|
name=None, # Script name.
|
|
private=None, # Private encoding for the particular script.
|
|
type=None, # One of: NONE, Script2544, ScriptHunt, ScriptWL, ScriptAtten
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_script(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endp" : endp,
|
|
"flags" : flags,
|
|
"group_action" : group_action,
|
|
"loop_count" : loop_count,
|
|
"name" : name,
|
|
"private" : private,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/set_script",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_SEC_IP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_sec_ip
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_sec_ip(self,
|
|
ip_list=None, # IP1/prefix,IP2/prefix,...IPZ/prefix.
|
|
port=None, # Name of network device (Port) to which these IPs will be added.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_sec_ip(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"ip_list" : ip_list,
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/set_sec_ip",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_VOIP_INFO> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_voip_info
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_voip_info(self,
|
|
codec=None, # Codec to use for the voice stream, supported values: G711U, G711A, SPEEX, g726-16, g726-24, g726-32, g726-40, g729a.
|
|
first_call_delay=None, # How long to wait before making first call, in seconds.
|
|
jitter_buffer_sz=None, # The size of the jitter buffer in packets. Default value is 8.
|
|
local_sip_port=None, # Local SIP UDP port. Default is min-rtp-port + 2.
|
|
loop_call_count=None, # How many calls to make, zero means infinite.
|
|
loop_wavefile_count=None, # How many times to play the wave file, zero means infinite.
|
|
max_call_duration=None, # How long should the call be, in seconds.
|
|
max_inter_call_gap=None, # Maximum time to wait between calls, in seconds.
|
|
messaging_protocol=None, # Messaging protocol, supported values: SIP.
|
|
min_call_duration=None, # How long should the call be, in seconds.
|
|
min_inter_call_gap=None, # Minimum time to wait between calls, in seconds.
|
|
name=None, # The name of the endpoint we are configuring.
|
|
pesq_server_ip=None, # LANforge PESQ server IP address.
|
|
pesq_server_passwd=None, # LANforge PESQ server password. Default is to use no authentication (blank entry).
|
|
pesq_server_port=None, # LANforge PESQ server port, default is 3998.
|
|
reg_expire_timer=None, # SIP Registration expire timer, in seconds.
|
|
ringing_timer=None, # How long (milliseconds) to wait in the ringing state before flagging call as no-answer.
|
|
sound_dev=None, # Which sound device should we play sound to. (see set_endp_flags).
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_voip_info(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"codec" : codec,
|
|
"first_call_delay" : first_call_delay,
|
|
"jitter_buffer_sz" : jitter_buffer_sz,
|
|
"local_sip_port" : local_sip_port,
|
|
"loop_call_count" : loop_call_count,
|
|
"loop_wavefile_count" : loop_wavefile_count,
|
|
"max_call_duration" : max_call_duration,
|
|
"max_inter_call_gap" : max_inter_call_gap,
|
|
"messaging_protocol" : messaging_protocol,
|
|
"min_call_duration" : min_call_duration,
|
|
"min_inter_call_gap" : min_inter_call_gap,
|
|
"name" : name,
|
|
"pesq_server_ip" : pesq_server_ip,
|
|
"pesq_server_passwd" : pesq_server_passwd,
|
|
"pesq_server_port" : pesq_server_port,
|
|
"reg_expire_timer" : reg_expire_timer,
|
|
"ringing_timer" : ringing_timer,
|
|
"sound_dev" : sound_dev,
|
|
}
|
|
response = self.json_post("/cli-json/set_voip_info",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_VRCX_COST> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_vrcx_cost
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_vrcx_cost(self,
|
|
interface_cost=None, # If using OSPF, this sets the cost for this link (1-65535).
|
|
local_dev=None, # Name of port A for the local redirect device pair.
|
|
local_dev_b=None, # Name of port B for the local redirect device pair.
|
|
remote_dev=None, # Name of port B for the remote redirect device pair.
|
|
remote_dev_b=None, # Name of port B for the remote redirect device pair.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf name/id.
|
|
vr_name=None, # Virtual Router this endpoint belongs to. Use 'FREE_LIST' to add a stand-alone endpoint.
|
|
wanlink=None, # The name of the WanLink that connects the two B ports.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_vrcx_cost(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"interface_cost" : interface_cost,
|
|
"local_dev" : local_dev,
|
|
"local_dev_b" : local_dev_b,
|
|
"remote_dev" : remote_dev,
|
|
"remote_dev_b" : remote_dev_b,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"vr_name" : vr_name,
|
|
"wanlink" : wanlink,
|
|
}
|
|
response = self.json_post("/cli-json/set_vrcx_cost",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_WANLINK_INFO> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_wanlink_info
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_wanlink_info(self,
|
|
drop_freq=None, # How often, out of 1,000,000 packets, should we purposefully drop a packet.
|
|
dup_freq=None, # How often, out of 1,000,000 packets, should we purposefully duplicate a packet.
|
|
extra_buffer=None, # The extra amount of bytes to buffer before dropping pkts, in units of 1024. Use -1 for AUTO.
|
|
jitter_freq=None, # How often, out of 1,000,000 packets, should we apply jitter.
|
|
latency=None, # The base latency added to all packets, in milliseconds (or add 'us' suffix for microseconds
|
|
max_drop_amt=None, # Maximum amount of packets to drop in a row. Default is 1.
|
|
max_jitter=None, # The maximum jitter, in milliseconds (or ad 'us' suffix for microseconds)
|
|
max_lateness=None, # Maximum amount of un-intentional delay before pkt is dropped. Default is AUTO
|
|
max_reorder_amt=None, # Maximum amount of packets by which to reorder, Default is 10.
|
|
min_drop_amt=None, # Minimum amount of packets to drop in a row. Default is 1.
|
|
min_reorder_amt=None, # Minimum amount of packets by which to reorder, Default is 1.
|
|
name=None, # The name of the endpoint we are configuring.
|
|
playback_capture_file=None, # Name of the WAN capture file to play back.
|
|
reorder_freq=None, # How often, out of 1,000,000 packets, should we make a packet out of order.
|
|
speed=None, # The maximum speed of traffic this endpoint will accept (bps).
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_wanlink_info(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"drop_freq" : drop_freq,
|
|
"dup_freq" : dup_freq,
|
|
"extra_buffer" : extra_buffer,
|
|
"jitter_freq" : jitter_freq,
|
|
"latency" : latency,
|
|
"max_drop_amt" : max_drop_amt,
|
|
"max_jitter" : max_jitter,
|
|
"max_lateness" : max_lateness,
|
|
"max_reorder_amt" : max_reorder_amt,
|
|
"min_drop_amt" : min_drop_amt,
|
|
"min_reorder_amt" : min_reorder_amt,
|
|
"name" : name,
|
|
"playback_capture_file" : playback_capture_file,
|
|
"reorder_freq" : reorder_freq,
|
|
"speed" : speed,
|
|
}
|
|
response = self.json_post("/cli-json/set_wanlink_info",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_WANLINK_PCAP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_wanlink_pcap
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_wanlink_pcap(self,
|
|
capture=None, # Should we capture or not? ON or OFF.
|
|
directory=None, # The directory name in which packet capture files will be written.
|
|
name=None, # The name of the endpoint we are configuring.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_wanlink_pcap(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"capture" : capture,
|
|
"directory" : directory,
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/set_wanlink_pcap",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_WANPATH_CORRUPTION> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_wanpath_corruption
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_wanpath_corruption_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
BIT_FLIP = 0x4 # Flip a random bit in a byte.
|
|
BIT_TRANSPOSE = 0x8 # Transpose two side-by-side bits in a byte.
|
|
DO_CHAIN_ON_HIT = 0x10 # Do next corruption if this corruption is applied.
|
|
OVERWRITE_FIXED = 0x2 # Write a fixed value to a byte.
|
|
OVERWRITE_RANDOM = 0x1 # Write a random value to a byte.
|
|
RECALC_CSUMS = 0x20 # Attempt to re-calculate UDP and TCP checksums.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_wanpath_corruption_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_wanpath_corruption_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_wanpath_corruption_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_wanpath_corruption_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_set_wanpath_corruption(self,
|
|
byte=None, # The byte to use for OVERWRITE_FIXED (or NA).
|
|
flags=None, # The flags for this corruption.
|
|
index=None, # The corruption to modify (0-5).
|
|
max_offset=None, # The maximum offset from start of Ethernet packet for the byte to be modified.
|
|
min_offset=None, # The minimum offset from start of Ethernet packet for the byte to be modified.
|
|
name=None, # WanLink name
|
|
path=None, # WanPath name
|
|
rate=None, # Specifies how often, per million, this corruption should be applied.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_wanpath_corruption(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"byte" : byte,
|
|
"flags" : flags,
|
|
"index" : index,
|
|
"max_offset" : max_offset,
|
|
"min_offset" : min_offset,
|
|
"name" : name,
|
|
"path" : path,
|
|
"rate" : rate,
|
|
}
|
|
response = self.json_post("/cli-json/set_wanpath_corruption",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_WANPATH_FILTER> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_wanpath_filter
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_wanpath_filter(self,
|
|
defer_flush=None, # Enter 'YES' if you do NOT want this flushed to the remote.
|
|
dst_filter=None, # The destination MAC or IP/Mask, 'NA' for PCAP.
|
|
filter_type=None, # The filter type, one of: MAC, IP, PCAP.
|
|
passive=None, # Enter 'YES' if you do NOT want to use this filter currently.
|
|
reverse=None, # If you want the logic reversed, use 'ON', otherwise set to 'OFF'
|
|
src_filter=None, # The source MAC or IP/Mask. For PCAP, this is the only filter.
|
|
wl_name=None, # The name of the WanLink endpoint we are configuring.
|
|
wp_name=None, # The name of the WanPath we are configuring.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_wanpath_filter(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"defer_flush" : defer_flush,
|
|
"dst_filter" : dst_filter,
|
|
"filter_type" : filter_type,
|
|
"passive" : passive,
|
|
"reverse" : reverse,
|
|
"src_filter" : src_filter,
|
|
"wl_name" : wl_name,
|
|
"wp_name" : wp_name,
|
|
}
|
|
response = self.json_post("/cli-json/set_wanpath_filter",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_WANPATH_RUNNING> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_wanpath_running
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_wanpath_running_running(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_wanpath_running_running.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_wanpath_running_running.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
AS_PARENT = "AS_PARENT" # then it will be started and stopped as the parent WanLink is.
|
|
RUNNING = "RUNNING" # then it will be running at all times
|
|
STOPPED = "STOPPED" # then it will not be running at any time.
|
|
|
|
|
|
def post_set_wanpath_running(self,
|
|
running=None, # The state, one of: AS_PARENT, RUNNING, STOPPED.
|
|
wl_name=None, # The name of the WanLink endpoint we are configuring.
|
|
wp_name=None, # The name of the WanPath we are configuring.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_wanpath_running(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"running" : running,
|
|
"wl_name" : wl_name,
|
|
"wp_name" : wp_name,
|
|
}
|
|
response = self.json_post("/cli-json/set_wanpath_running",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_WIFI_CORRUPTIONS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_wifi_corruptions
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_wifi_corruptions_corrupt_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
MSG_TYPE_DEAUTH = 0x2 # de-authentication message
|
|
MSG_TYPE_EAPOL = 0x1 # Any EAPOL message
|
|
MSG_TYPE_EAPOL_1_OF_2 = 0x40 # EAPOL message 1/2
|
|
MSG_TYPE_EAPOL_1_OF_4 = 0x4 # EAPOL message 1/4
|
|
MSG_TYPE_EAPOL_2_OF_2 = 0x80 # EAPOL message 2/2
|
|
MSG_TYPE_EAPOL_2_OF_4 = 0x8 # EAPOL message 2/4
|
|
MSG_TYPE_EAPOL_3_OF_4 = 0x10 # EAPOL message 3/4
|
|
MSG_TYPE_EAPOL_4_OF_4 = 0x20 # EAPOL message 4/4
|
|
MSG_TYPE_EAPOL_ASSOC = 0x200 # EAP Association
|
|
MSG_TYPE_EAPOL_KEY_REQ = 0x100 # EAP Key Request (not sure if this works properly)
|
|
MST_TYPE_EAPOL_ID_REQ = 0x400 # EAP Identity request
|
|
MST_TYPE_EAPOL_ID_RESP = 0x800 # EAP Identity response
|
|
MST_TYPE_EAPOL_OTHER_REQ = 0x1000 # EAP Requests that do not match other things.
|
|
MST_TYPE_EAPOL_OTHER_RESP = 0x2000 # EAP Responses that do not match other things.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_wifi_corruptions_corrupt_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_wifi_corruptions_corrupt_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_wifi_corruptions_corrupt_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_wifi_corruptions_corrupt_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_set_wifi_corruptions(self,
|
|
corrupt_flags=None, # Specify packet types to corrupt (see flags above).
|
|
corrupt_per_mil=None, # Per-million: Station to randomly corrupt selected message types by this amount.
|
|
delay_flags=None, # Specify packet types to delay (see flags above).
|
|
delay_max=None, # miliseconds: Station to randomly delay processing received messages, max time
|
|
delay_min=None, # miliseconds: Station to randomly delay processing received messages, min time
|
|
dup_flags=None, # Specify packet types to duplicate (see flags above).
|
|
dup_per_65535=None, # Percentage, represented as x per 65535 of packets we should duplicate.
|
|
ignore_flags=None, # Specify packet types to ignore (see flags above).
|
|
ignore_per_mil=None, # Per-million: Station to randomly ignore selected message types by this amount.
|
|
port=None, # WiFi interface name or number.
|
|
req_flush=None, # Set to 1 if you wish to flush changes to kernel now.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_wifi_corruptions(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"corrupt_flags" : corrupt_flags,
|
|
"corrupt_per_mil" : corrupt_per_mil,
|
|
"delay_flags" : delay_flags,
|
|
"delay_max" : delay_max,
|
|
"delay_min" : delay_min,
|
|
"dup_flags" : dup_flags,
|
|
"dup_per_65535" : dup_per_65535,
|
|
"ignore_flags" : ignore_flags,
|
|
"ignore_per_mil" : ignore_per_mil,
|
|
"port" : port,
|
|
"req_flush" : req_flush,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/set_wifi_corruptions",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_WIFI_CUSTOM> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_wifi_custom
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_wifi_custom(self,
|
|
port=None, # WiFi interface name or number.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
text=None, # [BLANK] will erase all, any other text will be appended to existing text. <tt escapearg='false'>Unescaped Value</tt>
|
|
type=None, # NA for now, may specify specific locations later.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_wifi_custom(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"text" : text,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/set_wifi_custom",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_WIFI_EXTRA> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_wifi_extra
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_wifi_extra(self,
|
|
anonymous_identity=None, # Anonymous identity string for EAP.
|
|
anqp_3gpp_cell_net=None, # 802.11u 3GCPP Cellular Network Info, VAP only.
|
|
ca_cert=None, # CA-CERT file name.
|
|
client_cert=None, # 802.11u Client cert file: /etc/wpa_supplicant/ca.pem
|
|
domain=None, # 802.11u domain: mytelco.com
|
|
eap=None, # EAP method: MD5, MSCHAPV2, OTP, GTC, TLS, PEAP, TTLS.
|
|
group=None, # Group cyphers: CCMP, TKIP, WEP104, WEP40, or combination.
|
|
hessid=None, # 802.11u HESSID (MAC address format) (or peer for WDS stations).
|
|
identity=None, # EAP Identity string.
|
|
imsi=None, # 802.11u IMSI: 310026-000000000
|
|
ipaddr_type_avail=None, # 802.11u network type available, integer, VAP only.
|
|
key=None, # WEP key0. This should be entered in ascii-hex. Use this only for WEP.
|
|
key_mgmt=None, # Key management: WPA-PSK, WPA-EAP, IEEE8021X, NONE, WPA-PSK-SHA256, WPA-EAP-SHA256 or combo.
|
|
milenage=None, # 802.11u milenage: 90dca4eda45b53cf0f12d7c9c3bc6a89:cb9cccc4b9258e6dca4760379fb82
|
|
network_auth_type=None, # 802.11u network authentication type, VAP only.
|
|
network_type=None, # 802.11u network type, integer, VAP only.
|
|
pac_file=None, # EAP-FAST PAC-File name. (For AP, this field is the RADIUS secret password)
|
|
pairwise=None, # Pairwise ciphers: CCMP, TKIP, NONE, or combination.
|
|
password=None, # EAP Password string.
|
|
phase1=None, # Outer-authentication, ie TLS tunnel parameters.
|
|
phase2=None, # Inner authentication with TLS tunnel.
|
|
pin=None, # EAP-SIM pin string. (For AP, this field is HS20 Operating Class)
|
|
pk_passwd=None, # EAP private key password. (For AP, this field is HS20 connection capability)
|
|
port=None, # WiFi interface name or number.
|
|
private_key=None, # EAP private key certificate file name. (For AP, this field is HS20 WAN Metrics)
|
|
psk=None, # WPA(2) pre-shared key. If unsure, use this field for any password entry. Prepend with 0x for ascii-hex representation.
|
|
realm=None, # 802.11u realm: mytelco.com
|
|
resource=None, # Resource number.
|
|
roaming_consortium=None, # 802.11u roaming consortium: 223344 (15 characters max)
|
|
shelf=None, # Shelf number.
|
|
venue_group=None, # 802.11u Venue Group, integer. VAP only.
|
|
venue_type=None, # 802.11u Venue Type, integer. VAP only.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_wifi_extra(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"anonymous_identity" : anonymous_identity,
|
|
"anqp_3gpp_cell_net" : anqp_3gpp_cell_net,
|
|
"ca_cert" : ca_cert,
|
|
"client_cert" : client_cert,
|
|
"domain" : domain,
|
|
"eap" : eap,
|
|
"group" : group,
|
|
"hessid" : hessid,
|
|
"identity" : identity,
|
|
"imsi" : imsi,
|
|
"ipaddr_type_avail" : ipaddr_type_avail,
|
|
"key" : key,
|
|
"key_mgmt" : key_mgmt,
|
|
"milenage" : milenage,
|
|
"network_auth_type" : network_auth_type,
|
|
"network_type" : network_type,
|
|
"pac_file" : pac_file,
|
|
"pairwise" : pairwise,
|
|
"password" : password,
|
|
"phase1" : phase1,
|
|
"phase2" : phase2,
|
|
"pin" : pin,
|
|
"pk_passwd" : pk_passwd,
|
|
"port" : port,
|
|
"private_key" : private_key,
|
|
"psk" : psk,
|
|
"realm" : realm,
|
|
"resource" : resource,
|
|
"roaming_consortium" : roaming_consortium,
|
|
"shelf" : shelf,
|
|
"venue_group" : venue_group,
|
|
"venue_type" : venue_type,
|
|
}
|
|
response = self.json_post("/cli-json/set_wifi_extra",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_WIFI_EXTRA2> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_wifi_extra2
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_wifi_extra2(self,
|
|
corrupt_gtk_rekey_mic=None, # Per-million: AP corrupts GTK Rekey MIC.
|
|
freq_24=None, # Frequency list for 2.4Ghz band, see above.
|
|
freq_5=None, # Frequency list for 5Ghz band, see above.
|
|
ignore_assoc=None, # Per-million: AP ignore assoc request percentage.
|
|
ignore_auth=None, # Per-million: AP ignore auth request percentage.
|
|
ignore_probe=None, # Per-million: AP ignore probe percentage.
|
|
ignore_reassoc=None, # Per-million: AP ignore re-assoc request percentage.
|
|
ocsp=None, # OCSP settings: 0=disabled, 1=try, but to not require response, 2=require valid OCSP stapling response.
|
|
port=None, # WiFi interface name or number.
|
|
post_ifup_script=None, # Script name with optional args, will run after interface comes up and gets IP.
|
|
|
|
radius_ip=None, # RADIUS server IP Address (AP Only)
|
|
radius_port=None, # RADIUS server IP Port (AP Only)
|
|
req_flush=None, # Set to 1 if you wish to flush changes to kernel now.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
venue_id=None, # Venue-ID for this wifi device. VAP in same venue will share neigh reports as appropriate.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_wifi_extra2(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"corrupt_gtk_rekey_mic" : corrupt_gtk_rekey_mic,
|
|
"freq_24" : freq_24,
|
|
"freq_5" : freq_5,
|
|
"ignore_assoc" : ignore_assoc,
|
|
"ignore_auth" : ignore_auth,
|
|
"ignore_probe" : ignore_probe,
|
|
"ignore_reassoc" : ignore_reassoc,
|
|
"ocsp" : ocsp,
|
|
"port" : port,
|
|
"post_ifup_script" : post_ifup_script,
|
|
"radius_ip" : radius_ip,
|
|
"radius_port" : radius_port,
|
|
"req_flush" : req_flush,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"venue_id" : venue_id,
|
|
}
|
|
response = self.json_post("/cli-json/set_wifi_extra2",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_WIFI_RADIO> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_wifi_radio
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_wifi_radio_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
ct_sta_mode = 0x40000 # Enable CT-STA mode if radio supports it. Efficiently replaces sw-crypt in some firmware.
|
|
firmware_cfg = 0x80000 # Apply firmware config.
|
|
hw_sim = 0x1 # Create hw-sim virtual radio if radio does not already exist.
|
|
ignore_radar = 0x100000 # Ignore RADAR events reported by firmware.
|
|
no_scan_share = 0x40 # Disable sharing scan results.
|
|
no_sw_crypt = 0x20000 # Disable software-crypt for this radio. Disables some virtual-station features.
|
|
use_syslog = 0x20000000 # Put supplicant logs in syslog instead of a file.
|
|
verbose = 0x10000 # Verbose-Debug: Increase debug info in wpa-supplicant and hostapd logs.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_wifi_radio_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_wifi_radio_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_wifi_radio_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_wifi_radio_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
class set_wifi_radio_mode(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_wifi_radio_mode.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_wifi_radio_mode.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
p_802_11a = 1 # 802.11a
|
|
AUTO = 0 # 802.11g
|
|
aAX = 15 # 802.11a-AX (6E disables /n and /ac)
|
|
abg = 4 # 802.11abg
|
|
abgn = 5 # 802.11abgn
|
|
abgnAC = 8 # 802.11abgn-AC
|
|
abgnAX = 12 # 802.11abgn-AX
|
|
an = 10 # 802.11an
|
|
anAC = 9 # 802.11an-AC
|
|
anAX = 14 # 802.11an-AX
|
|
b = 2 # 802.11b
|
|
bg = 7 # 802.11bg
|
|
bgn = 6 # 802.11bgn
|
|
bgnAC = 11 # 802.11bgn-AC
|
|
bgnAX = 13 # 802.11bgn-AX
|
|
g = 3 # 802.11g
|
|
|
|
|
|
def post_set_wifi_radio(self,
|
|
active_peer_count=None, # Number of locally-cached peer objects for this radio.
|
|
ampdu_factor=None, # ax200/ax210 only, currently. Requires module reload. OS Default: 0xFF
|
|
antenna=None, # Antenna configuration: 0 Diversity/All, 1 Fixed-A (1x1), 4 AB (2x2), 7 ABC (3x3), 8 ABCD (4x4), 9 8x8
|
|
channel=None, # Channel number for this radio device. Frequency takes precedence if both are set to non-default values. <tt>0xFFFF, AUTO or DEFAULT</tt> means ANY.
|
|
const_tx=None, # RF Pattern Generator , encoded as a single 32-bit integer. See above.
|
|
country=None, # Country number for this radio device.
|
|
flags=None, # Flags for this interface (see above.)
|
|
flags_mask=None, # If set, only these flags will be considered.
|
|
frag_thresh=None, # Fragmentation Threshold (256 - 2346, 2346 == disabled).
|
|
frequency=None, # Frequency for this radio. <tt>0xFFFF, AUTO or DEFAULT</tt> means ANY.
|
|
fwname=None, # Firmware name (for example: firmware-5.bin)
|
|
fwver=None, # Firmware API version (for example, 5 if firmware is based on firmware-5.bin
|
|
mac=None, # Used to identify when name cannot be trusted (2.6.34+ kernels).
|
|
max_amsdu=None, # Maximum number of frames per AMSDU that may be transmitted. See above.
|
|
mode=None, # WiFi mode, see table
|
|
peer_count=None, # Number of peer objects for this radio.
|
|
pref_ap=None, # Preferred AP BSSID for all station vdevs on this radio.
|
|
pulse2_interval_us=None, # Pause between pattern burst for RF noise generator.
|
|
pulse_interval=None, # RF Pattern generator: interval between pulses in usecs.
|
|
pulse_width=None, # RF Pattern generator: pulse width in usecs.
|
|
radio=None, # Name of the physical radio interface, for example: wiphy0
|
|
rate=None, # No longer used, specify the rate on the virtual station(s) instead.
|
|
rate_ctrl_count=None, # Number of rate-ctrl objects for this radio.
|
|
resource=None, # Resource number.
|
|
rts=None, # The RTS Threshold for this radio (off, or 1-2347).
|
|
shelf=None, # Shelf number.
|
|
skid_limit=None, # Firmware hash-table Skid Limit for this radio.
|
|
stations_count=None, # Number of stations supported by this radio.
|
|
tids_count=None, # TIDs count for this radio.
|
|
tx_pulses=None, # Number of pattern pulses per burst for RF noise generator.
|
|
txdesc_count=None, # Transmit descriptor count for this radio.
|
|
txpower=None, # The transmit power setting for this radio. (AUTO for system defaults)
|
|
vdev_count=None, # Configure radio vdev count.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_wifi_radio(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"active_peer_count" : active_peer_count,
|
|
"ampdu_factor" : ampdu_factor,
|
|
"antenna" : antenna,
|
|
"channel" : channel,
|
|
"const_tx" : const_tx,
|
|
"country" : country,
|
|
"flags" : flags,
|
|
"flags_mask" : flags_mask,
|
|
"frag_thresh" : frag_thresh,
|
|
"frequency" : frequency,
|
|
"fwname" : fwname,
|
|
"fwver" : fwver,
|
|
"mac" : mac,
|
|
"max_amsdu" : max_amsdu,
|
|
"mode" : mode,
|
|
"peer_count" : peer_count,
|
|
"pref_ap" : pref_ap,
|
|
"pulse2_interval_us" : pulse2_interval_us,
|
|
"pulse_interval" : pulse_interval,
|
|
"pulse_width" : pulse_width,
|
|
"radio" : radio,
|
|
"rate" : rate,
|
|
"rate_ctrl_count" : rate_ctrl_count,
|
|
"resource" : resource,
|
|
"rts" : rts,
|
|
"shelf" : shelf,
|
|
"skid_limit" : skid_limit,
|
|
"stations_count" : stations_count,
|
|
"tids_count" : tids_count,
|
|
"tx_pulses" : tx_pulses,
|
|
"txdesc_count" : txdesc_count,
|
|
"txpower" : txpower,
|
|
"vdev_count" : vdev_count,
|
|
}
|
|
response = self.json_post("/cli-json/set_wifi_radio",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_WIFI_TXO> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_wifi_txo
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_set_wifi_txo(self,
|
|
port=None, # WiFi interface name or number.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
txo_bw=None, # Configure bandwidth: 0 == 20, 1 == 40, 2 == 80, 3 == 160, 4 == 80+80.
|
|
txo_enable=None, # Set to 1 if you wish to enable transmit override, 0 to disable.
|
|
txo_mcs=None, # Configure the MCS (0-3 for CCK, 0-7 for OFDM, 0-7 for HT, 0-9 for VHT, 0-11 for HE
|
|
txo_nss=None, # Configure number of spatial streams (0 == nss1, 1 == nss2, ...).
|
|
txo_pream=None, # Select rate preamble: 0 == OFDM, 1 == CCK, 2 == HT, 3 == VHT, 4 == HE_SU.
|
|
txo_retries=None, # Configure number of retries. 0 or 1 means no retries).
|
|
txo_sgi=None, # Should rates be sent with short-guard-interval or not?
|
|
txo_txpower=None, # Configure TX power in db. Use 255 for system defaults.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_wifi_txo(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"txo_bw" : txo_bw,
|
|
"txo_enable" : txo_enable,
|
|
"txo_mcs" : txo_mcs,
|
|
"txo_nss" : txo_nss,
|
|
"txo_pream" : txo_pream,
|
|
"txo_retries" : txo_retries,
|
|
"txo_sgi" : txo_sgi,
|
|
"txo_txpower" : txo_txpower,
|
|
}
|
|
response = self.json_post("/cli-json/set_wifi_txo",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_WL_CORRUPTION> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_wl_corruption
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_wl_corruption_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
BIT_FLIP = 0x4 # Flip a random bit in a byte.
|
|
BIT_TRANSPOSE = 0x8 # Transpose two side-by-side bits in a byte.
|
|
DO_CHAIN_ON_HIT = 0x10 # Do next corruption if this corruption is applied.
|
|
OVERWRITE_FIXED = 0x2 # Write a fixed value to a byte.
|
|
OVERWRITE_RANDOM = 0x1 # Write a random value to a byte.
|
|
RECALC_CSUMS = 0x20 # Attempt to re-calculate UDP and TCP checksums.
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_wl_corruption_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+set_wl_corruption_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_wl_corruption_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+set_wl_corruption_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_set_wl_corruption(self,
|
|
byte=None, # The byte to use for OVERWRITE_FIXED (or NA).
|
|
flags=None, # The flags for this corruption.
|
|
index=None, # The corruption to modify (0-5).
|
|
max_offset=None, # The maximum offset from start of Ethernet packet for the byte to be modified.
|
|
min_offset=None, # The minimum offset from start of Ethernet packet for the byte to be modified.
|
|
name=None, # WanLink name
|
|
rate=None, # Specifies how often, per million, this corruption should be applied.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_wl_corruption(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"byte" : byte,
|
|
"flags" : flags,
|
|
"index" : index,
|
|
"max_offset" : max_offset,
|
|
"min_offset" : min_offset,
|
|
"name" : name,
|
|
"rate" : rate,
|
|
}
|
|
response = self.json_post("/cli-json/set_wl_corruption",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SET_WL_QDISC> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#set_wl_qdisc
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class set_wl_qdisc_qdisc(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
set_wl_qdisc_qdisc.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+set_wl_qdisc_qdisc.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
FIFO = "FIFO" # is the default queuing discipline, no arguments
|
|
WRR__queue_queue_____ = "WRR,[queue,queue,...]" # Weighted Round Robbin is also available
|
|
|
|
|
|
def post_set_wl_qdisc(self,
|
|
name=None, # WanLink name
|
|
qdisc=None, # FIFO, WRR,a,b,c,d,e,f,g etc
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_set_wl_qdisc(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
"qdisc" : qdisc,
|
|
}
|
|
response = self.json_post("/cli-json/set_wl_qdisc",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_ALERTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_alerts
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class show_alerts_type(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
show_alerts_type.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+show_alerts_type.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
All = "All"
|
|
CX = "CX"
|
|
Card = "Card"
|
|
Channel_Group = "Channel_Group"
|
|
CollisionDomain = "CollisionDomain"
|
|
Endp = "Endp"
|
|
PESQ = "PESQ"
|
|
PPP_Link = "PPP_Link"
|
|
Port = "Port"
|
|
Shelf = "Shelf"
|
|
Span = "Span"
|
|
Test_Mgr = "Test_Mgr"
|
|
|
|
|
|
def post_show_alerts(self,
|
|
card=None, # Alert resource filter.
|
|
endp=None, # Alert endpoint filter.
|
|
extra=None, # Extra filter, currently ignored.
|
|
port=None, # Alert port filter (can be port name or number).
|
|
shelf=None, # Alert shelf filter.
|
|
type=None, # Alert type filter.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_alerts(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"card" : card,
|
|
"endp" : endp,
|
|
"extra" : extra,
|
|
"port" : port,
|
|
"shelf" : shelf,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/show_alerts",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_ATTENUATORS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_attenuators
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_attenuators(self,
|
|
resource=None, # Resource number, or 'all'.
|
|
serno=None, # Serial number for requested Attenuator, or 'all'.
|
|
shelf=None, # Shelf number or alias, can be 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_attenuators(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"serno" : serno,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/show_attenuators",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_CD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_cd
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_cd(self,
|
|
collision_domain=None, # Name of the Collision Domain, or 'all'.
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_cd(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"collision_domain" : collision_domain,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/show_cd",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_CHAMBER> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_chamber
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_chamber(self,
|
|
name=None, # Chamber Name or 'ALL'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_chamber(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/show_chamber",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_CHANNEL_GROUPS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_channel_groups
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_channel_groups(self,
|
|
channel_name=None, # Name of the channel, or 'all'.
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_channel_groups(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"channel_name" : channel_name,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/show_channel_groups",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_CLIENTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_clients
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_clients(self,
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_clients(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
}
|
|
response = self.json_post("/cli-json/show_clients",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_CX> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_cx
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_cx(self,
|
|
cross_connect=None, # Specify cross-connect to act on, or 'all'.
|
|
test_mgr=None, # Specify test-mgr to act on, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_cx(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cross_connect" : cross_connect,
|
|
"test_mgr" : test_mgr,
|
|
}
|
|
response = self.json_post("/cli-json/show_cx",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_CXE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_cxe
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_cxe(self,
|
|
cross_connect=None, # Specify cross-connect to show, or 'all'.
|
|
test_mgr=None, # Specify test-mgr to use, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_cxe(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cross_connect" : cross_connect,
|
|
"test_mgr" : test_mgr,
|
|
}
|
|
response = self.json_post("/cli-json/show_cxe",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_DBS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_dbs
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_dbs(self,
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_dbs(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
}
|
|
response = self.json_post("/cli-json/show_dbs",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_DUT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_dut
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_dut(self,
|
|
name=None, # DUT Name or 'ALL'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_dut(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/show_dut",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_ENDP_PAYLOAD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_endp_payload
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_endp_payload(self,
|
|
max_bytes=None, # The max number of payload bytes to print out, default is 128.
|
|
name=None, # The name of the endpoint we are configuring.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_endp_payload(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"max_bytes" : max_bytes,
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/show_endp_payload",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_ENDPOINTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_endpoints
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_endpoints(self,
|
|
endpoint=None, # Name of endpoint, or 'all'.
|
|
extra=None, # See above.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_endpoints(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endpoint" : endpoint,
|
|
"extra" : extra,
|
|
}
|
|
response = self.json_post("/cli-json/show_endpoints",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_ERR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_err
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_err(self,
|
|
message=None, # Message to show to others currently logged on. <tt escapearg='false'>Unescaped Value</tt>
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_err(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"message" : message,
|
|
}
|
|
response = self.json_post("/cli-json/show_err",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_EVENT_INTEREST> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_event_interest
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_event_interest(self,
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_event_interest(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
}
|
|
response = self.json_post("/cli-json/show_event_interest",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_EVENTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_events
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class show_events_type(Enum):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
show_events_type.clear_flags(['bridge', 'dhcp'])
|
|
print( 'value now: '+show_events_type.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
All = "All"
|
|
CX = "CX"
|
|
Card = "Card"
|
|
Channel_Group = "Channel_Group"
|
|
CollisionDomain = "CollisionDomain"
|
|
Endp = "Endp"
|
|
PESQ = "PESQ"
|
|
PPP_Link = "PPP_Link"
|
|
Port = "Port"
|
|
Shelf = "Shelf"
|
|
Span = "Span"
|
|
Test_Mgr = "Test_Mgr"
|
|
|
|
|
|
def post_show_events(self,
|
|
card=None, # Event resource filter.
|
|
endp=None, # Event endpoint filter.
|
|
extra=None, # Extra filter, currently ignored.
|
|
port=None, # Event port filter (can be port name or number).
|
|
shelf=None, # Event shelf filter.
|
|
type=None, # Event type filter.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_events(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"card" : card,
|
|
"endp" : endp,
|
|
"extra" : extra,
|
|
"port" : port,
|
|
"shelf" : shelf,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/show_events",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_FILES> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_files
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_files(self,
|
|
dir_flags=None, # Determines format of listing, see above.
|
|
directory=None, # The sub-directory in which to list.
|
|
filter=None, # An optional filter, as used by the 'ls' command.
|
|
key=None, # A special key, can be used for scripting.
|
|
resource=None, # The machine to search in.
|
|
shelf=None, # The virtual shelf to search in. Use 0 for manager machine.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_files(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"dir_flags" : dir_flags,
|
|
"directory" : directory,
|
|
"filter" : filter,
|
|
"key" : key,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/show_files",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_GROUP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_group
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_group(self,
|
|
group=None, # Can be name of test group. Use 'all' or leave blank for all groups.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_group(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"group" : group,
|
|
}
|
|
response = self.json_post("/cli-json/show_group",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_PESQ> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_pesq
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_pesq(self,
|
|
endpoint=None, # Name of endpoint, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_pesq(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endpoint" : endpoint,
|
|
}
|
|
response = self.json_post("/cli-json/show_pesq",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_PORTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_ports
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_ports(self,
|
|
port=None, # Port number, or 'all'.
|
|
probe_flags=None, # See above, add them together for multiple probings. Leave blank if you want stats only.
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_ports(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"port" : port,
|
|
"probe_flags" : probe_flags,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/show_ports",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_PPP_LINKS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_ppp_links
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_ppp_links(self,
|
|
link_num=None, # Ppp-Link number of the span, or 'all'.
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_ppp_links(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"link_num" : link_num,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/show_ppp_links",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_PROFILE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_profile
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_profile(self,
|
|
name=None, # Profile Name or 'ALL'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_profile(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/show_profile",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_RESOURCES> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_resources
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_resources(self,
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Shelf number or alias, can be 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_resources(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/show_resources",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_RFGEN> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_rfgen
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_rfgen(self,
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Shelf number or alias, can be 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_rfgen(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/show_rfgen",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_RT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_rt
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_rt(self,
|
|
key=None, # Unique identifier for this request. Usually left blank.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
virtual_router=None, # Name of the virtual router.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_rt(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"key" : key,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"virtual_router" : virtual_router,
|
|
}
|
|
response = self.json_post("/cli-json/show_rt",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_SCRIPT_RESULTS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_script_results
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_script_results(self,
|
|
endpoint=None, # Name of endpoint, test-group, or 'all'.
|
|
key=None, # Optional 'key' to be used in keyed-text message result.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_script_results(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endpoint" : endpoint,
|
|
"key" : key,
|
|
}
|
|
response = self.json_post("/cli-json/show_script_results",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_SPANS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_spans
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_spans(self,
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
span_number=None, # Span-Number of the span, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_spans(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"span_number" : span_number,
|
|
}
|
|
response = self.json_post("/cli-json/show_spans",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_TEXT_BLOB> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_text_blob
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_text_blob(self,
|
|
brief=None, # Set to 'brief' for a brief listing of all text blobs.
|
|
name=None, # Text Blob Name or 'ALL'.
|
|
type=None, # Text Blob type or 'ALL'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_text_blob(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"brief" : brief,
|
|
"name" : name,
|
|
"type" : type,
|
|
}
|
|
response = self.json_post("/cli-json/show_text_blob",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_TM> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_tm
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_tm(self,
|
|
test_mgr=None, # Can be name of test manager, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_tm(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"test_mgr" : test_mgr,
|
|
}
|
|
response = self.json_post("/cli-json/show_tm",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_TRAFFIC_PROFILE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_traffic_profile
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_traffic_profile(self,
|
|
name=None, # Profile Name or 'ALL'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_traffic_profile(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/show_traffic_profile",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_VENUE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_venue
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_venue(self,
|
|
resource=None, # Resource number, or 'ALL'
|
|
shelf=None, # Shelf number.
|
|
venu_id=None, # Number to uniquely identify this venue on this resource, or 'ALL'
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_venue(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"venu_id" : venu_id,
|
|
}
|
|
response = self.json_post("/cli-json/show_venue",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_VR> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_vr
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_vr(self,
|
|
resource=None, # Resource number, or 'all'.
|
|
router=None, # Name of the Virtual Router, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_vr(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"router" : router,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/show_vr",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_VRCX> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_vrcx
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_vrcx(self,
|
|
cx_name=None, # Name of the Virtual Router Connection, or 'all'.
|
|
resource=None, # Resource number, or 'all'.
|
|
shelf=None, # Name/id of the shelf, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_vrcx(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cx_name" : cx_name,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/show_vrcx",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHOW_WANPATHS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#show_wanpaths
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_show_wanpaths(self,
|
|
endpoint=None, # Name of endpoint, or 'all'.
|
|
wanpath=None, # Name of wanpath, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_show_wanpaths(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endpoint" : endpoint,
|
|
"wanpath" : wanpath,
|
|
}
|
|
response = self.json_post("/cli-json/show_wanpaths",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHUTDOWN> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#shutdown
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_shutdown(self,
|
|
chdir=None, # Directory to cd to before dying. Only useful when using gprof to debug, or 'NA' to ignore.
|
|
really=None, # Must be 'YES' for command to really work.
|
|
serverctl=None, # Enter 'YES' to do a ./serverctl.bash restart to restart all LANforge processes.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_shutdown(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"chdir" : chdir,
|
|
"really" : really,
|
|
"serverctl" : serverctl,
|
|
}
|
|
response = self.json_post("/cli-json/shutdown",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHUTDOWN_OS> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#shutdown_os
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_shutdown_os(self,
|
|
resource=None, # Resource number, or ALL.
|
|
shelf=None, # Shelf number, or ALL.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_shutdown_os(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/shutdown_os",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SHUTDOWN_RESOURCE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#shutdown_resource
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_shutdown_resource(self,
|
|
resource=None, # Resource number, or ALL.
|
|
shelf=None, # Shelf number, or ALL.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_shutdown_resource(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/shutdown_resource",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/SNIFF_PORT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#sniff_port
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
class sniff_port_flags(IntFlag):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
temp_flag_value = 0x0
|
|
|
|
DUMPCAP = 0x2 # Use command-line dumpcap, more efficient than tshark
|
|
MATE_TERMINAL = 0x4 # Launch tshark/dumpcap in mate-terminal
|
|
MATE_XTERM = 0x8 # Launch tshark/dumpcap in xterm
|
|
TSHARK = 0x1 # Use command-line tshark instead of wireshark
|
|
|
|
def __init__(self, extra):
|
|
self.selected_named_flag_map = {}
|
|
|
|
# (internal method) call this from add_flags() or remove_flags()
|
|
def update_flag_value(self):
|
|
self.temp_flag_value = 0x0
|
|
for flag in self.selected_named_flag_map.keys():
|
|
self.temp_flag_value |= flag.value
|
|
|
|
def add_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
sniff_port_flags.add_flags(flag_names=['bridge', 'dhcp'])
|
|
print('value now: '+sniff_port_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
self.selected_named_flag_map.put(flag, 0)
|
|
elif flag_names is not None:
|
|
self.selected_named_flag_map.put(flag_names, 0)
|
|
self.update_flag_value()
|
|
|
|
def clear_flags(self, flag_names=None):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
sniff_port_flags.clear_flags(flag_names=['bridge', 'dhcp'])
|
|
print( 'value now: '+sniff_port_flags.value())
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
if not flag_names:
|
|
raise ValueError("flag_names should be a name or a list of names, not None")
|
|
if type(flag_names) is list:
|
|
for flag in (flag_names):
|
|
if flag is None:
|
|
continue
|
|
if flag in self.selected_named_flag_map:
|
|
self.selected_named_flag_map.remove(flag)
|
|
elif (flag_names is not None) and (flag_names in self.selected_named_flag_map):
|
|
self.selected_named_flag_map.remove(flag_names)
|
|
self.update_flag_value()
|
|
|
|
def value(self):
|
|
return self.temp_flag_value
|
|
|
|
|
|
|
|
def post_sniff_port(self,
|
|
display=None, # The DISPLAY option, for example: 192.168.1.5:0.0. Will guess if left blank.
|
|
duration=None, # Duration for doing a capture (in seconds). Default is 5 minutes for dumpcap/tshark, and forever for wireshark
|
|
flags=None, # Flags that control how the sniffing is done.
|
|
outfile=None, # Optional file location for saving a capture.
|
|
port=None, # The port we are trying to run the packet sniffer on.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_sniff_port(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"display" : display,
|
|
"duration" : duration,
|
|
"flags" : flags,
|
|
"outfile" : outfile,
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/sniff_port",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/START_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#start_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_start_endp(self,
|
|
endp_name=None, # Name of the cross-connect, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_start_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endp_name" : endp_name,
|
|
}
|
|
response = self.json_post("/cli-json/start_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/START_GROUP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#start_group
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_start_group(self,
|
|
name=None, # The name of the test group.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_start_group(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/start_group",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/START_PPP_LINK> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#start_ppp_link
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_start_ppp_link(self,
|
|
resource=None, # Resource number that holds this PppLink.
|
|
shelf=None, # Name/id of the shelf.
|
|
unit_num=None, # Unit-Number for the PppLink to be started.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_start_ppp_link(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"unit_num" : unit_num,
|
|
}
|
|
response = self.json_post("/cli-json/start_ppp_link",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/STOP_ENDP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#stop_endp
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_stop_endp(self,
|
|
endp_name=None, # Name of the endpoint, or 'all'.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_stop_endp(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"endp_name" : endp_name,
|
|
}
|
|
response = self.json_post("/cli-json/stop_endp",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/STOP_GROUP> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#stop_group
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_stop_group(self,
|
|
name=None, # The name of the test group, or 'all'
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_stop_group(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"name" : name,
|
|
}
|
|
response = self.json_post("/cli-json/stop_group",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/STOP_PPP_LINK> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#stop_ppp_link
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_stop_ppp_link(self,
|
|
resource=None, # Resource number that holds this PppLink.
|
|
shelf=None, # Name/id of the shelf.
|
|
unit_num=None, # Unit-Number for the PppLink to be stopped.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_stop_ppp_link(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"unit_num" : unit_num,
|
|
}
|
|
response = self.json_post("/cli-json/stop_ppp_link",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/TAIL> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#tail
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_tail(self,
|
|
cmd=None, # Command: start, stop, results
|
|
key=None, # File-name that we should be tailing.
|
|
message=None, # The contents to display (for results only) <tt escapearg='false'>Unescaped Value</tt>
|
|
resource=None, # Resource that holds the file.
|
|
shelf=None, # Shelf that holds the resource that holds the file.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_tail(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"cmd" : cmd,
|
|
"key" : key,
|
|
"message" : message,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/tail",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/TM_REGISTER> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#tm_register
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_tm_register(self,
|
|
client_name=None, # Name of client to be registered. (dflt is current client)
|
|
test_mgr=None, # Name of test manager (can be all.)
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_tm_register(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"client_name" : client_name,
|
|
"test_mgr" : test_mgr,
|
|
}
|
|
response = self.json_post("/cli-json/tm_register",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/TM_UNREGISTER> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#tm_unregister
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_tm_unregister(self,
|
|
client_name=None, # Name of client to be un-registered. (dflt is current client)
|
|
test_mgr=None, # Name of test manager (can be all.)
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_tm_unregister(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"client_name" : client_name,
|
|
"test_mgr" : test_mgr,
|
|
}
|
|
response = self.json_post("/cli-json/tm_unregister",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/VERSION> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#version
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_version(self,
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_version(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
}
|
|
response = self.json_post("/cli-json/version",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/WHO> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#who
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_who(self,
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_who(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
}
|
|
response = self.json_post("/cli-json/who",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/WIFI_CLI_CMD> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#wifi_cli_cmd
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_wifi_cli_cmd(self,
|
|
port=None, # Name of the WiFi station or AP interface to which this command will be directed.
|
|
resource=None, # Resource number.
|
|
shelf=None, # Shelf number.
|
|
wpa_cli_cmd=None, # Command to pass to wpa_cli or hostap_cli. This must be single-quoted.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_wifi_cli_cmd(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"port" : port,
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
"wpa_cli_cmd" : wpa_cli_cmd,
|
|
}
|
|
response = self.json_post("/cli-json/wifi_cli_cmd",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/WIFI_EVENT> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#wifi_event
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_wifi_event(self,
|
|
device=None, # Interface or PHY in most cases.
|
|
event=None, # What happened.
|
|
msg=None, # Entire event in human readable form.
|
|
status=None, # Status on what happened.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_wifi_event(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"device" : device,
|
|
"event" : event,
|
|
"msg" : msg,
|
|
"status" : status,
|
|
}
|
|
response = self.json_post("/cli-json/wifi_event",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/WISER_RESET> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#wiser_reset
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_wiser_reset(self,
|
|
resource=None, # Resource number, or ALL.
|
|
shelf=None, # Shelf number, or ALL.
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_wiser_reset(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"resource" : resource,
|
|
"shelf" : shelf,
|
|
}
|
|
response = self.json_post("/cli-json/wiser_reset",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|
|
|
|
|
|
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Notes for <CLI-JSON/WRITE> type requests
|
|
|
|
https://www.candelatech.com/lfcli_ug.php#write
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
|
|
def post_write(self,
|
|
db_name=None, # The name the backup shall be saved as (blank means dflt)
|
|
debug_=False):
|
|
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
Example Usage:
|
|
result = post_write(param=value ...)
|
|
pprint.pprint( result )
|
|
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
|
|
debug_ |= self.debug
|
|
data = {
|
|
"db_name" : db_name,
|
|
}
|
|
response = self.json_post("/cli-json/write",
|
|
data,
|
|
debug_=debug_)
|
|
return response
|
|
#
|