diff options
| author | Daniil Baturin <daniil@vyos.io> | 2026-04-21 12:59:52 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-21 12:59:52 +0100 |
| commit | 582f4ee7d2406d1e8203f705701f9552d8054575 (patch) | |
| tree | 529292d9c470aee5571203486df183f7f6ab28e3 /src/activation-scripts | |
| parent | 2acaf8154f0ac72a1886d1e1b68391dc05ef768a (diff) | |
| parent | 6cac8010f840ad5b8053cf6155bfb12a6720bf6f (diff) | |
| download | vyos-1x-582f4ee7d2406d1e8203f705701f9552d8054575.tar.gz vyos-1x-582f4ee7d2406d1e8203f705701f9552d8054575.zip | |
Merge branch 'current' into vyos-utils-merge
Diffstat (limited to 'src/activation-scripts')
| -rw-r--r-- | src/activation-scripts/00-first-installed-boot.py | 35 | ||||
| -rw-r--r-- | src/activation-scripts/01-set-config-path-hint.py | 35 | ||||
| -rw-r--r--[-rwxr-xr-x] | src/activation-scripts/20-ethernet-offload.py (renamed from src/activation-scripts/20-ethernet_offload.py) | 20 | ||||
| -rw-r--r-- | src/activation-scripts/example.py | 42 |
4 files changed, 126 insertions, 6 deletions
diff --git a/src/activation-scripts/00-first-installed-boot.py b/src/activation-scripts/00-first-installed-boot.py new file mode 100644 index 000000000..ca02c2642 --- /dev/null +++ b/src/activation-scripts/00-first-installed-boot.py @@ -0,0 +1,35 @@ +# Copyright (C) VyOS Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library. If not, see <http://www.gnu.org/licenses/>. + + +from vyos.configtree import ConfigTree +from vyos.system.image import is_live_boot +from vyos.utils.activate import set_activation +from vyos.utils.activate import set_first_installed_boot +from vyos.utils.activate import is_first_installed_boot + + +def pre_condition() -> bool: + return not is_live_boot() + + +def activate(_config: ConfigTree) -> None: + pass + + +def post_condition() -> None: + set_first_installed_boot() + if is_first_installed_boot(): + set_activation(__file__, 'never') diff --git a/src/activation-scripts/01-set-config-path-hint.py b/src/activation-scripts/01-set-config-path-hint.py new file mode 100644 index 000000000..3146a7905 --- /dev/null +++ b/src/activation-scripts/01-set-config-path-hint.py @@ -0,0 +1,35 @@ +# Copyright (C) VyOS Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library. If not, see <http://www.gnu.org/licenses/>. + + +from vyos.configtree import ConfigTree +from vyos.system.image import is_live_boot +from vyos.utils.activate import set_activation +from vyos.utils.activate import set_config_path_hint +from vyos.utils.activate import is_first_installed_boot + + +def pre_condition() -> bool: + return not is_live_boot() + + +def activate(_config: ConfigTree) -> None: + pass + + +def post_condition() -> None: + if is_first_installed_boot(): + set_config_path_hint() + set_activation(__file__, 'never') diff --git a/src/activation-scripts/20-ethernet_offload.py b/src/activation-scripts/20-ethernet-offload.py index bc1e9f202..9f61f6d8f 100755..100644 --- a/src/activation-scripts/20-ethernet_offload.py +++ b/src/activation-scripts/20-ethernet-offload.py @@ -22,9 +22,12 @@ from vyos.ethtool import Ethtool from vyos.configtree import ConfigTree -from vyos.system.image import is_live_boot +from vyos.utils.activate import set_activation +from vyos.utils.activate import is_first_installed_boot + def activate(config: ConfigTree): + # pylint: disable=too-many-branches base = ['interfaces', 'ethernet'] if not config.exists(base): @@ -39,7 +42,7 @@ def activate(config: ConfigTree): enabled, fixed = eth.get_generic_receive_offload() if configured and fixed: config.delete(base + [ifname, 'offload', 'gro']) - elif is_live_boot() and enabled and not fixed: + elif enabled and not fixed: config.set(base + [ifname, 'offload', 'gro']) # If GSO is enabled by the Kernel - we reflect this on the CLI. If GSO is @@ -48,7 +51,7 @@ def activate(config: ConfigTree): enabled, fixed = eth.get_generic_segmentation_offload() if configured and fixed: config.delete(base + [ifname, 'offload', 'gso']) - elif is_live_boot() and enabled and not fixed: + elif enabled and not fixed: config.set(base + [ifname, 'offload', 'gso']) # If LRO is enabled by the Kernel - we reflect this on the CLI. If LRO is @@ -57,7 +60,7 @@ def activate(config: ConfigTree): enabled, fixed = eth.get_large_receive_offload() if configured and fixed: config.delete(base + [ifname, 'offload', 'lro']) - elif is_live_boot() and enabled and not fixed: + elif enabled and not fixed: config.set(base + [ifname, 'offload', 'lro']) # If SG is enabled by the Kernel - we reflect this on the CLI. If SG is @@ -66,7 +69,7 @@ def activate(config: ConfigTree): enabled, fixed = eth.get_scatter_gather() if configured and fixed: config.delete(base + [ifname, 'offload', 'sg']) - elif is_live_boot() and enabled and not fixed: + elif enabled and not fixed: config.set(base + [ifname, 'offload', 'sg']) # If TSO is enabled by the Kernel - we reflect this on the CLI. If TSO is @@ -75,7 +78,7 @@ def activate(config: ConfigTree): enabled, fixed = eth.get_tcp_segmentation_offload() if configured and fixed: config.delete(base + [ifname, 'offload', 'tso']) - elif is_live_boot() and enabled and not fixed: + elif enabled and not fixed: config.set(base + [ifname, 'offload', 'tso']) # Remove deprecated UDP fragmentation offloading option @@ -104,3 +107,8 @@ def activate(config: ConfigTree): if config.exists(flow_control_path): if not eth.check_flow_control(): config.delete(flow_control_path) + + +def post_condition() -> None: + if is_first_installed_boot(): + set_activation(__file__, 'off') diff --git a/src/activation-scripts/example.py b/src/activation-scripts/example.py new file mode 100644 index 000000000..74beedf80 --- /dev/null +++ b/src/activation-scripts/example.py @@ -0,0 +1,42 @@ +# Copyright 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 +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library. If not, see <http://www.gnu.org/licenses/>. + + +from vyos.configtree import ConfigTree + + +# pylint: disable=anomalous-backslash-in-string,pointless-string-statement +"""Activation scripts must be named '^\\d+\\-.+.py$' to be included by the +activation script runner. They are run in ascending order of prefix.""" + + +def pre_condition() -> bool: + """This function is not required. + If not present, or pre_condition returns True, the function activate + will be called on the config.""" + + +def activate(_config: ConfigTree) -> None: + """This function is expected. + If not present, the script is ignored. The function itself can be a + no-op.""" + + +def post_condition() -> None: + """This function is not required. + If present, and application of 'activate' succeeds, post_condition will + be called. + Commonly used to set activation 'off' for the script, after first run on + an installed system.""" |
