@@ -3,6 +3,7 @@ title: "Inside Infix"
33description : " Built on YANG, Built to Last"
44author : troglobit
55date : 2026-03-11 12:25:00 +0100
6+ last_modified_at : 2026-04-09 12:25:00 +0100
67categories : [architecture]
78tags : [design, yang, netconf, buildroot, sysrepo]
89image :
@@ -23,60 +24,65 @@ attempt to answer them. Let's dive in!
2324
2425Let's start by zooming out and identify the major components:
2526
26- - * sysrepo: * the engine which all other major components connect to,
27+ - [ sysrepo] [ 7 ] : the engine which all other major components connect to,
2728 funnels all actions to callbacks in * confd*
28- - * netopeer2: * provides the NETCONF interface (XML over SSH) for
29+ - [ netopeer2] [ 8 ] : provides the [ NETCONF] [ 16 ] interface (XML over SSH) for
2930 external management
30- - * rousette: * provides the RESTCONF interface (JSON over HTTPS) for
31+ - [ rousette] [ 9 ] : provides the [ RESTCONF] [ 17 ] interface (JSON over HTTPS) for
3132 external management, this is also where the upcoming WebUI will
3233 connect to, meaning the same WebUI can be used to manage all Infix
3334 devices on the LAN
34- - * klish: * provides the built-in Command Line Interface (CLI)
35- - * confd:* gets callbacks for all changes from * sysrepo* which is
35+ - [ klish] [ 10 ] : provides the built-in Command Line Interface (CLI)
36+ - confd: gets callbacks for all changes from * sysrepo* which is
3637 translated into C-library API calls, configuration file changes in
37- ` /etc ` , and network interface setup calls to ` iproute2 `
38+ ` /etc ` , and network interface setup calls to [ iproute2] [ 11 ] — note:
39+ this is * not* the well-known Tail-F/Cisco product of the same name,
40+ but an Infix-native daemon maintained in the project tree
3841
3942![ ] ( /assets/img/architecture-overview.svg )
4043_ ** Figure 1:** Infix Architecture Overview_
4144
4245Infix runs on a [ broad range of hardware] [ 3 ] — from Raspberry Pi home lab
4346boards and compact dual-port routers like the NanoPi R2S, through
44- general-purpose ARM and RISC-V end devices such as the NXP i.MX8MP EVK
45- and StarFive VisionFive2, all the way up to enterprise switch platforms
46- like the Microchip SparX-5i. It also runs on x86_64, making it easy to
47- spin up instances in [ Qemu] [ 6 ] or [ GNS3] [ 5 ] for development and testing without
48- any dedicated hardware. The same OS, the same tooling, the same
49- management interfaces throughout.
50-
51- From a bottom-up perspective, one of the critical design choices for
52- switch platforms is to rely on Linux * switchdev* for switch silicon
53- abstraction. It is what makes it possible to configure actual hardware
54- switch cores using the common Linux bridge. Underneath switchdev sits
55- DSA (Distributed Switch Architecture), a kernel sub-layer that models
56- the individual ports and internal links of a switch chip and translates
57- bridge operations into hardware-specific commands. All operations on the
58- bridge are thus "offloaded" to the DSA driver, e.g., adding an interface
59- to a bridge enables hardware switching on that port, and adding a VLAN
60- enables VLAN filtering in the switch silicon. On platforms without a
61- switch core, the same bridge model applies in software — the management
62- interface is identical regardless of whether forwarding happens in
63- silicon or in the kernel.
64-
65- Unlike many other Linux-based network operating systems, Infix is not a
66- flavor of OpenWRT. Instead it is built on top of the developer-friendly
67- [ Buildroot] [ 0 ] , tracking its long-term support (LTS) releases.
68- Buildroot's LTS cadence is one release every two years (in February),
69- each supported for three years, with quarterly stable releases in
70- between. This provides a solid base and forms the majority of all Open
71- Source packages. A few of those are locally upgraded by the Infix team,
72- e.g., sysrepo and netopeer2, and another few are tailor made for Infix,
73- e.g., ` confd ` .
47+ general-purpose ARM and RISC-V end devices such as the NXP i.MX8MP EVK and
48+ StarFive VisionFive2, all the way up to enterprise switch platforms like the
49+ Microchip SparX-5i. It also runs on x86_64, making it easy to spin up
50+ instances in [ Qemu] [ 6 ] or [ GNS3] [ 5 ] for development and testing without any
51+ dedicated hardware. The same OS, the same tooling, the same management
52+ interfaces throughout.
53+
54+ From a bottom-up perspective, one of the critical design choices for switch
55+ platforms is to rely on Linux [ * switchdev* ] [ 15 ] for switch silicon
56+ abstraction. It is what makes it possible to configure actual hardware switch
57+ cores using the common Linux bridge. Underneath switchdev sits [ DSA] [ 20 ]
58+ (Distributed Switch Architecture), a kernel sub-layer that models the
59+ individual ports and internal links of a switch chip and translates bridge
60+ operations into hardware-specific commands. All operations on the bridge are
61+ thus "offloaded" to the DSA driver, e.g., adding an interface to a bridge
62+ enables hardware switching on that port, and adding a VLAN enables VLAN
63+ filtering in the switch silicon. On platforms without a switch core, the same
64+ bridge model applies in software — the management interface is identical
65+ regardless of whether forwarding happens in silicon or in the kernel.
66+
67+ Unlike many other embedded Linux operating systems, Infix is not a flavor of
68+ [ OpenWRT] [ 23 ] . Instead it is built on top of the developer-friendly [ Buildroot] [ 0 ] ,
69+ tracking its long-term support (LTS) releases. Their LTS cadence is one
70+ release every two years (in February), each supported for three years, with
71+ quarterly stable releases in between — so ` 2025.02 ` → ` 2027.02 ` → ` 2029.02 `
72+ are LTS, while ` 2026.02 ` is a regular quarterly stable release. The
73+ three-year support window means consecutive LTS releases overlap by one year,
74+ ensuring a smooth transition. This provides a solid base and forms
75+ the majority of all Open Source packages. A few of those are locally upgraded
76+ by the Infix team — for all such load-bearing upstream projects a fork is
77+ maintained in the [ kernelkit GitHub organisation] [ 14 ] to backport fixes and
78+ carry Infix-specific patches where needed, e.g., sysrepo and netopeer2 — and
79+ another few are tailor-made for Infix, e.g., ` confd ` .
7480
7581### YANG
7682
7783The real hero, however, is YANG.
7884
79- YANG (RFC 6020/ 7950) is a data modeling language designed specifically
85+ YANG ([ RFC 6020] [ 12 ] / [ 7950] [ 13 ] ) is a data modeling language designed specifically
8086for network devices. At its core, YANG lets you formally describe what
8187configuration and state a device has — what knobs exist, what values
8288they accept, how they relate to each other — in a machine-readable way.
@@ -90,7 +96,7 @@ is no separate CLI grammar to maintain, no divergence between what the
9096web interface can do and what NETCONF can do. When a new feature is
9197added to YANG, it appears everywhere at once.
9298
93- Infix follows industry-standard IETF models wherever they exist. So
99+ Infix follows industry-standard [ IETF] [ 24 ] models wherever they exist. So
94100` ietf-interfaces ` , ` ietf-routing ` , ` ietf-ip ` , and friends describe
95101interfaces, routes, and addresses — the same models you would find on
96102any standards-compliant device. Where no standard model exists, Infix
@@ -181,7 +187,7 @@ them away without touching the live system.
181187
182188### Immutable by Design
183189
184- Infix runs from a read-only * SquashFS* root filesystem. There is
190+ Infix runs from a read-only [ * SquashFS* ] [ 25 ] root filesystem. There is
185191nothing to corrupt, no package manager to leave the system in a
186192half-upgraded state, and no way for a bad configuration to break the OS
187193itself. Configuration lives separately in a writable partition, and the
@@ -205,10 +211,15 @@ RESTCONF, and reset it to a known-good baseline — all without touching
205211the filesystem directly and without any CLI scraping.
206212
207213The test suite, * Infamy* , runs against both virtual topologies in [ Qemu] [ 6 ]
208- and real physical hardware using identical test cases. Virtual
209- topologies make it cheap to catch regressions early in development;
210- physical runs ensure that hardware-specific paths — DSA offloads, WiFi,
211- switch silicon — are exercised regularly.
214+ and real physical hardware using identical test cases. The virtual side is
215+ handled by [ qeneth] [ 18 ] , Tobias Waldekranz's tool for wiring QEMU instances
216+ together over UDP sockets from a [ Graphviz] [ 21 ] topology description, while test
217+ execution is driven by [ 9pm] [ 19 ] , Richard Alpe's TAP runner that runs any
218+ executable producing [ Test Anything Protocol] [ 22 ] output and organises them into
219+ hierarchical suites with clean result reporting. Virtual topologies make it
220+ cheap to catch regressions early in development; physical runs ensure that
221+ hardware-specific paths — DSA offloads, WiFi, switch silicon — are exercised
222+ regularly.
212223
213224This level of automation means Infix is not constrained to a fixed
214225monthly release cadence. When a fix or feature is ready and passes the
@@ -241,3 +252,22 @@ feature in detail. Questions and feedback are always welcome in the
241252[ 4 ] : https://www.kernelkit.org/infix/
242253[ 5 ] : /posts/infix-in-gns3/
243254[ 6 ] : /posts/getting-started/
255+ [ 7 ] : https://www.sysrepo.org/
256+ [ 8 ] : https://github.com/CESNET/netopeer2
257+ [ 9 ] : https://github.com/CESNET/rousette
258+ [ 10 ] : https://github.com/kernelkit/klish
259+ [ 11 ] : https://wiki.linuxfoundation.org/networking/iproute2
260+ [ 12 ] : https://www.rfc-editor.org/rfc/rfc6020
261+ [ 13 ] : https://www.rfc-editor.org/rfc/rfc7950
262+ [ 14 ] : https://github.com/kernelkit
263+ [ 15 ] : https://docs.kernel.org/networking/switchdev.html
264+ [ 16 ] : https://www.rfc-editor.org/rfc/rfc6241
265+ [ 17 ] : https://www.rfc-editor.org/rfc/rfc8040
266+ [ 18 ] : https://github.com/wkz/qeneth
267+ [ 19 ] : https://github.com/rical/9pm
268+ [ 20 ] : https://docs.kernel.org/networking/dsa/dsa.html
269+ [ 21 ] : https://graphviz.org/
270+ [ 22 ] : https://testanything.org/
271+ [ 23 ] : https://openwrt.org/
272+ [ 24 ] : https://www.ietf.org/
273+ [ 25 ] : https://docs.kernel.org/filesystems/squashfs.html
0 commit comments