diff options
Diffstat (limited to 'kernel/include/linux/netfilter_ipv4/ip_set_bitmaps.h')
-rw-r--r-- | kernel/include/linux/netfilter_ipv4/ip_set_bitmaps.h | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/kernel/include/linux/netfilter_ipv4/ip_set_bitmaps.h b/kernel/include/linux/netfilter_ipv4/ip_set_bitmaps.h index 90e87e3..da3493f 100644 --- a/kernel/include/linux/netfilter_ipv4/ip_set_bitmaps.h +++ b/kernel/include/linux/netfilter_ipv4/ip_set_bitmaps.h @@ -77,22 +77,21 @@ type##_list_header(const struct ip_set *set, void *data) \ __##type##_list_header(map, header); \ } -#define BITMAP_LIST_MEMBERS_SIZE(type) \ +#define BITMAP_LIST_MEMBERS_SIZE(type, dtype, sizeid, testfn) \ static int \ -type##_list_members_size(const struct ip_set *set) \ +type##_list_members_size(const struct ip_set *set, char dont_align) \ { \ const struct ip_set_##type *map = set->data; \ + ip_set_ip_t i, elements = 0; \ \ - return map->size; \ -} - -#define BITMAP_LIST_MEMBERS(type) \ -static void \ -type##_list_members(const struct ip_set *set, void *data) \ -{ \ - const struct ip_set_##type *map = set->data; \ + if (dont_align) \ + return map->size; \ + \ + for (i = 0; i < sizeid; i++) \ + if (testfn) \ + elements++; \ \ - memcpy(data, map->members, map->size); \ + return elements * IPSET_ALIGN(sizeof(dtype)); \ } #define IP_SET_TYPE(type, __features) \ |