Commit Graph
801 Commits
Author SHA1 Message Date
Richard Alpe 97e89cfccc confd: extend infix-system with service runtime statistics
Add statistics container to service model with memory usage, uptime,
and restart count tracking.

Updates YANG revision to 2025-12-02.

Signed-off-by: Richard Alpe <richard@bit42.se>
2025-12-17 15:34:02 +01:00
Mattias Walström e69d53a7b5 confd: Add migrate script to migrate configuration to new YANG syntax 2025-12-16 18:30:02 +01:00
Mattias Walström b0643430ec confd: factory-config: Change syntax to follow new yang model 2025-12-16 18:30:02 +01:00
Mattias Walström e49b3c9206 confd: Adapt YANG models after libyang/netopeer2 upgrade
We previously run a draft version of a lot of YANG models,
netconf-server,ssh-server and mode. Now they are released
with minor changes.

infix-meta is an exception, here we had to remove the obsolete
marker of the node and value, since this is no longer allowed in
libyang.
2025-12-16 18:30:01 +01:00
Mattias Walström 2dba50db76 confd: Step up version of confd
Incompatible changes in YANG models for netconf.
2025-12-16 14:28:25 +01:00
Mattias Walström 0fe9cfad46 confd: Use correct YANG modules after upgrading libnetconf2 and sysrepo 2025-12-16 14:28:25 +01:00
Mattias Walström 0c60649c62 confd: Let rousette install its own yang models in rootfs
Previously rousette did not install the yang models so we kept a copy
of them in confd. Now it is implemented in rousette, let them install
their models.
2025-12-16 14:28:24 +01:00
Mattias Walström 0c7651705b confd, statd, libsrx: Adapt to libyang4 api 2025-12-16 14:28:24 +01:00
Joachim Wiberg 024b51cc6a statd: add support for ip forwarding operational state
This patch unlocks "routing interfaces" support in the ietf-routing yang
model.  An array of interface with IP forwarding enabled.

Note, because of #515 we skip IPv6 forwarding for now.  This will in the
near future be handled by a per-interface force_forwarding sysctl flag.

The 'show interface [ifname]' admin-exec command has been extended with
a Flags field for a quick overview of which interfaces have forwarding
currently enabled.

Fixes #647

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-12-05 11:12:03 +01:00
Joachim Wiberg 1cbc9a49a2 confd: initial support for rip
Fixes #582

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-12-05 10:58:35 +01:00
Joachim Wiberg 7edc3c19f7 confd: add support for toggling OSPF debug logs
Fixes #1281

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-12-02 17:06:10 +01:00
Joachim Wiberg d23f9ea25b confd: fix SSH host key generation warnings
Validate keys in gen_hostkey() before passing empty keys to shell scripts,
preventing:

Nov 04 2024 10:54:25 confd[2697]: SSH key (genkey) does not exist, generating...
Nov 04 2024 10:54:25 confd[2697]: writing RSA key
Nov 04 2024 10:54:26 confd[2697]: do_convert_from_pkcs8: /tmp/tmp.FH1Hr1 is not a recognised public key format

Also, fix base64 content formatting with proper 64-character line wrapping
using printf+fold instead of echo.

Use PKCS#1 RSA format for public keys as required by netopeer2-server, while
keeping PKCS#8 format for private keys.  Use proper ssh-keygen format flag
(PKCS8) for correct conversion.

Fixes #1289

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-12-02 09:50:24 +01:00
Joachim Wiberg b9a56924ac confd: drop ietf/infix prefix from function names
SIMPLIFY, Simplify, simplify ... as my uni English professor always said.

> “Perfection is achieved not when there is nothing more to add, but when
>  there is nothing left to take away.” -- Antoine de Saint-Exupéry

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-20 20:23:25 +01:00
Joachim Wiberg c398e42ca9 confd: drop leading ietf/infix prefix in source files
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-20 20:23:24 +01:00
Joachim Wiberg ed6db59e68 confd: extend syslogd support with property-based filtering
This is the last commit in the series that extend syslog matching and sorting
to the level of sysklogd 2.7.0 and later.  Like hostname filtering, property
based filtering is not supported natively in the IETF RFC, and the modeling is
unfortunately a bit clunky.  The most confusing part is probably 'negate'
which is the '!' operator that inverts the matching, e.g., !icase_regex match
everthing *not* in the regexp.

Fixes #1091

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-20 14:05:37 +01:00
Joachim Wiberg 18e80ceb11 confd: extend syslogd support with hostname-based filtering
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-20 14:05:36 +01:00
Joachim Wiberg c1b57c17bd confd: extend syslogd with regexp matching and advanced severity ops
Unlock more of the optional features in ietf-syslog.yang: select-match and
select-adv-compare, for regexp and advanced severity comparison operators.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-20 12:00:06 +01:00
Joachim Wiberg 52320a973a confd: add support for dhcpv4 vendor-class option
The vendor-class option was previously hard-coded to "Infix vXX.YY.Z",
but since this option usually describes the type of the device asking
for a lease, the default has been changed to use the product-name.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-20 09:33:59 +01:00
Joachim Wiberg 90f619bfa6 confd: add deterministic hostname management via /etc/hostname.d/
Resolve race condition between DHCP and configured hostname by introducing
priority-based hostname management using /etc/hostname.d/ directory pattern.

Priority order (highest wins):
  90-dhcp-<iface>  - DHCP assigned hostname
  50-configured    - YANG /system/hostname config
  10-default       - Bootstrap/factory default

The new /usr/libexec/infix/hostname helper reads all sources and applies the
highest priority hostname.  It exits early if hostname unchanged, preventing
unnecessary service restarts.

Fixes #1112

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-18 19:07:25 +01:00
Joachim Wiberg a568f31309 confd: add support for dhcpv6 client
Basic DHCPv6 support as a per-interface ipv6 setting, not in line with
the IETF YANG model, which has this as a root container.

Note, this also fixes DHCPv4 option inference after the relocation of
/dhcp-client to /interfaces, in 764bd8e.

Fixes #1110

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-18 13:28:15 +01:00
Joachim Wiberg 77de4d749a confd: add support for configuring ospf interface priority
Since we just un-deviated this node to be able to create operational
data for ospf interfaces, we should also allow users to set it.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-12 22:28:19 +01:00
Joachim Wiberg f79c0ee903 statd: extend ospf operational data to replace vtysh commands in cli
Collect more data from FRR to the OSPF and BFD operational datastore.
Refactor CLI commands to use the YANG datastore instead of vtysh.

Additionally, the BFD command(s) have been moved to the top level of
admin-exec, which is where vtysh has them.

Finally, preparing for future OSPFv3 support, all commands have been
given a new context under 'show ip ospf'.  Deprecation warnings have
been added to the existing 'show ospf' commands.

Also, for consistency, all commands names in plural have been changed to
their singular form: routes -> route, interfaes -> interface, etc.  This
is what vtysh, Cisco, and others do as well.

Fixes #1190

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-12 22:28:18 +01:00
Joachim Wiberg b1f83e5ce7 confd: add must expression to verify ospf backbone is not nssa/stub
Silently drop any area-type setting for ospf backbone in a migrate
script to prevent any field issues after upgrading to this fix.

Fixes #1247

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-12 22:28:18 +01:00
Joachim Wiberg a76b1adc1e confd: enable IFF_MULTICAST on GRE tunnel interfaces
Required for protocol daemons like ospfd to join multicast groups.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-07 14:46:54 +01:00
Joachim Wiberg 777650bbca confd: add tunnel ttl, tos, and pmtu-discovery settings
Adds support for configuring TTL, ToS/DSCP, and Path MTU Discovery
on GRE and VXLAN tunnels. TTL defaults to 64 instead of inherit to
prevent issues with routing protocols like OSPF that use TTL=1.

Refactors tunnel YANG models by merging local-remote into a unified
tunnel-common grouping for cleaner organization.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-07 14:46:54 +01:00
Joachim Wiberg 80e8ccf273 confd: fix inference from CLI, follow-up to ed235583
The callback refactoring forgot to call ietf_interfaces_cand_init(),
breaking inference of interface types and DHCP client options.

Also fixes UPDATE event handling for ietf-keystore and infix-meta.

Fixes #1244

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-06 17:42:39 +01:00
Joachim Wiberg 15a6f69e03 confd: drop 'enabled' node from IPv4 autoconf container
Neither the IPv6 autonconf container, nor the recently moved DHCP client
container have an 'enabled' flag.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-06 16:36:57 +01:00
Joachim Wiberg 7f555fd2bd confd: relocate /dhcp-client to /interfaces/interface/ipv4/dhcp
Please note, this change drops not only the global enabled flag, but also the
per-interface enabled flag, converting it to a presence container.  The name
of the container is also shortened from dhcp-client -> dhcp.  A pattern that
expected to be reused also for the DHCPv6 client.

Fixes #1109

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-06 16:36:56 +01:00
Joachim Wiberg 5496258e54 confd: minor, silence libyang warning when built w/o containers
Silence confd[3582]: libyang[0]: Invalid argument ctx_node (lyd_find_xpath())
warning in syslog.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-06 09:08:22 +01:00
Joachim Wiberg f08947092b confd: fix update of /cfg/startup-config.cfg
Follow-up to ed23558

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-05 20:41:59 +01:00
Joachim Wiberg 33999ceebc confd: fix annoying warning in log
This fixes the annoying libyang warning after commit da29771.

    confd[3375]: libyang[0]: Invalid argument ctx_node (lyd_find_xpath()).

This happens when the diff is used in the wrong event when it is NULL.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-05 20:41:58 +01:00
Joachim Wiberg 79ad653150 confd: minor coding style fixes and refactoring
Collapse, simplify, and break up ietf_keystore_change() into multiple
functions.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-05 20:41:58 +01:00
Mattias Walström 10ef03c971 confd: Remove debug prints 2025-11-01 16:57:49 +01:00
Joachim WibergandGitHub f82534d828 Merge pull request #1216 from kernelkit/coverity-fixes 2025-10-31 18:18:46 +01:00
Joachim WibergandGitHub ed2355833e Merge pull request #1209 from kernelkit/confd-refactor-callbacks
Major refactor of how sysrepo callbacks is used in confd

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 17:49:53 +01:00
Joachim Wiberg 089b160029 confd: fix possible NULL pointer deref.
Found by Coverity Scan

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 16:59:30 +01:00
Joachim Wiberg 24755e7e5f board/aarch64: add broken-flow-control interface quirk
Add new interface quirk to allow skipping disabling of flow control on
all RPi 3B/4B devices that have the smsc95xx driver.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:08 +01:00
Joachim Wiberg 4b55e38741 board/aarch64: use %m modifier in default xPi hostnames
The xPi's usually don't have a VPD so the chassis mac-address probed at
boot is usually null in /run/system.json.  This commit adds a fallbkack
mechanism to populate this field so it can be used for unique hostnames
even on these boards.

Ths ietf-hardware.yang model does not have a notion of physical address,
so we augment one tht is generic enought to be used for other hardware
components than Ethernet, similar to what ietf-interfaces.yang use.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:08 +01:00
Joachim Wiberg d1fda087ec statd: refactor, use parent node for sensor relationships
For more advanced hardware with multiple sensor types per device
(e.g., SFP modules with temperature, voltage, current, and power
sensors), use the YANG parent/child relationship to group related
sensors together for better presentation.

Changes:
 - Remove parent/parent-rel-pos deviations from infix-hardware.yang
 - Create parent components (class: module) for multi-sensor devices
 - Add parent references to child sensor components
 - Add human-readable descriptions from hwmon labels
 - Extend hwmon discovery to support voltage, current, and power
 - Normalize sensor names: strip vendor prefixes (mt7915_phy0 -> phy0)
 - Remove redundant TYPE column, clarify units (V -> VDC, add spaces)
 - Simplify child sensor display by stripping parent prefix
 - Fix "show system" to only show CPU temperature and fan speed

Example output from "show hardware":

  NAME                     VALUE               STATUS
  ===================================================
  sfp1:
    Rx Power               0.000 W             ok
    Tx Power               0.001 W             ok
    Vcc                    3.35 VDC            ok
    Bias                   0.006 A             ok
    Temperature            30.3 °C             ok

  sfp2:
    Rx Power               0.000 W             ok
    Tx Power               0.001 W             ok
    Vcc                    3.34 VDC            ok
    Bias                   0.006 A             ok
    Temperature            32.0 °C             ok

  cpu                      42.8 °C             ok
  phy0                     47.0 °C             ok
  phy1                     53.0 °C             ok

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:04 +01:00
Joachim Wiberg 08c9c97823 confd: add system resource usage to ietf-system.yang
This commit adds resource usage: memory, loadavg, and filesystem usage
by augmenting ietf-system:/system-state.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:03 +01:00
Joachim Wiberg 8b10cce172 confd: add support for temperature sensors in ietf-hardware.yang
- Remove class deviation to allow iana-hardware:sensor
 - Populate sensor operational data from /sys/class/thermal
 - Extend 'show hardware'

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:03 +01:00
Joachim Wiberg 6aaf612095 board/common: simplify USB port discovery and fix duplicate entries
This commit refactors USB port probing to:

- Eliminate duplicates: previously, 'authorized' and 'authorized_default'
  were listed as separate USB port entries (confusing).  Now each USB
  port is represented once, with the path pointing to the USB device
  directory, confd appends the appropriate attribute file as needed

- Add support for Raspberry Pi 4B and CM4 USB port(s) using a generic
  discovery function that scans /sys/bus/usb/devices for USB root hubs.
  This should work seamlessly across all platforms

- For backwards compatibility and better UX:
   - Single USB port systems: Named "USB" (no number)
   - Multi-port systems: Named "USB1", "USB2", etc.

- Device tree-based discovery is tried first (for boards like Alder with
  explicit DT USB port definitions), with fallback to generic discovery
  for boards without DT

Fixes: #315

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:26:00 +01:00
Joachim Wiberg 9b057ad547 Support for Raspberry Pi 3B (BCM2837)
The BCM2837 core is used not just in the RPi 3B but also in the Zero 2W,
both device trees have been added to the board config.

The BCM2711 support has been extended to include RPi 400 and CM4 I/O.

To support the BCM2837 family more firmware options habe been enabled,
since the RPi3 does not have bootcode.bin flashed in the SoC.  The SD
card image now uses a hybrid GPT/MBR format so the RPi3 bootcode.bin
can read all files from the first VFAT partition.

The default device tree for Linux is now chosen by the U-Boot probe and
the only exception is the "laundry room" detector that looks for a RPi4
with a 7" touch screen, which then selects the DSI enabled RPi4 variant.
This is enough to properly load an RPi 3B and a CM4 based router board.

The BCM2837 does not have PCI/PCIe or a built-in MAC so it relies on the
USB to Ethernet LAN78xx which does not support disabling pause frames.
I have opted for checking for EOPNOTSUPP instead of adding yet another
quirk, because it is likely to be a common limitation of more drivers
and chipsets, and this code is best-effort anyway.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-31 13:25:59 +01:00
Mattias Walström 98b30d7d45 confd: Remove core hooks
Not needed anymore, the configuration change is sequential in change_cb.
2025-10-30 13:14:49 +01:00
Mattias Walström 5cdcf1f4fe confd: Add support for dependency tracking between modules
Sysrepo lack the functionallity for if change in model A also
should demand actions of model B. Previous we have handled this by
having callbacks for keystore changes in for example infix-services
to be able to reconfigure SSH on asymmetric key changes.

This commit instead add a pass where dependencies are found and added
to the diff.
2025-10-30 13:14:49 +01:00
Mattias Walström da29771398 confd: Refactor how sysrepo callbacks are handled
Sysrepo only care about model changes, but we want the system
configuration. Therefore add a common callback for all modules
and handle dependencies between the modules, if someone should be
run before another for example.
2025-10-30 12:28:03 +01:00
Joachim WibergandGitHub 9d271eb7c6 Merge pull request #1033 from kernelkit/yang-add-services
Add new operational support for services

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-29 09:59:33 +01:00
Joachim Wiberg 7e37fc49a3 confd: prevent IP addresses on bridge ports
Bridge ports should not have IP addresses configured. The IP address
should be configured on the bridge interface itself, not its member ports.

Add YANG must expression to enforce this rule at configuration time.

Fixes #1122

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-28 19:35:32 +01:00
Joachim Wiberg cb5d804a88 confd: add dhcp-server validation of address pool and/or static host
A valid DHCP server setup for a subnet is one of pool and/or at least one
static host entry/lease.  If pool is enabled the pool must have a start
and an end address.

To allow setting up a DHCP server with no pool and at least one static host
entry/lease, we make the pool a presence container, otherwise the pool will
always be set and trigger the below inference.

When an interactive CLI/Web user enables the address pool we infer a default
range .100-.250, but only for /24, C-class networks.  This is what most users
know and expect.

The YANG model now validates that:
- If an address pool is created, both start-address and end-address must be set
- Each subnet must have either a pool or at least one static host entry
- The pool container is now a presence container, so "no pool" fully deletes it

Fixes #1121

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-28 19:34:53 +01:00
Richard Alpe cc86463233 confd: use keyless services list, allow duplicate PIDs
Multiple services can have PID 0 when stopped/done, making PID
unsuitable as a unique key. There could also be multiple services with
the same name (I would assume?).

Signed-off-by: Richard Alpe <richard@bit42.se>
2025-10-28 15:35:44 +01:00