Commit Graph
960 Commits
Author SHA1 Message Date
Mattias Walström 72b3058774 confd: Fix memory leaks in ietf-system.c 2025-01-21 10:12:20 +01:00
Mattias Walström 4782cee201 Add support for simple VXLAN tunnels
This is just a first step to add VXLAN tunnels, much more remains.
Implemented right now is as GRE, local, remote and a VNI.

Also refactor gre_basic and gre_bridged to generic tunnel tests,
the same test now tests VXLAN as well.
2025-01-14 14:31:21 +01:00
Tobias Waldekranz 547a9cd632 yanger: Remove dead code remaining after modularization 2025-01-10 10:12:22 +01:00
Tobias Waldekranz 2ec226640e yanger: Move ietf-{interfaces,routing} implementations to separate modules
Should this have been two commits: yes.

Should we spend time on splitting them after the fact because yours
truly dropped the ball: no.
2025-01-10 10:12:22 +01:00
Tobias Waldekranz a0e4e813dd yanger: Move ietf-ospf implementation to separate module 2025-01-10 09:57:40 +01:00
Tobias Waldekranz 8812ae7052 yanger: Move ietf-hardware implementation to separate module 2025-01-10 09:57:40 +01:00
Tobias Waldekranz 28bf2d6c3c yanger: Move infix-containers implementation to separate module 2025-01-09 23:59:20 +01:00
Tobias Waldekranz dadf0e2d16 yanger: Start the modularization process with ietf-system
The yanger source grown significantly, code is disorganized, the
namespace is all over the place, etc.

Take a stab at remedying the situation by splitting out the individual
YANG models in separate Python modules, starting with ietf-system.
2025-01-09 23:59:20 +01:00
Tobias Waldekranz c4a79766b7 statd: Make sure subpackages in python packages are distributed
Rather than explicitly defining the sources, specify the package names
and let poetry figure out the details. Otherwise, subpackages are not
included, which we want to start using in yanger.
2025-01-09 16:23:26 +01:00
Tobias Waldekranz 385eab2016 statd: Ignore generated Python byte code files
When interactively running, for exampe, yanger interactively from the
source tree, we end up with compiled files in our working tree. Make
sure to ignore these.
2025-01-09 16:02:43 +01:00
Tobias Waldekranz bc33d8bc8a confd: Reactivate supported interface counter in-total-frames
This was always supported, but was accendentally marked as
not-supported.
2025-01-09 16:02:36 +01:00
Tobias Waldekranz 061fa5fc72 confd: Add missing module dependencies
These are also provided by other packages (sysrepo, netopeer, etc.)
but having them in here allows us to lint all of our own models
without the need for a build tree.
2025-01-09 16:02:36 +01:00
Tobias Waldekranz bfeeade43b confd: bridge: Add STP/RSTP support 2025-01-08 10:14:46 +01:00
Tobias Waldekranz b425edffce libsrx: Add lyx versions of lyd_find_xpath
- Helper to get a set of nodes, using a formatted path
- Helper to get a single node, using a formatted path
2025-01-08 09:57:55 +01:00
Joachim WibergandMattias Walström c099d887af Add support for GRE tunnels
Basic support GRE and GRETAP tunnels both for IPv4 and IPv6.
Limited support right now, only possible to configure local
ip address and remote ip address.
2025-01-07 15:33:37 +01:00
Mattias Walström 08990556e2 confd: Fix typo in veth code
Should check if any node under veth is changed instead
of peer (does not exist).
2024-12-20 19:47:18 +01:00
Mattias Walström 79bec6877c Bump confd to 1.3
This since there is breaking changes.
2024-12-19 14:42:17 +01:00
Mattias Walström 37b97d9e4c Add support for configurable SSH server 2024-12-19 14:42:17 +01:00
Mattias Walström 2e81e99224 Generate any (SSH) key without content
This also makes it possible to remove the key 'genkey' if the
user wants.
2024-12-19 14:42:17 +01:00
Mattias Walström bea18c2fa9 Add new helper function rmrf
for recursive delete of directories
2024-12-19 14:42:17 +01:00
Mattias WalströmandGitHub a8545e3369 Merge pull request #876 from kernelkit/change-boot-order
Change boot order
2024-12-19 11:23:45 +01:00
Tobias Waldekranz bb939ccdff confd: Avoid initctl reload after exiting previous generation
Instead of running initctl reload, which also prematurely enables
services which are not supposed to be started until we have run
through the netdag and evolved to the next generation.

Handle the original use-case of disabling zeroconf is managed by
asking finit to stop the service immediately in the exit action, and
deferring the cleanup of the service until we call `initctl reload`
after the init action of the new generation.
2024-12-18 23:25:07 +01:00
Mattias Walström ff8669e735 Add support to set configure with RPC and read it from operational datastore 2024-12-18 17:44:40 +01:00
Tobias Waldekranz 96779c2620 confd: bridge: Simplify function names after review
Agreement: Avoid abbreviations in exported functions. Use short,
prefix-less, names for local functions.
2024-12-17 22:59:39 +01:00
Tobias Waldekranz e9a71ec3f7 confd: dagger: Define the script order on init/exit actions
In ye olde confd, we basically had `50-init.ip` - and that was fine.

Then came containers, VLANs, bridges, etc.; and with it: a whole
forest of setup/teardown scripts - and it was not fine anymore.

For example: if found an init script running at 61, you would have to
grep the source tree and look at _all_ other call sites to get a sense
of what runs before and/or after it.

Therefore: create enums for the init/exit actions where the order is
explicitly stated, and use those for all interface scripts.
2024-12-17 22:59:39 +01:00
Tobias Waldekranz b3da4c50fc confd: bridge: Refactor port setup
Clean up bridge-port config generation to align with the bridge upper
code.

- Remove lots of unnecessary guards that we model guaratees are always
  met (existance of containers and leafs).  This reduces indentation
  depth and increases readability, IMHO.

- Split the generation into smaller pieces, each with a clear purpose.

- Try  to include  all edge  cases around the  tricky subject  of PVID
  migrations,  with the  actions running  in either  exit or  init, as
  appropriate.
2024-12-17 22:59:39 +01:00
Tobias Waldekranz eb9ae5e4dd confd: bridge: Use confd god object to access dagger
Now that we have a god object, we might as well use it to make our
functions signatures a bit more readable.
2024-12-17 22:59:31 +01:00
Tobias Waldekranz 9591093379 confd: bridge: Refactor setup
TL;DR:
> New code, all bugs removed ;)

Incremental reconfiguration of bridge related settings had lots of
ordering issues.

This change tries to remedy that by:

- Introducing the concept of "snippets": Instead of having to run C
  code in the correct order (which is doomed to fail since teardowns
  typically need to run in reverse), collect related settings in a
  snippet.  Later on, we can then concatenate snippets into a larger
  file in the proper order.

- Refactoring the bridge setup to take advantage of snippets.  Now we
  can call out to functions that _both_ generate the VLAN config _and_
  sets some bridge global options, for example.  This gets us out of
  having to pass back settings to the main generation function.

- Ensuring that deleted objects are always removed - in the proper
  order - in the exit action of the previous generation.  This was
  previously not true for VLANs, fix #869.

- Generating `mcd`:s config orthogonally from the bridge setup.  Since
  we need to keep track of _all_ bridges, figure out when VLAN uppers
  exist etc., it becomes _very_ messy to generate the configuration
  from the diff of a single interface. There were lots of cases here
  where disabling the querier service on one bridge would disable the
  whole daemon, thereby disabling the service for other bridges that
  still had it enabled.
2024-12-17 22:59:31 +01:00
Tobias Waldekranz 68d8c19b53 confd: dagger: Fix archive naming
One `.tar.gz` extension ought to be enough for everyone.
2024-12-17 16:51:37 +01:00
Mattias Walström 5608e9457d Move operational data about software state from confd => yanger
Statd is now responsible for operational, move last big part
(infix-system-software) to yanger.
2024-12-13 20:32:07 +01:00
Tobias WaldekranzandGitHub 34f0c5a462 Merge pull request #870 from kernelkit/confd-ifaces-split
confd: Split up ietf-interfaces.c
2024-12-13 13:08:38 +01:00
Tobias Waldekranz 5675f89d37 confd: Split up ietf-interfaces.c
Fact: ietf-interface.c has become too unwieldy.

Therefore, split it, roughly based on the YANG structure, into
multiple files.

There is much more to do here, like cleaning up the naming (which is
all over the place), moving more system commands into dagger, etc. But
I wanted to keep this change to a strict code reshuffle.
2024-12-13 10:32:03 +01:00
Mattias Walström f06a42987a srx: helpers: Remove duplicate functions that has been moved to libite
Instead use the libite functions.
2024-12-12 09:11:54 +01:00
Tobias Waldekranz 429c4f1573 confd: dagger: Always increment generation number
Previously, the generation number was only increased for successful
evolutions. This led to a confusing state in /run/net where multiple
<N>-ABANDONED-<date> directories could exist, with the same value of
N.

Move to a scheme where the generation increments every time we evolve,
even if the evolution fails. If multiple consecutive evolutions fail,
we can now unabiguously determine the order in which they were
executed.
2024-12-10 09:46:20 +01:00
Tobias Waldekranz 28ae8fca42 confd: dagger: Get rid of some code duplication 2024-12-09 13:35:24 +01:00
Tobias Waldekranz c076f0a770 confd: dagger: Reduce memory usage
When reconfiguring the system many times (seen during regression
testing), the RAM usage of keeping all generations around starts to
add up.

A tmpfs file, no matter how small, will always consume at least one
full page (4k). So one generation of tiny setup scripts and log files
can end up locking a 1 MB (!) of memory.

Therefore: Once we're done with a generation, archive it in a
compressed tarball, which typically fits inside a single 4k
page. Limit the total number of archives to 10. This should give full
visibility into the history of a system in all normal situations,
while still allowing hammering systems with reconfig cycles in testing
scenarios.
2024-12-09 13:35:17 +01:00
Tobias WaldekranzandGitHub 42b7cf9f94 Merge pull request #833 from kernelkit/mdns-settings
Expand mDNS settings
2024-12-04 15:01:47 +01:00
Tobias WaldekranzandGitHub 7d9211a3ba Merge pull request #848 from kernelkit/linux-6.12
Linux 6.12
2024-12-04 14:37:39 +01:00
Joachim Wiberg 80e4018b20 confd: expose more avahi-daemon settings in mdns service context
Use container for interface allow/deny and for reflector settings.
Hopefully there will be more settings in the future, e.g., control
reflector interfaces independently.

Fix #678

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-04 12:57:04 +01:00
Tobias Waldekranz 27b7d831d0 styx-dcp-sc-28p: Move board specific overlay files to package
This way, we only install these files if the board is enabled.
2024-12-04 11:27:03 +01:00
Tobias Waldekranz 88f7c6070a package/board: Let the user select the set of boards to support
Introduce a new approach to dtb-building:

Old way: `rsync` an overlay containing our dt source to the kernel,
and then build via buildroot's `_INTREE_DTS_NAME`. This does not work
in recent kernels (at least since 6.12), which requires all dtb's to
be explicitly listed in a `Makefile`.

New way: Create a separate package for every board, and build the
device trees via the kernel's standard interface for building external
modules. This has two main advantages:

1. We can easily interpose a patched version of an upstream device
   tree. E.g., we can easily set the factory password.

2. It is much easier to get an overview of which boards are enabled,
   rather than scrolling back and forth in the `_INTREE_DTS_NAME` list.

Enable all fully supported boards in the defconfigs.
2024-12-04 11:27:03 +01:00
Mattias Walström 5cafd18b79 CLI: Add as 'show ntp' that normal persons understand 2024-12-03 16:29:28 +01:00
Mattias Walström fffe427497 Implement NTP client status 2024-12-03 16:29:28 +01:00
Ahmed Karic 3ab7a7d531 confd: Deviate address-family in OSPF
In the OSPF(v2) context, there is an "address-family" setting available.
However, since only IPv4 routes are supported in OSPF, currently
this setting is not relevant.

Fixes #813
2024-12-02 21:40:51 +01:00
Joachim Wiberg a23dc89592 confd: disabling a container should not delete volumes
When disabling a container in the configuration we should not remove it,
because then any volumes used by it may be lost.  Instead, we now simply
disable the service to prevent it from starting, or stopping it, if it
was running.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-11-28 16:36:56 +01:00
Joachim Wiberg bb1a656a05 confd: drop fragile asynchronous container create/delete using execd
This is a complete redesign of how the system creates/deletes containers
from the running-config.  Containers are now removed synchronously from
confd before any interfaces they may be using are removed, and created
in parallel, using a Finit task, well after confd has finished setting
up interfaces.

The logic previously provided by execd to retry container create on any
route/address changes, or periodically every 60 seconds, is now handled
by a new 'setup' command in the container wrapper script.

Additionally, container create is now split in wget/curl/podman pull of
the image and 'podman create'.  This to both consolidate image fetching
and improve user feedback since most of the retry logic (above) revolves
around the image download.

Fixes #835

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-11-28 16:36:56 +01:00
Joachim Wiberg 7483a6f454 confd: make sure to stop zeroconf agent on interface removal
When deleting interfaces we skip a lot of steps in netdag_gen_iface(),
this patch ensures we at least call netdag_gen_ipv4_autoconf() to drop
any running zeroconf agent in the same generation.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-11-28 15:11:26 +01:00
Joachim Wiberg ad9c432ff9 cli: jump to end of 'show log' commands automatically
Instead of having to scroll to the end (Shift G, or page down til end),
let's instead start at the end now that we have control over paging in
the CLI ourselves.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-11-28 15:10:48 +01:00
Tobias Waldekranz 0c88c464f1 statd: Support reporting PVID on bridges
Now that PVID can be configured on bridges, make sure that we reflect
that in the operational database.
2024-11-28 12:52:09 +01:00
Tobias Waldekranz 70e8895478 confd: Support PVID configuration on bridges 2024-11-28 12:52:09 +01:00