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);