netfilter: nat: remove l3proto struct
All l3proto function pointers have been removed. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
Родитель
dac3fe7259
Коммит
d6c4c8ffb5
|
@ -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,
|
||||||
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 @@
|
||||||
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 {
|
||||||
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)
|
||||||
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,
|
||||||
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,
|
||||||
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 = {
|
||||||
.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)
|
||||||
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)
|
||||||
|
|
||||||
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 @@
|
||||||
#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,
|
||||||
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
|
||||||
}
|
}
|
||||||
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,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче