aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2012-06-20 14:52:31 -0400
committerPablo Neira Ayuso <pablo@netfilter.org>2012-06-21 20:49:52 -0400
commitd584a61a931e6cbfef0dd811c4ae0250ec5987f4 (patch)
treeaf8f5ff1ace6bc0034f5f351bca12d09e9c5f42e /net
parent5a05fae5ca7cd5279567747fc34d60413b504cd6 (diff)
netfilter: nfnetlink_queue: fix compilation with CONFIG_NF_NAT=m and CONFIG_NF_CT_NETLINK=y
LD init/built-in.o net/built-in.o:(.data+0x4408): undefined reference to `nf_nat_tcp_seq_adjust' make: *** [vmlinux] Error 1 This patch adds a new pointer hook (nfq_ct_nat_hook) similar to other existing in Netfilter to solve our complicated configuration dependencies. Reported-by: Valdis Kletnieks <valdis.kletnieks@vt.edu> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net')
-rw-r--r--net/ipv4/netfilter/nf_nat_core.c6
-rw-r--r--net/netfilter/core.c3
-rw-r--r--net/netfilter/nf_conntrack_netlink.c3
-rw-r--r--net/netfilter/nfnetlink_queue_ct.c8
4 files changed, 13 insertions, 7 deletions
diff --git a/net/ipv4/netfilter/nf_nat_core.c b/net/ipv4/netfilter/nf_nat_core.c
index abb52adf5acd..44b082fd48ab 100644
--- a/net/ipv4/netfilter/nf_nat_core.c
+++ b/net/ipv4/netfilter/nf_nat_core.c
@@ -691,6 +691,10 @@ static struct nf_ct_helper_expectfn follow_master_nat = {
691 .expectfn = nf_nat_follow_master, 691 .expectfn = nf_nat_follow_master,
692}; 692};
693 693
694static struct nfq_ct_nat_hook nfq_ct_nat = {
695 .seq_adjust = nf_nat_tcp_seq_adjust,
696};
697
694static int __init nf_nat_init(void) 698static int __init nf_nat_init(void)
695{ 699{
696 size_t i; 700 size_t i;
@@ -731,6 +735,7 @@ static int __init nf_nat_init(void)
731 nfnetlink_parse_nat_setup); 735 nfnetlink_parse_nat_setup);
732 BUG_ON(nf_ct_nat_offset != NULL); 736 BUG_ON(nf_ct_nat_offset != NULL);
733 RCU_INIT_POINTER(nf_ct_nat_offset, nf_nat_get_offset); 737 RCU_INIT_POINTER(nf_ct_nat_offset, nf_nat_get_offset);
738 RCU_INIT_POINTER(nfq_ct_nat_hook, &nfq_ct_nat);
734 return 0; 739 return 0;
735 740
736 cleanup_extend: 741 cleanup_extend:
@@ -747,6 +752,7 @@ static void __exit nf_nat_cleanup(void)
747 RCU_INIT_POINTER(nf_nat_seq_adjust_hook, NULL); 752 RCU_INIT_POINTER(nf_nat_seq_adjust_hook, NULL);
748 RCU_INIT_POINTER(nfnetlink_parse_nat_setup_hook, NULL); 753 RCU_INIT_POINTER(nfnetlink_parse_nat_setup_hook, NULL);
749 RCU_INIT_POINTER(nf_ct_nat_offset, NULL); 754 RCU_INIT_POINTER(nf_ct_nat_offset, NULL);
755 RCU_INIT_POINTER(nfq_ct_nat_hook, NULL);
750 synchronize_net(); 756 synchronize_net();
751} 757}
752 758
diff --git a/net/netfilter/core.c b/net/netfilter/core.c
index 4cd10ed2d6e6..0bc6b60db4df 100644
--- a/net/netfilter/core.c
+++ b/net/netfilter/core.c
@@ -268,6 +268,9 @@ EXPORT_SYMBOL(nf_conntrack_destroy);
268struct nfq_ct_hook __rcu *nfq_ct_hook __read_mostly; 268struct nfq_ct_hook __rcu *nfq_ct_hook __read_mostly;
269EXPORT_SYMBOL_GPL(nfq_ct_hook); 269EXPORT_SYMBOL_GPL(nfq_ct_hook);
270 270
271struct nfq_ct_nat_hook __rcu *nfq_ct_nat_hook __read_mostly;
272EXPORT_SYMBOL_GPL(nfq_ct_nat_hook);
273
271#endif /* CONFIG_NF_CONNTRACK */ 274#endif /* CONFIG_NF_CONNTRACK */
272 275
273#ifdef CONFIG_PROC_FS 276#ifdef CONFIG_PROC_FS
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
index 31d1d8f3a6ce..8bb47339b770 100644
--- a/net/netfilter/nf_conntrack_netlink.c
+++ b/net/netfilter/nf_conntrack_netlink.c
@@ -1757,9 +1757,6 @@ static struct nfq_ct_hook ctnetlink_nfqueue_hook = {
1757 .build_size = ctnetlink_nfqueue_build_size, 1757 .build_size = ctnetlink_nfqueue_build_size,
1758 .build = ctnetlink_nfqueue_build, 1758 .build = ctnetlink_nfqueue_build,
1759 .parse = ctnetlink_nfqueue_parse, 1759 .parse = ctnetlink_nfqueue_parse,
1760#ifdef CONFIG_NF_NAT_NEEDED
1761 .seq_adjust = nf_nat_tcp_seq_adjust,
1762#endif
1763}; 1760};
1764#endif /* CONFIG_NETFILTER_NETLINK_QUEUE_CT */ 1761#endif /* CONFIG_NETFILTER_NETLINK_QUEUE_CT */
1765 1762
diff --git a/net/netfilter/nfnetlink_queue_ct.c b/net/netfilter/nfnetlink_queue_ct.c
index 68ef550066f5..01247b730e66 100644
--- a/net/netfilter/nfnetlink_queue_ct.c
+++ b/net/netfilter/nfnetlink_queue_ct.c
@@ -86,12 +86,12 @@ nla_put_failure:
86void nfqnl_ct_seq_adjust(struct sk_buff *skb, struct nf_conn *ct, 86void nfqnl_ct_seq_adjust(struct sk_buff *skb, struct nf_conn *ct,
87 enum ip_conntrack_info ctinfo, int diff) 87 enum ip_conntrack_info ctinfo, int diff)
88{ 88{
89 struct nfq_ct_hook *nfq_ct; 89 struct nfq_ct_nat_hook *nfq_nat_ct;
90 90
91 nfq_ct = rcu_dereference(nfq_ct_hook); 91 nfq_nat_ct = rcu_dereference(nfq_ct_nat_hook);
92 if (nfq_ct == NULL) 92 if (nfq_nat_ct == NULL)
93 return; 93 return;
94 94
95 if ((ct->status & IPS_NAT_MASK) && diff) 95 if ((ct->status & IPS_NAT_MASK) && diff)
96 nfq_ct->seq_adjust(skb, ct, ctinfo, diff); 96 nfq_nat_ct->seq_adjust(skb, ct, ctinfo, diff);
97} 97}