From 84d946b6573b02f83f14984ae737508749d2a419 Mon Sep 17 00:00:00 2001 From: Tomasz Bursztyka Date: Thu, 10 Jan 2013 04:29:05 +0000 Subject: rule: Add a function to get rule's family Add nft_rule_attr_get_u8 to obtain the family number. Signed-off-by: Tomasz Bursztyka --- src/libnftables.map | 1 + src/rule.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) (limited to 'src') 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; } -- cgit v1.2.3