diff options
-rw-r--r-- | include/libnftables/expr.h | 2 | ||||
-rw-r--r-- | src/expr.c | 23 | ||||
-rw-r--r-- | src/libnftables.map | 2 |
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); @@ -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; |