]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - net/netfilter/nf_nat_tftp.c
Merge tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[mirror_ubuntu-artful-kernel.git] / net / netfilter / nf_nat_tftp.c
CommitLineData
a536df35
PM
1/* (C) 2001-2002 Magnus Boden <mb@ozaba.mine.nu>
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 as
5 * published by the Free Software Foundation.
6 */
7
8#include <linux/module.h>
a536df35
PM
9#include <linux/udp.h>
10
a536df35
PM
11#include <net/netfilter/nf_conntrack_helper.h>
12#include <net/netfilter/nf_conntrack_expect.h>
1afc5679 13#include <net/netfilter/nf_nat_helper.h>
a536df35
PM
14#include <linux/netfilter/nf_conntrack_tftp.h>
15
16MODULE_AUTHOR("Magnus Boden <mb@ozaba.mine.nu>");
17MODULE_DESCRIPTION("TFTP NAT helper");
18MODULE_LICENSE("GPL");
19MODULE_ALIAS("ip_nat_tftp");
20
3db05fea 21static unsigned int help(struct sk_buff *skb,
a536df35
PM
22 enum ip_conntrack_info ctinfo,
23 struct nf_conntrack_expect *exp)
24{
de24b4eb 25 const struct nf_conn *ct = exp->master;
a536df35
PM
26
27 exp->saved_proto.udp.port
28 = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u.udp.port;
29 exp->dir = IP_CT_DIR_REPLY;
30 exp->expectfn = nf_nat_follow_master;
b20ab9cc
PNA
31 if (nf_ct_expect_related(exp) != 0) {
32 nf_ct_helper_log(skb, exp->master, "cannot add expectation");
a536df35 33 return NF_DROP;
b20ab9cc 34 }
a536df35
PM
35 return NF_ACCEPT;
36}
37
38static void __exit nf_nat_tftp_fini(void)
39{
a9b3cd7f 40 RCU_INIT_POINTER(nf_nat_tftp_hook, NULL);
a536df35
PM
41 synchronize_rcu();
42}
43
44static int __init nf_nat_tftp_init(void)
45{
d1332e0a 46 BUG_ON(nf_nat_tftp_hook != NULL);
a9b3cd7f 47 RCU_INIT_POINTER(nf_nat_tftp_hook, help);
a536df35
PM
48 return 0;
49}
50
51module_init(nf_nat_tftp_init);
52module_exit(nf_nat_tftp_fini);