]> 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>
Fri, 7 Feb 2025 10:53:32 +0000 (11:53 +0100)
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 37f779d468ab7350368a9a85ce29d7c17aada0a9..c03a80415fe2401b02a6ca6f504c5b1a35b34b39 100644 (file)
@@ -24,7 +24,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),
        },
 };
 
@@ -35,7 +35,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),
        },
 };
 
@@ -46,7 +46,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),
        },
 };