Contributors: 9
Author |
Tokens |
Token Proportion |
Commits |
Commit Proportion |
Pablo Neira Ayuso |
128 |
46.89% |
1 |
5.56% |
Harald Welte |
80 |
29.30% |
2 |
11.11% |
Jan Engelhardt |
26 |
9.52% |
6 |
33.33% |
Patrick McHardy |
24 |
8.79% |
3 |
16.67% |
Art Haas |
4 |
1.47% |
1 |
5.56% |
Xin Long |
4 |
1.47% |
2 |
11.11% |
David S. Miller |
3 |
1.10% |
1 |
5.56% |
Arnaldo Carvalho de Melo |
2 |
0.73% |
1 |
5.56% |
Thomas Gleixner |
2 |
0.73% |
1 |
5.56% |
Total |
273 |
|
18 |
|
// SPDX-License-Identifier: GPL-2.0-only
/* Kernel module to match packet length. */
/* (C) 1999-2001 James Morris <jmorros@intercode.com.au>
*/
#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/ipv6.h>
#include <net/ip.h>
#include <linux/netfilter/xt_length.h>
#include <linux/netfilter/x_tables.h>
MODULE_AUTHOR("James Morris <jmorris@intercode.com.au>");
MODULE_DESCRIPTION("Xtables: Packet length (Layer3,4,5) match");
MODULE_LICENSE("GPL");
MODULE_ALIAS("ipt_length");
MODULE_ALIAS("ip6t_length");
static bool
length_mt(const struct sk_buff *skb, struct xt_action_param *par)
{
const struct xt_length_info *info = par->matchinfo;
u32 pktlen = skb_ip_totlen(skb);
return (pktlen >= info->min && pktlen <= info->max) ^ info->invert;
}
static bool
length_mt6(const struct sk_buff *skb, struct xt_action_param *par)
{
const struct xt_length_info *info = par->matchinfo;
u32 pktlen = skb->len;
return (pktlen >= info->min && pktlen <= info->max) ^ info->invert;
}
static struct xt_match length_mt_reg[] __read_mostly = {
{
.name = "length",
.family = NFPROTO_IPV4,
.match = length_mt,
.matchsize = sizeof(struct xt_length_info),
.me = THIS_MODULE,
},
{
.name = "length",
.family = NFPROTO_IPV6,
.match = length_mt6,
.matchsize = sizeof(struct xt_length_info),
.me = THIS_MODULE,
},
};
static int __init length_mt_init(void)
{
return xt_register_matches(length_mt_reg, ARRAY_SIZE(length_mt_reg));
}
static void __exit length_mt_exit(void)
{
xt_unregister_matches(length_mt_reg, ARRAY_SIZE(length_mt_reg));
}
module_init(length_mt_init);
module_exit(length_mt_exit);