1 /* Length Match - IPv6 Port */
3 #include <linux/module.h>
4 #include <linux/skbuff.h>
5 #include <linux/netfilter_ipv6/ip6t_length.h>
6 #include <linux/netfilter_ipv6/ip6_tables.h>
9 match(const struct sk_buff *skb,
10 const struct net_device *in,
11 const struct net_device *out,
12 const void *matchinfo,
18 const struct ip6t_length_info *info = matchinfo;
19 u_int16_t pktlen = ntohs(skb->nh.ipv6h->payload_len) + sizeof(struct ipv6hdr);
21 return (pktlen >= info->min && pktlen <= info->max) ^ info->invert;
25 checkentry(const char *tablename,
26 const struct ip6t_ip6 *ip,
28 unsigned int matchsize,
29 unsigned int hook_mask)
31 if (matchsize != IP6T_ALIGN(sizeof(struct ip6t_length_info)))
37 static struct ip6t_match length_match
38 = { { NULL, NULL }, "length", &match, &checkentry, NULL, THIS_MODULE };
40 static int __init init(void)
42 return ip6t_register_match(&length_match);
45 static void __exit fini(void)
47 ip6t_unregister_match(&length_match);