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 */
 | |
| 
 |