@@ -1341,6 +1341,7 @@ enum nft_object_attributes {
* @NFTA_FLOWTABLE_HOOK: netfilter hook configuration(NLA_U32)
* @NFTA_FLOWTABLE_USE: number of references to this flow table (NLA_U32)
* @NFTA_FLOWTABLE_HANDLE: object handle (NLA_U64)
+ * @NFTA_FLOWTABLE_SIZE: maximum size (NLA_U32)
*/
enum nft_flowtable_attributes {
NFTA_FLOWTABLE_UNSPEC,
@@ -1350,6 +1351,7 @@ enum nft_flowtable_attributes {
NFTA_FLOWTABLE_USE,
NFTA_FLOWTABLE_HANDLE,
NFTA_FLOWTABLE_PAD,
+ NFTA_FLOWTABLE_SIZE,
__NFTA_FLOWTABLE_MAX
};
#define NFTA_FLOWTABLE_MAX (__NFTA_FLOWTABLE_MAX - 1)
@@ -4848,6 +4848,7 @@ static const struct nla_policy nft_flowtable_policy[NFTA_FLOWTABLE_MAX + 1] = {
.len = NFT_NAME_MAXLEN - 1 },
[NFTA_FLOWTABLE_HOOK] = { .type = NLA_NESTED },
[NFTA_FLOWTABLE_HANDLE] = { .type = NLA_U64 },
+ [NFTA_FLOWTABLE_SIZE] = { .type = NLA_U32 },
};
struct nft_flowtable *nf_tables_flowtable_lookup(const struct nft_table *table,
@@ -5077,6 +5078,7 @@ static int nf_tables_newflowtable(struct net *net, struct sock *nlsk,
struct nft_flowtable *flowtable, *ft;
u8 genmask = nft_genmask_next(net);
int family = nfmsg->nfgen_family;
+ struct rhashtable_params params;
struct nft_table *table;
struct nft_ctx ctx;
int err;
@@ -5126,8 +5128,12 @@ static int nf_tables_newflowtable(struct net *net, struct sock *nlsk,
goto err2;
}
+ params = *type->params;
+ if (nla[NFTA_FLOWTABLE_SIZE])
+ params.max_size = ntohl(nla_get_be32(nla[NFTA_FLOWTABLE_SIZE]));
+
flowtable->data.type = type;
- err = rhashtable_init(&flowtable->data.rhashtable, type->params);
+ err = rhashtable_init(&flowtable->data.rhashtable, ¶ms);
if (err < 0)
goto err3;
@@ -5326,6 +5332,10 @@ static int nf_tables_fill_flowtable_info(struct sk_buff *skb, struct net *net,
nla_nest_end(skb, nest_devs);
nla_nest_end(skb, nest);
+ if (nla_put_be32(skb, NFTA_FLOWTABLE_SIZE,
+ htonl(flowtable->data.rhashtable.p.max_size)))
+ goto nla_put_failure;
+
nlmsg_end(skb, nlh);
return 0;
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> --- include/uapi/linux/netfilter/nf_tables.h | 2 ++ net/netfilter/nf_tables_api.c | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-)