1a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy/* (C) 2001-2002 Magnus Boden <mb@ozaba.mine.nu> 2a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy * 3a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy * This program is free software; you can redistribute it and/or modify 4a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy * it under the terms of the GNU General Public License version 2 as 5a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy * published by the Free Software Foundation. 6a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy */ 7a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy 8a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy#include <linux/module.h> 9a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy#include <linux/udp.h> 10a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy 11a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy#include <net/netfilter/nf_conntrack_helper.h> 12a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy#include <net/netfilter/nf_conntrack_expect.h> 131afc56794e03229fa53cfa3c5012704d226e1decPablo Neira Ayuso#include <net/netfilter/nf_nat_helper.h> 14a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy#include <linux/netfilter/nf_conntrack_tftp.h> 15a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy 16a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardyMODULE_AUTHOR("Magnus Boden <mb@ozaba.mine.nu>"); 17a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardyMODULE_DESCRIPTION("TFTP NAT helper"); 18a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardyMODULE_LICENSE("GPL"); 19a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardyMODULE_ALIAS("ip_nat_tftp"); 20a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy 213db05fea51cdb162cfa8f69e9cfb9e228919d2a9Herbert Xustatic unsigned int help(struct sk_buff *skb, 22a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy enum ip_conntrack_info ctinfo, 23a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy struct nf_conntrack_expect *exp) 24a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy{ 25de24b4ebb811fcd7879bc580eb5c6f095b566321Jan Engelhardt const struct nf_conn *ct = exp->master; 26a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy 27a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy exp->saved_proto.udp.port 28a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u.udp.port; 29a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy exp->dir = IP_CT_DIR_REPLY; 30a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy exp->expectfn = nf_nat_follow_master; 31b20ab9cc63ca4605aec154cf54faa8455749f3f6Pablo Neira Ayuso if (nf_ct_expect_related(exp) != 0) { 32b20ab9cc63ca4605aec154cf54faa8455749f3f6Pablo Neira Ayuso nf_ct_helper_log(skb, exp->master, "cannot add expectation"); 33a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy return NF_DROP; 34b20ab9cc63ca4605aec154cf54faa8455749f3f6Pablo Neira Ayuso } 35a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy return NF_ACCEPT; 36a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy} 37a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy 38a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardystatic void __exit nf_nat_tftp_fini(void) 39a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy{ 40a9b3cd7f323b2e57593e7215362a7b02fc933e3aStephen Hemminger RCU_INIT_POINTER(nf_nat_tftp_hook, NULL); 41a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy synchronize_rcu(); 42a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy} 43a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy 44a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardystatic int __init nf_nat_tftp_init(void) 45a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy{ 46d1332e0ab84479d941de5cf4a69c71dfd385a25ePatrick McHardy BUG_ON(nf_nat_tftp_hook != NULL); 47a9b3cd7f323b2e57593e7215362a7b02fc933e3aStephen Hemminger RCU_INIT_POINTER(nf_nat_tftp_hook, help); 48a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy return 0; 49a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy} 50a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardy 51a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardymodule_init(nf_nat_tftp_init); 52a536df35b3a58caa9015bf7887a374b20f658368Patrick McHardymodule_exit(nf_nat_tftp_fini); 53