Commit Graph
645 Commits
Author SHA1 Message Date
Joachim WibergandTobias Waldekranz 19df588fe4 package/querierd: bump to version 0.10
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-02 18:19:50 +02:00
Joachim Wiberg 646364a6e0 doc: update README and add doc/cli.md
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-02 15:38:40 +02:00
Joachim Wiberg e6ef11a023 configs: fix string syntax, i.e., s/""/"/g
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-02 14:32:49 +02:00
Joachim WibergandTobias Waldekranz c81bc445ca confd: simplify, yang model ensures iftype (+ ifname) is always set
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-01 15:16:39 +02:00
Tobias Waldekranz d82e586687 confd: Infer VLAN parameters for the common <BASE>.<VID> pattern
When adding a new interface to the candidate, if the name matches
<BASE>.<VID>, infer that:

- The parent-interface is <BASE>
- The tag-type is c-vlan
- The vlan-id is <VID>

With this in place, from klish, the following sequence:

configure
set interfaces interface e0.10
leave

Will create a stacked VLAN interface, using VID 10, on top of e0.
2023-06-01 15:16:39 +02:00
Tobias Waldekranz a09a1b922f confd: Generalize VLAN support to arbitrary virtual interfaces
- Make sure that when we need to delete an interface, this is done in
  the exit phase of the generation we're exiting, i.e. it is treated
  as a regular delete.

- When we need to delete and rebuild an interface, make sure that all
  settings and addresses are applied again.  This is done by swapping
  out the diff for the configured data, which we just annotate with
  enough metadata to make it look like a diff.

- Create a dagger dependency from the VLAN to it's parent interface.
  This ensures that the parent interface is properly configured before
  the VLAN is created, which is important when virtual interfaces are
  stacked on top of each other. E.g. a VLAN on top of another VLAN.

- Recreate the VLAN when the parent is changed.

- Fix VLAN tag-type parsing
2023-06-01 15:16:39 +02:00
Tobias Waldekranz 361c0d7827 confd: Move interface deletion logic to its own function
Let's try to keep netdag_gen_iface from becoming do_everything().
2023-06-01 15:16:39 +02:00
Tobias Waldekranz 82aa842cd2 confd: srx: Add helper to query the number of items matching a path
This is useful in candidate inference scenarios where you only want
to infer settings that don't have explicit values set.
2023-06-01 15:16:39 +02:00
Tobias Waldekranz 258ba272c7 confd: lyx: Allow diffs of NULL nodes
This makes the pattern

    if (lydx_get_diff(lydx_get_child(diffnode, "attribute"), &nd)) {
        /* Handle changes to "attribute" */
    }

safe to use in the common case where "attribute" has not been
modified, and is therefore not present in `diffnode`.
2023-06-01 15:16:39 +02:00
Tobias Waldekranz 092db20a80 confd: Avoid duplicate nodes in fetched config data
It is not clear why, but the former XPATH will return a tree with many
duplicate nodes in it, while the latter will not.
2023-06-01 15:16:39 +02:00
Tobias Waldekranz a9c5fccd47 dagger: Keep abandoned generations around for debugging
When evolving to a new generation fails, users will typically abandon
it (so that a new attempt can be made).  However, the generated
scripts and the logged output is very valuable from a debugging
perspective.

Therefore, keep the data around by just renaming the generation
directory.

Later, we can include these directories in the garbage collecting
process, if we want to.
2023-06-01 15:16:39 +02:00
Tobias Waldekranz af298a0a05 qemu: Create a gdbserver to UNIX socket bridge
Infix ships with a gdbserver configuration that listens on
/dev/hvc1. Connect this to gdbserver.sock on the host, so that we can
attach to or run Infix processes using GDB.
2023-06-01 15:16:39 +02:00
Joachim WibergandTobias Waldekranz ba382e1af5 src/confd: fix copy-paste check of alloca() return value
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-01 15:16:39 +02:00
Joachim WibergandTobias Waldekranz 37397543fa src/confd: drop developer debug messages
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-01 15:16:39 +02:00
Joachim WibergandTobias Waldekranz ee73ed3410 src/confd: add support for VLAN sub-interfaces
This adds support for VLAN sub-interfaces on physical interfaces, e.g.,
eth0.10 on eth0.  There are no restrictions or sanity checks other than
what is defined in the YANG models.

Neither the ietf-if-extensions or the ietf-if-vlan-encapsulation model
have been ratified as standards and are thus experimental.  As such, the
ietf-if-vlan-encapsulation model originally references a non-existing
revision of ieee802-dot1q-types, which has been modified to use the
latest release from IEEE.

How to set up, notice we do not use the l2vlan type:

  interface eth0.10 {
    type ethSubInterface;
    encapsulation {
      dot1q-vlan {
        outer-tag {
          tag-type s-vlan;
          vlan-id 10;
        }
      }
    }
    parent-interface eth0;
    ipv6 {
      autoconf {
        create-global-addresses true;
      }
    }
  }

Unfortunately, we have to create the VLAN interface on a separate line
since adding VLAN interfaces does not allow setting addrgenmode at the
same time, hence the introduction of the new line `link set %s down`.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-01 15:16:39 +02:00
Joachim WibergandTobias Waldekranz c2fc658734 board/common: relocate and drop unused files from NETCONF build
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-01 08:23:36 +02:00
Joachim WibergandTobias Waldekranz d449279661 configs: trim default build, drop unused packages
These packages are not (yet) used in the NETCONF build, only make sense
in the Classic Infix builds.  SMCRoute will be needed later on, but not
right now, so also remove.

The dhcpcd package is only used by ifupdown-ng in Classic, in NETCONF we
use avahi-autoipd and udhcpc.

iproute2 is selected by the net tool, so collapsed by menuconfig.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-01 08:23:36 +02:00
Joachim WibergandGitHub 4ad676bb4e .github: also run when PR is merged
https://stackoverflow.com/a/61565445/1708249
2023-05-30 09:00:59 +02:00
Joachim WibergandTobias Waldekranz 8ffe839a99 src/confd: add support for ietf-system user authorized-key(s)
- Keys stored in system specific directory /var/run/sshd/$USER.keys
 - Keys are regenerated on each corresponding reconfiguration event
 - Deletion of key(s) or user remove all keys

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-28 23:31:18 +02:00
Joachim WibergandTobias Waldekranz e7bc7d76e8 src/confd: always run initctl in batch mode
Also, quiet output from cond get.  We're only using the exit code.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-28 23:31:18 +02:00
Joachim WibergandTobias Waldekranz 838a83e5b3 src/confd: fix review issue 'cannot disable dhcp client'
- Flip 'enabled' logic, if attribute is missing => 'enabled: false'
 - Release lease on udhcpc exit
 - Call initctl with -f (force) when deleting dhcp-$iface.conf otherwise
   in interactive mode, waiting for (y/N)? question
 - Also, always use -batch and -quiet modes with initctl

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-26 15:10:26 +02:00
Joachim WibergandTobias Waldekranz 6c8d5472d5 src/confd: finalize initial DHCPv4 with optional client-id support
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-26 15:10:26 +02:00
Joachim WibergandTobias Waldekranz f2cb63df72 src/confd: initial support for DHCPv4 yang model
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-26 15:10:26 +02:00
Joachim WibergandTobias Waldekranz 0e48a847b9 buildroot: bump libyang, sysrepo, and netopeer2 to latest versions
Changes to netopeer2-server required refactoring our foreground patch.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-26 15:10:26 +02:00
Joachim WibergandTobias Waldekranz b319a2df9d src/confd: refactor commit done hook into a pre and post hook
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-26 15:10:26 +02:00
Joachim WibergandTobias Waldekranz ebc87eb0a0 src/confd: refactor handling of callbacks for SR_DS_CANDIDATE
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-26 15:10:26 +02:00
Tobias WaldekranzandJoachim Wiberg 3424985b2b netconf: Allow IPv6 connections by default in factory-config
By default, netopeer2 will accept connections from
INADDR_ANY (0.0.0.0), which limits it to IPv4. Open it up to include
IPv6 as well.
2023-05-25 16:34:50 +02:00
Tobias WaldekranzandJoachim Wiberg cd52a42388 netconf: Inject NACM config for admin user in factory-config
On May 10, 2023, @troglobit wrote:
> Initial proposal for factory-config, based on example from RFC8341.

This gives the admin user the ability to configure the device over
NETCONF.
2023-05-25 16:34:50 +02:00
Tobias Waldekranz 3dbc59120f confd: srx: Duplicate entire tree in srx_get_diff
Use the _siblings variant to ensure that the full diff tree is
duplicated. Otherwise, the caller would only see the first branch of
changes.
2023-05-25 11:45:10 +02:00
Richard AlpeandJoachim Wiberg 6adb508f37 confd: add new factory user admin:admin
This patch adds a new user "admin" with the password "admin". The
password is hashed with sha512 ($6) as a hint to new users attempting
to change the password (avoid the weakest algorithms).

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-05-25 08:24:31 +02:00
Richard AlpeandJoachim Wiberg f56ca0d0ca confd: fix json merging when generating factory config
jq -s 'add' didn't merge data, i.e.:

hostname.json:
"ietf-system:system": {
  "hostname": { }
}

auth.json:
"ietf-system:system": {
  "authentication": { }
}

Didn't become:
"ietf-system:system": {
  "authentication": { }
  "hostname": { }
}

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-05-25 08:24:31 +02:00
Joachim Wiberg d4333e1a8d src/confd: fix ietf-interfaces copy-paste bug in netdat_init()
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-23 11:20:09 +02:00
Joachim WibergandTobias Waldekranz 96fb836635 Add disclaimer about Frr and podman in Hybrid Mode section
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-23 08:52:16 +02:00
Joachim WibergandTobias Waldekranz 4c15897c6a Fix #29: drop FRR from default builds
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-23 08:52:16 +02:00
Joachim WibergandTobias Waldekranz 9844f0e148 configs: enable CA certificates package for all defconfigs
Provided a little time, all an embedded system really needs is trust.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-23 08:52:16 +02:00
Joachim WibergandTobias Waldekranz 0a99f1a5f6 board/common: drop factory/reset user
Initial analysis of system default users gives that there is no real
need for a default 'factory' user to trigger a factory reset.  On an
actual physical device we will have a reset button or a menu option in
the bootloader to trigger factory reset, and in both physical and
virtual (GNS3) devices a logged in admin user can call the factory
command.

A virtual device that cannot be logged in to will have to be removed and
have its persistent backing store deleted, but that is the only real
downside to removing this user.  The idea is to set a kernel command
line flag from the bootloader, and that could also be done from, e.g.,
GNS3.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-23 08:51:37 +02:00
Joachim WibergandTobias Waldekranz 08ad4e9bc6 Fix #24: disable bridge firewalling by default in Infix
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-23 08:48:47 +02:00
Joachim WibergandTobias Waldekranz d8b24e16de doc: new document, Containers in Infix (with podman & CNI)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 8addf469bf package/podman: add tool to create CNI profiles
Currently only supports creating host-device profiles, e.g. from veth
pairs or physical interfaces.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 679d64d496 Update Hybrid Mode with podman example to start Docker containers
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 56677fb1d6 package/podman: helper script to create supervised Finit service
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz b3761d84dc board: update kernel defconfigs for running containers (podman)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 852f1ed4c4 board/common: bind mount /var and /var/lib
The /var, and particularly /var/lib, directories are used for persistent
storage for various system daemons.  While adding support for containers
it became clear we had to change how we make these directories writable.
Both LXC and Podman use OverlayFS for the writable layer, and you cannot
set up an overlay on top of another overlay.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz bd696cba9a qemu: add support for optional /var disk (256M)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 468b49e916 buildroot: bump to v2023.02.1 w/ kkit patches
- package/libyang: Bump version to 2.1.55
 - package/netopeer2: Bump version to 2.1.59
 - package/sysrepo: Bump version to 2.2.60
 - package/cni-plugins: partial backport to enable missing plugins

The libite v2.5.3 backport has been dropped from the kkit patches
since it's been merged in upstream Buildroot LTS branch.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 65d170985c package/podman: new package
Podman (POD manager) is an open source tool for developing, managing,
and running containers on your Linux systems.

Based on work by Christian Stewart and Nathaniel Husted.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 1624c88708 package/conmon: new package
Conmon is an OCI container runtime monitor.  It sits between container
runtimes, e.g., crun and runc, and userland managers, e.g., podman.

Based on work by Christian Stewart and Nathaniel Husted.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Richard AlpeandJoachim Wiberg 08a3f51e8f test: add functional example of how to test CLI auth
This test is based on the 9pm framework, which supports execution
of test-cases written in any language. This test is written in
tcl/expect with help from the 9pm expect library. It's what I used to
test during development of the Infix basic authentication support.

The aim of this patch is to serve as an example of how the
interactiveness of the 9pm-expect library can be used.

9pm framework code is here:
https://github.com/rical/9pm

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-05-16 13:34:28 +02:00
Joachim Wiberg 8aed30552f package/finit: bump for Finit v4.4 (GA)
Full release notes: https://github.com/troglobit/finit/releases/tag/4.4

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-15 19:17:23 +02:00
Joachim Wiberg 8ab2f5f9da src/confd: system users, like admin, have no shell by default
Rudimentary support for setting login shell for new users.  Currently
hard-coded from what's selected in the Buildroot config, if Bash is
available or not.

Follow-up to f5866ee

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-15 18:45:37 +02:00