mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| diff -urN ppp.old/pppd/main.c ppp.dev/pppd/main.c
 | |
| --- ppp.old/pppd/main.c	2005-11-11 19:19:28.177790000 +0100
 | |
| +++ ppp.dev/pppd/main.c	2005-11-11 20:18:05.957363000 +0100
 | |
| @@ -90,6 +90,7 @@
 | |
|  #include <sys/socket.h>
 | |
|  #include <netinet/in.h>
 | |
|  #include <arpa/inet.h>
 | |
| +#include <sys/sysinfo.h>
 | |
|  
 | |
|  #include "pppd.h"
 | |
|  #include "magic.h"
 | |
| @@ -227,6 +228,7 @@
 | |
|  
 | |
|  /* Prototypes for procedures local to this file. */
 | |
|  
 | |
| +static void check_time(void);
 | |
|  static void setup_signals __P((void));
 | |
|  static void create_pidfile __P((int pid));
 | |
|  static void create_linkpidfile __P((int pid));
 | |
| @@ -531,6 +533,7 @@
 | |
|  	    info("Starting link");
 | |
|  	}
 | |
|  
 | |
| +	check_time();
 | |
|  	gettimeofday(&start_time, NULL);
 | |
|  	script_unsetenv("CONNECT_TIME");
 | |
|  	script_unsetenv("BYTES_SENT");
 | |
| @@ -1195,6 +1198,36 @@
 | |
|  
 | |
|  static struct callout *callout = NULL;	/* Callout list */
 | |
|  static struct timeval timenow;		/* Current time */
 | |
| +static long uptime_diff = 0;
 | |
| +static int uptime_diff_set = 0;
 | |
| +
 | |
| +static void check_time(void)
 | |
| +{
 | |
| +	long new_diff;
 | |
| +	struct timeval t;
 | |
| +	struct sysinfo i;
 | |
| +    struct callout *p;
 | |
| +	
 | |
| +	gettimeofday(&t, NULL);
 | |
| +	sysinfo(&i);
 | |
| +	new_diff = t.tv_sec - i.uptime;
 | |
| +	
 | |
| +	if (!uptime_diff_set) {
 | |
| +		uptime_diff = new_diff;
 | |
| +		uptime_diff_set = 1;
 | |
| +		return;
 | |
| +	}
 | |
| +
 | |
| +	if ((new_diff - 5 > uptime_diff) || (new_diff + 5 < uptime_diff)) {
 | |
| +		/* system time has changed, update counters and timeouts */
 | |
| +		info("System time change detected.");
 | |
| +		start_time.tv_sec += new_diff - uptime_diff;
 | |
| +		
 | |
| +    	for (p = callout; p != NULL; p = p->c_next)
 | |
| +			p->c_time.tv_sec += new_diff - uptime_diff;
 | |
| +	}
 | |
| +	uptime_diff = new_diff;
 | |
| +}
 | |
|  
 | |
|  /*
 | |
|   * timeout - Schedule a timeout.
 | |
| @@ -1265,6 +1298,8 @@
 | |
|  {
 | |
|      struct callout *p;
 | |
|  
 | |
| +	check_time();
 | |
| +	
 | |
|      while (callout != NULL) {
 | |
|  	p = callout;
 | |
|  
 | |
| @@ -1292,6 +1327,8 @@
 | |
|  {
 | |
|      if (callout == NULL)
 | |
|  	return NULL;
 | |
| +	
 | |
| +	check_time();
 | |
|  
 | |
|      gettimeofday(&timenow, NULL);
 | |
|      tvp->tv_sec = callout->c_time.tv_sec - timenow.tv_sec;
 |