25 Commits
Author SHA1 Message Date
Joachim Wiberg f78f161dbe modem: migrate from infix-modem to ietf-hardware/ietf-interfaces
The initial modem import used a standalone infix-modem YANG module with
an integer-indexed list under /infix-modem:modems carrying a bearer
config mixed in with hardware config.  Infix has adopted the ietf-hardware
model to allow for a clearer separation of concerns, this commit aims to
improve on that situation by refactoring the modem model to use the same
architectural pattern already used for WiFi radios, GPS receivers, and
USB ports:

Hardware:
    /ietf-hardware:hardware/component[class=infix-hardware:modem]
    /ietf-hardware:hardware/component[class=infix-hardware:sim]
Interface:
    /ietf-interfaces:interfaces/interface[type=infix-if-type:modem]

Configuration split:
  modem component — admin-state (enable/disable), radio access mode,
                    frequency bands, location services, probe-timeout
  sim component   — PIN, PUK, carrier profile
  wwan interface  — APN, IP type, roaming, route-preference, auth

This also enables the modem to appear in 'show hardware' alongside
other hardware components, and to be managed over NETCONF/RESTCONF
using the same ietf-hardware RPCs used for USB and WiFi.

YANG changes:
  - infix-modem.yang removed (1089 lines, standalone module)
  - infix-hardware.yang: new modem and sim containers, modem-state and
    sim-state operational state, typedefs for bands/modes/location,
    notification status-update; actions restart/reset/send-sms are
    augmented directly on the component list entry (not inside container
    modem) to work around sysrepo NP-container parent validation — when
    checking a nested action's parent, sysrepo restricts its operational
    data fetch to the container path, excluding the sibling 'class' leaf
    needed to evaluate the container's 'when' condition, so the container
    is never instantiated and the parent check fails
  - infix-if-modem.yang: new submodule (same pattern as wifi/wireguard)
    adds the wwan bearer container to ietf-interfaces
  - infix-if-type.yang: new modem identity for wwan interface type
  - confd version bumped to 1.9

confd:
  - if-modem.c: new file replaces the stub modem_gen() in modem.c;
    generates dagger init scripts with probe-timeout wait loop and
    unconditional dummy wwan creation so downstream IP config succeeds
    when a USB modem is slow to enumerate at boot
  - hardware.c: start/stop/enable/disable modemd (and modem-manager)
    in response to admin-state changes on the modem hardware component;
    use finit_enable/disable consistently
  - hardware_cand_infer_class(): auto-set class for modemN/simN names
  - modem.c: stripped to RPC/notification forwarding only; the old
    genconf() / enable() / disable() logic is gone — hardware.c owns
    the lifecycle now
  - interfaces.c: remove wwan from wait-interface timeout (the modem
    interface appearance is managed by modemd, not confd's init scripts)
  - migrate/1.9: script fully migrates /infix-modem:modems to the new
    split model; each modem[N] becomes a modemN hardware component and
    simN sim component; each bearer becomes a wwanN interface (bearers
    numbered globally across modems); APN, IP type, roaming, preferred-
    mode, bands, location, PIN/PUK/carrier are all carried over; plain-
    text bearer credentials are moved to a named keystore symmetric-key
    (base64-encoded) referenced from bearer/authentication/password;
    apn-type, firewall-enabled, dns-enabled and default-route are
    dropped (no equivalent in the new model)

modemd:
  - load_config() replaces the infix-modem sysrepocfg call; reads from
    ietf-hardware (modem/sim config), ietf-interfaces (bearer config),
    and ietf-keystore (credentials) — three standard modules instead of
    one proprietary one; modems absent from sysrepo config but present
    in system.json are still started (physical detection wins)
  - Default route written to /etc/net.d/<iface>.conf (picked up by
    netd/staticd/zebra) instead of a direct 'ip route add'; routes are
    now visible to FRR for redistribution and metric-based failover
  - Addresses tagged with proto wwan (rt_addrprotos entry 7) for
    precise flush on disconnect without touching other address sources
  - _derive_gateway() handles point-to-point bearers where modem
    reports gateway as "--"; derives peer from link-scope subnet route
  - SimThread exits cleanly on platforms without /dev/simctrl
  - sim-setup, modem-info, modem-udev, modem-rpc, modem-sms all ported
    to the ietf-hardware/ietf-interfaces namespace

statd:
  - infix_modem.py now emits modem-state and sim-state into ietf-hardware
    component entries (modem0, sim0, ...) instead of a separate tree;
    sim-state reports physical slot, lock state, and SIM operator name
  - ietf_hardware.py: hardware component names deduplicated by rename
    (cpu → cpu, cpu1, ...) to prevent LY_EVALID when hwmon and thermal
    sysfs both normalise to the same sensor name
  - show hardware: Cellular Modems and SIM Cards tables added; sensor
    table width now adapts to the widest section in the output
  - 00-probe: USB modem detection writes to system.json["modem"], same
    source as wifi-radios, feeding gen-hardware which emits the
    ietf-hardware component entries at factory config generation time

CLI:
  - 'show modem [ref]': without ref shows Cellular Modems and SIM Cards
    tables (same data subset as 'show hardware'); with ref shows a full
    per-modem dump (hardware info, status, cellular, SIM, bearers, GPS)
  - 'modem restart <ref>': disconnect and reconnect all bearers without
    a full hardware reset
  - 'modem reset <ref>': factory-reset the modem firmware
  - 'modem sms <ref> <number> <message>': send an SMS via the modem
    (uses the signalling plane; no active data bearer required)
  - MODEMS PTYPE provides tab-completion reading modem names from
    /run/system.json

doc:
  - Add initial User Guide for modems
  - Update ChangeLog with modem news
  - Use absolute URLs in ChangeLog.  Relative links only work for in-tree
    references, not in release notes

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-06-07 20:50:58 +02:00
Joachim Wiberg 762915b703 doc: restyle mkdocs site after Chirpy blog theme
Material's defaults (Roboto, bluish slate dark mode) looked dull next
to the Chirpy-based kernelkit.org blog. Match its typography and colors
via extra.css, no engine change:

- Lato headings + Source Sans 3 body + system monospace for code
- Dark mode: neutral near-black background, soft-gray text, darker code
  blocks, Chirpy blue links (replacing Material's high-contrast slate)
- Light mode: warmer body text, blue links, tinted sidebars
- Keep the orange brand on the masthead; links use Chirpy blue

Set theme.font: false so Material no longer also fetches Roboto.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-05-29 10:07:56 +02:00
Joachim Wiberg c3d17586fd doc: add vlan.md, update ChangeLog for the branch
Fix #1506: restore the VLAN interface documentation that was lost when
networking.md was split into per-topic pages.  Content adapted from the
v25.11.0 networking.md VLAN section, plus a new "Stacked (Q-in-Q)"
section showing `eth0.10.20`-style nesting and the layered `show
interface` rendering of the parent chain.

Update the interface-type table in networking.md to point at the new
vlan.md instead of the dangling ethernet.md#vlan-interfaces anchor.

ChangeLog: document the user-facing changes on this branch (YANG model
upgrade, layered show interface output, auto-negotation typo fix) and
the new VLAN documentation.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-05-27 20:53:30 +02:00
Joachim Wiberg 45b06dd670 Initial support for IEEE 1588/802.1AS PTP/gPTP
Remaining work:
- phc2sys YANG model (infix-phc2sys.yang, instance-index + servo params)
- ts2phc YANG model (GPS/PPS → PHC → ptp4l GM path)
- timemaster coordination (Phase 3, after phc2sys YANG is stable)
- show ptp network (YANG action or background-polled topology container)
- CMLDS (requires upstream linuxptp + 802.1ASdm foundation)
- Full 12-bit sdoId, fault log, performance monitoring

Backported patches from linuxptp master:
- port: fix unicast negotiation recovery after FAULT_DETECTED
- udp: fix port-specific ptp/p2p_dst_ipv4 configuration
- pmc: avoid race conditions in agent update
- phc2sys: wait until pmc agent is subscribed (startup race)
- fix MAC driver incorrect SIOCGHWTSTAMP adjustment flags
- pmc_agent: longer update interval when not subscribed
- phc2sys: don't disable pmc agent with -s/-d/-w options
- port_signaling: respect ptp_minor_version in message header
- port: refresh link status on faults
- uds: copy server socket ownership in pmc clients (non-root pmc)
- uds: don't call chmod() on client socket
- port: allow mixing wildcard and exact clock identities
- Add pidfile support to ptp4l, phc2sys, and timemaster

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-04-23 14:19:09 +02:00
Joachim Wiberg 93bff6260e Add project links to User Guide and update SUPPORT.md
Fixes #1456

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-30 14:43:09 +02:00
Joachim Wiberg b341d37267 Update URL from kernelkit.org to www.kernelkit.org
DNS does not allow CNAME records at an apex domain (e.g. kernelkit.org),
so GitHub Pages cannot reliably redirect kernelkit.github.io to it.  A
www subdomain can carry a CNAME pointing directly to kernelkit.github.io,
giving GitHub full control over the mapping and making the redirect work.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-01 06:59:48 +01:00
Joachim Wiberg 72860aa1b5 doc: add comprehensive keystore documentation
Fixes #914

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-02-02 17:49:41 +01:00
Joachim Wiberg 1fb97055ab doc: split networking.md into multiple files
The networking guide has grown out of control for quite some time, it is
time to split it up into multiple files.  This will hopefully also make
it a bit more accessible to users.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-01-25 11:16:34 +01:00
Joachim Wiberg 0154d554e9 doc: fix mkdocs build warnings
- Add missing SVG For dhcpv6 example
 - Fix link to static routes in WireGuard doc
 - Add WireGuard to a new VPN sub-section in nav bar

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-01-25 11:16:33 +01:00
Joachim Wiberg 46f95160ec doc: update restconf scripting with details on patch
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-01-23 09:50:05 +01:00
Joachim Wiberg b5a8fe10b5 doc: update user guide with more on nacm and user privileges
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-01-23 09:50:04 +01:00
Mattias Walström 7e5da21cf6 Add support for WireGuard
Almost full support for WireGuard

admin@server:/> show interface wg0
name                : wg0
type                : wireguard
index               : 10
mtu                 : 1420
operational status  : up
ipv4 addresses      : 10.0.0.1/24 (static)
ipv6 addresses      : fd00::1/64 (static)
peers               : 2

  Peer 1:
    public key        : ROaZyvJc5DzA2XUAAeTj2YlwDsy2w0lr3t+rWj2imAk=
    status            : UP
    endpoint          : 192.168.10.2:51821
    latest handshake  : 2025-12-09T22:51:38+00:00
    transfer tx       : 1412 bytes
    transfer rx       : 1324 bytes

  Peer 2:
    public key        : Om9CPLYdK3l93GauKrq5WXo/gbcD+1CeqFpobRLLkB4=
    status            : UP
    endpoint          : 2001:db8:3c4d:20::2:51822
    latest handshake  : 2025-12-09T22:51:38+00:00
    transfer tx       : 1812 bytes
    transfer rx       : 428 bytes
in-octets           : 1752
out-octets          : 3224

admin@server:/>
2026-01-09 11:11:32 +01:00
Joachim Wiberg fca606cc7c doc: add NTP server documentation
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-01-04 12:28:29 +01:00
Joachim Wiberg e596ffc7c4 doc: relocate support data collection to separate section
Does not really fit under "System Configuration".

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-12-05 17:46:05 +01:00
Joachim Wiberg 7c87034d5e doc: add firewall documentation
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-10 15:14:12 +02:00
Joachim Wiberg e12920bd67 doc: update scripting with restconf and add similar for netconf
Fixes #1156

[skip ci]

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-03 08:59:16 +02:00
Joachim Wiberg ed5baf5839 doc: theme & svg logo tweak, grey to slightly darker lines and font
This commits tweaks the material orange theme to use the exact color hue
of Jackys footies.  To match this and give a slightly better contrast we
also change Jacksy border and logo text color to a slightly darker tone.

The original logo.svg is retained for reference, the new logo is logo2,
which all the .png variants have now been updated to.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-07-30 14:58:15 +02:00
Joachim Wiberg 5b100fb99e doc: collapse about + introduction into a single index.md
In the spirit of my uni English teacher; "simplify, Simplify, SIMPLIFY!"
This commit collapses the About and Introduction into a single document,
doc/index.md.

Also, relocate the System Boot section to doc/boot.md, which we alrady
have and covers the initial bootloader part of it.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-07-30 14:58:14 +02:00
Joachim Wiberg dc8fc40002 doc: much improved disposition of navigation
Lot of work still remains, but this new disposition should serve as a
more representative template.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-07-30 14:58:13 +02:00
Joachim Wiberg 83f2c27e6d doc: initial support for pdf export at doc. generation
- custom cover page for pdf
 - Center and resize logo
 - Place slogan just below logo
 - Ensure all text on cover page is in matching grey

Please note, the mkdocs-to-pdf plugin works, but it has a bug in the
enumeration of sections.  We may need to fork it to make it work the
way users expect.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-07-30 14:58:10 +02:00
Joachim Wiberg fcbd75a0ef doc: split scripting.md into multiple files
Way too long.  By splitting it in multiple files we can also user
simpler (shorter) headings, which makes navigation easier.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-07-30 14:58:08 +02:00
Joachim Wiberg fdf1aaebcc doc: add versioning using "mike"
The Python tool 'mike'[1] helps manage multiple versions of MkDocs-powered
documentation.  Only required when building the kernelkit.org site docs!

For each new tag, that steps year or month, a new version of is created of
the documentation, in a separate sub-directory on the gh-pages branch.

Strategy - Version Grouping with Early Publishing:

- Extract YEAR.MONTH from tag
  E.g., v25.06.0-beta1, v25.06.0-rc1, v25.06.0, v25.06.1 → become version 25.06
- From first pre-release onwards:
  - v25.06.0-beta1 → creates docs version 25.06
  - v25.06.0-rc1 → updates docs version 25.06
  - v25.06.0 (GA) → updates docs version 25.06
  - v25.06.1 (patch) → updates docs version 25.06
- New major/minor series:
  - v25.07.0-beta1 → creates new docs version 25.07

Benefits:
 - Users get docs as soon as beta/rc is available
 - Patches update existing docs (logical since patches rarely change docs significantly)
 - Clean version grouping by YEAR.MONTH
 - Mike handles create vs update automatically

[1]: https://github.com/jimporter/mike

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-07-30 14:58:06 +02:00
Joachim Wiberg c574f23210 doc: reformat eth-counters.md to a proper markdown table
This will be easier to typset also in the PDF generated version.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-07-30 14:58:04 +02:00
Joachim Wiberg c692c93f94 doc: split system.md -> system.md + upgrade.md
This makes it a lot easier to find relevant information on how to
perform a system upgrade.  Further consolidation may come later.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-07-30 14:58:02 +02:00
Joachim Wiberg 9d912446a7 doc: initial support for MkDocs Material framework
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-07-30 14:57:57 +02:00