]> git.ipfire.org Git - thirdparty/libnftnl.git/commitdiff
data_reg: Introduce struct nftnl_data_reg::byteorder field
authorPhil Sutter <phil@nwl.cc>
Wed, 1 Oct 2025 12:59:39 +0000 (14:59 +0200)
committerPhil Sutter <phil@nwl.cc>
Tue, 27 Jan 2026 21:59:15 +0000 (22:59 +0100)
Expression setters populate it from the passed 'byteorder' parameter.

Signed-off-by: Phil Sutter <phil@nwl.cc>
include/data_reg.h
src/expr/bitwise.c
src/expr/cmp.c
src/expr/data_reg.c
src/expr/immediate.c
src/expr/range.c
src/set_elem.c

index 946354dc9881c502f7faca88705c3c49a81f7a4b..e22acd1b9a290765dc19fa9c0d2b40531b29004a 100644 (file)
@@ -21,6 +21,7 @@ union nftnl_data_reg {
        struct {
                uint32_t        val[NFT_DATA_VALUE_MAXLEN / sizeof(uint32_t)];
                uint32_t        len;
+               uint32_t        byteorder;
        };
        struct {
                uint32_t        verdict;
@@ -35,6 +36,7 @@ int nftnl_data_reg_snprintf(char *buf, size_t size,
 struct nlattr;
 
 int nftnl_parse_data(union nftnl_data_reg *data, struct nlattr *attr, int *type);
-int nftnl_data_cpy(union nftnl_data_reg *dreg, const void *src, uint32_t len);
+int nftnl_data_cpy(union nftnl_data_reg *dreg, const void *src,
+                  uint32_t len, uint32_t byteorder);
 
 #endif
index da2b6d2ee57ecf54c11323130bd6b872389676a8..a7752856cf9576942066c2f48123086fc21f932d 100644 (file)
@@ -51,11 +51,11 @@ nftnl_expr_bitwise_set(struct nftnl_expr *e, uint16_t type,
                memcpy(&bitwise->len, data, data_len);
                break;
        case NFTNL_EXPR_BITWISE_MASK:
-               return nftnl_data_cpy(&bitwise->mask, data, data_len);
+               return nftnl_data_cpy(&bitwise->mask, data, data_len, byteorder);
        case NFTNL_EXPR_BITWISE_XOR:
-               return nftnl_data_cpy(&bitwise->xor, data, data_len);
+               return nftnl_data_cpy(&bitwise->xor, data, data_len, byteorder);
        case NFTNL_EXPR_BITWISE_DATA:
-               return nftnl_data_cpy(&bitwise->data, data, data_len);
+               return nftnl_data_cpy(&bitwise->data, data, data_len, byteorder);
        }
        return 0;
 }
index 4bcf2e4bce83e0f1318c3c6957cc7bc372332f98..c88e06aee23567e4227e764d4a6f8ebbda9125ab 100644 (file)
@@ -38,7 +38,7 @@ nftnl_expr_cmp_set(struct nftnl_expr *e, uint16_t type,
                memcpy(&cmp->op, data, data_len);
                break;
        case NFTNL_EXPR_CMP_DATA:
-               return nftnl_data_cpy(&cmp->data, data, data_len);
+               return nftnl_data_cpy(&cmp->data, data, data_len, byteorder);
        }
        return 0;
 }
index bf4153c072fd0580c7d48da8745ae9640137bb69..45f2d94881c612e6aac55f16671073ce6b53545f 100644 (file)
@@ -201,7 +201,8 @@ int nftnl_parse_data(union nftnl_data_reg *data, struct nlattr *attr, int *type)
        return ret;
 }
 
-int nftnl_data_cpy(union nftnl_data_reg *dreg, const void *src, uint32_t len)
+int nftnl_data_cpy(union nftnl_data_reg *dreg, const void *src,
+                  uint32_t len, uint32_t byteorder)
 {
        int ret = 0;
 
@@ -212,5 +213,6 @@ int nftnl_data_cpy(union nftnl_data_reg *dreg, const void *src, uint32_t len)
 
        memcpy(dreg->val, src, len);
        dreg->len = len;
+       dreg->byteorder = byteorder;
        return ret;
 }
index 27ee6003d3f08470d533bf4304f7f8724e352c1e..f27b6e6b08f5790786d5fc8a975eb137ec017eb1 100644 (file)
@@ -32,7 +32,7 @@ nftnl_expr_immediate_set(struct nftnl_expr *e, uint16_t type,
                memcpy(&imm->dreg, data, data_len);
                break;
        case NFTNL_EXPR_IMM_DATA:
-               return nftnl_data_cpy(&imm->data, data, data_len);
+               return nftnl_data_cpy(&imm->data, data, data_len, byteorder);
        case NFTNL_EXPR_IMM_VERDICT:
                memcpy(&imm->data.verdict, data, data_len);
                break;
index cd6d6fbeb4ea21d55d841b599001b5a1d43e5d1a..4b3101ee88efa62cc4a03e941b07f92418100d10 100644 (file)
@@ -37,9 +37,11 @@ nftnl_expr_range_set(struct nftnl_expr *e, uint16_t type,
                memcpy(&range->op, data, data_len);
                break;
        case NFTNL_EXPR_RANGE_FROM_DATA:
-               return nftnl_data_cpy(&range->data_from, data, data_len);
+               return nftnl_data_cpy(&range->data_from, data,
+                                     data_len, byteorder);
        case NFTNL_EXPR_RANGE_TO_DATA:
-               return nftnl_data_cpy(&range->data_to, data, data_len);
+               return nftnl_data_cpy(&range->data_to, data,
+                                     data_len, byteorder);
        }
        return 0;
 }
index f567a28719d11067c909522d0ee02ff6ebfb47ef..19fd14a1fa9004e7d42e22344c8f228b78a507f3 100644 (file)
@@ -122,11 +122,11 @@ int nftnl_set_elem_set(struct nftnl_set_elem *s, uint16_t attr,
                memcpy(&s->set_elem_flags, data, sizeof(s->set_elem_flags));
                break;
        case NFTNL_SET_ELEM_KEY:        /* NFTA_SET_ELEM_KEY */
-               if (nftnl_data_cpy(&s->key, data, data_len) < 0)
+               if (nftnl_data_cpy(&s->key, data, data_len, 0) < 0)
                        return -1;
                break;
        case NFTNL_SET_ELEM_KEY_END:    /* NFTA_SET_ELEM_KEY_END */
-               if (nftnl_data_cpy(&s->key_end, data, data_len) < 0)
+               if (nftnl_data_cpy(&s->key_end, data, data_len, 0) < 0)
                        return -1;
                break;
        case NFTNL_SET_ELEM_VERDICT:    /* NFTA_SET_ELEM_DATA */
@@ -141,7 +141,7 @@ int nftnl_set_elem_set(struct nftnl_set_elem *s, uint16_t attr,
                        return -1;
                break;
        case NFTNL_SET_ELEM_DATA:       /* NFTA_SET_ELEM_DATA */
-               if (nftnl_data_cpy(&s->data, data, data_len) < 0)
+               if (nftnl_data_cpy(&s->data, data, data_len, 0) < 0)
                        return -1;
                break;
        case NFTNL_SET_ELEM_TIMEOUT:    /* NFTA_SET_ELEM_TIMEOUT */