summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/libnftables/expr.h2
-rw-r--r--src/expr.c23
-rw-r--r--src/libnftables.map2
3 files changed, 27 insertions, 0 deletions
diff --git a/include/libnftables/expr.h b/include/libnftables/expr.h
index 02f38d0..65ca1f0 100644
--- a/include/libnftables/expr.h
+++ b/include/libnftables/expr.h
@@ -21,12 +21,14 @@ void nft_rule_expr_free(struct nft_rule_expr *expr);
bool nft_rule_expr_is_set(const struct nft_rule_expr *expr, uint16_t type);
void nft_rule_expr_set(struct nft_rule_expr *expr, uint16_t type, const void *data, size_t data_len);
void nft_rule_expr_set_u8(struct nft_rule_expr *expr, uint16_t type, uint8_t data);
+void nft_rule_expr_set_u16(struct nft_rule_expr *expr, uint16_t type, uint16_t data);
void nft_rule_expr_set_u32(struct nft_rule_expr *expr, uint16_t type, uint32_t data);
void nft_rule_expr_set_u64(struct nft_rule_expr *expr, uint16_t type, uint64_t data);
void nft_rule_expr_set_str(struct nft_rule_expr *expr, uint16_t type, const char *str);
const void *nft_rule_expr_get(const struct nft_rule_expr *expr, uint16_t type, size_t *data_len);
uint8_t nft_rule_expr_get_u8(const struct nft_rule_expr *expr, uint16_t type);
+uint16_t nft_rule_expr_get_u16(const struct nft_rule_expr *expr, uint16_t type);
uint32_t nft_rule_expr_get_u32(const struct nft_rule_expr *expr, uint16_t type);
uint64_t nft_rule_expr_get_u64(const struct nft_rule_expr *expr, uint16_t type);
const char *nft_rule_expr_get_str(const struct nft_rule_expr *expr, uint16_t type);
diff --git a/src/expr.c b/src/expr.c
index 1f33181..d565637 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -82,6 +82,13 @@ nft_rule_expr_set_u8(struct nft_rule_expr *expr, uint16_t type, uint8_t data)
EXPORT_SYMBOL(nft_rule_expr_set_u8);
void
+nft_rule_expr_set_u16(struct nft_rule_expr *expr, uint16_t type, uint16_t data)
+{
+ nft_rule_expr_set(expr, type, &data, sizeof(uint16_t));
+}
+EXPORT_SYMBOL(nft_rule_expr_set_u16);
+
+void
nft_rule_expr_set_u32(struct nft_rule_expr *expr, uint16_t type, uint32_t data)
{
nft_rule_expr_set(expr, type, &data, sizeof(uint32_t));
@@ -139,6 +146,22 @@ uint8_t nft_rule_expr_get_u8(const struct nft_rule_expr *expr, uint16_t type)
}
EXPORT_SYMBOL(nft_rule_expr_get_u8);
+uint16_t nft_rule_expr_get_u16(const struct nft_rule_expr *expr, uint16_t type)
+{
+ const void *data;
+ size_t data_len;
+
+ data = nft_rule_expr_get(expr, type, &data_len);
+ if (data == NULL)
+ return 0;
+
+ if (data_len != sizeof(uint16_t))
+ return 0;
+
+ return *((uint16_t *)data);
+}
+EXPORT_SYMBOL(nft_rule_expr_get_u16);
+
uint32_t nft_rule_expr_get_u32(const struct nft_rule_expr *expr, uint16_t type)
{
const void *data;
diff --git a/src/libnftables.map b/src/libnftables.map
index 614c705..c4a1c26 100644
--- a/src/libnftables.map
+++ b/src/libnftables.map
@@ -84,11 +84,13 @@ global:
nft_rule_expr_is_set;
nft_rule_expr_set;
nft_rule_expr_set_u8;
+ nft_rule_expr_set_u16;
nft_rule_expr_set_u32;
nft_rule_expr_set_u64;
nft_rule_expr_set_str;
nft_rule_expr_get;
nft_rule_expr_get_u8;
+ nft_rule_expr_get_u16;
nft_rule_expr_get_u32;
nft_rule_expr_get_u64;
nft_rule_expr_get_str;