diff options
| author | Viacheslav Hletenko <v.gletenko@vyos.io> | 2024-04-25 08:23:14 +0000 | 
|---|---|---|
| committer | Viacheslav Hletenko <v.gletenko@vyos.io> | 2024-04-25 08:23:14 +0000 | 
| commit | 0bf4b570fe2d239b9fbabd3ae801ad3f04a06bde (patch) | |
| tree | 00ac67d3d1f09a536a9e9b94ce9d4858c4405f57 | |
| parent | afb910c1efbe5f7c98c25688f0eb2546db218dd3 (diff) | |
| download | vyos-1x-0bf4b570fe2d239b9fbabd3ae801ad3f04a06bde.tar.gz vyos-1x-0bf4b570fe2d239b9fbabd3ae801ad3f04a06bde.zip | |
T6258: Add sysctl base-reachable-time for IPv6
Add abiilty to change `base_reachable_time_ms` option
/proc/sys/net/ipv6/neigh/{ifname}/base_reachable_time_ms
| -rw-r--r-- | interface-definitions/include/interface/base-reachable-time.xml.i | 16 | ||||
| -rw-r--r-- | interface-definitions/include/interface/ipv6-options.xml.i | 1 | ||||
| -rw-r--r-- | python/vyos/ifconfig/interface.py | 28 | 
3 files changed, 44 insertions, 1 deletions
| diff --git a/interface-definitions/include/interface/base-reachable-time.xml.i b/interface-definitions/include/interface/base-reachable-time.xml.i new file mode 100644 index 000000000..fb0d70101 --- /dev/null +++ b/interface-definitions/include/interface/base-reachable-time.xml.i @@ -0,0 +1,16 @@ +<!-- include start from interface/base-reachable-time.xml.i --> +<leafNode name="base-reachable-time"> +  <properties> +    <help>Base reachable time in seconds</help> +    <valueHelp> +      <format>u32:1-86400</format> +      <description>Base reachable time in seconds</description> +    </valueHelp> +    <constraint> +      <validator name="numeric" argument="--range 1-86400"/> +    </constraint> +    <constraintErrorMessage>Base reachable time must be between 1 and 86400 seconds</constraintErrorMessage> +  </properties> +  <defaultValue>30</defaultValue> +</leafNode> +<!-- include end --> diff --git a/interface-definitions/include/interface/ipv6-options.xml.i b/interface-definitions/include/interface/ipv6-options.xml.i index edb4a74f9..ec6ec64ee 100644 --- a/interface-definitions/include/interface/ipv6-options.xml.i +++ b/interface-definitions/include/interface/ipv6-options.xml.i @@ -5,6 +5,7 @@    </properties>    <children>      #include <include/interface/adjust-mss.xml.i> +    #include <include/interface/base-reachable-time.xml.i>      #include <include/interface/disable-forwarding.xml.i>      #include <include/interface/ipv6-accept-dad.xml.i>      #include <include/interface/ipv6-address.xml.i> diff --git a/python/vyos/ifconfig/interface.py b/python/vyos/ifconfig/interface.py index 1b86982c4..f0897bc21 100644 --- a/python/vyos/ifconfig/interface.py +++ b/python/vyos/ifconfig/interface.py @@ -1,4 +1,4 @@ -# Copyright 2019-2023 VyOS maintainers and contributors <maintainers@vyos.io> +# Copyright 2019-2024 VyOS maintainers and contributors <maintainers@vyos.io>  #  # This library is free software; you can redistribute it and/or  # modify it under the terms of the GNU Lesser General Public @@ -193,6 +193,9 @@ class Interface(Control):              'validate': assert_positive,              'location': '/proc/sys/net/ipv6/conf/{ifname}/dad_transmits',          }, +        'ipv6_cache_tmo': { +            'location': '/proc/sys/net/ipv6/neigh/{ifname}/base_reachable_time_ms', +        },          'path_cost': {              # XXX: we should set a maximum              'validate': assert_positive, @@ -261,6 +264,9 @@ class Interface(Control):          'ipv6_dad_transmits': {              'location': '/proc/sys/net/ipv6/conf/{ifname}/dad_transmits',          }, +        'ipv6_cache_tmo': { +            'location': '/proc/sys/net/ipv6/neigh/{ifname}/base_reachable_time_ms', +        },          'proxy_arp': {              'location': '/proc/sys/net/ipv4/conf/{ifname}/proxy_arp',          }, @@ -613,6 +619,21 @@ class Interface(Control):              return None          return self.set_interface('arp_cache_tmo', tmo) +    def set_ipv6_cache_tmo(self, tmo): +        """ +        Set IPv6 cache timeout value in seconds. Internal Kernel representation +        is in milliseconds. + +        Example: +        >>> from vyos.ifconfig import Interface +        >>> Interface('eth0').set_ipv6_cache_tmo(40) +        """ +        tmo = str(int(tmo) * 1000) +        tmp = self.get_interface('ipv6_cache_tmo') +        if tmp == tmo: +            return None +        return self.set_interface('ipv6_cache_tmo', tmo) +      def _cleanup_mss_rules(self, table, ifname):          commands = []          results = self._cmd(f'nft -a list chain {table} VYOS_TCP_MSS').split("\n") @@ -1698,6 +1719,11 @@ class Interface(Control):              for addr in tmp:                  self.add_ipv6_eui64_address(addr) +        # Configure IPv6 base time in milliseconds - has default value +        tmp = dict_search('ipv6.base_reachable_time', config) +        value = tmp if (tmp != None) else '30' +        self.set_ipv6_cache_tmo(value) +          # re-add ourselves to any bridge we might have fallen out of          if 'is_bridge_member' in config:              tmp = config.get('is_bridge_member') | 
