Expression setters populate it from the passed 'byteorder' parameter.
Signed-off-by: Phil Sutter <phil@nwl.cc>
struct {
uint32_t val[NFT_DATA_VALUE_MAXLEN / sizeof(uint32_t)];
uint32_t len;
+ uint32_t byteorder;
};
struct {
uint32_t verdict;
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
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;
}
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;
}
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;
memcpy(dreg->val, src, len);
dreg->len = len;
+ dreg->byteorder = byteorder;
return ret;
}
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;
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;
}
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 */
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 */