gluon-radv-filterd: Invalidate originators cache after some time (#1343)
This commit is contained in:
parent
603912dd0d
commit
e909d45ab0
@ -67,6 +67,10 @@
|
|||||||
// Also, the first update will take at least this long
|
// Also, the first update will take at least this long
|
||||||
#define MIN_INTERVAL 15
|
#define MIN_INTERVAL 15
|
||||||
|
|
||||||
|
// Remember the originator of a router for at most this period of time (in
|
||||||
|
// seconds). Re-read it from the transtable afterwards.
|
||||||
|
#define ORIGINATOR_CACHE_TTL 300
|
||||||
|
|
||||||
// max execution time of a single ebtables call in nanoseconds
|
// max execution time of a single ebtables call in nanoseconds
|
||||||
#define EBTABLES_TIMEOUT 500000000 // 500ms
|
#define EBTABLES_TIMEOUT 500000000 // 500ms
|
||||||
|
|
||||||
@ -727,6 +731,14 @@ static void update_ebtables(void) {
|
|||||||
error_message(0, 0, "warning: adding new rule to ebtables chain %s failed", G.chain);
|
error_message(0, 0, "warning: adding new rule to ebtables chain %s failed", G.chain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void invalidate_originators(void)
|
||||||
|
{
|
||||||
|
struct router *router;
|
||||||
|
foreach(router, G.routers) {
|
||||||
|
memset(&router->originator, 0, sizeof(router->originator));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void sighandler(int sig __attribute__((unused)))
|
static void sighandler(int sig __attribute__((unused)))
|
||||||
{
|
{
|
||||||
G.stop_daemon = 1;
|
G.stop_daemon = 1;
|
||||||
@ -737,12 +749,16 @@ int main(int argc, char *argv[]) {
|
|||||||
fd_set rfds;
|
fd_set rfds;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
struct timespec next_update;
|
struct timespec next_update;
|
||||||
|
struct timespec next_invalidation;
|
||||||
struct timespec now;
|
struct timespec now;
|
||||||
struct timespec diff;
|
struct timespec diff;
|
||||||
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, &next_update);
|
clock_gettime(CLOCK_MONOTONIC, &next_update);
|
||||||
next_update.tv_sec += MIN_INTERVAL;
|
next_update.tv_sec += MIN_INTERVAL;
|
||||||
|
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &next_invalidation);
|
||||||
|
next_invalidation.tv_sec += MIN_INTERVAL;
|
||||||
|
|
||||||
G.sock = -1;
|
G.sock = -1;
|
||||||
parse_cmdline(argc, argv);
|
parse_cmdline(argc, argv);
|
||||||
|
|
||||||
@ -782,6 +798,13 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
// all routers could have expired, check again
|
// all routers could have expired, check again
|
||||||
if (G.routers != NULL) {
|
if (G.routers != NULL) {
|
||||||
|
if(timespec_diff(&now, &next_invalidation, &diff)) {
|
||||||
|
invalidate_originators();
|
||||||
|
|
||||||
|
next_invalidation = now;
|
||||||
|
next_invalidation.tv_sec += ORIGINATOR_CACHE_TTL;
|
||||||
|
}
|
||||||
|
|
||||||
update_tqs();
|
update_tqs();
|
||||||
update_ebtables();
|
update_ebtables();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user