interface-ip: mask out host bits in IPv4 route targets
authorJo-Philipp Wich <jo@mein.io>
Thu, 24 Aug 2023 12:16:00 +0000 (14:16 +0200)
committerJo-Philipp Wich <jo@mein.io>
Wed, 8 Nov 2023 08:49:57 +0000 (09:49 +0100)
commit76eb342c397a90feb77b54be2706fa9ff61637f1
tree6296e7ef91fc5ca3c1f09ddaa0dade5cd01a4fc0
parent516ab774cc16d4b04b3b17a067cbf2649f1adaeb
interface-ip: mask out host bits in IPv4 route targets

The kernel will reject attempts to install routes with target addresses
having host bits set with an "Invalid prefix for given prefix length"
error.

A route configuration like the one below will silently fail to apply:

    config route
        option interface lan
        option target 10.40.40.1/24

Attempting to do the same with iproute2 will fail as well:

    # ip route add 10.40.40.1/24 dev br-lan
    Error: Invalid prefix for given prefix length.

However, for IPv6 route targets with set host bits are allowed:

    # ip -6 route add 3000::1/64 via fe80::1234:5678:9abcd:ef01 dev br-lan
    # ip -6 route list 3000::1/64
    3000::/64 via fe80::1234:5678:9abc:def1 dev br-lan metric 1024 pref medium

In order to stay consistent here, and to avoid unecessary configuration
pitfalls, make netifd more lenient and simply mask out excess host bits
while parsing IPv4 route configuration.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
interface-ip.c