Release 4.7 net/ipv6/netfilter/nf_defrag_ipv6_hooks.c
/* (C) 1999-2001 Paul `Rusty' Russell
* (C) 2002-2004 Netfilter Core Team <coreteam@netfilter.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/types.h>
#include <linux/ipv6.h>
#include <linux/in6.h>
#include <linux/netfilter.h>
#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/icmp.h>
#include <linux/sysctl.h>
#include <net/ipv6.h>
#include <net/inet_frag.h>
#include <linux/netfilter_ipv6.h>
#include <linux/netfilter_bridge.h>
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
#include <net/netfilter/nf_conntrack.h>
#include <net/netfilter/nf_conntrack_helper.h>
#include <net/netfilter/nf_conntrack_l4proto.h>
#include <net/netfilter/nf_conntrack_l3proto.h>
#include <net/netfilter/nf_conntrack_core.h>
#include <net/netfilter/ipv6/nf_conntrack_ipv6.h>
#endif
#include <net/netfilter/nf_conntrack_zones.h>
#include <net/netfilter/ipv6/nf_defrag_ipv6.h>
static enum ip6_defrag_users nf_ct6_defrag_user(unsigned int hooknum,
struct sk_buff *skb)
{
u16 zone_id = NF_CT_DEFAULT_ZONE_ID;
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
if (skb->nfct) {
enum ip_conntrack_info ctinfo;
const struct nf_conn *ct = nf_ct_get(skb, &ctinfo);
zone_id = nf_ct_zone_id(nf_ct_zone(ct), CTINFO2DIR(ctinfo));
}
#endif
if (nf_bridge_in_prerouting(skb))
return IP6_DEFRAG_CONNTRACK_BRIDGE_IN + zone_id;
if (hooknum == NF_INET_PRE_ROUTING)
return IP6_DEFRAG_CONNTRACK_IN + zone_id;
else
return IP6_DEFRAG_CONNTRACK_OUT + zone_id;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
balazs scheidler | balazs scheidler | 53 | 53.54% | 1 | 16.67% |
daniel borkmann | daniel borkmann | 35 | 35.35% | 2 | 33.33% |
kovacs krisztian | kovacs krisztian | 7 | 7.07% | 1 | 16.67% |
florian westphal | florian westphal | 3 | 3.03% | 1 | 16.67% |
americo wang | americo wang | 1 | 1.01% | 1 | 16.67% |
| Total | 99 | 100.00% | 6 | 100.00% |
static unsigned int ipv6_defrag(void *priv,
struct sk_buff *skb,
const struct nf_hook_state *state)
{
int err;
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
/* Previously seen (loopback)? */
if (skb->nfct && !nf_ct_is_template((struct nf_conn *)skb->nfct))
return NF_ACCEPT;
#endif
err = nf_ct_frag6_gather(state->net, skb,
nf_ct6_defrag_user(state->hook, skb));
/* queued */
if (err == -EINPROGRESS)
return NF_STOLEN;
return NF_ACCEPT;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
balazs scheidler | balazs scheidler | 63 | 70.00% | 1 | 11.11% |
eric w. biederman | eric w. biederman | 8 | 8.89% | 3 | 33.33% |
kovacs krisztian | kovacs krisztian | 7 | 7.78% | 1 | 11.11% |
florian westphal | florian westphal | 7 | 7.78% | 1 | 11.11% |
david s. miller | david s. miller | 2 | 2.22% | 1 | 11.11% |
patrick mchardy | patrick mchardy | 2 | 2.22% | 1 | 11.11% |
americo wang | americo wang | 1 | 1.11% | 1 | 11.11% |
| Total | 90 | 100.00% | 9 | 100.00% |
static struct nf_hook_ops ipv6_defrag_ops[] = {
{
.hook = ipv6_defrag,
.pf = NFPROTO_IPV6,
.hooknum = NF_INET_PRE_ROUTING,
.priority = NF_IP6_PRI_CONNTRACK_DEFRAG,
},
{
.hook = ipv6_defrag,
.pf = NFPROTO_IPV6,
.hooknum = NF_INET_LOCAL_OUT,
.priority = NF_IP6_PRI_CONNTRACK_DEFRAG,
},
};
static int __init nf_defrag_init(void)
{
int ret = 0;
ret = nf_ct_frag6_init();
if (ret < 0) {
pr_err("nf_defrag_ipv6: can't initialize frag6.\n");
return ret;
}
ret = nf_register_hooks(ipv6_defrag_ops, ARRAY_SIZE(ipv6_defrag_ops));
if (ret < 0) {
pr_err("nf_defrag_ipv6: can't register hooks\n");
goto cleanup_frag6;
}
return ret;
cleanup_frag6:
nf_ct_frag6_cleanup();
return ret;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
balazs scheidler | balazs scheidler | 74 | 100.00% | 1 | 100.00% |
| Total | 74 | 100.00% | 1 | 100.00% |
static void __exit nf_defrag_fini(void)
{
nf_unregister_hooks(ipv6_defrag_ops, ARRAY_SIZE(ipv6_defrag_ops));
nf_ct_frag6_cleanup();
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
balazs scheidler | balazs scheidler | 22 | 100.00% | 1 | 100.00% |
| Total | 22 | 100.00% | 1 | 100.00% |
void nf_defrag_ipv6_enable(void)
{
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
balazs scheidler | balazs scheidler | 6 | 100.00% | 1 | 100.00% |
| Total | 6 | 100.00% | 1 | 100.00% |
EXPORT_SYMBOL_GPL(nf_defrag_ipv6_enable);
module_init(nf_defrag_init);
module_exit(nf_defrag_fini);
MODULE_LICENSE("GPL");
Overall Contributors
| Person | Tokens | Prop | Commits | CommitProp |
balazs scheidler | balazs scheidler | 349 | 80.79% | 1 | 8.33% |
daniel borkmann | daniel borkmann | 35 | 8.10% | 2 | 16.67% |
kovacs krisztian | kovacs krisztian | 23 | 5.32% | 1 | 8.33% |
florian westphal | florian westphal | 10 | 2.31% | 2 | 16.67% |
eric w. biederman | eric w. biederman | 8 | 1.85% | 3 | 25.00% |
americo wang | americo wang | 3 | 0.69% | 1 | 8.33% |
patrick mchardy | patrick mchardy | 2 | 0.46% | 1 | 8.33% |
david s. miller | david s. miller | 2 | 0.46% | 1 | 8.33% |
| Total | 432 | 100.00% | 12 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.