uint32_t use;
uint64_t packets;
uint64_t bytes;
+ uint64_t handle;
uint32_t flags;
- char new_name[NFT_CHAIN_MAXNAMELEN];
};
struct nft_chain *nft_chain_alloc(void)
case NFT_CHAIN_ATTR_PACKETS:
c->bytes = *((uint64_t *)data);
break;
- case NFT_CHAIN_ATTR_NEW_NAME:
- strncpy(c->new_name, data, NFT_CHAIN_MAXNAMELEN);
+ case NFT_CHAIN_ATTR_HANDLE:
+ c->handle = *((uint64_t *)data);
break;
case NFT_CHAIN_ATTR_TYPE:
if (c->type)
else
return NULL;
break;
- case NFT_CHAIN_ATTR_NEW_NAME:
- if (c->flags & (1 << NFT_CHAIN_ATTR_NEW_NAME))
- return c->new_name;
+ case NFT_CHAIN_ATTR_HANDLE:
+ if (c->flags & (1 << NFT_CHAIN_ATTR_HANDLE))
+ return &c->handle;
else
return NULL;
break;
mnl_attr_put_u64(nlh, NFTA_COUNTER_BYTES, be64toh(c->bytes));
mnl_attr_nest_end(nlh, nest);
}
- if (c->flags & (1 << NFT_CHAIN_ATTR_NEW_NAME))
- mnl_attr_put_strz(nlh, NFTA_CHAIN_NEW_NAME, c->new_name);
+ if (c->flags & (1 << NFT_CHAIN_ATTR_HANDLE))
+ mnl_attr_put_u64(nlh, NFTA_CHAIN_HANDLE, be64toh(c->handle));
if (c->flags & (1 << NFT_CHAIN_ATTR_TYPE))
mnl_attr_put_strz(nlh, NFTA_CHAIN_TYPE, c->type);
}
switch(type) {
case NFTA_CHAIN_NAME:
case NFTA_CHAIN_TABLE:
- case NFTA_CHAIN_NEW_NAME:
case NFTA_CHAIN_TYPE:
if (mnl_attr_validate(attr, MNL_TYPE_STRING) < 0) {
perror("mnl_attr_validate");
return MNL_CB_ERROR;
}
break;
+ case NFTA_CHAIN_HANDLE:
+ if (mnl_attr_validate(attr, MNL_TYPE_U64) < 0) {
+ perror("mnl_attr_validate");
+ return MNL_CB_ERROR;
+ }
+ break;
}
tb[type] = attr;
}
if (tb[NFTA_CHAIN_COUNTERS])
ret = nft_chain_parse_counters(tb[NFTA_CHAIN_COUNTERS], c);
- if (tb[NFTA_CHAIN_NEW_NAME]) {
- strncpy(c->new_name, mnl_attr_get_str(tb[NFTA_CHAIN_NEW_NAME]),
- NFT_CHAIN_MAXNAMELEN);
- c->flags |= (1 << NFT_CHAIN_ATTR_NEW_NAME);
+ if (tb[NFTA_CHAIN_HANDLE]) {
+ c->handle = be64toh(mnl_attr_get_u64(tb[NFTA_CHAIN_HANDLE]));
+ c->flags |= (1 << NFT_CHAIN_ATTR_HANDLE);
}
if (tb[NFTA_CHAIN_TYPE]) {
c->type = strdup(mnl_attr_get_str(tb[NFTA_CHAIN_TYPE]));