Commit d6c4c8ff authored by Florian Westphal's avatar Florian Westphal Committed by Pablo Neira Ayuso

netfilter: nat: remove l3proto struct

All l3proto function pointers have been removed.
Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent dac3fe72
...@@ -2,10 +2,6 @@ ...@@ -2,10 +2,6 @@
#ifndef _NF_NAT_L3PROTO_H #ifndef _NF_NAT_L3PROTO_H
#define _NF_NAT_L3PROTO_H #define _NF_NAT_L3PROTO_H
struct nf_nat_l3proto {
u8 l3proto;
};
unsigned int nf_nat_manip_pkt(struct sk_buff *skb, struct nf_conn *ct, unsigned int nf_nat_manip_pkt(struct sk_buff *skb, struct nf_conn *ct,
enum nf_nat_manip_type mtype, enum nf_nat_manip_type mtype,
enum ip_conntrack_dir dir); enum ip_conntrack_dir dir);
...@@ -13,10 +9,6 @@ void nf_nat_csum_recalc(struct sk_buff *skb, ...@@ -13,10 +9,6 @@ void nf_nat_csum_recalc(struct sk_buff *skb,
u8 nfproto, u8 proto, void *data, __sum16 *check, u8 nfproto, u8 proto, void *data, __sum16 *check,
int datalen, int oldlen); int datalen, int oldlen);
int nf_nat_l3proto_register(const struct nf_nat_l3proto *);
void nf_nat_l3proto_unregister(const struct nf_nat_l3proto *);
const struct nf_nat_l3proto *__nf_nat_l3proto_find(u8 l3proto);
int nf_nat_icmp_reply_translation(struct sk_buff *skb, struct nf_conn *ct, int nf_nat_icmp_reply_translation(struct sk_buff *skb, struct nf_conn *ct,
enum ip_conntrack_info ctinfo, enum ip_conntrack_info ctinfo,
unsigned int hooknum); unsigned int hooknum);
......
...@@ -35,8 +35,6 @@ ...@@ -35,8 +35,6 @@
static spinlock_t nf_nat_locks[CONNTRACK_LOCKS]; static spinlock_t nf_nat_locks[CONNTRACK_LOCKS];
static DEFINE_MUTEX(nf_nat_proto_mutex); static DEFINE_MUTEX(nf_nat_proto_mutex);
static const struct nf_nat_l3proto __rcu *nf_nat_l3protos[NFPROTO_NUMPROTO]
__read_mostly;
static unsigned int nat_net_id __read_mostly; static unsigned int nat_net_id __read_mostly;
static struct hlist_head *nf_nat_bysource __read_mostly; static struct hlist_head *nf_nat_bysource __read_mostly;
...@@ -58,12 +56,6 @@ struct nat_net { ...@@ -58,12 +56,6 @@ struct nat_net {
struct nf_nat_hooks_net nat_proto_net[NFPROTO_NUMPROTO]; struct nf_nat_hooks_net nat_proto_net[NFPROTO_NUMPROTO];
}; };
inline const struct nf_nat_l3proto *
__nf_nat_l3proto_find(u8 family)
{
return rcu_dereference(nf_nat_l3protos[family]);
}
#ifdef CONFIG_XFRM #ifdef CONFIG_XFRM
static void nf_nat_ipv4_decode_session(struct sk_buff *skb, static void nf_nat_ipv4_decode_session(struct sk_buff *skb,
const struct nf_conn *ct, const struct nf_conn *ct,
...@@ -849,33 +841,6 @@ static int nf_nat_proto_clean(struct nf_conn *ct, void *data) ...@@ -849,33 +841,6 @@ static int nf_nat_proto_clean(struct nf_conn *ct, void *data)
return 0; return 0;
} }
static void nf_nat_l3proto_clean(u8 l3proto)
{
struct nf_nat_proto_clean clean = {
.l3proto = l3proto,
};
nf_ct_iterate_destroy(nf_nat_proto_remove, &clean);
}
int nf_nat_l3proto_register(const struct nf_nat_l3proto *l3proto)
{
RCU_INIT_POINTER(nf_nat_l3protos[l3proto->l3proto], l3proto);
return 0;
}
EXPORT_SYMBOL_GPL(nf_nat_l3proto_register);
void nf_nat_l3proto_unregister(const struct nf_nat_l3proto *l3proto)
{
mutex_lock(&nf_nat_proto_mutex);
RCU_INIT_POINTER(nf_nat_l3protos[l3proto->l3proto], NULL);
mutex_unlock(&nf_nat_proto_mutex);
synchronize_rcu();
nf_nat_l3proto_clean(l3proto->l3proto);
}
EXPORT_SYMBOL_GPL(nf_nat_l3proto_unregister);
/* No one using conntrack by the time this called. */ /* No one using conntrack by the time this called. */
static void nf_nat_cleanup_conntrack(struct nf_conn *ct) static void nf_nat_cleanup_conntrack(struct nf_conn *ct)
{ {
...@@ -1122,7 +1087,6 @@ int nf_nat_register_fn(struct net *net, const struct nf_hook_ops *ops, ...@@ -1122,7 +1087,6 @@ int nf_nat_register_fn(struct net *net, const struct nf_hook_ops *ops,
mutex_unlock(&nf_nat_proto_mutex); mutex_unlock(&nf_nat_proto_mutex);
return ret; return ret;
} }
EXPORT_SYMBOL_GPL(nf_nat_register_fn);
void nf_nat_unregister_fn(struct net *net, const struct nf_hook_ops *ops, void nf_nat_unregister_fn(struct net *net, const struct nf_hook_ops *ops,
unsigned int ops_count) unsigned int ops_count)
...@@ -1171,7 +1135,6 @@ void nf_nat_unregister_fn(struct net *net, const struct nf_hook_ops *ops, ...@@ -1171,7 +1135,6 @@ void nf_nat_unregister_fn(struct net *net, const struct nf_hook_ops *ops,
unlock: unlock:
mutex_unlock(&nf_nat_proto_mutex); mutex_unlock(&nf_nat_proto_mutex);
} }
EXPORT_SYMBOL_GPL(nf_nat_unregister_fn);
static struct pernet_operations nat_net_ops = { static struct pernet_operations nat_net_ops = {
.id = &nat_net_id, .id = &nat_net_id,
...@@ -1186,8 +1149,6 @@ static struct nf_nat_hook nat_hook = { ...@@ -1186,8 +1149,6 @@ static struct nf_nat_hook nat_hook = {
.manip_pkt = nf_nat_manip_pkt, .manip_pkt = nf_nat_manip_pkt,
}; };
int nf_nat_l3proto_init(void);
void nf_nat_l3proto_exit(void);
static int __init nf_nat_init(void) static int __init nf_nat_init(void)
{ {
int ret, i; int ret, i;
...@@ -1222,19 +1183,6 @@ static int __init nf_nat_init(void) ...@@ -1222,19 +1183,6 @@ static int __init nf_nat_init(void)
WARN_ON(nf_nat_hook != NULL); WARN_ON(nf_nat_hook != NULL);
RCU_INIT_POINTER(nf_nat_hook, &nat_hook); RCU_INIT_POINTER(nf_nat_hook, &nat_hook);
ret = nf_nat_l3proto_init();
if (ret) {
nf_ct_extend_unregister(&nat_extend);
nf_ct_helper_expectfn_unregister(&follow_master_nat);
RCU_INIT_POINTER(nf_nat_hook, NULL);
synchronize_net();
kvfree(nf_nat_bysource);
unregister_pernet_subsys(&nat_net_ops);
return ret;
}
return 0; return 0;
} }
...@@ -1244,8 +1192,6 @@ static void __exit nf_nat_cleanup(void) ...@@ -1244,8 +1192,6 @@ static void __exit nf_nat_cleanup(void)
nf_ct_iterate_destroy(nf_nat_proto_clean, &clean); nf_ct_iterate_destroy(nf_nat_proto_clean, &clean);
nf_nat_l3proto_exit();
nf_ct_extend_unregister(&nat_extend); nf_ct_extend_unregister(&nat_extend);
nf_ct_helper_expectfn_unregister(&follow_master_nat); nf_ct_helper_expectfn_unregister(&follow_master_nat);
RCU_INIT_POINTER(nf_nat_hook, NULL); RCU_INIT_POINTER(nf_nat_hook, NULL);
......
...@@ -35,11 +35,6 @@ ...@@ -35,11 +35,6 @@
#include <net/netfilter/nf_conntrack.h> #include <net/netfilter/nf_conntrack.h>
#include <linux/netfilter/nfnetlink_conntrack.h> #include <linux/netfilter/nfnetlink_conntrack.h>
static const struct nf_nat_l3proto nf_nat_l3proto_ipv4;
#if IS_ENABLED(CONFIG_IPV6)
static const struct nf_nat_l3proto nf_nat_l3proto_ipv6;
#endif
static void nf_csum_update(struct sk_buff *skb, static void nf_csum_update(struct sk_buff *skb,
unsigned int iphdroff, __sum16 *check, unsigned int iphdroff, __sum16 *check,
const struct nf_conntrack_tuple *t, const struct nf_conntrack_tuple *t,
...@@ -555,10 +550,6 @@ void nf_nat_csum_recalc(struct sk_buff *skb, ...@@ -555,10 +550,6 @@ void nf_nat_csum_recalc(struct sk_buff *skb,
WARN_ON_ONCE(1); WARN_ON_ONCE(1);
} }
static const struct nf_nat_l3proto nf_nat_l3proto_ipv4 = {
.l3proto = NFPROTO_IPV4,
};
int nf_nat_icmp_reply_translation(struct sk_buff *skb, int nf_nat_icmp_reply_translation(struct sk_buff *skb,
struct nf_conn *ct, struct nf_conn *ct,
enum ip_conntrack_info ctinfo, enum ip_conntrack_info ctinfo,
...@@ -779,36 +770,7 @@ void nf_nat_l3proto_ipv4_unregister_fn(struct net *net, const struct nf_hook_ops ...@@ -779,36 +770,7 @@ void nf_nat_l3proto_ipv4_unregister_fn(struct net *net, const struct nf_hook_ops
} }
EXPORT_SYMBOL_GPL(nf_nat_l3proto_ipv4_unregister_fn); EXPORT_SYMBOL_GPL(nf_nat_l3proto_ipv4_unregister_fn);
int nf_nat_l3proto_init(void)
{
int ret = nf_nat_l3proto_register(&nf_nat_l3proto_ipv4);
#if IS_ENABLED(CONFIG_IPV6) #if IS_ENABLED(CONFIG_IPV6)
if (ret)
return ret;
ret = nf_nat_l3proto_register(&nf_nat_l3proto_ipv6);
if (ret == 0)
return ret;
nf_nat_l3proto_unregister(&nf_nat_l3proto_ipv4);
#endif
return ret;
}
void nf_nat_l3proto_exit(void)
{
#if IS_ENABLED(CONFIG_IPV6)
nf_nat_l3proto_unregister(&nf_nat_l3proto_ipv6);
#endif
nf_nat_l3proto_unregister(&nf_nat_l3proto_ipv4);
}
#if IS_ENABLED(CONFIG_IPV6)
static const struct nf_nat_l3proto nf_nat_l3proto_ipv6 = {
.l3proto = NFPROTO_IPV6,
};
int nf_nat_icmpv6_reply_translation(struct sk_buff *skb, int nf_nat_icmpv6_reply_translation(struct sk_buff *skb,
struct nf_conn *ct, struct nf_conn *ct,
enum ip_conntrack_info ctinfo, enum ip_conntrack_info ctinfo,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment