Files
wlan-lanforge-scripts/py-json/LANforge/lf_json_autogen.py
2021-08-16 12:00:21 -07:00

11633 lines
551 KiB
Python

#!/usr/bin/env python3
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Generated by LANforge JsonApiPythonGenerator, Mon Aug 16 11:58:20 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)
@staticmethod
def extract_values(response: dict = None,
singular_key: str = None,
plural_key: str = None) -> list:
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Extract fields from this response using the expected keys:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
if (singular_key is None) or (plural_key is None) or (not singular_key) or (not plural_key):
raise ValueError("extract_values 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]
# TODO: rename me to make_port_eid_url
@staticmethod
def make_eid_url(eid_list=()):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Convert a list of EIDs into a URL:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
if not len(eid_list):
return "/list"
url = "/"
if isinstance(eid_list, str):
return url + eid_list.replace('.', '/')
# The first in a series has to define the resource number,
# but the remainder of a series has to match that resource number
for i in range(0, len(eid_list)):
eid = eid_list[i]
if i == 0:
url += eid.replace('.', '/')
elif eid.find('.') > 0:
url += ',' + eid.split('.')[-1]
else:
url += ','+eid
return url
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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&nbsp;&#x2194;&nbsp;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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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&nbsp;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&nbsp;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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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&nbsp;min)': X
'status': X
'timeout': X
'total-err': X
'total-urls': X
'tx rate': X
'tx rate (1&nbsp;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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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 &#x2190; b': X
'delay a &#x2192; b': X
'eid': X
'endpoints (a&nbsp;&#x2194;&nbsp;b)': X
'entity id': X
'jitter a &#x2190; b': X
'jitter a &#x2192; b': X
'name': X
'pkt tx a&nbsp;&#x2190;&nbsp;b': X
'pkt tx a&nbsp;&#x2192;&nbsp;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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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&nbsp;&#x2194;&nbsp;b)': X
'entity id': X
'k-m': X
'name': X
'pkt tx a&nbsp;&#x2190;&nbsp;b': X
'pkt tx a&nbsp;&#x2192;&nbsp;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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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"
if (eid_list is None) or (len(eid_list) < 1):
raise ValueError("no entity id in request")
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):
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)
trimmed_fields.append(field)
url += self.make_eid_url(eid_list=eid_list)
if 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.extract_values(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)
@staticmethod
def set_flags(flag_class: IntFlag, starting_value: int, flag_names=None):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
value = LFJsonPost.add_flags(SetPortMumble, 0, flag_names=['bridge', 'dhcp'])
print('value now: '+value)
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
if starting_value is None:
raise ValueError("starting_value should be an integer greater or equal than zero, not None")
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:
selected_flags = []
for flag in flag_names:
if isinstance(flag, str):
if flag not in flag_class.__members__:
raise ValueError("%s has no member:[%s]" % (flag_class.__class__.__name__, flag))
selected_flags.extend([flag_class[member].value for member in flag_class.__members__ if member == flag])
if isinstance(flag, IntFlag):
if flag not in flag_class:
raise ValueError("%s has no member:[%s]" % (flag_class.__class__.__name__, flag))
selected_flags.extend([member.value for member in flag_class if member == flag])
selected_flags.append(starting_value)
return sum(selected_flags)
f_name = None
if type(flag_names) is str:
f_name = flag_names
print('f_name is str %s' % f_name)
else:
print('f_name is %s' % type(flag_names))
if flag_names not in flag_class.__members__:
raise ValueError("%s has no member:[%s]" % (flag_class.__class__.__name__, flag_names))
return flag_class.valueof(flag_names)
@staticmethod
def clear_flags(flag_class: IntFlag, starting_value: int, flag_names=None):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
value = LFJsonPost.clear_flags(SetPortMumble, 0, flag_names=['bridge', 'dhcp'])
print('value now: '+value)
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
if starting_value is None:
raise ValueError("starting_value should be an integer greater than zero and not None")
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:
unselected_val = starting_value
for flag in flag_names:
if flag not in flag_class.__members__:
raise ValueError("%s has no member:[%s]" % (flag_class.__class__.__name__, flag))
print("unselected a[%s]" % (hex(unselected_val)))
unselected_val &= ~(flag_class[flag])
print("unselected b[%s]" % (hex(unselected_val)))
return unselected_val
if flag_names not in flag_class.__members__:
raise ValueError("%s has no member:[%s]" % (flag_class.__class__.__name__, flag_names))
unselected_val = starting_value
print("unselected a[%s]" % (hex(unselected_val)))
unselected_val &= ~flag_class
print("unselected b[%s]" % (hex(unselected_val)))
return unselected_val
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
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.
p_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": p_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 AddBgpPeerFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddBgpPeerFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddBgpPeerFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 AddBrBrFlags(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 AddCdFlags(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
p_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": p_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 AddChamberChamberFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddChamberChamberFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddChamberChamberFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 AddChamberCxChamberCxFlags(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 AddChannelGroupTypes(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
clear = "clear" # Channel(s) are bundled into a single span. No conversion or
e_m = "e&amp;m" # Channel(s) are signalled using E&amp;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...
p_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": p_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 AddDutDutFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddDutDutFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddDutDutFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 AddDutSsidDutFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddDutSsidDutFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddDutSsidDutFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 AddEndpPayloadPattern(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 AddEndpType(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
p_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": p_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 AddFileEndpFioFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddFileEndpFioFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddFileEndpFioFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class AddFileEndpPayloadPattern(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
p_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": p_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.
p_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": p_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 AddGroupFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddGroupFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
group_total_rates = 0x4 # Set rates as total for group.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddGroupFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 AddL4EndpHttpAuthType(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddL4EndpHttpAuthType0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
BASIC = 0x1 # Basic authentication
DIGEST = 0x2 # Digest (MD5) authentication
GSSNEGOTIATE = 0x4 # GSS authentication
NTLM = 0x8 # NTLM authentication
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddL4EndpHttpAuthType has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class AddL4EndpProxyAuthType(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddL4EndpProxyAuthType0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddL4EndpProxyAuthType has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class AddL4EndpType(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddL4EndpType0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
l4_generic = 0x0 # Layer 4 type
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddL4EndpType has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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
p_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:
# &lt;a@b.com&gt;&lt;c@d.com&gt;...&lt;q@x.com&gt;
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": p_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 AddMonitorFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddMonitorFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddMonitorFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 AddProfileProfileFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddProfileProfileFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddProfileProfileFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class AddProfileWifiMode(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 AddStaFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddStaFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddStaFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class AddStaMode(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 AddStaRate(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 AddT1SpanBuildout(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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..
p_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": p_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>
p_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": p_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 AddThresholdThreshId(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
Delete_Marked = -3 # Delete any marked.
Mark_All = -2 # Mark all
class AddThresholdThreshType(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 AddTrafficProfileTrafficProfileFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddTrafficProfileTrafficProfileFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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)
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddTrafficProfileTrafficProfileFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class AddTrafficProfileWifiMode(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
p_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": p_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 AddVapFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddVapFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 &amp; 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
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddVapFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class AddVapMode(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 AddVenueFreq24(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddVenueFreq240, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
ALL = 0xffff # ALL
Ch_1 = 0x1 # Channel 1
Ch_2 = 0x2 # Channel 2
Ch_3 = 0x4 # Channel 3
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddVenueFreq24 has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class AddVenueFreq5(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddVenueFreq50, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddVenueFreq5 has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 AddVrFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddVrFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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)
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddVrFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 AddVrBgpFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddVrBgpFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddVrBgpFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 AddVrcxFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(AddVrcxFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("AddVrcxFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 AddWlEndpWleFlags(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 CShowPortsProbeFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(CShowPortsProbeFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("CShowPortsProbeFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 ClearPortCountersExtra(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
p_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": p_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 LogLevelLevel(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(LogLevelLevel0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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)
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("LogLevelLevel has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 NcShowPortsProbeFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(NcShowPortsProbeFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("NcShowPortsProbeFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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.
p_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": p_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 ResetPortPreIfdown(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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'
p_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": p_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.
p_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": p_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 ScanWifiExtra(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 SetArmInfoArmFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetArmInfoArmFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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!)
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetArmInfoArmFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 SetCxStateCxState(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 SetEndpFlagFlag(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 SetEndpPayloadPayloadType(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 SetEndpTosTos(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 SetEventInterestEiFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetEventInterestEiFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
CLEAR = 0x0 # will clear interest
SET = 0x1 # set interest flag
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetEventInterestEiFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class SetEventInterestEvents1(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetEventInterestEvents10, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetEventInterestEvents1 has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class SetEventInterestEvents2(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetEventInterestEvents20, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetEventInterestEvents2 has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 SetEventPriorityEvent(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 SetEventPriorityPriority(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 SetFlagFlag(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 SetPortCmdFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetPortCmdFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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&apos;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&apos;t ifdown/up
use_pre_ifdown = 0x800 # Call pre-ifdown script before bringing interface down.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetPortCmdFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class SetPortCurrentFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetPortCurrentFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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&apos;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
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetPortCurrentFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class SetPortDhcpClientId(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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&apos;s name as the client ID.
p__MAC = "__MAC" # Use interface&apos;s MAC address for the client ID.
class SetPortDhcpHostname(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 SetPortDhcpVendorId(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 SetPortFlags2(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetPortFlags20, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetPortFlags2 has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class SetPortInterest(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetPortInterest0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetPortInterest has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 &amp; 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 SetResourceResourceFlags(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 SetRfgenRfgenFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetRfgenRfgenFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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?
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetRfgenRfgenFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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
p_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": p_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 SetScriptFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetScriptFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetScriptFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class SetScriptType(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
p_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": p_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 SetWanpathCorruptionFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetWanpathCorruptionFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetWanpathCorruptionFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 SetWanpathRunningRunning(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 SetWifiCorruptionsCorruptFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetWifiCorruptionsCorruptFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetWifiCorruptionsCorruptFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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>
p_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": p_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.
sae_pwe=None, # Set SAE-PWE, 0 == hunting-and-pecking, 1 ==
# hash-to-element, 2 allow both.
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,
"sae_pwe": sae_pwe,
"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 SetWifiRadioFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetWifiRadioFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetWifiRadioFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
class SetWifiRadioMode(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 SetWlCorruptionFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SetWlCorruptionFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SetWlCorruptionFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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 SetWlQdiscQdisc(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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 ShowAlertsType(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
p_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": p_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 ShowEventsType(Enum):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Example Usage:
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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.
p_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": p_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.
p_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": p_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'.
p_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": p_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 SniffPortFlags(IntFlag):
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
This class is stateless. It can do binary flag math, returning the integer value.
Example Usage:
int:flag_val = 0
flag_val = LFPost.set_flags(SniffPortFlags0, flag_names=['bridge', 'dhcp'])
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"""
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
# use to get in value of flag
@classmethod
def valueof(cls, name=None):
if name is None:
return name
if name not in cls.__members__:
raise ValueError("SniffPortFlags has no member:[%s]" % name)
return (cls[member].value for member in cls.__members__ if member == name)
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
#