summaryrefslogtreecommitdiffstats
path: root/src/expr
diff options
context:
space:
mode:
Diffstat (limited to 'src/expr')
-rw-r--r--src/expr/bitwise.c9
-rw-r--r--src/expr/cmp.c3
-rw-r--r--src/expr/data_reg.c6
-rw-r--r--src/expr/immediate.c3
-rw-r--r--src/expr/range.c4
5 files changed, 17 insertions, 8 deletions
diff --git a/src/expr/bitwise.c b/src/expr/bitwise.c
index a775285..a838e6c 100644
--- a/src/expr/bitwise.c
+++ b/src/expr/bitwise.c
@@ -51,11 +51,14 @@ 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, byteorder);
+ return nftnl_data_cpy(&bitwise->mask, data,
+ data_len, byteorder, NULL);
case NFTNL_EXPR_BITWISE_XOR:
- return nftnl_data_cpy(&bitwise->xor, data, data_len, byteorder);
+ return nftnl_data_cpy(&bitwise->xor, data,
+ data_len, byteorder, NULL);
case NFTNL_EXPR_BITWISE_DATA:
- return nftnl_data_cpy(&bitwise->data, data, data_len, byteorder);
+ return nftnl_data_cpy(&bitwise->data, data,
+ data_len, byteorder, NULL);
}
return 0;
}
diff --git a/src/expr/cmp.c b/src/expr/cmp.c
index c88e06a..ec5dd62 100644
--- a/src/expr/cmp.c
+++ b/src/expr/cmp.c
@@ -38,7 +38,8 @@ 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, byteorder);
+ return nftnl_data_cpy(&cmp->data, data,
+ data_len, byteorder, NULL);
}
return 0;
}
diff --git a/src/expr/data_reg.c b/src/expr/data_reg.c
index 45f2d94..d1aadcc 100644
--- a/src/expr/data_reg.c
+++ b/src/expr/data_reg.c
@@ -202,7 +202,7 @@ 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, uint32_t byteorder)
+ uint32_t len, uint32_t byteorder, uint8_t *sizes)
{
int ret = 0;
@@ -214,5 +214,9 @@ int nftnl_data_cpy(union nftnl_data_reg *dreg, const void *src,
memcpy(dreg->val, src, len);
dreg->len = len;
dreg->byteorder = byteorder;
+ if (sizes)
+ memcpy(dreg->sizes, sizes, sizeof(dreg->sizes));
+ else
+ memset(dreg->sizes, 0, sizeof(dreg->sizes));
return ret;
}
diff --git a/src/expr/immediate.c b/src/expr/immediate.c
index f27b6e6..9453198 100644
--- a/src/expr/immediate.c
+++ b/src/expr/immediate.c
@@ -32,7 +32,8 @@ 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, byteorder);
+ return nftnl_data_cpy(&imm->data, data,
+ data_len, byteorder, NULL);
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 4b3101e..12c91e9 100644
--- a/src/expr/range.c
+++ b/src/expr/range.c
@@ -38,10 +38,10 @@ nftnl_expr_range_set(struct nftnl_expr *e, uint16_t type,
break;
case NFTNL_EXPR_RANGE_FROM_DATA:
return nftnl_data_cpy(&range->data_from, data,
- data_len, byteorder);
+ data_len, byteorder, NULL);
case NFTNL_EXPR_RANGE_TO_DATA:
return nftnl_data_cpy(&range->data_to, data,
- data_len, byteorder);
+ data_len, byteorder, NULL);
}
return 0;
}