]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
ipopt: use ipv4 address datatype for address field in ip options
authorPablo Neira Ayuso <pablo@netfilter.org>
Thu, 30 Jan 2025 18:39:20 +0000 (19:39 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 17 Jun 2025 09:25:46 +0000 (11:25 +0200)
commit 5faccb0681acb3b0175c4190eeaecf62f0bd12d4 upstream.

So user does not have to play integer arithmetics to match on IPv4
address.

Before:

 # nft describe ip option lsrr addr
 exthdr expression, datatype integer (integer), 32 bits

After:

 # nft describe ip option lsrr addr
 exthdr expression, datatype ipv4_addr (IPv4 address) (basetype integer), 32 bits

Fixes: 226a0e072d5c ("exthdr: add support for matching IPv4 options")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/ipopt.c

index 67e904ff3d88f5c882fa4fc6f1922861031991ad..17a01cb49df20f4b1eba3be2aeeb4de412f428db 100644 (file)
@@ -23,7 +23,7 @@ static const struct exthdr_desc ipopt_lsrr = {
                [IPOPT_FIELD_TYPE]              = PHT("type",    0,  8),
                [IPOPT_FIELD_LENGTH]            = PHT("length",  8,  8),
                [IPOPT_FIELD_PTR]               = PHT("ptr",    16,  8),
-               [IPOPT_FIELD_ADDR_0]            = PHT("addr",   24, 32),
+               [IPOPT_FIELD_ADDR_0]            = PROTO_HDR_TEMPLATE("addr", &ipaddr_type, BYTEORDER_BIG_ENDIAN, 24, 32),
        },
 };
 
@@ -34,7 +34,7 @@ static const struct exthdr_desc ipopt_rr = {
                [IPOPT_FIELD_TYPE]              = PHT("type",   0,   8),
                [IPOPT_FIELD_LENGTH]            = PHT("length",  8,  8),
                [IPOPT_FIELD_PTR]               = PHT("ptr",    16,  8),
-               [IPOPT_FIELD_ADDR_0]            = PHT("addr",   24, 32),
+               [IPOPT_FIELD_ADDR_0]            = PROTO_HDR_TEMPLATE("addr", &ipaddr_type, BYTEORDER_BIG_ENDIAN, 24, 32),
        },
 };
 
@@ -45,7 +45,7 @@ static const struct exthdr_desc ipopt_ssrr = {
                [IPOPT_FIELD_TYPE]              = PHT("type",   0,   8),
                [IPOPT_FIELD_LENGTH]            = PHT("length",  8,  8),
                [IPOPT_FIELD_PTR]               = PHT("ptr",    16,  8),
-               [IPOPT_FIELD_ADDR_0]            = PHT("addr",   24, 32),
+               [IPOPT_FIELD_ADDR_0]            = PROTO_HDR_TEMPLATE("addr", &ipaddr_type, BYTEORDER_BIG_ENDIAN, 24, 32),
        },
 };