netfilter: ipset: Use a common function at listing the extensions
Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
This commit is contained in:
parent
8ec81f9a4d
commit
3fd986b3d9
|
@ -461,6 +461,27 @@ bitmap_bytes(u32 a, u32 b)
|
|||
#include <linux/netfilter/ipset/ip_set_timeout.h>
|
||||
#include <linux/netfilter/ipset/ip_set_comment.h>
|
||||
|
||||
static inline int
|
||||
ip_set_put_extensions(struct sk_buff *skb, const struct ip_set *set,
|
||||
const void *e, bool active)
|
||||
{
|
||||
if (SET_WITH_TIMEOUT(set)) {
|
||||
unsigned long *timeout = ext_timeout(e, set);
|
||||
|
||||
if (nla_put_net32(skb, IPSET_ATTR_TIMEOUT,
|
||||
htonl(active ? ip_set_timeout_get(timeout)
|
||||
: *timeout)))
|
||||
return -EMSGSIZE;
|
||||
}
|
||||
if (SET_WITH_COUNTER(set) &&
|
||||
ip_set_put_counter(skb, ext_counter(e, set)))
|
||||
return -EMSGSIZE;
|
||||
if (SET_WITH_COMMENT(set) &&
|
||||
ip_set_put_comment(skb, ext_comment(e, set)))
|
||||
return -EMSGSIZE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define IP_SET_INIT_KEXT(skb, opt, set) \
|
||||
{ .bytes = (skb)->len, .packets = 1, \
|
||||
.timeout = ip_set_adt_opt_timeout(opt, set) }
|
||||
|
|
|
@ -183,6 +183,14 @@ mtype_del(struct ip_set *set, void *value, const struct ip_set_ext *ext,
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifndef IP_SET_BITMAP_STORED_TIMEOUT
|
||||
static inline bool
|
||||
mtype_is_filled(const struct mtype_elem *x)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int
|
||||
mtype_list(const struct ip_set *set,
|
||||
struct sk_buff *skb, struct netlink_callback *cb)
|
||||
|
@ -215,25 +223,8 @@ mtype_list(const struct ip_set *set,
|
|||
}
|
||||
if (mtype_do_list(skb, map, id, set->dsize))
|
||||
goto nla_put_failure;
|
||||
if (SET_WITH_TIMEOUT(set)) {
|
||||
#ifdef IP_SET_BITMAP_STORED_TIMEOUT
|
||||
if (nla_put_net32(skb, IPSET_ATTR_TIMEOUT,
|
||||
htonl(ip_set_timeout_stored(map, id,
|
||||
ext_timeout(x, set),
|
||||
set->dsize))))
|
||||
goto nla_put_failure;
|
||||
#else
|
||||
if (nla_put_net32(skb, IPSET_ATTR_TIMEOUT,
|
||||
htonl(ip_set_timeout_get(
|
||||
ext_timeout(x, set)))))
|
||||
goto nla_put_failure;
|
||||
#endif
|
||||
}
|
||||
if (SET_WITH_COUNTER(set) &&
|
||||
ip_set_put_counter(skb, ext_counter(x, set)))
|
||||
goto nla_put_failure;
|
||||
if (SET_WITH_COMMENT(set) &&
|
||||
ip_set_put_comment(skb, ext_comment(x, set)))
|
||||
if (ip_set_put_extensions(skb, set, x,
|
||||
mtype_is_filled((const struct mtype_elem *) x)))
|
||||
goto nla_put_failure;
|
||||
ipset_nest_end(skb, nested);
|
||||
}
|
||||
|
|
|
@ -176,17 +176,6 @@ bitmap_ipmac_do_del(const struct bitmap_ipmac_adt_elem *e,
|
|||
return !test_and_clear_bit(e->id, map->members);
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
ip_set_timeout_stored(struct bitmap_ipmac *map, u32 id, unsigned long *timeout,
|
||||
size_t dsize)
|
||||
{
|
||||
const struct bitmap_ipmac_elem *elem =
|
||||
get_elem(map->extensions, id, dsize);
|
||||
|
||||
return elem->filled == MAC_FILLED ? ip_set_timeout_get(timeout) :
|
||||
*timeout;
|
||||
}
|
||||
|
||||
static inline int
|
||||
bitmap_ipmac_do_list(struct sk_buff *skb, const struct bitmap_ipmac *map,
|
||||
u32 id, size_t dsize)
|
||||
|
|
|
@ -961,16 +961,7 @@ mtype_list(const struct ip_set *set,
|
|||
}
|
||||
if (mtype_data_list(skb, e))
|
||||
goto nla_put_failure;
|
||||
if (SET_WITH_TIMEOUT(set) &&
|
||||
nla_put_net32(skb, IPSET_ATTR_TIMEOUT,
|
||||
htonl(ip_set_timeout_get(
|
||||
ext_timeout(e, set)))))
|
||||
goto nla_put_failure;
|
||||
if (SET_WITH_COUNTER(set) &&
|
||||
ip_set_put_counter(skb, ext_counter(e, set)))
|
||||
goto nla_put_failure;
|
||||
if (SET_WITH_COMMENT(set) &&
|
||||
ip_set_put_comment(skb, ext_comment(e, set)))
|
||||
if (ip_set_put_extensions(skb, set, e, true))
|
||||
goto nla_put_failure;
|
||||
ipset_nest_end(skb, nested);
|
||||
}
|
||||
|
|
|
@ -512,16 +512,7 @@ list_set_list(const struct ip_set *set,
|
|||
if (nla_put_string(skb, IPSET_ATTR_NAME,
|
||||
ip_set_name_byindex(e->id)))
|
||||
goto nla_put_failure;
|
||||
if (SET_WITH_TIMEOUT(set) &&
|
||||
nla_put_net32(skb, IPSET_ATTR_TIMEOUT,
|
||||
htonl(ip_set_timeout_get(
|
||||
ext_timeout(e, set)))))
|
||||
goto nla_put_failure;
|
||||
if (SET_WITH_COUNTER(set) &&
|
||||
ip_set_put_counter(skb, ext_counter(e, set)))
|
||||
goto nla_put_failure;
|
||||
if (SET_WITH_COMMENT(set) &&
|
||||
ip_set_put_comment(skb, ext_comment(e, set)))
|
||||
if (ip_set_put_extensions(skb, set, e, true))
|
||||
goto nla_put_failure;
|
||||
ipset_nest_end(skb, nested);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue