diff -Nru --exclude .depend --exclude '*.o' --exclude '*.ko' --exclude '*.ver' --exclude '.*.flags' --exclude '*.orig' --exclude '*.rej' --exclude '*.cmd' --exclude '*.mod.c' --exclude '*~' linux-2.6.11-rc4/net/ipv4/netfilter/ip_conntrack_ftp.c linux-2.6.11-rc4-helper_sysctl/net/ipv4/netfilter/ip_conntrack_ftp.c
--- linux-2.6.11-rc4/net/ipv4/netfilter/ip_conntrack_ftp.c	2005-02-13 13:52:06.000000000 +0100
+++ linux-2.6.11-rc4-helper_sysctl/net/ipv4/netfilter/ip_conntrack_ftp.c	2005-02-13 17:39:03.000000000 +0100
@@ -1,7 +1,7 @@
 /* FTP extension for IP connection tracking. */
 
 /* (C) 1999-2001 Paul `Rusty' Russell  
- * (C) 2002-2004 Netfilter Core Team <coreteam@netfilter.org>
+ * (C) 2002-2005 Netfilter Core Team <coreteam@netfilter.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -446,48 +446,43 @@
 	return ret;
 }
 
-static struct ip_conntrack_helper ftp[MAX_PORTS];
-static char ftp_names[MAX_PORTS][10];
+static struct ip_conntrack_helper ftp = {
+	.name 		= "ftp",
+	.help 		= &help,
+	.me 		= THIS_MODULE,
+	.timeout	= 5 * 60,	/* 5 minutes */
+	.max_expected	= 1,
+	.mask		= { 
+			.dst.protonum 	= 0xff, 
+			.src.u.tcp.port	= 0xffff,
+		},
+	.tuple		= { 
+			.dst.protonum 	= IPPROTO_TCP,
+			.src.u.tcp.port	= __constant_htons(21),
+		},
+};
 
 /* Not __exit: called from init() */
 static void fini(void)
 {
-	int i;
-	for (i = 0; i < ports_c; i++) {
-		DEBUGP("ip_ct_ftp: unregistering helper for port %d\n",
-				ports[i]);
-		ip_conntrack_helper_unregister(&ftp[i]);
-	}
+	ip_conntrack_helper_unregister(&ftp);
 }
 
 static int __init init(void)
 {
 	int i, ret;
-	char *tmpname;
 
-	if (ports_c == 0)
-		ports[ports_c++] = FTP_PORT;
+	if (ports_c == 0) {
+		ports[0] = 21;
+		ports_c = 1;
+	}
+	
+	ret = ip_conntrack_helper_register(&ftp);
 
 	for (i = 0; i < ports_c; i++) {
-		ftp[i].tuple.src.u.tcp.port = htons(ports[i]);
-		ftp[i].tuple.dst.protonum = IPPROTO_TCP;
-		ftp[i].mask.src.u.tcp.port = 0xFFFF;
-		ftp[i].mask.dst.protonum = 0xFF;
-		ftp[i].max_expected = 1;
-		ftp[i].timeout = 5 * 60; /* 5 minutes */
-		ftp[i].me = THIS_MODULE;
-		ftp[i].help = help;
-
-		tmpname = &ftp_names[i][0];
-		if (ports[i] == FTP_PORT)
-			sprintf(tmpname, "ftp");
-		else
-			sprintf(tmpname, "ftp-%d", ports[i]);
-		ftp[i].name = tmpname;
-
 		DEBUGP("ip_ct_ftp: registering helper for port %d\n", 
 				ports[i]);
-		ret = ip_conntrack_helper_register(&ftp[i]);
+		ret = ip_conntrack_helper_add_port(&ftp, ports[i]);
 
 		if (ret) {
 			fini();
diff -Nru --exclude .depend --exclude '*.o' --exclude '*.ko' --exclude '*.ver' --exclude '.*.flags' --exclude '*.orig' --exclude '*.rej' --exclude '*.cmd' --exclude '*.mod.c' --exclude '*~' linux-2.6.11-rc4/net/ipv4/netfilter/ip_conntrack_irc.c linux-2.6.11-rc4-helper_sysctl/net/ipv4/netfilter/ip_conntrack_irc.c
--- linux-2.6.11-rc4/net/ipv4/netfilter/ip_conntrack_irc.c	2005-02-13 13:52:06.000000000 +0100
+++ linux-2.6.11-rc4-helper_sysctl/net/ipv4/netfilter/ip_conntrack_irc.c	2005-02-13 17:39:29.000000000 +0100
@@ -1,5 +1,5 @@
 /* IRC extension for IP connection tracking, Version 1.21
- * (C) 2000-2002 by Harald Welte <laforge@gnumonks.org>
+ * (C) 2000-2005 by Harald Welte <laforge@gnumonks.org>
  * based on RR's ip_conntrack_ftp.c	
  *
  * ip_conntrack_irc.c,v 1.21 2002/02/05 14:49:26 laforge Exp
@@ -241,16 +241,25 @@
 	return ret;
 }
 
-static struct ip_conntrack_helper irc_helpers[MAX_PORTS];
-static char irc_names[MAX_PORTS][10];
+static struct ip_conntrack_helper irc_helper = {
+	.name		= "irc",
+	.help		= &help,
+	.me		= THIS_MODULE,
+	.mask		= {
+			.dst.protonum	= 0xff,
+			.src.u.tcp.port	= 0xffff,
+		},
+	.tuple		= {
+			.dst.protonum	= IPPROTO_TCP,
+			.src.u.tcp.port	= __constant_htons(6667),
+		},
+};
 
 static void fini(void);
 
 static int __init init(void)
 {
 	int i, ret;
-	struct ip_conntrack_helper *hlpr;
-	char *tmpname;
 
 	if (max_dcc_channels < 1) {
 		printk("ip_conntrack_irc: max_dcc_channels must be a positive integer\n");
@@ -260,32 +269,19 @@
 		printk("ip_conntrack_irc: dcc_timeout must be a positive integer\n");
 		return -EBUSY;
 	}
-	
-	/* If no port given, default to standard irc port */
-	if (ports_c == 0)
-		ports[ports_c++] = IRC_PORT;
 
-	for (i = 0; i < ports_c; i++) {
-		hlpr = &irc_helpers[i];
-		hlpr->tuple.src.u.tcp.port = htons(ports[i]);
-		hlpr->tuple.dst.protonum = IPPROTO_TCP;
-		hlpr->mask.src.u.tcp.port = 0xFFFF;
-		hlpr->mask.dst.protonum = 0xFF;
-		hlpr->max_expected = max_dcc_channels;
-		hlpr->timeout = dcc_timeout;
-		hlpr->me = THIS_MODULE;
-		hlpr->help = help;
-
-		tmpname = &irc_names[i][0];
-		if (ports[i] == IRC_PORT)
-			sprintf(tmpname, "irc");
-		else
-			sprintf(tmpname, "irc-%d", i);
-		hlpr->name = tmpname;
+	irc_helper.timeout = dcc_timeout;
+	irc_helper.max_expected = max_dcc_channels;
+	
+	if (ports_c == 0) {
+		ports[0] = 6667;
+		ports_c = 1;
+	}
 
-		DEBUGP("port #%d: %d\n", i, ports[i]);
+	ret = ip_conntrack_helper_register(&irc_helper);
 
-		ret = ip_conntrack_helper_register(hlpr);
+	for (i = 0; i < ports_c; i++) {
+		ret = ip_conntrack_helper_add_port(&irc_helper, ports[i]);
 
 		if (ret) {
 			printk("ip_conntrack_irc: ERROR registering port %d\n",
@@ -301,12 +297,7 @@
  * it is needed by the init function */
 static void fini(void)
 {
-	int i;
-	for (i = 0; i < ports_c; i++) {
-		DEBUGP("unregistering port %d\n",
-		       ports[i]);
-		ip_conntrack_helper_unregister(&irc_helpers[i]);
-	}
+	ip_conntrack_helper_unregister(&irc_helper);
 }
 
 module_init(init);
diff -Nru --exclude .depend --exclude '*.o' --exclude '*.ko' --exclude '*.ver' --exclude '.*.flags' --exclude '*.orig' --exclude '*.rej' --exclude '*.cmd' --exclude '*.mod.c' --exclude '*~' linux-2.6.11-rc4/net/ipv4/netfilter/ip_conntrack_tftp.c linux-2.6.11-rc4-helper_sysctl/net/ipv4/netfilter/ip_conntrack_tftp.c
--- linux-2.6.11-rc4/net/ipv4/netfilter/ip_conntrack_tftp.c	2005-02-13 13:52:06.000000000 +0100
+++ linux-2.6.11-rc4-helper_sysctl/net/ipv4/netfilter/ip_conntrack_tftp.c	2005-02-13 17:44:55.000000000 +0100
@@ -100,51 +100,38 @@
 	return NF_ACCEPT;
 }
 
-static struct ip_conntrack_helper tftp[MAX_PORTS];
-static char tftp_names[MAX_PORTS][10];
+static struct ip_conntrack_helper tftp_helper = {
+	.name 		= "tftp",
+	.help		= &tftp_help,
+	.me		= THIS_MODULE,
+	.timeout	= 5 * 60,	/* 5 minutes */
+	.max_expected	= 1,
+	.mask		= {
+			.src.u.udp.port = 0xffff,
+			.dst.protonum	= 0xff,
+		},
+	.tuple		= {
+			.src.u.udp.port = TFTP_PORT,
+			.dst.protonum	= IPPROTO_UDP,
+		},
+};
 
 static void fini(void)
 {
-	int i;
-
-	for (i = 0 ; i < ports_c; i++) {
-		DEBUGP("unregistering helper for port %d\n",
-			ports[i]);
-		ip_conntrack_helper_unregister(&tftp[i]);
-	} 
+	ip_conntrack_helper_unregister(&tftp_helper);
 }
 
 static int __init init(void)
 {
 	int i, ret;
-	char *tmpname;
 
 	if (ports_c == 0)
 		ports[ports_c++] = TFTP_PORT;
 
 	for (i = 0; i < ports_c; i++) {
-		/* Create helper structure */
-		memset(&tftp[i], 0, sizeof(struct ip_conntrack_helper));
-
-		tftp[i].tuple.dst.protonum = IPPROTO_UDP;
-		tftp[i].tuple.src.u.udp.port = htons(ports[i]);
-		tftp[i].mask.dst.protonum = 0xFF;
-		tftp[i].mask.src.u.udp.port = 0xFFFF;
-		tftp[i].max_expected = 1;
-		tftp[i].timeout = 5 * 60; /* 5 minutes */
-		tftp[i].me = THIS_MODULE;
-		tftp[i].help = tftp_help;
-
-		tmpname = &tftp_names[i][0];
-		if (ports[i] == TFTP_PORT)
-			sprintf(tmpname, "tftp");
-		else
-			sprintf(tmpname, "tftp-%d", i);
-		tftp[i].name = tmpname;
-
 		DEBUGP("port #%d: %d\n", i, ports[i]);
 
-		ret=ip_conntrack_helper_register(&tftp[i]);
+		ret = ip_conntrack_helper_add_port(&tftp_helper, ports[i]);
 		if (ret) {
 			printk("ERROR registering helper for port %d\n",
 				ports[i]);
