Skip to content

IfState: Releases 2.5

The new IfState release 2.5 including a first bugfix release is available. This is a larger release containing multiple new features and improvements under the hood!

Release notes:

Rust-based Acceleration

libifstate-rs provides an optional rust-based acceleration for route and neighbor filtering. This can reduce processing time by more than 90% when using a routing daemon receiving the full table of the DFZ1.

Default MAC Address Selection

It is now possible to change the default MAC address selection for macsec, physical and vlan interfaces. It is now possible to override ifstates default behavior how the default MAC address is selected.

This might be important when using switchdev-based hardware with a limited support for virtual MAC addresses.

Tooling Modernization and Pytest

This release contains a huge tooling contribution as a result from the discussions at Saltsprint 2026. Based on the initial contribution the tooling was further extended by:

  • migrating to pyproject.toml / uv
  • adding pre-commit CI/CD
  • implementing initial pytest based unit and functional testing
  • building SBOM artifacts

Interface Alternative Names

Ifstate now supports configuring interface alternative names. The alternative name can be up to 255 characters long while the interface name can only be 15 characters long. The kernel enforces uniques of interface and alternative names.

/etc/ifstate/ifstate.yaml
interface:
  eth4-2:
    addresses:
      - 2001:0db8:2804::1/64
    alt-names:
      - ACS_CUST2804
    link:
      kind: physical
      ifalias: "Access Customer #2804 (Port 4/2)"
      state: up
    identify:
      parent_dev_name: "0000:51:00.1"
      parent_dev_bus_name: pci

On physical software routers and firewalls the alternative names could be used to make additional information available:

ip link show eth1-1
7: eth4-2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:00:5e:00:53:42 brd ff:ff:ff:ff:ff:ff
    alias Access Customer #2804 (Port 4/2)
    altname ACS_CUST2804

ip address show eth1-1
7: eth4-2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:00:5e:00:53:42 brd ff:ff:ff:ff:ff:ff
    altname ACS_CUST2804
    inet6 fe80::200:5eff:fe00:5342/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
By default any alternative names get cleaned up. On systems using udev this also cleanups any udev generated alternative names. This behavior can be changed by disabling the clear_altnames setting in parameter.defaults to keep alternative names for interfaces that do not have a alt-names property.

!flatten Tag

The YAML parser for the configuration file got support for a !flatten tag. This allows to convert a nested list into a flat list. This can be used to extend lists from external files:

/etc/ifstate/ifstate.yaml
interfaces:
  loop:
    addresses: !flatten
      - 192.0.2.1
      - !include /etc/ifstate/additional-ips.yaml
    link:
      kind: dummy
      state: up
/etc/ifstate/additional-ips.yaml
- 198.51.100.1
- 203.0.113.1
- "2001:db8::"

Miscellaneous

IfState now has shell completion support. It is now also possible to configure interface link flags which might be required to support multicast in overlay networks. Missing netlink attributes have been added for various interface kinds.

The new sysctl_conf setting allows additional free-form sysctl configuration.


  1. Default Free Zone ↩