You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							138 lines
						
					
					
						
							4.3 KiB
						
					
					
				
			
		
		
	
	
							138 lines
						
					
					
						
							4.3 KiB
						
					
					
				# --- T2-COPYRIGHT-NOTE-BEGIN --- | 
						|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch. | 
						|
#  | 
						|
# T2 SDE: package/.../ipvsadm2/ipvsadm-1.24.backwards_compat.patch | 
						|
# Copyright (C) 2004 - 2006 The T2 SDE Project | 
						|
#  | 
						|
# More information can be found in the files COPYING and README. | 
						|
#  | 
						|
# This patch file is dual-licensed. It is available under the license the | 
						|
# patched project is licensed under, as long as it is an OpenSource license | 
						|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms | 
						|
# of the GNU General Public License as published by the Free Software | 
						|
# Foundation; either version 2 of the License, or (at your option) any later | 
						|
# version. | 
						|
# --- T2-COPYRIGHT-NOTE-END --- | 
						|
http://www.in-addr.de/pipermail/lvs-users/2005-January/013076.html | 
						|
Horms <[email protected]> | 
						|
 | 
						|
BACKWARDS_COMPET_DEFINE= let you use ipvsadm on lx2.4 and lx2.6 | 
						|
NOTE: original patch exec `ipvsadm-1.21` but i choosed `ipvsadm.old` | 
						|
Alejandro | 
						|
 | 
						|
diff -ruN ipvsadm-1.24/Makefile ipvsadm-1.24.backwards_compat/Makefile | 
						|
--- ipvsadm-1.24/Makefile	2004-10-28 00:53:07.000000000 +0900 | 
						|
+++ ipvsadm-1.24.backwards_compat/Makefile	2005-01-27 13:24:45.000000000 +0900 | 
						|
@@ -74,10 +75,15 @@ | 
						|
 POPT_DEFINE = -DHAVE_POPT | 
						|
 endif | 
						|
  | 
						|
+# If defined then if the version of ipvs in the kernel is too old | 
						|
+# for ipvsadm 1.24, then instead of trying to execute ipvsadm.1.21, | 
						|
+# print a warning and soldier on | 
						|
+BACKWARDS_COMPET_DEFINE= -DNO_BACKWARDS_COMPAT | 
						|
+ | 
						|
 OBJS		= ipvsadm.o config_stream.o dynamic_array.o | 
						|
 LIBS		= $(POPT_LIB) | 
						|
 DEFINES		= -DVERSION=\"$(VERSION)\" -DSCHEDULERS=\"$(SCHEDULERS)\" \ | 
						|
-		  $(POPT_DEFINE) | 
						|
+		  $(POPT_DEFINE) $(BACKWARDS_COMPET_DEFINE) | 
						|
 DEFINES		+= $(shell if [ ! -f ../ip_vs.h ]; then	\ | 
						|
 		     echo "-DHAVE_NET_IP_VS_H"; fi;) | 
						|
  | 
						|
diff -ruN ipvsadm-1.24/ipvsadm.c ipvsadm-1.24.backwards_compat/ipvsadm.c | 
						|
--- ipvsadm-1.24/ipvsadm.c	2004-01-10 18:39:03.000000000 +0900 | 
						|
+++ ipvsadm-1.24.backwards_compat/ipvsadm.c	2005-01-27 13:32:46.000000000 +0900 | 
						|
@@ -54,6 +54,7 @@ | 
						|
  *                                processing options. | 
						|
  *        Alexandre Cassen    :   added ipvs_syncd SyncdID support to filter | 
						|
  *                                incoming sync messages. | 
						|
+ *        Horms		      :   Added backwards compatibility code | 
						|
  * | 
						|
  * | 
						|
  *      ippfvsadm - Port Fowarding & Virtual Server ADMinistration program | 
						|
@@ -301,9 +302,11 @@ | 
						|
 static void list_daemon(void); | 
						|
  | 
						|
 static int modprobe_ipvs(void); | 
						|
-static void check_ipvs_version(void); | 
						|
+static void check_ipvs_version(char **argv); | 
						|
 static int process_options(int argc, char **argv, int reading_stdin); | 
						|
  | 
						|
+static void exec_old(char **argv); | 
						|
+ | 
						|
  | 
						|
 int main(int argc, char **argv) | 
						|
 { | 
						|
@@ -319,7 +322,7 @@ | 
						|
 	} | 
						|
  | 
						|
 	/* warn the user if the IPVS version is out of date */ | 
						|
-	check_ipvs_version(); | 
						|
+	check_ipvs_version(argv); | 
						|
  | 
						|
 	/* list the table if there is no other arguement */ | 
						|
 	if (argc == 1){ | 
						|
@@ -1393,13 +1396,14 @@ | 
						|
 } | 
						|
  | 
						|
  | 
						|
-static void check_ipvs_version(void) | 
						|
+static void check_ipvs_version(char *argv[]) | 
						|
 { | 
						|
 	/* verify the IPVS version */ | 
						|
 	if (ipvs_info.version < | 
						|
 	    IPVS_VERSION(MINIMUM_IPVS_VERSION_MAJOR, | 
						|
 			 MINIMUM_IPVS_VERSION_MINOR, | 
						|
 			 MINIMUM_IPVS_VERSION_PATCH)) { | 
						|
+		exec_old(argv); | 
						|
 		fprintf(stderr, | 
						|
 			"Warning: IPVS version missmatch: \n" | 
						|
 			"  Kernel compiled with IPVS version %d.%d.%d\n" | 
						|
@@ -1896,3 +1900,46 @@ | 
						|
  | 
						|
 	return (offset<top)?0:1; | 
						|
 } | 
						|
+ | 
						|
+ | 
						|
+/* Simple backwards compat code to exec old version */ | 
						|
+/* Based on code form module-init-tools 3.1 */ | 
						|
+ | 
						|
+#ifndef NO_BACKWARDS_COMPAT | 
						|
+ | 
						|
+static void exec_old(char **argv) | 
						|
+{ | 
						|
+	char *sep; | 
						|
+	pid_t pid; | 
						|
+	char ascii_pid[32]; | 
						|
+	char pathname[strlen(argv[0])+1]; | 
						|
+	char oldname[strlen(argv[0])+strlen("ipvsadm.old")+1]; | 
						|
+ | 
						|
+	memset(pathname, 0, strlen(argv[0])+1); | 
						|
+	sep = strrchr(argv[0], '/'); | 
						|
+	if (sep) | 
						|
+		memcpy(pathname, argv[0], sep - argv[0]+1); | 
						|
+	sprintf(oldname, "%sipvsadm.old", pathname); | 
						|
+ | 
						|
+	/* Use an environment variable for recursion detection */ | 
						|
+	pid = getpid(); | 
						|
+	snprintf(ascii_pid, sizeof(ascii_pid), "%lu", (unsigned long)pid); | 
						|
+	if (strcmp(getenv("IPVSADM_RECURSE") ?: "", ascii_pid) == 0) { | 
						|
+		fprintf(stderr, "WARNING: %s: I am not the old version!\n", | 
						|
+			oldname); | 
						|
+		return; | 
						|
+	} | 
						|
+	setenv("IPVSADM_RECURSE", ascii_pid, 1); | 
						|
+ | 
						|
+	execvp(oldname, argv); | 
						|
+	fprintf(stderr, | 
						|
+		"Kernel requires old ipvsadm, but couldn't run %s: %s\n", | 
						|
+		oldname, strerror(errno)); | 
						|
+	exit(2); | 
						|
+} | 
						|
+ | 
						|
+#else /* NO_BACKWARDS_COMPAT */ | 
						|
+static void exec_old(char **argv) | 
						|
+{ | 
						|
+} | 
						|
+#endif /* !NO_BACKWARDS_COMPAT */
 | 
						|
 |