All of lore.kernel.org
 help / color / mirror / Atom feed
From: Martin Josefsson <gandalf@wlug.westbo.se>
To: Harald Welte <laforge@gnumonks.org>
Cc: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>,
	Netfilter-devel <netfilter-devel@lists.netfilter.org>
Subject: Re: [PATCH 2] Re: what's the lockingrules for ip_conntrack_expect_list?
Date: 12 Oct 2002 17:32:55 +0200	[thread overview]
Message-ID: <1034436775.7595.96.camel@tux> (raw)
In-Reply-To: <20021012163620.C13233@sunbeam.de.gnumonks.org>

[-- Attachment #1: Type: text/plain, Size: 972 bytes --]

On Sat, 2002-10-12 at 16:36, Harald Welte wrote:
> On Sat, Oct 12, 2002 at 03:29:12PM +0200, Martin Josefsson wrote:
> > Attached patch changes the write-locked tuple_lock to cover the entire
> > function.
> > Is this ok with you?
> 
> looks fine.  Now we only need the find_proto() change, and I'll submit 
> the two combined to the kernel.

The find_proto() change is a little trickier... it depends on
ip_conntrack_protocol.h. I suggest that we move find_proto() to
ip_conntrack_protocol.h. And then find_proto() also depends on
listhelp.h... include-dependencies isn't fun.

Making find_proto() an inline adds two exported symbols, protocol_list
and ip_conntrack_generic_protocol.

I've attached a patch that at least compiles, I havn't tried booting it
yet. Does this look even remotely ok to you? If it does I'll try booting
it and send you a combined patch.

-- 
/Martin

Never argue with an idiot. They drag you down to their level, then beat
you with experience.

[-- Attachment #2: find_proto-inline.diff --]
[-- Type: text/plain, Size: 10383 bytes --]

--- linux-2.4.20-pre10/include/linux/netfilter_ipv4/ip_conntrack_core.h.meep	2002-10-12 16:54:30.000000000 +0200
+++ linux-2.4.20-pre10/include/linux/netfilter_ipv4/ip_conntrack_core.h	2002-10-12 17:17:16.000000000 +0200
@@ -16,9 +16,6 @@
 
 struct ip_conntrack_protocol;
 extern struct ip_conntrack_protocol *ip_ct_find_proto(u_int8_t protocol);
-/* Like above, but you already have conntrack read lock. */
-extern struct ip_conntrack_protocol *__find_proto(u_int8_t protocol);
-extern struct list_head protocol_list;
 
 /* Returns conntrack if it dealt with ICMP, and filled in skb->nfct */
 extern struct ip_conntrack *icmp_error_track(struct sk_buff *skb,
--- linux-2.4.20-pre10/include/linux/netfilter_ipv4/ip_conntrack_protocol.h.meep	2002-10-12 16:55:28.000000000 +0200
+++ linux-2.4.20-pre10/include/linux/netfilter_ipv4/ip_conntrack_protocol.h	2002-10-12 17:14:40.000000000 +0200
@@ -62,4 +62,28 @@
 extern struct ip_conntrack_protocol ip_conntrack_protocol_udp;
 extern struct ip_conntrack_protocol ip_conntrack_protocol_icmp;
 extern int ip_conntrack_protocol_tcp_init(void);
+
+extern struct list_head protocol_list;
+extern struct ip_conntrack_protocol ip_conntrack_generic_protocol;
+
+static inline int proto_cmpfn(const struct ip_conntrack_protocol *curr,
+			      u_int8_t protocol)
+{
+	return protocol == curr->proto;
+}
+
+static inline struct ip_conntrack_protocol *__find_proto(u_int8_t protocol)
+{
+	struct ip_conntrack_protocol *p;
+
+	MUST_BE_READ_LOCKED(&ip_conntrack_lock);
+	p = LIST_FIND(&protocol_list, proto_cmpfn,
+		      struct ip_conntrack_protocol *, protocol);
+	if (!p)
+		p = &ip_conntrack_generic_protocol;
+
+	return p;
+}
+
+
 #endif /*_IP_CONNTRACK_PROTOCOL_H*/
--- linux-2.4.20-pre10/net/ipv4/netfilter/ip_conntrack_core.c.meep	2002-10-12 15:29:47.000000000 +0200
+++ linux-2.4.20-pre10/net/ipv4/netfilter/ip_conntrack_core.c	2002-10-12 17:09:32.000000000 +0200
@@ -39,11 +39,11 @@
 #define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip_conntrack_lock)
 #define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip_conntrack_lock)
 
+#include <linux/netfilter_ipv4/listhelp.h>
 #include <linux/netfilter_ipv4/ip_conntrack.h>
 #include <linux/netfilter_ipv4/ip_conntrack_protocol.h>
 #include <linux/netfilter_ipv4/ip_conntrack_helper.h>
 #include <linux/netfilter_ipv4/ip_conntrack_core.h>
-#include <linux/netfilter_ipv4/listhelp.h>
 
 #define IP_CONNTRACK_VERSION	"2.1"
 
@@ -66,27 +66,6 @@
 struct list_head *ip_conntrack_hash;
 static kmem_cache_t *ip_conntrack_cachep;
 
-extern struct ip_conntrack_protocol ip_conntrack_generic_protocol;
-
-static inline int proto_cmpfn(const struct ip_conntrack_protocol *curr,
-			      u_int8_t protocol)
-{
-	return protocol == curr->proto;
-}
-
-struct ip_conntrack_protocol *__find_proto(u_int8_t protocol)
-{
-	struct ip_conntrack_protocol *p;
-
-	MUST_BE_READ_LOCKED(&ip_conntrack_lock);
-	p = LIST_FIND(&protocol_list, proto_cmpfn,
-		      struct ip_conntrack_protocol *, protocol);
-	if (!p)
-		p = &ip_conntrack_generic_protocol;
-
-	return p;
-}
-
 struct ip_conntrack_protocol *ip_ct_find_proto(u_int8_t protocol)
 {
 	struct ip_conntrack_protocol *p;
--- linux-2.4.20-pre10/net/ipv4/netfilter/ip_nat_core.c.meep	2002-10-12 15:37:02.000000000 +0200
+++ linux-2.4.20-pre10/net/ipv4/netfilter/ip_nat_core.c	2002-10-12 17:30:38.000000000 +0200
@@ -21,6 +21,7 @@
 #define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip_nat_lock)
 #define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip_nat_lock)
 
+#include <linux/netfilter_ipv4/listhelp.h>
 #include <linux/netfilter_ipv4/ip_conntrack.h>
 #include <linux/netfilter_ipv4/ip_conntrack_core.h>
 #include <linux/netfilter_ipv4/ip_conntrack_protocol.h>
@@ -29,7 +30,6 @@
 #include <linux/netfilter_ipv4/ip_nat_core.h>
 #include <linux/netfilter_ipv4/ip_nat_helper.h>
 #include <linux/netfilter_ipv4/ip_conntrack_helper.h>
-#include <linux/netfilter_ipv4/listhelp.h>
 
 #if 0
 #define DEBUGP printk
@@ -739,7 +739,7 @@
 	int ret = 1;
 
 	MUST_BE_READ_LOCKED(&ip_conntrack_lock);
-	proto = ip_ct_find_proto((*pskb)->nh.iph->protocol);
+	proto = __find_proto((*pskb)->nh.iph->protocol);
 	if (proto->exp_matches_pkt)
 		ret = proto->exp_matches_pkt(exp, pskb);
 
--- linux-2.4.20-pre10/net/ipv4/netfilter/ip_conntrack_standalone.c.meep	2002-10-12 17:00:17.000000000 +0200
+++ linux-2.4.20-pre10/net/ipv4/netfilter/ip_conntrack_standalone.c	2002-10-12 17:25:42.000000000 +0200
@@ -21,11 +21,11 @@
 #define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip_conntrack_lock)
 #define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip_conntrack_lock)
 
+#include <linux/netfilter_ipv4/listhelp.h>
 #include <linux/netfilter_ipv4/ip_conntrack.h>
 #include <linux/netfilter_ipv4/ip_conntrack_protocol.h>
 #include <linux/netfilter_ipv4/ip_conntrack_core.h>
 #include <linux/netfilter_ipv4/ip_conntrack_helper.h>
-#include <linux/netfilter_ipv4/listhelp.h>
 
 #if 0
 #define DEBUGP printk
@@ -361,6 +361,8 @@
 EXPORT_SYMBOL(ip_ct_selective_cleanup);
 EXPORT_SYMBOL(ip_ct_refresh);
 EXPORT_SYMBOL(ip_ct_find_proto);
+EXPORT_SYMBOL(protocol_list);
+EXPORT_SYMBOL(ip_conntrack_generic_protocol);
 EXPORT_SYMBOL(ip_ct_find_helper);
 EXPORT_SYMBOL(ip_conntrack_expect_related);
 EXPORT_SYMBOL(ip_conntrack_change_expect);
--- linux-2.4.20-pre10/net/ipv4/netfilter/ip_conntrack_proto_generic.c.meep	2002-10-12 17:09:55.000000000 +0200
+++ linux-2.4.20-pre10/net/ipv4/netfilter/ip_conntrack_proto_generic.c	2002-10-12 17:11:35.000000000 +0200
@@ -1,7 +1,12 @@
 #include <linux/types.h>
 #include <linux/sched.h>
 #include <linux/timer.h>
+
+#define ASSERT_READ_LOCK(x)
+#define ASSERT_WRITE_LOCK(x)
+
 #include <linux/netfilter.h>
+#include <linux/netfilter_ipv4/listhelp.h>
 #include <linux/netfilter_ipv4/ip_conntrack_protocol.h>
 
 #define GENERIC_TIMEOUT (600*HZ)
--- linux-2.4.20-pre10/net/ipv4/netfilter/ip_conntrack_proto_tcp.c.meep	2002-10-12 17:11:56.000000000 +0200
+++ linux-2.4.20-pre10/net/ipv4/netfilter/ip_conntrack_proto_tcp.c	2002-10-12 17:12:24.000000000 +0200
@@ -11,6 +11,10 @@
 
 #include <net/tcp.h>
 
+#define ASSERT_READ_LOCK(x)
+#define ASSERT_WRITE_LOCK(x)
+
+#include <linux/netfilter_ipv4/listhelp.h>
 #include <linux/netfilter_ipv4/ip_conntrack.h>
 #include <linux/netfilter_ipv4/ip_conntrack_protocol.h>
 #include <linux/netfilter_ipv4/lockhelp.h>
--- linux-2.4.20-pre10/net/ipv4/netfilter/ip_conntrack_proto_udp.c.meep	2002-10-12 17:12:34.000000000 +0200
+++ linux-2.4.20-pre10/net/ipv4/netfilter/ip_conntrack_proto_udp.c	2002-10-12 17:12:55.000000000 +0200
@@ -4,6 +4,11 @@
 #include <linux/netfilter.h>
 #include <linux/in.h>
 #include <linux/udp.h>
+
+#define ASSERT_READ_LOCK(x)
+#define ASSERT_WRITE_LOCK(x)
+
+#include <linux/netfilter_ipv4/listhelp.h>
 #include <linux/netfilter_ipv4/ip_conntrack_protocol.h>
 
 #define UDP_TIMEOUT (30*HZ)
--- linux-2.4.20-pre10/net/ipv4/netfilter/ip_conntrack_proto_icmp.c.meep	2002-10-12 17:13:10.000000000 +0200
+++ linux-2.4.20-pre10/net/ipv4/netfilter/ip_conntrack_proto_icmp.c	2002-10-12 17:13:22.000000000 +0200
@@ -4,6 +4,11 @@
 #include <linux/netfilter.h>
 #include <linux/in.h>
 #include <linux/icmp.h>
+
+#define ASSERT_READ_LOCK(x)
+#define ASSERT_WRITE_LOCK(x)
+
+#include <linux/netfilter_ipv4/listhelp.h>
 #include <linux/netfilter_ipv4/ip_conntrack_protocol.h>
 
 #define ICMP_TIMEOUT (30*HZ)
--- linux-2.4.20-pre10/net/ipv4/netfilter/ip_nat_helper.c.meep	2002-10-12 17:15:10.000000000 +0200
+++ linux-2.4.20-pre10/net/ipv4/netfilter/ip_nat_helper.c	2002-10-12 17:15:19.000000000 +0200
@@ -26,13 +26,13 @@
 #define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip_nat_lock)
 #define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip_nat_lock)
 
+#include <linux/netfilter_ipv4/listhelp.h>
 #include <linux/netfilter_ipv4/ip_conntrack.h>
 #include <linux/netfilter_ipv4/ip_conntrack_helper.h>
 #include <linux/netfilter_ipv4/ip_nat.h>
 #include <linux/netfilter_ipv4/ip_nat_protocol.h>
 #include <linux/netfilter_ipv4/ip_nat_core.h>
 #include <linux/netfilter_ipv4/ip_nat_helper.h>
-#include <linux/netfilter_ipv4/listhelp.h>
 
 #if 0
 #define DEBUGP printk
--- linux-2.4.20-pre10/net/ipv4/netfilter/ip_nat_rule.c.meep	2002-10-12 17:15:28.000000000 +0200
+++ linux-2.4.20-pre10/net/ipv4/netfilter/ip_nat_rule.c	2002-10-12 17:15:45.000000000 +0200
@@ -15,11 +15,11 @@
 #define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip_nat_lock)
 #define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip_nat_lock)
 
+#include <linux/netfilter_ipv4/listhelp.h>
 #include <linux/netfilter_ipv4/ip_tables.h>
 #include <linux/netfilter_ipv4/ip_nat.h>
 #include <linux/netfilter_ipv4/ip_nat_core.h>
 #include <linux/netfilter_ipv4/ip_nat_rule.h>
-#include <linux/netfilter_ipv4/listhelp.h>
 
 #if 0
 #define DEBUGP printk
--- linux-2.4.20-pre10/net/ipv4/netfilter/ip_nat_standalone.c.meep	2002-10-12 17:15:53.000000000 +0200
+++ linux-2.4.20-pre10/net/ipv4/netfilter/ip_nat_standalone.c	2002-10-12 17:16:01.000000000 +0200
@@ -28,6 +28,7 @@
 #define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip_nat_lock)
 #define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip_nat_lock)
 
+#include <linux/netfilter_ipv4/listhelp.h>
 #include <linux/netfilter_ipv4/ip_nat.h>
 #include <linux/netfilter_ipv4/ip_nat_rule.h>
 #include <linux/netfilter_ipv4/ip_nat_protocol.h>
@@ -35,7 +36,6 @@
 #include <linux/netfilter_ipv4/ip_nat_helper.h>
 #include <linux/netfilter_ipv4/ip_tables.h>
 #include <linux/netfilter_ipv4/ip_conntrack_core.h>
-#include <linux/netfilter_ipv4/listhelp.h>
 
 #if 0
 #define DEBUGP printk
--- linux-2.4.20-pre10/net/ipv4/netfilter/ip_fw_compat_masq.c.meep	2002-10-12 17:20:08.000000000 +0200
+++ linux-2.4.20-pre10/net/ipv4/netfilter/ip_fw_compat_masq.c	2002-10-12 17:20:35.000000000 +0200
@@ -20,11 +20,11 @@
 #define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip_conntrack_lock)
 #define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip_conntrack_lock)
 
+#include <linux/netfilter_ipv4/listhelp.h>
 #include <linux/netfilter_ipv4/ip_conntrack.h>
 #include <linux/netfilter_ipv4/ip_conntrack_core.h>
 #include <linux/netfilter_ipv4/ip_nat.h>
 #include <linux/netfilter_ipv4/ip_nat_core.h>
-#include <linux/netfilter_ipv4/listhelp.h>
 
 #if 0
 #define DEBUGP printk

  parent reply	other threads:[~2002-10-12 15:32 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-10-10 21:40 what's the lockingrules for ip_conntrack_expect_list? Martin Josefsson
2002-10-11 13:06 ` Jozsef Kadlecsik
2002-10-11 13:56   ` Martin Josefsson
2002-10-11 14:07     ` Jozsef Kadlecsik
2002-10-11 18:42       ` [PATCH] " Martin Josefsson
2002-10-12 12:25         ` Harald Welte
2002-10-12 13:11           ` Martin Josefsson
2002-10-12 12:17   ` Harald Welte
2002-10-12 13:09     ` Martin Josefsson
2002-10-12 13:20       ` Martin Josefsson
2002-10-12 13:29       ` [PATCH 2] " Martin Josefsson
2002-10-12 14:36         ` Harald Welte
2002-10-12 14:59           ` Min Li
2002-10-12 15:32           ` Martin Josefsson [this message]
2002-10-14 11:33             ` Harald Welte
2002-10-14 13:26               ` Martin Josefsson
2002-10-23 15:16             ` how you use nfnetlink-ctnetlink-0.11.patch marian stagarescu
2002-10-23 15:52               ` Harald Welte
2002-10-12 14:34       ` what's the lockingrules for ip_conntrack_expect_list? Harald Welte

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1034436775.7595.96.camel@tux \
    --to=gandalf@wlug.westbo.se \
    --cc=kadlec@blackhole.kfki.hu \
    --cc=laforge@gnumonks.org \
    --cc=netfilter-devel@lists.netfilter.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.