summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/libnftables/rule.h1
-rw-r--r--src/libnftables.map1
-rw-r--r--src/rule.c14
3 files changed, 16 insertions, 0 deletions
diff --git a/include/libnftables/rule.h b/include/libnftables/rule.h
index a944c00..2cd1bf3 100644
--- a/include/libnftables/rule.h
+++ b/include/libnftables/rule.h
@@ -26,6 +26,7 @@ void nft_rule_attr_set_str(struct nft_rule *r, uint16_t attr, char *str);
void *nft_rule_attr_get(struct nft_rule *r, uint16_t attr);
const char *nft_rule_attr_get_str(struct nft_rule *r, uint16_t attr);
+uint8_t nft_rule_attr_get_u8(struct nft_rule *r, uint16_t attr);
uint64_t nft_rule_attr_get_u64(struct nft_rule *r, uint16_t attr);
void nft_rule_add_expr(struct nft_rule *r, struct nft_rule_expr *expr);
diff --git a/src/libnftables.map b/src/libnftables.map
index a62f200..9715c49 100644
--- a/src/libnftables.map
+++ b/src/libnftables.map
@@ -45,6 +45,7 @@ global:
nft_rule_attr_set_u64;
nft_rule_attr_set_str;
nft_rule_attr_get;
+ nft_rule_attr_get_u8;
nft_rule_attr_get_u64;
nft_rule_attr_get_str;
nft_rule_snprintf;
diff --git a/src/rule.c b/src/rule.c
index dd05412..6dc46f3 100644
--- a/src/rule.c
+++ b/src/rule.c
@@ -104,6 +104,12 @@ EXPORT_SYMBOL(nft_rule_attr_set_str);
void *nft_rule_attr_get(struct nft_rule *r, uint16_t attr)
{
switch(attr) {
+ case NFT_RULE_ATTR_FAMILY:
+ if (r->flags & (1 << NFT_RULE_ATTR_FAMILY))
+ return &r->family;
+ else
+ return NULL;
+ break;
case NFT_RULE_ATTR_TABLE:
if (r->flags & (1 << NFT_RULE_ATTR_TABLE))
return r->table;
@@ -140,6 +146,13 @@ uint64_t nft_rule_attr_get_u64(struct nft_rule *r, uint16_t attr)
}
EXPORT_SYMBOL(nft_rule_attr_get_u64);
+uint8_t nft_rule_attr_get_u8(struct nft_rule *r, uint16_t attr)
+{
+ uint8_t val = *((uint8_t *)nft_rule_attr_get(r, attr));
+ return val;
+}
+EXPORT_SYMBOL(nft_rule_attr_get_u8);
+
struct nlmsghdr *
nft_rule_nlmsg_build_hdr(char *buf, uint16_t cmd, uint16_t family,
uint16_t type, uint32_t seq)
@@ -301,6 +314,7 @@ int nft_rule_nlmsg_parse(const struct nlmsghdr *nlh, struct nft_rule *r)
ret = nft_rule_parse_expr(tb[NFTA_RULE_EXPRESSIONS], r);
r->family = nfg->nfgen_family;
+ r->flags |= (1 << NFT_RULE_ATTR_FAMILY);
return ret;
}