summaryrefslogtreecommitdiff
path: root/src/conf_mode
AgeCommit message (Collapse)Author
2026-05-26Merge pull request #5157 from xTITUSMAXIMUSX/currentJohn Estabrook
geoip: T8590: fix initialization failure and set clobbering on boot and commit
2026-05-26Merge pull request #5197 from alexandr-san4ez/T7555-currentViacheslav Hletenko
ipsec: T7555: Implement `ikev2-reauth` for site-to-site peers
2026-05-26Merge pull request #5158 from alexandr-san4ez/T6478-currentDaniil Baturin
openvpn: T6478: Skip restart service when only client config changed
2026-05-26Merge pull request #5179 from josephillips85/currentChristian Breunig
Policy: T8823: validation of GE and LE according FRR instructions
2026-05-25Merge pull request #5216 from natali-rs1985/T8412Viacheslav Hletenko
wwan: T8412: Fix commit failure when modem is absent or not connected
2026-05-25openvpn: T6478: Skip restart service when only client config changedOleksandr Kuchmystyi
OpenVPN server reads per-client files from `--client-config-dir` at connect time. When only `interfaces openvpn vtunN server client <client>` entries are modified there is no need to send SIGHUP or restart the service - the new CCD files written by `generate()` will be picked up automatically on the next client connection.
2026-05-22Merge pull request #5212 from sever-sever/T8883Christian Breunig
T8883: Fix restart PPPoE-server service when RADIUS settings change
2026-05-22snmp: T8538: Persist engineBoots counter across rebootsOleksandr Kuchmystyi
Per RFC 3414 section 2.2 (Replay Protection), the `snmpEngineBoots` counter must be stored in non-volatile storage and incremented on every snmpd restart. VyOS was not persisting this value, causing it to reset to 1 after every reboot. SNMP managers cache the engineBoots value from previous sessions. When VyOS resets the counter to 1 after reboot, managers reject incoming SNMPv3 trap packets as "too old", producing errors such as: ``` usm: Message too old. reboot count invalid ``` This change introduces `/config/snmp/engineboots.count` as a disk-backed persist file and it uses to sync the counter into snmpd's conf before the daemon starts.
2026-05-22wwan: T8412: Fix commit failure when modem is absent or not connectedNataliia Solomko
`mmcli --simple-disconnect` can be called when the modem bearer is not active. This causes cmd() to raise a `PermissionError` and abort the commit. Handle the case gracefully so the configuration can be committed before the modem is physically present or fully connected.
2026-05-22Merge pull request #5198 from indrajitr/T8862-dhcpv6-reservation-multiViacheslav Hletenko
dhcpv6: T8862: Allow multiple addresses and prefixes for reservations
2026-05-21ntp: T8601: add local stratum optionanderbak
2026-05-21Merge pull request #5175 from natali-rs1985/T8509Daniil Baturin
wireguard: T8509: Add fwmark ip rules for VRF-bound interfaces
2026-05-21T8883: Fix restart PPPoE-server service when RADIUS settings changeViacheslav Hletenko
Restart the PPPoE server when RADIUS configuration is modified. Previously, changes to settings such as `priority` and `backup` were not applied until the service was restarted manually.
2026-05-21wireless: mt7915e: de-nest code for firmware configuration fileChristian Breunig
Generation of the firmware configuration file can be made contitional only if the card is present/driver is loaded. The firmware configuration file itself must not be explicitly set to be owned as root as the default is user root and group vyattacfg.
2026-05-21wireless: T8528: add module config code for mt7916 based cardsAlain Lamar
2026-05-20load-balancing: T7928: Fix port conflict check to respect `listen-address` ↵Alexandr K.
(#5186) The port availability check in `verify()` was using `front_config.get('address')` which always resolved to `None`, causing the validator to treat any process holding a given port number as a conflict regardless of which IP it was bound to.
2026-05-20T7880: Add NTP hardware timestamp receive-filter compatibility check (#5160)Nataliia S.
Add a check to determine whether the NIC supports hardware timestamp receive filters required for NTP timestamping. Implement the query in a new python/vyos/netlink/timestamp.py module using pyroute2 generic netlink ETHTOOL_MSG_TSINFO_GET, avoiding ethtool output parsing.
2026-05-20T6933: fix "system option performance" overwrites sysctl parameters from ↵Christian Breunig
firewall (#5206) sysctl values written by firewall global-options are overwritten when using "system option performance" configuration on VyOS CLI. This is caused by a missing dependency fall from system_option.py to the firewall CLI helper script.
2026-05-20ipsec: T7555: Implement `ikev2-reauth` for site-to-site peersOleksandr Kuchmystyi
IKEv2 reauthentication was configurable via CLI but never translated into `swanctl.conf`. Add `reauth_time` to the peer connection template, driven by the `ikev2-reauth` flag on the ike-group and the per-peer override (yes/no/inherit).
2026-05-19geoip: T8590: fix initialization failure and set clobbering on boot and commitxTITUSMAXIMUSX
Three related bugs prevented GeoIP nftables sets from being populated correctly at boot and when incrementally modifying firewall or policy route rules. 1. geoip_updated() always returned False The previous implementation called node_changed() and then searched the result with dict_search_recursive(changes, 'geoip'). This could never match: node_changed() is annotated `-> list` and returns a flat list of the immediate top-level child names whose subtree changed (e.g. ['ipv4'] for the firewall path, or route names for policy route). The 'geoip' key sits several levels deeper than those names, so dict_search_recursive — which only walks dicts and lists for a matching dict key — never yielded a hit, and geoip_updated() always returned False. As a consequence, geoip_update() was never triggered by an incremental add or change of a GeoIP rule; the only path that ever populated /run/nftables-geoip.conf was the explicit \"update geoip\" command or the fallback when geoip_refresh() failed. Fix: bypass node_changed() and call get_config_diff() / get_child_nodes_diff() directly with expand_nodes=Diff.ADD|Diff.DELETE and recursive=True. In that mode, the 'add' and 'delete' values in the returned dict are full nested subtrees of the config diff, so dict_search_recursive correctly finds 'geoip' wherever it appears in the change set. 2. GeoIP block executed unconditionally, breaking the boot sequence geoip_sets() always returns {'name': [], 'ipv6_name': []}. A non-empty dict is truthy in Python regardless of whether its values are empty lists, so the guards \"if geoip_sets:\" and \"if 'name' in geoip_sets:\" were always True. On boot, when policy_route.py is invoked as a dependent of firewall.py (triggered by group_resync), it entered the GeoIP block even with no policy route GeoIP rules configured. Because /run/nftables-geoip.conf did not yet exist, geoip_refresh() returned False and geoip_update(policy=policy) was called with an empty policy. This created /run/nftables-geoip.conf containing only empty table stubs. When firewall.py subsequently called geoip_refresh(), the file existed and nft loaded it successfully — so the geoip_update(firewall) call was never reached and the firewall GeoIP sets stayed empty for the entire uptime of the router. Fix: check the actual list contents instead of the container dict: if geoip_sets['name'] or geoip_sets['ipv6_name']. 3. geoip_update() clobbered the other caller's sets geoip_update() renders /run/nftables-geoip.conf from both firewall_sets and policy_sets in a single pass. When called with only one argument (as firewall.py and policy_route.py each do), the other argument defaulted to None and that half of the file was rendered empty, erasing whatever the other script had written. The geoip-update helper used by \"update geoip\" and the weekly cron was unaffected because it always passes both arguments, which masked this bug in normal manual operation. Fix: when either argument is absent, read the missing config from the live Config session before building the set tables, so every invocation writes the complete combined firewall + policy file.
2026-05-16dhcpv6: T8862: Add validation for presence of address or prefix in reservationIndrajit Raychaudhuri
2026-05-16dhcpv6: T8862: Allow multiple addresses and prefixes for reservationsIndrajit Raychaudhuri
Add support for allowing DHCPv6 to assign reservations for multiple addresses and prefixes to a single client simultaneously.
2026-05-13T8823: Removed nullchecks because dict_Search return None if value not setJose Phillips
2026-05-13T8823: Used dictionary searchJose Phillips
2026-05-13T8823: validation of GE and LE according FRR instructionsJose Phillips
2026-05-13T8823: validation of GE and LE according FRR instructionsJose Phillips
2026-05-13python: T8857: replace bare except clauses with except Exception in config ↵Yuriy Andamasov
scripts Bare except: catches everything derived from BaseException, including SystemExit and KeyboardInterrupt. Config scripts must not silently continue past sys.exit(), so replace bare except: with except Exception: in the three config-mode scripts that contained one. Library code (python/vyos/configverify.py, python/vyos/config.py) and op-mode scripts are intentionally out of scope: those cases require case-by-case design review (e.g. MTU lookups should accept defaults as arguments rather than rely on exception handling; reset-style op-mode scripts may legitimately want to ignore KeyboardInterrupt). Sites changed: - src/conf_mode/interfaces_ethernet.py (MTU adapter lookup) - src/conf_mode/vpp_interfaces_bonding.py (MAC validation) - src/conf_mode/container.py x2 (IPv4 / IPv6 prefix lookup)
2026-05-13T8600: Add option to change logging verbosity in Kea (#5178)Nataliia S.
2026-05-13serial: T8853: limit "kernel" CLI option to ttyS and ttyAMA interfaces only ↵Christian Breunig
(#5193) Recently (commit 35db941bcf "serial: T8375: add CLI option to explicitly set kernel console") we added the CLI knob to enable the Kernel and GRUB serial console on a given device. Currently this is supported for serial console interfaces starting with ttyS and ttyAMA only. Main limitation is that these interfaces are wired to the CPU and bootloader infos can be displayed.
2026-05-11Merge pull request #5162 from natali-rs1985/T8760Christian Breunig
dhcp-relay: T8760: Remove redundant deprecation warning for legacy interface option
2026-05-11wireguard: T8509: Add fwmark ip rules for VRF-bound interfacesNataliia Solomko
When a WireGuard interface has both fwmark and VRF configured, outgoing tunnel packets marked with the fwmark were not routed into the correct VRF routing table, causing them to hit the l3mdev unreachable rule instead. Add an ip rule at priority 1998 (after l3mdev at 1000 and before l3mdev unreachable at 2000) to route fwmark-tagged packets into the correct VRF routing table.
2026-05-11bgp: T8607: Add CLI support for BGP update-delay and establish-waitNataliia Solomko
2026-05-06Merge pull request #5159 from c-po/kernel-6.18Christian Breunig
T8147: Update Linux Kernel to 6.18
2026-05-04dhcp-relay: T7879: verify listen and upstream interfaces existNataliia Solomko
2026-05-04dhcp-relay: T8760: Remove redundant deprecation warning for legacy interface ↵Nataliia Solomko
option
2026-05-02Debian: T8147: remove out-of-tree OpenVPN DCO module - incl. in Kernel 6.18Christian Breunig
Move from the out-of-tree to an in-tree variant of the OpenVPN DCO module. As this was not available in the previous used LTS 6.6 Kernel it now is available while we upgrade to Linux 6.18.
2026-04-30T6750: sr-te: Adding initial Segment Routing Traffic Engineering portion of ↵Cheeze-It
FRR (#4994) * sr-te: T6750: Adding Segment Routing Traffic Engineering portion of FRR --------- Co-authored-by: Cheeze_It <none@none.com> Co-authored-by: Christian Breunig <christian@breunig.cc>
2026-04-27T8293: Add ability to set timeout for high-availability health-checkNataliia Solomko
Setting a timeout allows VRRP health-check scripts to run longer than the set interval. Without timeout, keepalived considers the script as failed after interval seconds. With timeout set higher than interval, the script has more time to complete before being marked as failed and transitioning VRRP to FAULT state.
2026-04-24Merge pull request #5130 from natali-rs1985/T8460Viacheslav Hletenko
vpp: T8460: Use isolated cpus for VPP cpu-cores
2026-04-24Merge pull request #5129 from inetman28/fix-acl-subinterfacesViacheslav Hletenko
VPP: T8495: fix issue with assigning acl on sub interfaces
2026-04-24Merge pull request #5137 from c-po/sr-sysctl-fixViacheslav Hletenko
T8534: refactor sysctl_(read|write) to accept key parts
2026-04-21vpp: T8460: Use isolated cpus for VPP cpu-coresNataliia Solomko
VPP CPU core assignment now uses kernel-isolated CPUs (from /sys/devices/system/cpu/isolated) with explicit corelist-workers instead of computing offsets from available cores with skip-cores/workers. Added validation that enough CPUs are actually isolated before VPP starts, and that isolate-cpus config only references existing CPU IDs. Moved smoketest for kernel option 'isolate-cpus' to test_vpp.py
2026-04-21Merge pull request #5100 from sarthurdev/T8446Daniil Baturin
firewall: T8446: Prevent chain with offload rule on local zone
2026-04-21T8534: refactor sysctl_(read|write) to accept key partsChristian Breunig
Interface names can contain dots (e.g. VLAN subinterfaces like eth0.10), which conflicts with sysctl's dot-separated key syntax. Change sysctl_read() and sysctl_write() to take key components as a list and normalize each component by replacing . with / before invoking sysctl. This fixes sysctl lookups/updates for VLAN subinterfaces. Extend the SR-TE smoketest to cover a VLAN subinterface. Previous error raising this issue: vyos-configd: sysctl: cannot stat /proc/sys/net/ipv6/conf/eth0/10/seg6_enabled: No such file or directory vyos-configd: sysctl: cannot stat /proc/sys/net/ipv6/conf/eth0/201/seg6_enabled: No such file or directory
2026-04-20VPP: T8495: Apply suggestions from code reviewRuslan Volodin
2026-04-20VPP: T8495: fix issue with assigning acl on sub interfacesRuslan Volodin
2026-04-16Merge pull request #5133 from c-po/serial-console-for-loopChristian Breunig
serial: T8375: call update_serial_console() only once for default tty
2026-04-16vpp: T8505: Switch PPPoE bindings retrieval from CLI parsing to API callNataliia Solomko
2026-04-15serial: T8375: call update_serial_console() only once for default ttyChristian Breunig
When there are multiple serial consoles defined; but either none or the last used the 'kernel' CLI option to disply Kernel messages, the GRUB code was called multiple times. By moving the call to the GRUB helpers outside the for loop we gain a single execution of the code path, not that it matters performance wise - but messing with the bootloader should be reduced to a minimum.
2026-04-14Merge pull request #5092 from c-po/kernel-serial-activationChristian Breunig
serial: T8375: use boot activation script to define a serial console on the CLI