From 9bfd09a292a10c177e321df1ebc1c3d46685c90a Mon Sep 17 00:00:00 2001 From: Jed Reynolds Date: Fri, 13 Aug 2021 11:57:34 -0700 Subject: [PATCH] lf_json_autogen.py: enum classes are re-worked to be stateless Signed-off-by: Jed Reynolds --- py-json/LANforge/lf_json_autogen.py | 2262 +++++++++++---------------- 1 file changed, 892 insertions(+), 1370 deletions(-) diff --git a/py-json/LANforge/lf_json_autogen.py b/py-json/LANforge/lf_json_autogen.py index d46d0abb..97949b5a 100644 --- a/py-json/LANforge/lf_json_autogen.py +++ b/py-json/LANforge/lf_json_autogen.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Generated by LANforge JsonApiPythonGenerator, Thu Aug 12 17:34:04 PDT 2021 + Generated by LANforge JsonApiPythonGenerator, Fri Aug 13 11:56:15 PDT 2021 - - WORK IN PROGRESS - - The API this library provides is actively being changed. This file expects to live in py-json/LANforge directory. @@ -2308,61 +2308,48 @@ class LFJsonPost(LFCliBase): 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 = AddBgpPeerFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 ENABLE_PEER = 0x1 # Set this to zero if you don't want this peer enabled. PEER_CLIENT = 0x2 # Sets corresponding Xorp flag in BGP Peer section. PEER_CONFED_MEMBER = 0x4 # Sets corresponding Xorp flag in BGP Peer section. PEER_UNICAST_V4 = 0x8 # Sets corresponding Xorp flag in BGP Peer section. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddBgpPeerFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddBgpPeerFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddBgpPeerFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddBgpPeerFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddBgpPeerFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddBgpPeerFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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 @@ -2590,60 +2577,47 @@ class LFJsonPost(LFCliBase): 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 = AddChamberChamberFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 OPEN = 0x4 # (3) Door is open, no real isolation right now. PHANTOM = 0x1 # (1) Chamber is not actually here right now. VIRTUAL = 0x2 # (2) No real chamber, open-air grouping of equipment. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddChamberChamberFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddChamberChamberFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddChamberChamberFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddChamberChamberFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddChamberChamberFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddChamberChamberFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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. @@ -2886,9 +2860,11 @@ class LFJsonPost(LFCliBase): 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 = AddDutDutFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 p_11r = 0x200 # Use .11r connection logic on all ssids, deprecated, see add_dut_ssid. AP_MODE = 0x2 # (2) DUT acts as AP. @@ -2904,52 +2880,37 @@ class LFJsonPost(LFCliBase): WPA2 = 0x20 # Use WPA2 encryption on all ssids, deprecated, see add_dut_ssid. WPA3 = 0x100 # Use WPA3 encryption on all ssids, deprecated, see add_dut_extras. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddDutDutFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddDutDutFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddDutDutFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddDutDutFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddDutDutFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddDutDutFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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. @@ -3059,9 +3020,11 @@ class LFJsonPost(LFCliBase): 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 = AddDutSsidDutFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 p_11r = 0x200 # Use .11r connection logic EAP_PEAP = 0x800 # Use EAP-PEAP connection logic @@ -3071,52 +3034,37 @@ class LFJsonPost(LFCliBase): WPA2 = 0x20 # Use WPA2 encryption WPA3 = 0x100 # Use WPA3 encryption - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddDutSsidDutFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddDutSsidDutFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddDutSsidDutFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddDutSsidDutFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddDutSsidDutFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddDutSsidDutFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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. @@ -3284,9 +3232,11 @@ class LFJsonPost(LFCliBase): 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 = AddFileEndpFioFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 AUTO_MOUNT = 0x2 # (2) Attempt to mount with the provided information if not already mounted. AUTO_UNMOUNT = 0x4 # (4) Attempt to un-mount when stopping test. @@ -3302,52 +3252,37 @@ class LFJsonPost(LFCliBase): UNMOUNT_LAZY = 0x80 # (128) Use -l flag when calling umount USE_FSTATFS = 0x100 # (256) Use fstatfs system call to verify file-system type when opening files. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddFileEndpFioFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddFileEndpFioFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddFileEndpFioFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddFileEndpFioFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddFileEndpFioFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddFileEndpFioFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- @@ -3495,58 +3430,45 @@ class LFJsonPost(LFCliBase): 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 = AddGroupFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 group_total_rates = 0x4 # Set rates as total for group. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddGroupFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddGroupFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddGroupFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddGroupFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddGroupFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddGroupFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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. @@ -3579,67 +3501,56 @@ class LFJsonPost(LFCliBase): 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 = AddL4EndpHttpAuthType.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 BASIC = 0x1 # Basic authentication DIGEST = 0x2 # Digest (MD5) authentication GSSNEGOTIATE = 0x4 # GSS authentication NTLM = 0x8 # NTLM authentication - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddL4EndpHttpAuthType.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddL4EndpHttpAuthType.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddL4EndpHttpAuthType has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddL4EndpHttpAuthType has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddL4EndpHttpAuthType.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddL4EndpHttpAuthType.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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 = AddL4EndpProxyAuthType.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 BASIC = 0x1 # 1 Basic authentication BIND_DNS = 0x200 # 512 Make DNS requests go out endpoints Port. @@ -3654,107 +3565,79 @@ class LFJsonPost(LFCliBase): USE_IPV6 = 0x400 # 1024 Resolve URL is IPv6. Will use IPv4 if not selected. USE_PROXY_CACHE = 0x20 # 32 Use proxy cache - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddL4EndpProxyAuthType.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddL4EndpProxyAuthType.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddL4EndpProxyAuthType has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddL4EndpProxyAuthType has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddL4EndpProxyAuthType.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddL4EndpProxyAuthType.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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 = AddL4EndpType.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 l4_generic = 0x0 # Layer 4 type - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddL4EndpType.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddL4EndpType.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddL4EndpType has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddL4EndpType has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddL4EndpType.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddL4EndpType.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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. @@ -3828,60 +3711,47 @@ class LFJsonPost(LFCliBase): 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 = AddMonitorFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 disable_ht40 = 0x800 # Disable HT-40 even if hardware and AP support it. disable_ht80 = 0x8000000 # Disable HT80 (for AC chipset NICs only) ht160_enable = 0x100000000 # Enable HT160 mode. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddMonitorFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddMonitorFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddMonitorFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddMonitorFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddMonitorFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddMonitorFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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. @@ -4031,9 +3901,11 @@ class LFJsonPost(LFCliBase): 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 = AddProfileProfileFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 p_11r = 0x40 # Use 802.11r roaming setup. BSS_TRANS = 0x400 # Enable BSS Transition logic @@ -4047,52 +3919,37 @@ class LFJsonPost(LFCliBase): WPA2 = 0x8 # Use WPA2 encryption WPA3 = 0x20 # Use WPA3 encryption - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddProfileProfileFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddProfileProfileFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddProfileProfileFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddProfileProfileFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddProfileProfileFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddProfileProfileFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- @@ -4273,9 +4130,11 @@ class LFJsonPost(LFCliBase): 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 = AddStaFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 p_80211r_pmska_cache = 0x4000000 # Enable oportunistic PMSKA caching for WPA2 (Related to # +802.11r). @@ -4322,52 +4181,37 @@ class LFJsonPost(LFCliBase): wpa2_enable = 0x400 # Use wpa_supplicant configured for WPA2 encryption. wpa_enable = 0x10 # Enable WPA - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddStaFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddStaFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddStaFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddStaFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddStaFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddStaFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- @@ -4678,60 +4522,47 @@ class LFJsonPost(LFCliBase): 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 = AddTrafficProfileTrafficProfileFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 BI_DIRECTIONAL = 0x2 # Should we do bi-directional traffic? IPERF_UDP = 0x4 # If Iperf, should use UDP. If not set, then will use TCP. UP = 0x1 # Upload direction (this not set means download) - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddTrafficProfileTrafficProfileFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddTrafficProfileTrafficProfileFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddTrafficProfileTrafficProfileFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddTrafficProfileTrafficProfileFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddTrafficProfileTrafficProfileFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddTrafficProfileTrafficProfileFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- @@ -4818,9 +4649,11 @@ class LFJsonPost(LFCliBase): 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 = AddVapFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 p_80211h_enable = 0x10000000 # Enable 802.11h (needed for running on DFS channels) Requires # +802.11d. @@ -4857,52 +4690,37 @@ class LFJsonPost(LFCliBase): wep_enable = 0x200 # Enable WEP Encryption wpa2_enable = 0x400 # Enable WPA2 Encryption - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddVapFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddVapFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddVapFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddVapFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddVapFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddVapFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- @@ -4994,67 +4812,56 @@ class LFJsonPost(LFCliBase): 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 = AddVenueFreq24.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 ALL = 0xffff # ALL Ch_1 = 0x1 # Channel 1 Ch_2 = 0x2 # Channel 2 Ch_3 = 0x4 # Channel 3 - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddVenueFreq24.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddVenueFreq24.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddVenueFreq24 has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddVenueFreq24 has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddVenueFreq24.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddVenueFreq24.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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 = AddVenueFreq5.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 Ch_100 = 0x800 # Channel 100 5500 Ch_104 = 0x1000 # Channel 104 5520 @@ -5084,52 +4891,37 @@ class LFJsonPost(LFCliBase): Ch_60 = 0x200 # Channel 60 5300 Ch_64 = 0x400 # Channel 64 5320 - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddVenueFreq5.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddVenueFreq5.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddVenueFreq5 has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddVenueFreq5 has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddVenueFreq5.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddVenueFreq5.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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: Big City Ball Park; @@ -5268,9 +5060,11 @@ class LFJsonPost(LFCliBase): 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 = AddVrFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 p_4BYTE_AS_NUMBER = 0x40 # Sets corresponding Xorp flag. BGP_CONFED = 0x100 # Configure BGP in a confederation. @@ -5286,52 +5080,37 @@ class LFJsonPost(LFCliBase): USE_XORP_OSPF = 0x1 # Enable Xorp router daemon with OSPF (IPv4) protocol USE_XORP_SHA = 0x4 # Enable Telcordia's Xorp SHA option (requires OSPF to be enabled) - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddVrFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddVrFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddVrFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddVrFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddVrFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddVrFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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. @@ -5379,9 +5158,11 @@ class LFJsonPost(LFCliBase): 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 = AddVrBgpFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 p_4BYTE_AS_NUMBER = 0x40 # Sets corresponding Xorp flag. BGP_CONFED = 0x100 # Configure BGP in a confederation. @@ -5389,52 +5170,37 @@ class LFJsonPost(LFCliBase): ENABLE_BGP = 0x20 # Set this to zero if you don't want BGP on this VR. ROUTE_REFLECTOR = 0x80 # Act as BGP Route Reflector. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddVrBgpFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddVrBgpFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddVrBgpFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddVrBgpFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddVrBgpFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddVrBgpFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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 @@ -5484,9 +5250,11 @@ class LFJsonPost(LFCliBase): 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 = AddVrcxFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 custom_dhcpd = 0x400 # Use custom DHCP config file dhcpd_enabled = 0x200 # Serve IPv4 DHCP on this interface @@ -5503,52 +5271,37 @@ class LFJsonPost(LFCliBase): use_multicast = 0x800 # Use this interface for multicast and-rp use_vrrp = 0x1000 # Use this interface for VRRP - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: AddVrcxFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+AddVrcxFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("AddVrcxFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("AddVrcxFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - AddVrcxFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+AddVrcxFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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. @@ -5881,9 +5634,11 @@ class LFJsonPost(LFCliBase): 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 = CShowPortsProbeFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 BRIDGE = 0x8 # 8 include bridges EASY_IP_INFO = 0x10 # 16 Everything but gateway information, which is expensive to probe. @@ -5893,52 +5648,37 @@ class LFJsonPost(LFCliBase): MII = 0x2 # 2 include MII WIFI = 0x1 # 1 include wifi stations - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: CShowPortsProbeFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+CShowPortsProbeFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("CShowPortsProbeFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("CShowPortsProbeFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - CShowPortsProbeFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+CShowPortsProbeFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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'. @@ -6793,9 +6533,11 @@ class LFJsonPost(LFCliBase): 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 = LogLevelLevel.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 ALL = 0xffffffff # Log everything CUST1 = 0x10000 # Cust-1, latency info (65536) @@ -6815,52 +6557,37 @@ class LFJsonPost(LFCliBase): WRN = 0x4 # warnings (4) XMT = 0x100 # Output going to clients (256) - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: LogLevelLevel.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+LogLevelLevel.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("LogLevelLevel has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("LogLevelLevel has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - LogLevelLevel.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+LogLevelLevel.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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. @@ -7062,9 +6789,11 @@ class LFJsonPost(LFCliBase): 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 = NcShowPortsProbeFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 BRIDGE = 0x8 # 8 include bridges EASY_IP_INFO = 0x10 # 16 Everything but gateway information, which is expensive to probe. @@ -7074,52 +6803,37 @@ class LFJsonPost(LFCliBase): MII = 0x2 # 2 include MII WIFI = 0x1 # 1 include wifi stations - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: NcShowPortsProbeFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+NcShowPortsProbeFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("NcShowPortsProbeFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("NcShowPortsProbeFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - NcShowPortsProbeFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+NcShowPortsProbeFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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'. @@ -8409,9 +8123,11 @@ class LFJsonPost(LFCliBase): 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 = SetArmInfoArmFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 random_payload = 0x10000 # Use random payload sizes instead of linear increase rel_tstamp = 0x400 # Use Relative Timestamps. This will increase performance @@ -8420,52 +8136,37 @@ class LFJsonPost(LFCliBase): use_gw_mac = 0x1000 # Use default gateway's MAC for destination MAC. use_tcp = 0x8000 # Use TCP instead of UDP protocol. (Note this is NOT stateful TCP!) - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetArmInfoArmFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetArmInfoArmFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetArmInfoArmFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetArmInfoArmFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetArmInfoArmFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetArmInfoArmFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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. @@ -9077,65 +8778,54 @@ class LFJsonPost(LFCliBase): 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 = SetEventInterestEiFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 CLEAR = 0x0 # will clear interest SET = 0x1 # set interest flag - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetEventInterestEiFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetEventInterestEiFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetEventInterestEiFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetEventInterestEiFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetEventInterestEiFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetEventInterestEiFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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 = SetEventInterestEvents1.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 BAD_TOS = 0x400000 # Endpoint has bad ToS values configured. Bad_MAC = 0x100000 # Invalid MAC address configured. @@ -9170,58 +8860,45 @@ class LFJsonPost(LFCliBase): TX_BPS_OOR_3S = 0x80000000 # Endpoint threshold alert. WiFi_Config = 0x80000 # WiFi Configuration Error. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetEventInterestEvents1.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetEventInterestEvents1.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetEventInterestEvents1 has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetEventInterestEvents1 has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetEventInterestEvents1.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetEventInterestEvents1.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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 = SetEventInterestEvents2.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 FW_CRASH = 0x800 # Firmware for entity has crashed. FW_FAIL = 0x1000 # Firmware failed powerup, may require reboot. @@ -9241,52 +8918,37 @@ class LFJsonPost(LFCliBase): TX_BPS_OOR_30S_CLEARED = 0x4 # Endpoint threshold alert cleared. TX_BPS_OOR_3S_CLEARED = 0x1 # Endpoint threshold alert cleared. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetEventInterestEvents2.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetEventInterestEvents2.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetEventInterestEvents2 has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetEventInterestEvents2 has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetEventInterestEvents2.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetEventInterestEvents2.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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. @@ -9678,9 +9340,11 @@ class LFJsonPost(LFCliBase): 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 = SetPortCmdFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 abort_if_scripts = 0x400 # Forceably abort all ifup/down scripts on this Port. force_MII_probe = 0x4 # Force MII probe @@ -9695,58 +9359,45 @@ class LFJsonPost(LFCliBase): skip_port_bounce = 0x100 # skip-port-bounce (Don't ifdown/up use_pre_ifdown = 0x800 # Call pre-ifdown script before bringing interface down. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetPortCmdFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetPortCmdFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetPortCmdFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetPortCmdFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetPortCmdFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetPortCmdFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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 = SetPortCurrentFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 adv_100bt_fd = 0x800000 # advert-100bt-FD adv_100bt_hd = 0x400000 # advert-100bt-HD @@ -9784,52 +9435,37 @@ class LFJsonPost(LFCliBase): use_dhcp = 0x80000000 # USE-DHCP use_dhcpv6 = 0x20000000000 # USE-DHCPv6 - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetPortCurrentFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetPortCurrentFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetPortCurrentFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetPortCurrentFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetPortCurrentFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetPortCurrentFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- @@ -9867,9 +9503,11 @@ class LFJsonPost(LFCliBase): 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 = SetPortFlags2.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 bypass_disconnect = 0x200 # Logically disconnect the cable (link-down) bypass_enabled = 0x10 # Enable Bypass Device @@ -9878,58 +9516,45 @@ class LFJsonPost(LFCliBase): supports_bypass = 0x2 # Support Bypass Devices use_stp = 0x1 # Use Spanning Tree Protocol - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetPortFlags2.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetPortFlags2.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetPortFlags2 has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetPortFlags2 has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetPortFlags2.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetPortFlags2.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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 = SetPortInterest.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 alias = 0x1000 # Port alias aux_mgt = 0x20000000 # Enable/disable Auxillary-Management for a port @@ -9965,52 +9590,37 @@ class LFJsonPost(LFCliBase): svc_httpd = 0x8000000 # Enable/disable HTTP Service for a port tx_queue_length = 0x200 # TX Queue Length - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetPortInterest.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetPortInterest.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetPortInterest has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetPortInterest has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetPortInterest.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetPortInterest.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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. @@ -10243,59 +9853,46 @@ class LFJsonPost(LFCliBase): 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 = SetRfgenRfgenFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 one_burst = 0x8 # Run for about 1 second and stop. Uses 5-sec sweep time for single pulse train. running = 0x2 # Should we start the RF Generator or not? - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetRfgenRfgenFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetRfgenRfgenFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetRfgenRfgenFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetRfgenRfgenFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetRfgenRfgenFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetRfgenRfgenFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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 @@ -10347,9 +9944,11 @@ class LFJsonPost(LFCliBase): 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 = SetScriptFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 SCR_COMPLETED = 0x80 # Set automatically by LANforge. SCR_HIDE_CONSTRAINTS = 0x2000 # Hide constraints messages. @@ -10371,52 +9970,37 @@ class LFJsonPost(LFCliBase): SCR_USE_MSS = 0x8000 # When setting packet size, set TCP MSS instead if endpoint supports # +that. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetScriptFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetScriptFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetScriptFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetScriptFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetScriptFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetScriptFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- @@ -10688,9 +10272,11 @@ class LFJsonPost(LFCliBase): 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 = SetWanpathCorruptionFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 BIT_FLIP = 0x4 # Flip a random bit in a byte. BIT_TRANSPOSE = 0x8 # Transpose two side-by-side bits in a byte. @@ -10699,52 +10285,37 @@ class LFJsonPost(LFCliBase): OVERWRITE_RANDOM = 0x1 # Write a random value to a byte. RECALC_CSUMS = 0x20 # Attempt to re-calculate UDP and TCP checksums. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetWanpathCorruptionFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetWanpathCorruptionFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetWanpathCorruptionFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetWanpathCorruptionFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetWanpathCorruptionFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetWanpathCorruptionFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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). @@ -10866,9 +10437,11 @@ class LFJsonPost(LFCliBase): 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 = SetWifiCorruptionsCorruptFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 MSG_TYPE_DEAUTH = 0x2 # de-authentication message MSG_TYPE_EAPOL = 0x1 # Any EAPOL message @@ -10885,52 +10458,37 @@ class LFJsonPost(LFCliBase): MST_TYPE_EAPOL_OTHER_REQ = 0x1000 # EAP Requests that do not match other things. MST_TYPE_EAPOL_OTHER_RESP = 0x2000 # EAP Responses that do not match other things. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetWifiCorruptionsCorruptFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetWifiCorruptionsCorruptFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetWifiCorruptionsCorruptFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetWifiCorruptionsCorruptFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetWifiCorruptionsCorruptFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetWifiCorruptionsCorruptFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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). @@ -11128,6 +10686,8 @@ class LFJsonPost(LFCliBase): 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. @@ -11153,6 +10713,7 @@ class LFJsonPost(LFCliBase): "radius_port": radius_port, "req_flush": req_flush, "resource": resource, + "sae_pwe": sae_pwe, "shelf": shelf, "venue_id": venue_id, } @@ -11170,9 +10731,11 @@ class LFJsonPost(LFCliBase): 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 = SetWifiRadioFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 ct_sta_mode = 0x40000 # Enable CT-STA mode if radio supports it. Efficiently replaces sw-crypt in # +some firmware. @@ -11185,52 +10748,37 @@ class LFJsonPost(LFCliBase): use_syslog = 0x20000000 # Put supplicant logs in syslog instead of a file. verbose = 0x10000 # Verbose-Debug: Increase debug info in wpa-supplicant and hostapd logs. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetWifiRadioFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetWifiRadioFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetWifiRadioFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetWifiRadioFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetWifiRadioFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetWifiRadioFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- @@ -11402,9 +10950,11 @@ class LFJsonPost(LFCliBase): 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 = SetWlCorruptionFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 BIT_FLIP = 0x4 # Flip a random bit in a byte. BIT_TRANSPOSE = 0x8 # Transpose two side-by-side bits in a byte. @@ -11413,52 +10963,37 @@ class LFJsonPost(LFCliBase): OVERWRITE_RANDOM = 0x1 # Write a random value to a byte. RECALC_CSUMS = 0x20 # Attempt to re-calculate UDP and TCP checksums. - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SetWlCorruptionFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SetWlCorruptionFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SetWlCorruptionFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SetWlCorruptionFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SetWlCorruptionFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SetWlCorruptionFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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). @@ -12504,61 +12039,48 @@ class LFJsonPost(LFCliBase): 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 = SniffPortFlags.set_flags( flag_names=['bridge', 'dhcp']) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - temp_flag_value = 0x0 DUMPCAP = 0x2 # Use command-line dumpcap, more efficient than tshark MATE_TERMINAL = 0x4 # Launch tshark/dumpcap in mate-terminal MATE_XTERM = 0x8 # Launch tshark/dumpcap in xterm TSHARK = 0x1 # Use command-line tshark instead of wireshark - def __init__(self): - self.selected_named_flag_map = {} - - # (internal method) call this from add_flags() or remove_flags() - def update_flag_value(self): - self.temp_flag_value = 0x0 - for flag in self.selected_named_flag_map.keys(): - self.temp_flag_value |= flag.value - - def add_flags(self, flag_names=None): + @classmethod + def set_flags(cls, starting_value: int, flag_names=None): """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Example Usage: SniffPortFlags.add_flags(flag_names=['bridge', 'dhcp']) print('value now: '+SniffPortFlags.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 flag is None: - continue - self.selected_named_flag_map[flag] = 0 - elif flag_names is not None: - self.selected_named_flag_map[flag_names] = 0 - self.update_flag_value() + if flag not in cls.__members__: + raise ValueError("SniffPortFlags has no member:[%s]" % flag) + selected_flags.append([cls[member].value for member in cls.__members__ if member == flag]) + selected_flags.append(starting_value) + return sum(selected_flags) + if flag_names not in cls.__members__: + raise ValueError("SniffPortFlags has no member:[%s]" % flag_names) + return cls.valueof(flag_names) - def clear_flags(self, flag_names=None): - """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- - Example Usage: - SniffPortFlags.clear_flags(flag_names=['bridge', 'dhcp']) - print( 'value now: '+SniffPortFlags.value()) - ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----""" - if not flag_names: - raise ValueError("flag_names should be a name or a list of names, not None") - if type(flag_names) is list: - for flag in flag_names: - if flag is None: - continue - if flag in self.selected_named_flag_map: - del self.selected_named_flag_map[flag] - elif (flag_names is not None) and (flag_names in self.selected_named_flag_map): - del self.selected_named_flag_map[flag_names] - self.update_flag_value() - - def value(self): - return self.temp_flag_value + # 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