add option LEASEFILE_USE_REMAINING_TIME
new function lease_file_rewrite() that is called just before exiting, and when SIGUSR2 is received see #295
This commit is contained in:
parent
d0e7958617
commit
a92138345b
|
@ -1,7 +1,11 @@
|
||||||
$Id: Changelog.txt,v 1.439 2018/04/12 09:32:22 nanard Exp $
|
$Id: Changelog.txt,v 1.439 2018/04/12 09:32:22 nanard Exp $
|
||||||
|
|
||||||
|
2018/05/02:
|
||||||
|
option to store remaining time in leasefile
|
||||||
|
|
||||||
2018/04/12:
|
2018/04/12:
|
||||||
pf: set dst address in rule if use_ext_ip_addr is set
|
pf: set dst address in rule if use_ext_ip_addr is set
|
||||||
|
|
||||||
2018/04/06:
|
2018/04/06:
|
||||||
Add options for netfilter scripts
|
Add options for netfilter scripts
|
||||||
|
|
||||||
|
|
|
@ -185,6 +185,7 @@ or if your linux system use /etc/init.d/
|
||||||
miniupnpd handles the following signals :
|
miniupnpd handles the following signals :
|
||||||
SIGUSR1: Send public IP address change notification
|
SIGUSR1: Send public IP address change notification
|
||||||
SIGUSR2: Handle special actions in Tomato Firmware version
|
SIGUSR2: Handle special actions in Tomato Firmware version
|
||||||
|
Or rewrite the lease_file
|
||||||
SIGINT: Close gracefully
|
SIGINT: Close gracefully
|
||||||
SIGTERM: Close gracefully
|
SIGTERM: Close gracefully
|
||||||
SIGPIPE: Ignore
|
SIGPIPE: Ignore
|
||||||
|
|
|
@ -472,6 +472,8 @@ if [ -n "$LEASEFILE" ] ; then
|
||||||
else
|
else
|
||||||
echo "/*#define ENABLE_LEASEFILE*/" >> ${CONFIGFILE}
|
echo "/*#define ENABLE_LEASEFILE*/" >> ${CONFIGFILE}
|
||||||
fi
|
fi
|
||||||
|
echo "/* Uncomment the following line to store remaining time in lease file */" >> ${CONFIGFILE}
|
||||||
|
echo "/*#define LEASEFILE_USE_REMAINING_TIME*/" >> ${CONFIGFILE}
|
||||||
echo "" >> ${CONFIGFILE}
|
echo "" >> ${CONFIGFILE}
|
||||||
|
|
||||||
echo "/* Uncomment the following line to enable port in use check */" >> ${CONFIGFILE}
|
echo "/* Uncomment the following line to enable port in use check */" >> ${CONFIGFILE}
|
||||||
|
|
|
@ -112,6 +112,9 @@ int get_udp_dst_port (char *payload);
|
||||||
/* variables used by signals */
|
/* variables used by signals */
|
||||||
static volatile sig_atomic_t quitting = 0;
|
static volatile sig_atomic_t quitting = 0;
|
||||||
volatile sig_atomic_t should_send_public_address_change_notif = 0;
|
volatile sig_atomic_t should_send_public_address_change_notif = 0;
|
||||||
|
#if !defined(TOMATO) && defined(ENABLE_LEASEFILE) && defined(LEASEFILE_USE_REMAINING_TIME)
|
||||||
|
volatile sig_atomic_t should_rewrite_leasefile = 0;
|
||||||
|
#endif /* !TOMATO && ENABLE_LEASEFILE && LEASEFILE_USE_REMAINING_TIME */
|
||||||
|
|
||||||
#ifdef TOMATO
|
#ifdef TOMATO
|
||||||
#if 1
|
#if 1
|
||||||
|
@ -792,6 +795,16 @@ sigusr1(int sig)
|
||||||
should_send_public_address_change_notif = 1;
|
should_send_public_address_change_notif = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(TOMATO) && defined(ENABLE_LEASEFILE) && defined(LEASEFILE_USE_REMAINING_TIME)
|
||||||
|
/* Handler for the SIGUSR2 signal to request rewrite of lease_file */
|
||||||
|
static void
|
||||||
|
sigusr2(int sig)
|
||||||
|
{
|
||||||
|
UNUSED(sig);
|
||||||
|
should_rewrite_leasefile = 1;
|
||||||
|
}
|
||||||
|
#endif /* !TOMATO && ENABLE_LEASEFILE && LEASEFILE_USE_REMAINING_TIME */
|
||||||
|
|
||||||
/* record the startup time, for returning uptime */
|
/* record the startup time, for returning uptime */
|
||||||
static void
|
static void
|
||||||
set_startup_time(void)
|
set_startup_time(void)
|
||||||
|
@ -1678,6 +1691,13 @@ init(int argc, char * * argv, struct runtime_vars * v)
|
||||||
{
|
{
|
||||||
syslog(LOG_NOTICE, "Failed to set %s handler", "SIGUSR1");
|
syslog(LOG_NOTICE, "Failed to set %s handler", "SIGUSR1");
|
||||||
}
|
}
|
||||||
|
#if !defined(TOMATO) && defined(ENABLE_LEASEFILE) && defined(LEASEFILE_USE_REMAINING_TIME)
|
||||||
|
sa.sa_handler = sigusr2;
|
||||||
|
if(sigaction(SIGUSR2, &sa, NULL) < 0)
|
||||||
|
{
|
||||||
|
syslog(LOG_NOTICE, "Failed to set %s handler", "SIGUSR2");
|
||||||
|
}
|
||||||
|
#endif /* !TOMATO && ENABLE_LEASEFILE && LEASEFILE_USE_REMAINING_TIME */
|
||||||
|
|
||||||
/* initialize random number generator */
|
/* initialize random number generator */
|
||||||
srandom((unsigned int)time(NULL));
|
srandom((unsigned int)time(NULL));
|
||||||
|
@ -2071,6 +2091,13 @@ main(int argc, char * * argv)
|
||||||
upnp_bootid = time(NULL);
|
upnp_bootid = time(NULL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if !defined(TOMATO) && defined(ENABLE_LEASEFILE) && defined(LEASEFILE_USE_REMAINING_TIME)
|
||||||
|
if(should_rewrite_leasefile)
|
||||||
|
{
|
||||||
|
lease_file_rewrite();
|
||||||
|
should_rewrite_leasefile = 0;
|
||||||
|
}
|
||||||
|
#endif /* !TOMATO && ENABLE_LEASEFILE && LEASEFILE_USE_REMAINING_TIME */
|
||||||
/* send public address change notifications if needed */
|
/* send public address change notifications if needed */
|
||||||
if(should_send_public_address_change_notif)
|
if(should_send_public_address_change_notif)
|
||||||
{
|
{
|
||||||
|
@ -2623,6 +2650,9 @@ shutdown:
|
||||||
#ifdef TOMATO
|
#ifdef TOMATO
|
||||||
tomato_save("/etc/upnp/data");
|
tomato_save("/etc/upnp/data");
|
||||||
#endif /* TOMATO */
|
#endif /* TOMATO */
|
||||||
|
#if defined(ENABLE_LEASEFILE) && defined(LEASEFILE_USE_REMAINING_TIME)
|
||||||
|
lease_file_rewrite();
|
||||||
|
#endif /* ENABLE_LEASEFILE && LEASEFILE_USE_REMAINING_TIME */
|
||||||
/* close out open sockets */
|
/* close out open sockets */
|
||||||
while(upnphttphead.lh_first != NULL)
|
while(upnphttphead.lh_first != NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -295,6 +295,31 @@ int reload_from_lease_file()
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LEASEFILE_USE_REMAINING_TIME
|
||||||
|
void lease_file_rewrite(void)
|
||||||
|
{
|
||||||
|
int index;
|
||||||
|
unsigned short eport, iport;
|
||||||
|
int proto;
|
||||||
|
char iaddr[32];
|
||||||
|
char desc[64];
|
||||||
|
char rhost[40];
|
||||||
|
unsigned int timestamp;
|
||||||
|
|
||||||
|
if (lease_file == NULL) return;
|
||||||
|
remove(lease_file);
|
||||||
|
for(index = 0; ; index++) {
|
||||||
|
if(get_redirect_rule_by_index(index, 0/*ifname*/, &eport, iaddr, sizeof(iaddr),
|
||||||
|
&iport, &proto, desc, sizeof(desc),
|
||||||
|
rhost, sizeof(rhost), ×tamp,
|
||||||
|
0, 0) < 0)
|
||||||
|
break;
|
||||||
|
if(lease_file_add(eport, iaddr, iport, proto, desc, timestamp) < 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* upnp_redirect()
|
/* upnp_redirect()
|
||||||
|
|
|
@ -16,6 +16,9 @@
|
||||||
|
|
||||||
#ifdef ENABLE_LEASEFILE
|
#ifdef ENABLE_LEASEFILE
|
||||||
int reload_from_lease_file(void);
|
int reload_from_lease_file(void);
|
||||||
|
#ifdef LEASEFILE_USE_REMAINING_TIME
|
||||||
|
void lease_file_rewrite(void);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* upnp_redirect()
|
/* upnp_redirect()
|
||||||
|
|
Loading…
Reference in New Issue