File Index
Files and directories
Sign in
FILE

nf_nat_tftp.c

File preview with syntax highlighting.

linux-6.19.14/net/netfilter/nf_nat_tftp.c C
 1// SPDX-License-Identifier: GPL-2.0-only
 2/* (C) 2001-2002 Magnus Boden <mb@ozaba.mine.nu>
 3 */
 4
 5#include <linux/module.h>
 6#include <linux/udp.h>
 7
 8#include <net/netfilter/nf_conntrack_helper.h>
 9#include <net/netfilter/nf_conntrack_expect.h>
10#include <net/netfilter/nf_nat_helper.h>
11#include <linux/netfilter/nf_conntrack_tftp.h>
12
13#define NAT_HELPER_NAME "tftp"
14
15MODULE_AUTHOR("Magnus Boden <mb@ozaba.mine.nu>");
16MODULE_DESCRIPTION("TFTP NAT helper");
17MODULE_LICENSE("GPL");
18MODULE_ALIAS_NF_NAT_HELPER(NAT_HELPER_NAME);
19
20static struct nf_conntrack_nat_helper nat_helper_tftp =
21	NF_CT_NAT_HELPER_INIT(NAT_HELPER_NAME);
22
23static unsigned int help(struct sk_buff *skb,
24			 enum ip_conntrack_info ctinfo,
25			 struct nf_conntrack_expect *exp)
26{
27	const struct nf_conn *ct = exp->master;
28
29	exp->saved_proto.udp.port
30		= ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u.udp.port;
31	exp->dir = IP_CT_DIR_REPLY;
32	exp->expectfn = nf_nat_follow_master;
33	if (nf_ct_expect_related(exp, 0) != 0) {
34		nf_ct_helper_log(skb, exp->master, "cannot add expectation");
35		return NF_DROP;
36	}
37	return NF_ACCEPT;
38}
39
40static void __exit nf_nat_tftp_fini(void)
41{
42	nf_nat_helper_unregister(&nat_helper_tftp);
43	RCU_INIT_POINTER(nf_nat_tftp_hook, NULL);
44	synchronize_rcu();
45}
46
47static int __init nf_nat_tftp_init(void)
48{
49	BUG_ON(nf_nat_tftp_hook != NULL);
50	nf_nat_helper_register(&nat_helper_tftp);
51	RCU_INIT_POINTER(nf_nat_tftp_hook, help);
52	return 0;
53}
54
55module_init(nf_nat_tftp_init);
56module_exit(nf_nat_tftp_fini);
~/ Read-only file preview.