diff options
Diffstat (limited to 'src/conntrack/filter.c')
-rw-r--r-- | src/conntrack/filter.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/conntrack/filter.c b/src/conntrack/filter.c index 7cee673..bf29f96 100644 --- a/src/conntrack/filter.c +++ b/src/conntrack/filter.c @@ -49,9 +49,39 @@ static void filter_attr_dst_ipv4(struct nfct_filter *filter, const void *value) filter->l3proto_elems[1]++; } +static void filter_attr_src_ipv6(struct nfct_filter *filter, const void *value) +{ + const struct nfct_filter_ipv6 *this = value; + + if (filter->l3proto_elems_ipv6[0] >= __FILTER_IPV6_MAX) + return; + + memcpy(filter->l3proto_ipv6[0][filter->l3proto_elems_ipv6[0]].addr, + this->addr, sizeof(u_int32_t)*4); + memcpy(filter->l3proto_ipv6[0][filter->l3proto_elems_ipv6[0]].mask, + this->mask, sizeof(u_int32_t)*4); + filter->l3proto_elems_ipv6[0]++; +} + +static void filter_attr_dst_ipv6(struct nfct_filter *filter, const void *value) +{ + const struct nfct_filter_ipv6 *this = value; + + if (filter->l3proto_elems_ipv6[1] >= __FILTER_IPV6_MAX) + return; + + memcpy(filter->l3proto_ipv6[1][filter->l3proto_elems_ipv6[1]].addr, + this->addr, sizeof(u_int32_t)*4); + memcpy(filter->l3proto_ipv6[1][filter->l3proto_elems_ipv6[1]].mask, + this->mask, sizeof(u_int32_t)*4); + filter->l3proto_elems_ipv6[1]++; +} + filter_attr filter_attr_array[NFCT_FILTER_MAX] = { [NFCT_FILTER_L4PROTO] = filter_attr_l4proto, [NFCT_FILTER_L4PROTO_STATE] = filter_attr_l4proto_state, [NFCT_FILTER_SRC_IPV4] = filter_attr_src_ipv4, [NFCT_FILTER_DST_IPV4] = filter_attr_dst_ipv4, + [NFCT_FILTER_SRC_IPV6] = filter_attr_src_ipv6, + [NFCT_FILTER_DST_IPV6] = filter_attr_dst_ipv6, }; |