Commit Graph
2905 Commits
Author SHA1 Message Date
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
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ömandGitHub 02a8c3d78d Merge pull request #871 from kernelkit/move-operational-from-confd
Move operational data about software state from confd => yanger
2024-12-16 08:36:07 +01:00
Mattias Walström a4ef38fbee test: upgrade: Add some debug print to see whats happen over time 2024-12-13 20:32:07 +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
Joachim WibergandGitHub 6d6f4e6dd9 Merge pull request #868 from kernelkit/remove-duplicates 2024-12-12 14:58:39 +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
Mattias WalströmandGitHub 76ab0fe07a Merge pull request #866 from kernelkit/update-rousette
Add upstream patches for rousette
2024-12-11 13:29:56 +01:00
Mattias Walström 734958b89d test: restconf: Remove extra / when delete xpath 2024-12-11 12:23:02 +01:00
Mattias Walström 397568f1c8 infamy: restconf: Do not percent encode ':' 2024-12-11 10:13:52 +01:00
Mattias Walström a2c3919c0f test: restconf: Remove extra / when getting datastore 2024-12-11 10:13:52 +01:00
Mattias Walström e08576b008 RESTCONF: Update rousette to upstream
This fix #781
2024-12-11 10:13:50 +01:00
Joachim WibergandGitHub 83238aad7e Merge pull request #864 from kernelkit/iproute2-6.12
Bump iproute2 to 6.12
2024-12-10 15:15:21 +01:00
Tobias Waldekranz 1863297b5a package/iproute2: Remove patches for outdated versions 2024-12-10 14:33:23 +01:00
Tobias Waldekranz 9cd9440515 buildroot: Bump to latest 2024.02.x-kkit for iproute2 6.12.0 2024-12-10 14:19:52 +01:00
Tobias WaldekranzandGitHub ec64c1585c Merge pull request #862 from kernelkit/dagger-mem-usage
Dagger memory usage
2024-12-10 10:42: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 219c61081d Merge pull request #860 from kernelkit/linux-6.12.3
linux: Upgrade to 6.12.3
2024-12-06 09:06:57 +01:00
Tobias Waldekranz ad32129a13 linux: Upgrade to 6.12.3 2024-12-06 08:22:10 +01:00
Mattias WalströmandGitHub 1db039d6b4 Merge pull request #846 from kernelkit/fix-upgrade-test
Update upgrade test
2024-12-06 00:30:22 +01:00
Mattias Walström f023304823 Update upgrade test to not mess up boot order
Works on both virtual and physical target
2024-12-05 21:24:52 +01:00
Mattias Walström 85603eb53d Refactor file_server to run in a netns 2024-12-05 21:24:52 +01:00
Tobias WaldekranzandGitHub 1f231c2b2a Merge pull request #854 from kernelkit/pr-build-version
.github: Set usable version strings on PR builds
2024-12-05 14:54:18 +01:00
Tobias Waldekranz 967388395f test: netns: Avoid infinite hangs on exceptions in .call()s
If the callable threw an exception, then the process running inside
the netns would exit before sending back a value on the tx pipe, which
meant that `rx.recv()` would hang in the original process.

Make sure that we catch any exceptions, and send that instead of the
result over the pipe in those scenarios. Then in the original process,
re-raise the exception.
2024-12-05 13:10:42 +01:00
Tobias Waldekranz 94cffd2c48 doc: Mention kernel 6.12 update in the ChangeLog 2024-12-05 13:10:42 +01:00
Tobias Waldekranz 89c5b67a13 .github: Set more informative build id on PR builds 2024-12-05 13:10:42 +01:00
Tobias Waldekranz 3436cd68ac doc: branding: Update documentation around version variables 2024-12-05 11:02:47 +01:00
Tobias Waldekranz d16ad7eedc build: Define build id and version in one place
Before this change, setting `GIT_VERSION` in `make`'s environment was
intended to allow the user to specify a custom build id.  As it turns
out, `test/test.mk` had duplicated the logic from
`board/common/post-build.sh` to unconditionally override any value set
in it.  Because of the way `make` handles variables, where assignments
to variables inherited from the environment are exported back to
it[^1], this would mean that `test.mk` would always clobber any value
set by the user.  Furthermore, there is also this file called
`buildroot/package/git/git.mk`, which also (reasonably) has opinions
about what the proper value of `GIT_VERSION` should be.  In summary,
this was a bit of a mess.

Therefore: Make sure that there is one single place where we determine
the build id and version, and make sure that those variables are
scoped under the `INFIX_` prefix to avoid clashing with any other
component.

[^1]: https://www.gnu.org/software/make/manual/html_node/Environment.html
2024-12-05 10:29:21 +01:00
Tobias Waldekranz e635e3e720 test: Remove dead code 2024-12-04 23:00:19 +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 1895e161d2 doc: update ChangeLog with mDNS and sysctl changes
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-04 14:25:43 +01:00
Joachim Wiberg 7804787201 doc: update discovery document
Overhaul text and grammar.  Simplify, correct, and add information about
the new mDNS settings.  Replace 'unit' with 'device', which is the more
common term for hardware.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-04 14:25:04 +01:00
Joachim Wiberg 3576450982 test: verify mDNS allow/deny interfaces
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-04 12:57:04 +01:00
Joachim Wiberg bb987cfe9e test: minor, spelling
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-04 12:57:04 +01:00
Joachim Wiberg 997310f9a2 test: fix xpath_delete() over NETCONF
Fixes the following issue when deleting /infix-services:mdns/interfaces,
which works fine over RESTCONF:

Traceback (most recent call last):
  File "/home/jocke/src/infix/test/./case/infix_services/mdns_allow_deny/test.py", line 142, in <module>
    dut.delete_xpath("/infix-services:mdns/interfaces")
  File "/home/jocke/src/infix/test/infamy/netconf.py", line 418, in delete_xpath
    oldd = mod.parse_data_dict(old, no_state=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.infix/venv/lib/python3.11/site-packages/libyang/schema.py", line 215, in parse_data_dict
    return dict_to_dnode(
           ^^^^^^^^^^^^^^
  File "/root/.infix/venv/lib/python3.11/site-packages/libyang/data.py", line 1277, in dict_to_dnode
    result.root().validate(
  File "/root/.infix/venv/lib/python3.11/site-packages/libyang/data.py", line 430, in validate
    self.validate_all(no_state, validate_present)
  File "/root/.infix/venv/lib/python3.11/site-packages/libyang/data.py", line 449, in validate_all
    raise self.context.error("validation failed")
libyang.util.LibyangError: validation failed:
    Invalid leafref value "e3" - no target instance "/if:interfaces/if:interface/if:name" with the same value.

The patch skips validation of the diff in favor of checking the result
of libyang.xpath_del().

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-04 12:57:04 +01:00
Joachim Wiberg bf23f53770 test: minor, pep8 fixes
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-04 12:57:04 +01:00
Joachim Wiberg e8f9032339 package/skeleton-init-finit: avahi needs to be restarted
The Avahi daemon needs to be restarted when changing its configuration
file in /etc/avahi/avahi-daemon.conf, not sufficient to SIGHUP.

Also, minor reformatting for new style.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-04 12:57:04 +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 f0ae1aa835 package/board: Rsync overlay directory, if available 2024-12-04 11:27:03 +01:00