diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/vyos/configdict.py | 4 | ||||
| -rw-r--r-- | python/vyos/configsession.py | 19 | ||||
| -rw-r--r-- | python/vyos/configtree.py | 24 | ||||
| -rw-r--r-- | python/vyos/template.py | 2 | ||||
| -rw-r--r-- | python/vyos/utils/network.py | 4 | ||||
| -rw-r--r-- | python/vyos/utils/system.py | 7 | 
6 files changed, 48 insertions, 12 deletions
| diff --git a/python/vyos/configdict.py b/python/vyos/configdict.py index 4111d7271..cb9f0cbb8 100644 --- a/python/vyos/configdict.py +++ b/python/vyos/configdict.py @@ -633,7 +633,7 @@ def get_accel_dict(config, base, chap_secrets, with_pki=False):      Return a dictionary with the necessary interface config keys.      """ -    from vyos.utils.system import get_half_cpus +    from vyos.cpu import get_core_count      from vyos.template import is_ipv4      dict = config.get_config_dict(base, key_mangling=('-', '_'), @@ -643,7 +643,7 @@ def get_accel_dict(config, base, chap_secrets, with_pki=False):                                    with_pki=with_pki)      # set CPUs cores to process requests -    dict.update({'thread_count' : get_half_cpus()}) +    dict.update({'thread_count' : get_core_count()})      # we need to store the path to the secrets file      dict.update({'chap_secrets_file' : chap_secrets}) diff --git a/python/vyos/configsession.py b/python/vyos/configsession.py index 90842b749..ab7a631bb 100644 --- a/python/vyos/configsession.py +++ b/python/vyos/configsession.py @@ -176,6 +176,25 @@ class ConfigSession(object):          except (ValueError, ConfigSessionError) as e:              raise ConfigSessionError(e) +    def set_section_tree(self, d: dict): +        try: +            if d: +                for p in dict_to_paths(d): +                    self.set(p) +        except (ValueError, ConfigSessionError) as e: +            raise ConfigSessionError(e) + +    def load_section_tree(self, mask: dict, d: dict): +        try: +            if mask: +                for p in dict_to_paths(mask): +                    self.delete(p) +            if d: +                for p in dict_to_paths(d): +                    self.set(p) +        except (ValueError, ConfigSessionError) as e: +            raise ConfigSessionError(e) +      def comment(self, path, value=None):          if not value:              value = [""] diff --git a/python/vyos/configtree.py b/python/vyos/configtree.py index 423fe01ed..e4b282d72 100644 --- a/python/vyos/configtree.py +++ b/python/vyos/configtree.py @@ -401,6 +401,30 @@ def union(left, right, libpath=LIBPATH):      return tree +def mask_inclusive(left, right, libpath=LIBPATH): +    if not (isinstance(left, ConfigTree) and isinstance(right, ConfigTree)): +        raise TypeError("Arguments must be instances of ConfigTree") + +    try: +        __lib = cdll.LoadLibrary(libpath) +        __mask_tree = __lib.mask_tree +        __mask_tree.argtypes = [c_void_p, c_void_p] +        __mask_tree.restype = c_void_p +        __get_error = __lib.get_error +        __get_error.argtypes = [] +        __get_error.restype = c_char_p + +        res = __mask_tree(left._get_config(), right._get_config()) +    except Exception as e: +        raise ConfigTreeError(e) +    if not res: +        msg = __get_error().decode() +        raise ConfigTreeError(msg) + +    tree = ConfigTree(address=res) + +    return tree +  def reference_tree_to_json(from_dir, to_file, libpath=LIBPATH):      try:          __lib = cdll.LoadLibrary(libpath) diff --git a/python/vyos/template.py b/python/vyos/template.py index 392322d46..1aa9ace8b 100644 --- a/python/vyos/template.py +++ b/python/vyos/template.py @@ -807,7 +807,7 @@ def kea_address_json(addresses):      out = []      for address in addresses: -        ifname = is_addr_assigned(address, return_ifname=True) +        ifname = is_addr_assigned(address, return_ifname=True, include_vrf=True)          if not ifname:              continue diff --git a/python/vyos/utils/network.py b/python/vyos/utils/network.py index cac59475d..829124b57 100644 --- a/python/vyos/utils/network.py +++ b/python/vyos/utils/network.py @@ -310,7 +310,7 @@ def is_ipv6_link_local(addr):      return False -def is_addr_assigned(ip_address, vrf=None, return_ifname=False) -> bool | str: +def is_addr_assigned(ip_address, vrf=None, return_ifname=False, include_vrf=False) -> bool | str:      """ Verify if the given IPv4/IPv6 address is assigned to any interface """      from netifaces import interfaces      from vyos.utils.network import get_interface_config @@ -321,7 +321,7 @@ def is_addr_assigned(ip_address, vrf=None, return_ifname=False) -> bool | str:          # case there is no need to proceed with this data set - continue loop          # with next element          tmp = get_interface_config(interface) -        if dict_search('master', tmp) != vrf: +        if dict_search('master', tmp) != vrf and not include_vrf:              continue          if is_intf_addr_assigned(interface, ip_address): diff --git a/python/vyos/utils/system.py b/python/vyos/utils/system.py index 5d41c0c05..55813a5f7 100644 --- a/python/vyos/utils/system.py +++ b/python/vyos/utils/system.py @@ -79,13 +79,6 @@ def sysctl_apply(sysctl_dict: dict[str, str], revert: bool = True) -> bool:      # everything applied      return True -def get_half_cpus(): -    """ return 1/2 of the numbers of available CPUs """ -    cpu = os.cpu_count() -    if cpu > 1: -        cpu /= 2 -    return int(cpu) -  def find_device_file(device):      """ Recurively search /dev for the given device file and return its full path.          If no device file was found 'None' is returned """ | 
