diff -ur freeswan-1.96.orig/klips/net/ipsec/ipsec_init.c freeswan-1.96/klips/net/ipsec/ipsec_init.c --- freeswan-1.96.orig/klips/net/ipsec/ipsec_init.c Tue Feb 5 17:55:15 2002 +++ freeswan-1.96/klips/net/ipsec/ipsec_init.c Mon May 27 00:26:44 2002 @@ -90,8 +90,11 @@ * seems to be present in 2.4.10 (Linus), but also in some RH and other * distro kernels of a lower number. */ +static unsigned int numif = 4; #ifdef MODULE_LICENSE MODULE_LICENSE("Dual BSD/GPL"); +MODULE_PARM(numif,"1-4i"); +MODULE_PARM_DESC(numif, "Number of ipsec interfaces to setup"); #endif #ifdef CONFIG_IPSEC_DEBUG @@ -159,7 +162,7 @@ #endif /* CONFIG_IPSEC_IPCOMP */ #endif - error |= ipsec_tunnel_init_devices(); + error |= ipsec_tunnel_init_devices(numif); #ifdef CONFIG_SYSCTL error |= ipsec_sysctl_register(); @@ -180,7 +183,7 @@ KLIPS_PRINT(debug_netlink, /* debug_tunnel & DB_TN_INIT, */ "klips_debug:ipsec_cleanup: " "calling ipsec_tunnel_cleanup_devices.\n"); - error |= ipsec_tunnel_cleanup_devices(); + error |= ipsec_tunnel_cleanup_devices(numif); #if 0 #ifdef CONFIG_IPSEC_IPCOMP diff -ur freeswan-1.96.orig/klips/net/ipsec/ipsec_tunnel.c freeswan-1.96/klips/net/ipsec/ipsec_tunnel.c --- freeswan-1.96.orig/klips/net/ipsec/ipsec_tunnel.c Tue Feb 19 23:13:05 2002 +++ freeswan-1.96/klips/net/ipsec/ipsec_tunnel.c Mon May 27 00:26:44 2002 @@ -2972,7 +2972,7 @@ }; int -ipsec_tunnel_init_devices(void) +ipsec_tunnel_init_devices(unsigned int numif) { #if 0 KLIPS_PRINT(debug_tunnel & DB_TN_INIT, @@ -2982,6 +2982,8 @@ #endif if (register_netdev(&dev_ipsec0) != 0) return -EIO; + if (numif == 1) + return 0; #if 0 KLIPS_PRINT(debug_tunnel & DB_TN_INIT, "klips_debug:ipsec_tunnel_init_devices: " @@ -2990,6 +2992,8 @@ #endif if (register_netdev(&dev_ipsec1) != 0) return -EIO; + if (numif == 2) + return 0; #if 0 KLIPS_PRINT(debug_tunnel & DB_TN_INIT, "klips_debug:ipsec_tunnel_init_devices: " @@ -2998,6 +3002,8 @@ #endif if (register_netdev(&dev_ipsec2) != 0) return -EIO; + if (numif == 3) + return 0; #if 0 KLIPS_PRINT(debug_tunnel & DB_TN_INIT, "klips_debug:ipsec_tunnel_init_devices: " @@ -3011,22 +3017,31 @@ /* void */ int -ipsec_tunnel_cleanup_devices(void) +ipsec_tunnel_cleanup_devices(unsigned int numif) { int error = 0; unregister_netdev(&dev_ipsec0); - unregister_netdev(&dev_ipsec1); - unregister_netdev(&dev_ipsec2); - unregister_netdev(&dev_ipsec3); kfree(dev_ipsec0.priv); - kfree(dev_ipsec1.priv); - kfree(dev_ipsec2.priv); - kfree(dev_ipsec3.priv); dev_ipsec0.priv=NULL; - dev_ipsec1.priv=NULL; - dev_ipsec2.priv=NULL; - dev_ipsec3.priv=NULL; + if (numif > 1) + { + unregister_netdev(&dev_ipsec1); + kfree(dev_ipsec0.priv); + dev_ipsec1.priv=NULL; + } + if (numif > 2) + { + unregister_netdev(&dev_ipsec2); + kfree(dev_ipsec1.priv); + dev_ipsec2.priv=NULL; + } + if (numif > 3) + { + unregister_netdev(&dev_ipsec3); + kfree(dev_ipsec3.priv); + dev_ipsec3.priv=NULL; + } return error; } diff -ur freeswan-1.96.orig/klips/net/ipsec/ipsec_tunnel.h freeswan-1.96/klips/net/ipsec/ipsec_tunnel.h --- freeswan-1.96.orig/klips/net/ipsec/ipsec_tunnel.h Tue Nov 6 14:50:44 2001 +++ freeswan-1.96/klips/net/ipsec/ipsec_tunnel.h Mon May 27 00:26:44 2002 @@ -102,9 +102,9 @@ extern char ipsec_tunnel_c_version[]; -int ipsec_tunnel_init_devices(void); +int ipsec_tunnel_init_devices(unsigned int ipsec_num_if); -/* void */ int ipsec_tunnel_cleanup_devices(void); +/* void */ int ipsec_tunnel_cleanup_devices(unsigned int ipsec_num_if); extern /* void */ int ipsec_init(void);