Expression setters populate it from the passed 'byteorder' parameter. Signed-off-by: Phil Sutter --- include/data_reg.h | 4 +++- src/expr/bitwise.c | 6 +++--- src/expr/cmp.c | 2 +- src/expr/data_reg.c | 4 +++- src/expr/immediate.c | 2 +- src/expr/range.c | 6 ++++-- src/set_elem.c | 6 +++--- 7 files changed, 18 insertions(+), 12 deletions(-) diff --git a/include/data_reg.h b/include/data_reg.h index 946354dc9881c..e22acd1b9a290 100644 --- a/include/data_reg.h +++ b/include/data_reg.h @@ -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 diff --git a/src/expr/bitwise.c b/src/expr/bitwise.c index da2b6d2ee57ec..a7752856cf957 100644 --- a/src/expr/bitwise.c +++ b/src/expr/bitwise.c @@ -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; } diff --git a/src/expr/cmp.c b/src/expr/cmp.c index 4bcf2e4bce83e..c88e06aee2356 100644 --- a/src/expr/cmp.c +++ b/src/expr/cmp.c @@ -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; } diff --git a/src/expr/data_reg.c b/src/expr/data_reg.c index bf4153c072fd0..45f2d94881c61 100644 --- a/src/expr/data_reg.c +++ b/src/expr/data_reg.c @@ -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; } diff --git a/src/expr/immediate.c b/src/expr/immediate.c index 27ee6003d3f08..f27b6e6b08f57 100644 --- a/src/expr/immediate.c +++ b/src/expr/immediate.c @@ -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; diff --git a/src/expr/range.c b/src/expr/range.c index cd6d6fbeb4ea2..4b3101ee88efa 100644 --- a/src/expr/range.c +++ b/src/expr/range.c @@ -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; } diff --git a/src/set_elem.c b/src/set_elem.c index f567a28719d11..19fd14a1fa900 100644 --- a/src/set_elem.c +++ b/src/set_elem.c @@ -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 */ -- 2.51.0