Changes and improvements submitted to davem render cvs version of 0-newnat7
unusable
Attached is 'patch on patch'. I hope this will fix the thing.
Next chunk - snmp nat for newnat - will come tomorrow.
--
Paul P 'Stingray' Komkoff 'Greatest' Jr // (icq)23200764 // (irc)Spacebar
PPKJ1-RIPE // (smtp)[EMAIL PROTECTED] // (http)stingr.net // (pgp)0xA4B4ECA4
--- 0-newnat7.patch Wed Feb 20 17:45:03 2002
+++ /home/stingray/take1newnat Fri Mar 8 20:19:49 2002
@@ -1,6 +1,6 @@
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_conntrack.h
linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_conntrack.h
---- linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_conntrack.h Wed Oct 31
00:08:12 2001
-+++ linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_conntrack.h Thu Feb 7
15:03:55 2002
+diff -Nru a/include/linux/netfilter_ipv4/ip_conntrack.h
+b/include/linux/netfilter_ipv4/ip_conntrack.h
+--- a/include/linux/netfilter_ipv4/ip_conntrack.h Fri Mar 8 20:19:49 2002
++++ b/include/linux/netfilter_ipv4/ip_conntrack.h Fri Mar 8 20:19:49 2002
@@ -6,6 +6,7 @@
#include <linux/config.h>
@@ -9,9 +9,9 @@
enum ip_conntrack_info
{
-@@ -62,30 +63,58 @@
- IPS_ASSURED = (1 << IPS_ASSURED_BIT),
- };
+@@ -62,27 +63,58 @@
+ #define IP_NF_ASSERT(x)
+ #endif
+#ifdef CONFIG_IP_NF_NAT_NEEDED
+#include <linux/netfilter_ipv4/ip_nat.h>
@@ -44,7 +44,7 @@
+ struct timer_list timeout;
+
+ /* Data filled out by the conntrack helpers follow: */
-+
++
/* We expect this tuple, with the following mask */
struct ip_conntrack_tuple tuple, mask;
@@ -55,31 +55,29 @@
- struct ip_conntrack *expectant;
-};
-
--#ifdef CONFIG_IP_NF_NAT_NEEDED
--#include <linux/netfilter_ipv4/ip_nat.h>
--#endif
+ /* At which sequence number did this expectation occur */
+ u_int32_t seq;
-
--#include <linux/netfilter_ipv4/ip_conntrack_ftp.h>
++
+ union {
+ /* insert conntrack helper private data (expect) here */
+ struct ip_ct_ftp_expect exp_ftp_info;
+ struct ip_ct_irc_expect exp_irc_info;
-
--#if defined(CONFIG_IP_NF_IRC) || defined(CONFIG_IP_NF_IRC_MODULE)
--#include <linux/netfilter_ipv4/ip_conntrack_irc.h>
-+#ifdef CONFIG_IP_NF_NAT_NEEDED
-+ union {
++
+ #ifdef CONFIG_IP_NF_NAT_NEEDED
+-#include <linux/netfilter_ipv4/ip_nat.h>
++ union {
+ /* insert nat helper private data here */
+ } nat;
#endif
+-
+-#include <linux/netfilter_ipv4/ip_conntrack_ftp.h>
+-#include <linux/netfilter_ipv4/ip_conntrack_irc.h>
+ } help;
+};
struct ip_conntrack
{
-@@ -104,10 +133,13 @@
+@@ -101,10 +133,13 @@
/* If we're expecting another related connection, this will be
in expected linked list */
@@ -96,21 +94,19 @@
/* Helper, if any. */
struct ip_conntrack_helper *helper;
-@@ -124,10 +156,9 @@
+@@ -121,8 +156,9 @@
} proto;
union {
- struct ip_ct_ftp ct_ftp_info;
--#if defined(CONFIG_IP_NF_IRC) || defined(CONFIG_IP_NF_IRC_MODULE)
- struct ip_ct_irc ct_irc_info;
--#endif
+ /* insert conntrack helper private data (master) here */
+ struct ip_ct_ftp_master ct_ftp_info;
+ struct ip_ct_irc_master ct_irc_info;
} help;
#ifdef CONFIG_IP_NF_NAT_NEEDED
-@@ -144,6 +175,9 @@
+@@ -139,6 +175,9 @@
#endif /* CONFIG_IP_NF_NAT_NEEDED */
};
@@ -120,9 +116,9 @@
/* Alter reply tuple (maybe alter helper). If it's already taken,
return 0 and don't do alteration. */
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_conntrack_core.h
linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_conntrack_core.h
---- linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_conntrack_core.h Fri Apr 27
23:15:01 2001
-+++ linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_conntrack_core.h Thu
Feb 7 15:03:55 2002
+diff -Nru a/include/linux/netfilter_ipv4/ip_conntrack_core.h
+b/include/linux/netfilter_ipv4/ip_conntrack_core.h
+--- a/include/linux/netfilter_ipv4/ip_conntrack_core.h Fri Mar 8 20:19:49 2002
++++ b/include/linux/netfilter_ipv4/ip_conntrack_core.h Fri Mar 8 20:19:49 2002
@@ -15,7 +15,7 @@
extern void ip_conntrack_cleanup(void);
@@ -132,9 +128,9 @@
/* 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;
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_conntrack_ftp.h
linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_conntrack_ftp.h
---- linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_conntrack_ftp.h Thu Apr 26
00:00:28 2001
-+++ linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_conntrack_ftp.h Thu
Feb 7 15:03:55 2002
+diff -Nru a/include/linux/netfilter_ipv4/ip_conntrack_ftp.h
+b/include/linux/netfilter_ipv4/ip_conntrack_ftp.h
+--- a/include/linux/netfilter_ipv4/ip_conntrack_ftp.h Fri Mar 8 20:19:49 2002
++++ b/include/linux/netfilter_ipv4/ip_conntrack_ftp.h Fri Mar 8 20:19:49 2002
@@ -11,6 +11,8 @@
/* Protects ftp part of conntracks */
DECLARE_LOCK_EXTERN(ip_ftp_lock);
@@ -176,9 +172,9 @@
/* Next valid seq position for cmd matching after newline */
u_int32_t seq_aft_nl[IP_CT_DIR_MAX];
/* 0 means seq_match_aft_nl not set */
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_conntrack_helper.h
linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_conntrack_helper.h
---- linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_conntrack_helper.h Mon
Dec 11 22:31:23 2000
-+++ linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_conntrack_helper.h Mon
Feb 11 10:32:48 2002
+diff -Nru a/include/linux/netfilter_ipv4/ip_conntrack_helper.h
+b/include/linux/netfilter_ipv4/ip_conntrack_helper.h
+--- a/include/linux/netfilter_ipv4/ip_conntrack_helper.h Fri Mar 8 20:19:49
+2002
++++ b/include/linux/netfilter_ipv4/ip_conntrack_helper.h Fri Mar 8 20:19:49
+2002
@@ -5,6 +5,9 @@
struct module;
@@ -232,9 +228,9 @@
+extern void ip_conntrack_unexpect_related(struct ip_conntrack_expect *exp);
#endif /*_IP_CONNTRACK_HELPER_H*/
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_conntrack_irc.h
linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_conntrack_irc.h
---- linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_conntrack_irc.h Wed Oct 31
00:08:12 2001
-+++ linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_conntrack_irc.h Thu
Feb 7 15:03:55 2002
+diff -Nru a/include/linux/netfilter_ipv4/ip_conntrack_irc.h
+b/include/linux/netfilter_ipv4/ip_conntrack_irc.h
+--- a/include/linux/netfilter_ipv4/ip_conntrack_irc.h Fri Mar 8 20:19:49 2002
++++ b/include/linux/netfilter_ipv4/ip_conntrack_irc.h Fri Mar 8 20:19:49 2002
@@ -20,7 +20,7 @@
#include <linux/netfilter_ipv4/lockhelp.h>
@@ -269,12 +265,12 @@
};
#endif /* _IP_CONNTRACK_IRC_H */
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_conntrack_protocol.h
linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_conntrack_protocol.h
---- linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_conntrack_protocol.h Fri
Apr 27 23:15:01 2001
-+++ linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_conntrack_protocol.h Thu
Feb 7 15:03:55 2002
-@@ -42,6 +42,10 @@
- int (*new)(struct ip_conntrack *conntrack, struct iphdr *iph,
- size_t len);
+diff -Nru a/include/linux/netfilter_ipv4/ip_conntrack_protocol.h
+b/include/linux/netfilter_ipv4/ip_conntrack_protocol.h
+--- a/include/linux/netfilter_ipv4/ip_conntrack_protocol.h Fri Mar 8 20:19:49
+2002
++++ b/include/linux/netfilter_ipv4/ip_conntrack_protocol.h Fri Mar 8 20:19:49
+2002
+@@ -45,6 +45,10 @@
+ /* Called when a conntrack entry is destroyed */
+ void (*destroy)(struct ip_conntrack *conntrack);
+ /* Has to decide if a expectation matches one packet or not */
+ int (*exp_matches_pkt)(struct ip_conntrack_expect *exp,
@@ -283,9 +279,9 @@
/* Module (if any) which this is connected to. */
struct module *me;
};
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_nat_helper.h
linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_nat_helper.h
---- linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_nat_helper.h Thu Apr 26
00:00:28 2001
-+++ linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_nat_helper.h Mon Feb 11
10:32:46 2002
+diff -Nru a/include/linux/netfilter_ipv4/ip_nat_helper.h
+b/include/linux/netfilter_ipv4/ip_nat_helper.h
+--- a/include/linux/netfilter_ipv4/ip_nat_helper.h Fri Mar 8 20:19:49 2002
++++ b/include/linux/netfilter_ipv4/ip_nat_helper.h Fri Mar 8 20:19:49 2002
@@ -6,6 +6,12 @@
struct sk_buff;
@@ -331,9 +327,9 @@
-extern void ip_nat_delete_sack(struct sk_buff *skb, struct tcphdr *tcph);
+extern void ip_nat_delete_sack(struct sk_buff *skb);
#endif
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_nat_rule.h
linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_nat_rule.h
---- linux-2.4.17-orig/include/linux/netfilter_ipv4/ip_nat_rule.h Mon Dec 11
22:31:32 2000
-+++ linux-2.4.17-newnat/include/linux/netfilter_ipv4/ip_nat_rule.h Thu Feb 7
15:04:01 2002
+diff -Nru a/include/linux/netfilter_ipv4/ip_nat_rule.h
+b/include/linux/netfilter_ipv4/ip_nat_rule.h
+--- a/include/linux/netfilter_ipv4/ip_nat_rule.h Fri Mar 8 20:19:49 2002
++++ b/include/linux/netfilter_ipv4/ip_nat_rule.h Fri Mar 8 20:19:49 2002
@@ -5,24 +5,7 @@
#include <linux/netfilter_ipv4/ip_nat.h>
@@ -359,9 +355,9 @@
extern int ip_nat_rule_init(void) __init;
extern void ip_nat_rule_cleanup(void);
extern int ip_nat_rule_find(struct sk_buff **pskb,
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/Makefile
linux-2.4.17-newnat/net/ipv4/netfilter/Makefile
---- linux-2.4.17-orig/net/ipv4/netfilter/Makefile Wed Oct 31 00:08:12 2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/Makefile Mon Jan 21 10:16:41 2002
+diff -Nru a/net/ipv4/netfilter/Makefile b/net/ipv4/netfilter/Makefile
+--- a/net/ipv4/netfilter/Makefile Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/Makefile Fri Mar 8 20:19:49 2002
@@ -9,7 +9,7 @@
O_TARGET := netfilter.o
@@ -371,34 +367,24 @@
# Multipart objects.
list-multi := ip_conntrack.o iptable_nat.o ipfwadm.o ipchains.o
-@@ -31,15 +31,21 @@
- # connection tracking
- obj-$(CONFIG_IP_NF_CONNTRACK) += ip_conntrack.o
+@@ -33,7 +33,14 @@
-+# conntrack/NAT protocol helpers:
+ # connection tracking helpers
+ obj-$(CONFIG_IP_NF_FTP) += ip_conntrack_ftp.o
++ifdef CONFIG_IP_NF_NAT_FTP
++ export-objs += ip_conntrack_ftp.o
++endif
+
- # IRC support
obj-$(CONFIG_IP_NF_IRC) += ip_conntrack_irc.o
- obj-$(CONFIG_IP_NF_NAT_IRC) += ip_nat_irc.o
+ifdef CONFIG_IP_NF_NAT_IRC
+ export-objs += ip_conntrack_irc.o
+endif
--# connection tracking helpers
-+# FTP support
- obj-$(CONFIG_IP_NF_FTP) += ip_conntrack_ftp.o
--
--# NAT helpers
+ # NAT helpers
obj-$(CONFIG_IP_NF_NAT_FTP) += ip_nat_ftp.o
-+ifdef CONFIG_IP_NF_NAT_FTP
-+ export-objs += ip_conntrack_ftp.o
-+endif
-
- # generic IP tables
- obj-$(CONFIG_IP_NF_IPTABLES) += ip_tables.o
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_core.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_core.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_core.c Tue Aug 7 17:30:50
2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_core.c Mon Feb 11 12:03:28
2002
+diff -Nru a/net/ipv4/netfilter/ip_conntrack_core.c
+b/net/ipv4/netfilter/ip_conntrack_core.c
+--- a/net/ipv4/netfilter/ip_conntrack_core.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_conntrack_core.c Fri Mar 8 20:19:49 2002
@@ -3,7 +3,12 @@
extension. */
@@ -505,9 +491,9 @@
}
static void
-@@ -176,14 +228,28 @@
- {
+@@ -177,21 +229,36 @@
struct ip_conntrack *ct = (struct ip_conntrack *)nfct;
+ struct ip_conntrack_protocol *proto;
+ DEBUGP("destroy_conntrack(%p)\n", ct);
IP_NF_ASSERT(atomic_read(&nfct->use) == 0);
@@ -515,12 +501,21 @@
- if (ct->master.master)
- nf_conntrack_put(&ct->master);
-+ if (ct->master && master_ct(ct))
-+ ip_conntrack_put(master_ct(ct));
+-
++ if (ct->master && master_ct(ct))
++ ip_conntrack_put(master_ct(ct));
++
+ /* Let's hope we don't get any weird locking issues here.
+ * destroy_conntrack MUST NOT be called with a write lock
+ * to ip_conntrack_lock!!! -HW */
+- proto = find_proto(ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.protonum);
++ proto = ip_ct_find_proto(ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.protonum);
+ if (proto && proto->destroy)
+ proto->destroy(ct);
- if (ip_conntrack_destroyed)
-+ if (ip_conntrack_destroyed) {
-+ DEBUGP("destr_conntr: calling ip_conntrack_destroyed\n");
++ if (ip_conntrack_destroyed) {
++ DEBUGP("destr_conntr: calling ip_conntrack_destroyed\n");
ip_conntrack_destroyed(ct);
+ }
+
@@ -534,10 +529,11 @@
+ WRITE_UNLOCK(&ip_conntrack_lock);
+
+ DEBUGP("destr_conntr: returning ct to slab\n");
++
kmem_cache_free(ip_conntrack_cachep, ct);
atomic_dec(&ip_conntrack_count);
}
-@@ -381,7 +447,7 @@
+@@ -389,7 +456,7 @@
return NULL;
}
@@ -546,7 +542,7 @@
/* Are they talking about one of our connections? */
if (inner->ihl * 4 + 8 > datalen
|| !get_tuple(inner, datalen, &origtuple, innerproto)) {
-@@ -461,10 +527,18 @@
+@@ -469,10 +536,18 @@
return ip_ct_tuple_mask_cmp(rtuple, &i->tuple, &i->mask);
}
@@ -565,7 +561,7 @@
return ip_ct_tuple_mask_cmp(tuple, &i->tuple, &i->mask);
}
-@@ -513,7 +587,7 @@
+@@ -521,7 +596,7 @@
return ERR_PTR(-ENOMEM);
}
@@ -574,7 +570,7 @@
atomic_set(&conntrack->ct_general.use, 1);
conntrack->ct_general.destroy = destroy_conntrack;
conntrack->tuplehash[IP_CT_DIR_ORIGINAL].tuple = *tuple;
-@@ -532,31 +606,44 @@
+@@ -540,31 +615,44 @@
conntrack->timeout.data = (unsigned long)conntrack;
conntrack->timeout.function = death_by_timeout;
@@ -628,7 +624,7 @@
}
atomic_inc(&ip_conntrack_count);
WRITE_UNLOCK(&ip_conntrack_lock);
-@@ -661,7 +748,7 @@
+@@ -669,7 +757,7 @@
return NF_STOLEN;
}
@@ -637,7 +633,7 @@
/* It may be an icmp error... */
if ((*pskb)->nh.iph->protocol == IPPROTO_ICMP
-@@ -705,66 +792,210 @@
+@@ -713,66 +801,210 @@
int invert_tuplepr(struct ip_conntrack_tuple *inverse,
const struct ip_conntrack_tuple *orig)
{
@@ -682,11 +678,11 @@
+ { i->mask.dst.ip & mask->dst.ip,
+ { i->mask.dst.u.all & mask->dst.u.all },
+ i->mask.dst.protonum & mask->dst.protonum } };
-
-- return ip_ct_tuple_mask_cmp(&i->tuple, &new->tuple, &intersect_mask);
++
+ return ip_ct_tuple_mask_cmp(&i->tuple, tuple, &intersect_mask);
+}
-+
+
+- return ip_ct_tuple_mask_cmp(&i->tuple, &new->tuple, &intersect_mask);
+void ip_conntrack_unexpect_related(struct ip_conntrack_expect *expect)
+{
+ WRITE_LOCK(&ip_conntrack_lock);
@@ -880,7 +876,7 @@
/* Alter reply tuple (maybe alter helper). If it's already taken,
return 0 and don't do alteration. */
int ip_conntrack_alter_reply(struct ip_conntrack *conntrack,
-@@ -782,10 +1013,12 @@
+@@ -790,10 +1022,12 @@
DUMP_TUPLE(newreply);
conntrack->tuplehash[IP_CT_DIR_REPLY].tuple = *newreply;
@@ -896,7 +892,7 @@
return 1;
}
-@@ -804,14 +1037,10 @@
+@@ -812,14 +1046,10 @@
const struct ip_conntrack_helper *me)
{
if (i->ctrack->helper == me) {
@@ -914,9 +910,9 @@
}
return 0;
}
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_ftp.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_ftp.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_ftp.c Wed Oct 31 00:08:12
2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_ftp.c Mon Feb 11 12:06:36
2002
+diff -Nru a/net/ipv4/netfilter/ip_conntrack_ftp.c
+b/net/ipv4/netfilter/ip_conntrack_ftp.c
+--- a/net/ipv4/netfilter/ip_conntrack_ftp.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_conntrack_ftp.c Fri Mar 8 20:19:49 2002
@@ -1,4 +1,5 @@
/* FTP extension for IP connection tracking. */
+#include <linux/config.h>
@@ -1061,9 +1057,9 @@
+MODULE_LICENSE("GPL");
module_init(init);
module_exit(fini);
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_irc.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_irc.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_irc.c Fri Dec 21 18:42:05
2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_irc.c Mon Feb 11 12:07:47
2002
+diff -Nru a/net/ipv4/netfilter/ip_conntrack_irc.c
+b/net/ipv4/netfilter/ip_conntrack_irc.c
+--- a/net/ipv4/netfilter/ip_conntrack_irc.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_conntrack_irc.c Fri Mar 8 20:19:49 2002
@@ -11,12 +11,18 @@
**
* Module load syntax:
@@ -1119,9 +1115,9 @@
- struct ip_ct_irc *info = &ct->help.ct_irc_info;
-
-- memset(&mask, 0, sizeof(struct ip_conntrack_tuple));
-- mask.dst.u.tcp.port = 0xFFFF;
-- mask.dst.protonum = 0xFFFF;
+- mask = ((struct ip_conntrack_tuple)
+- { { 0, { 0 } },
+- { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
-
DEBUGP("entered\n");
- /* Can't track connections formed before we registered */
@@ -1257,9 +1253,9 @@
module_init(init);
module_exit(fini);
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_proto_generic.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_proto_generic.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_proto_generic.c Fri Apr 27
23:15:01 2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_proto_generic.c Thu
Jan 31 13:45:42 2002
+diff -Nru a/net/ipv4/netfilter/ip_conntrack_proto_generic.c
+b/net/ipv4/netfilter/ip_conntrack_proto_generic.c
+--- a/net/ipv4/netfilter/ip_conntrack_proto_generic.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_conntrack_proto_generic.c Fri Mar 8 20:19:49 2002
@@ -54,8 +54,14 @@
return 1;
}
@@ -1273,12 +1269,12 @@
struct ip_conntrack_protocol ip_conntrack_generic_protocol
= { { NULL, NULL }, 0, "unknown",
generic_pkt_to_tuple, generic_invert_tuple, generic_print_tuple,
-- generic_print_conntrack, established, new, NULL };
-+ generic_print_conntrack, established, new, exp_matches_pkt, NULL };
+- generic_print_conntrack, established, new, NULL, NULL };
++ generic_print_conntrack, established, new, NULL, exp_matches_pkt, NULL };
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_proto_icmp.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_proto_icmp.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_proto_icmp.c Fri Apr 27
23:15:01 2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_proto_icmp.c Thu Jan 31
13:42:47 2002
+diff -Nru a/net/ipv4/netfilter/ip_conntrack_proto_icmp.c
+b/net/ipv4/netfilter/ip_conntrack_proto_icmp.c
+--- a/net/ipv4/netfilter/ip_conntrack_proto_icmp.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_conntrack_proto_icmp.c Fri Mar 8 20:19:49 2002
@@ -110,7 +110,13 @@
return 1;
}
@@ -1292,11 +1288,11 @@
struct ip_conntrack_protocol ip_conntrack_protocol_icmp
= { { NULL, NULL }, IPPROTO_ICMP, "icmp",
icmp_pkt_to_tuple, icmp_invert_tuple, icmp_print_tuple,
-- icmp_print_conntrack, icmp_packet, icmp_new, NULL };
-+ icmp_print_conntrack, icmp_packet, icmp_new, icmp_exp_matches_pkt, NULL };
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_proto_tcp.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_proto_tcp.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_proto_tcp.c Fri Apr 27
23:15:01 2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_proto_tcp.c Thu Jan 31
13:50:38 2002
+- icmp_print_conntrack, icmp_packet, icmp_new, NULL, NULL };
++ icmp_print_conntrack, icmp_packet, icmp_new, NULL, icmp_exp_matches_pkt, NULL };
+diff -Nru a/net/ipv4/netfilter/ip_conntrack_proto_tcp.c
+b/net/ipv4/netfilter/ip_conntrack_proto_tcp.c
+--- a/net/ipv4/netfilter/ip_conntrack_proto_tcp.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_conntrack_proto_tcp.c Fri Mar 8 20:19:49 2002
@@ -7,6 +7,9 @@
#include <linux/in.h>
#include <linux/ip.h>
@@ -1326,11 +1322,11 @@
struct ip_conntrack_protocol ip_conntrack_protocol_tcp
= { { NULL, NULL }, IPPROTO_TCP, "tcp",
tcp_pkt_to_tuple, tcp_invert_tuple, tcp_print_tuple, tcp_print_conntrack,
-- tcp_packet, tcp_new, NULL };
-+ tcp_packet, tcp_new, tcp_exp_matches_pkt, NULL };
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_proto_udp.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_proto_udp.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_proto_udp.c Fri Apr 27
23:15:01 2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_proto_udp.c Thu Jan 31
13:42:01 2002
+- tcp_packet, tcp_new, NULL, NULL };
++ tcp_packet, tcp_new, NULL, tcp_exp_matches_pkt, NULL };
+diff -Nru a/net/ipv4/netfilter/ip_conntrack_proto_udp.c
+b/net/ipv4/netfilter/ip_conntrack_proto_udp.c
+--- a/net/ipv4/netfilter/ip_conntrack_proto_udp.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_conntrack_proto_udp.c Fri Mar 8 20:19:49 2002
@@ -68,7 +68,13 @@
return 1;
}
@@ -1344,12 +1340,12 @@
struct ip_conntrack_protocol ip_conntrack_protocol_udp
= { { NULL, NULL }, IPPROTO_UDP, "udp",
udp_pkt_to_tuple, udp_invert_tuple, udp_print_tuple, udp_print_conntrack,
-- udp_packet, udp_new, NULL };
-+ udp_packet, udp_new, udp_exp_matches_pkt, NULL };
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_standalone.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_standalone.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_conntrack_standalone.c Sun Sep 30
21:26:08 2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_conntrack_standalone.c Fri Feb 8
09:03:50 2002
-@@ -56,7 +56,13 @@
+- udp_packet, udp_new, NULL, NULL };
++ udp_packet, udp_new, NULL, udp_exp_matches_pkt, NULL };
+diff -Nru a/net/ipv4/netfilter/ip_conntrack_standalone.c
+b/net/ipv4/netfilter/ip_conntrack_standalone.c
+--- a/net/ipv4/netfilter/ip_conntrack_standalone.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_conntrack_standalone.c Fri Mar 8 20:19:49 2002
+@@ -57,7 +57,13 @@
{
unsigned int len;
@@ -1364,7 +1360,16 @@
expect->tuple.dst.protonum);
len += print_tuple(buffer + len, &expect->tuple,
__find_proto(expect->tuple.dst.protonum));
-@@ -334,7 +340,12 @@
+@@ -309,7 +315,7 @@
+ {
+ WRITE_LOCK(&ip_conntrack_lock);
+
+- /* find_proto() returns proto_generic in case there is no protocol
++ /* ip_ct_find_proto() returns proto_generic in case there is no protocol
+ * helper. So this should be enough - HW */
+ LIST_DELETE(&protocol_list, proto);
+ WRITE_UNLOCK(&ip_conntrack_lock);
+@@ -345,7 +351,12 @@
EXPORT_SYMBOL(ip_conntrack_helper_unregister);
EXPORT_SYMBOL(ip_ct_selective_cleanup);
EXPORT_SYMBOL(ip_ct_refresh);
@@ -1377,9 +1382,21 @@
EXPORT_SYMBOL(ip_ct_gather_frags);
EXPORT_SYMBOL(ip_conntrack_htable_size);
+EXPORT_SYMBOL(ip_conntrack_lock);
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_core.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_core.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_core.c Fri Dec 21 18:42:05 2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_core.c Mon Feb 11 12:04:35
2002
+diff -Nru a/net/ipv4/netfilter/ip_fw_compat_masq.c
+b/net/ipv4/netfilter/ip_fw_compat_masq.c
+--- a/net/ipv4/netfilter/ip_fw_compat_masq.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_fw_compat_masq.c Fri Mar 8 20:19:49 2002
+@@ -130,7 +130,7 @@
+ struct ip_conntrack *ct;
+ int ret;
+
+- protocol = find_proto(iph->protocol);
++ protocol = ip_ct_find_proto(iph->protocol);
+
+ /* We don't feed packets to conntrack system unless we know
+ they're part of an connection already established by an
+diff -Nru a/net/ipv4/netfilter/ip_nat_core.c b/net/ipv4/netfilter/ip_nat_core.c
+--- a/net/ipv4/netfilter/ip_nat_core.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_nat_core.c Fri Mar 8 20:19:49 2002
@@ -21,10 +21,14 @@
#define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip_nat_lock)
#define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip_nat_lock)
@@ -1403,7 +1420,7 @@
/* Calculated at init based on memory size */
static unsigned int ip_nat_htable_size;
-@@ -621,8 +626,9 @@
+@@ -628,8 +633,9 @@
}
/* If there's a helper, assign it; based on new tuple. */
@@ -1415,7 +1432,7 @@
/* It's done. */
info->initialized |= (1 << HOOK2MANIP(hooknum));
-@@ -717,6 +723,19 @@
+@@ -724,6 +730,19 @@
#endif
}
@@ -1435,7 +1452,7 @@
/* Do packet manipulations according to binding. */
unsigned int
do_bindings(struct ip_conntrack *ct,
-@@ -728,6 +747,7 @@
+@@ -735,6 +754,7 @@
unsigned int i;
struct ip_nat_helper *helper;
enum ip_conntrack_dir dir = CTINFO2DIR(ctinfo);
@@ -1443,7 +1460,7 @@
/* Need nat lock to protect against modification, but neither
conntrack (referenced) and helper (deleted with
-@@ -766,11 +786,71 @@
+@@ -773,11 +793,71 @@
READ_UNLOCK(&ip_nat_lock);
if (helper) {
@@ -1517,9 +1534,9 @@
}
unsigned int
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_ftp.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_ftp.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_ftp.c Wed Oct 31 00:08:12 2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_ftp.c Mon Feb 11 12:08:53
2002
+diff -Nru a/net/ipv4/netfilter/ip_nat_ftp.c b/net/ipv4/netfilter/ip_nat_ftp.c
+--- a/net/ipv4/netfilter/ip_nat_ftp.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_nat_ftp.c Fri Mar 8 20:19:49 2002
@@ -28,38 +28,30 @@
/* FIXME: Time out? --RR */
@@ -1840,9 +1857,9 @@
return ret;
}
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_helper.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_helper.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_helper.c Fri Dec 21 18:42:05
2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_helper.c Mon Feb 11 12:10:16
2002
+diff -Nru a/net/ipv4/netfilter/ip_nat_helper.c b/net/ipv4/netfilter/ip_nat_helper.c
+--- a/net/ipv4/netfilter/ip_nat_helper.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_nat_helper.c Fri Mar 8 20:19:49 2002
@@ -5,7 +5,9 @@
* distributed under the terms of GNU GPL
*/
@@ -1961,9 +1978,9 @@
+ me->me->name);
+ }
}
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_irc.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_irc.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_irc.c Fri Dec 21 18:42:05 2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_irc.c Mon Feb 11 12:09:06
2002
+diff -Nru a/net/ipv4/netfilter/ip_nat_irc.c b/net/ipv4/netfilter/ip_nat_irc.c
+--- a/net/ipv4/netfilter/ip_nat_irc.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_nat_irc.c Fri Mar 8 20:19:49 2002
@@ -51,42 +51,29 @@
/* FIXME: Time out? --RR */
@@ -2263,9 +2280,9 @@
}
return ret;
}
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_proto_tcp.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_proto_tcp.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_proto_tcp.c Tue Aug 7 17:30:50
2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_proto_tcp.c Thu Jan 31 13:50:37
2002
+diff -Nru a/net/ipv4/netfilter/ip_nat_proto_tcp.c
+b/net/ipv4/netfilter/ip_nat_proto_tcp.c
+--- a/net/ipv4/netfilter/ip_nat_proto_tcp.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_nat_proto_tcp.c Fri Mar 8 20:19:49 2002
@@ -4,7 +4,6 @@
#include <linux/ip.h>
#include <linux/tcp.h>
@@ -2274,9 +2291,9 @@
#include <linux/netfilter_ipv4/ip_nat.h>
#include <linux/netfilter_ipv4/ip_nat_rule.h>
#include <linux/netfilter_ipv4/ip_nat_protocol.h>
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_proto_unknown.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_proto_unknown.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_proto_unknown.c Fri Mar 17
19:56:20 2000
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_proto_unknown.c Tue Feb 5
11:38:13 2002
+diff -Nru a/net/ipv4/netfilter/ip_nat_proto_unknown.c
+b/net/ipv4/netfilter/ip_nat_proto_unknown.c
+--- a/net/ipv4/netfilter/ip_nat_proto_unknown.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_nat_proto_unknown.c Fri Mar 8 20:19:49 2002
@@ -1,5 +1,5 @@
/* The "unknown" protocol. This is what is used for protocols we
- * don't understand. It's returned by find_proto().
@@ -2284,19 +2301,19 @@
*/
#include <linux/types.h>
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_rule.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_rule.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_rule.c Fri Apr 27 23:15:01 2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_rule.c Wed Jan 9 11:06:34
2002
+diff -Nru a/net/ipv4/netfilter/ip_nat_rule.c b/net/ipv4/netfilter/ip_nat_rule.c
+--- a/net/ipv4/netfilter/ip_nat_rule.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_nat_rule.c Fri Mar 8 20:19:49 2002
@@ -106,8 +106,6 @@
= { { NULL, NULL }, "nat", &nat_initial_table.repl,
- NAT_VALID_HOOKS, RW_LOCK_UNLOCKED, NULL };
+ NAT_VALID_HOOKS, RW_LOCK_UNLOCKED, NULL, THIS_MODULE };
-LIST_HEAD(nat_expect_list);
-
/* Source NAT */
static unsigned int ipt_snat_target(struct sk_buff **pskb,
unsigned int hooknum,
-@@ -242,19 +240,6 @@
+@@ -254,19 +252,6 @@
return ip_nat_setup_info(conntrack, &mr, hooknum);
}
@@ -2316,7 +2333,7 @@
int ip_nat_rule_find(struct sk_buff **pskb,
unsigned int hooknum,
const struct net_device *in,
-@@ -264,41 +249,14 @@
+@@ -276,41 +261,14 @@
{
int ret;
@@ -2359,9 +2376,9 @@
}
static struct ipt_target ipt_snat_reg
-diff -urN --exclude-from=diff.exclude-newnat
linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_standalone.c
linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_standalone.c
---- linux-2.4.17-orig/net/ipv4/netfilter/ip_nat_standalone.c Sun Sep 30 21:26:08
2001
-+++ linux-2.4.17-newnat/net/ipv4/netfilter/ip_nat_standalone.c Wed Jan 9 11:06:34
2002
+diff -Nru a/net/ipv4/netfilter/ip_nat_standalone.c
+b/net/ipv4/netfilter/ip_nat_standalone.c
+--- a/net/ipv4/netfilter/ip_nat_standalone.c Fri Mar 8 20:19:49 2002
++++ b/net/ipv4/netfilter/ip_nat_standalone.c Fri Mar 8 20:19:49 2002
@@ -5,7 +5,12 @@
*/
@@ -2376,9 +2393,9 @@
#include <linux/config.h>
#include <linux/types.h>
-@@ -43,6 +48,15 @@
- : ((hooknum) == NF_IP_LOCAL_OUT ? "LOCAL_OUT" \
- : "*ERROR*")))
+@@ -44,6 +49,15 @@
+ : ((hooknum) == NF_IP_LOCAL_IN ? "LOCAL_IN" \
+ : "*ERROR*")))
+static inline int call_expect(struct ip_conntrack *master,
+ struct sk_buff **pskb,
@@ -2392,7 +2409,7 @@
static unsigned int
ip_nat_fn(unsigned int hooknum,
struct sk_buff **pskb,
-@@ -103,8 +117,16 @@
+@@ -110,8 +124,16 @@
int in_hashes = info->initialized;
unsigned int ret;
@@ -2411,8 +2428,8 @@
if (ret != NF_ACCEPT) {
WRITE_UNLOCK(&ip_nat_lock);
return ret;
-@@ -337,8 +359,6 @@
- EXPORT_SYMBOL(ip_nat_setup_info);
+@@ -334,8 +356,6 @@
+ EXPORT_SYMBOL(ip_nat_protocol_unregister);
EXPORT_SYMBOL(ip_nat_helper_register);
EXPORT_SYMBOL(ip_nat_helper_unregister);
-EXPORT_SYMBOL(ip_nat_expect_register);