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
|
||||
#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
|
||||
#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);
|
||||
}
|
||||
|
||||
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)))
|
||||
{
|
||||
G.stop_daemon = 1;
|
||||
@ -737,12 +749,16 @@ int main(int argc, char *argv[]) {
|
||||
fd_set rfds;
|
||||
struct timeval tv;
|
||||
struct timespec next_update;
|
||||
struct timespec next_invalidation;
|
||||
struct timespec now;
|
||||
struct timespec diff;
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &next_update);
|
||||
next_update.tv_sec += MIN_INTERVAL;
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &next_invalidation);
|
||||
next_invalidation.tv_sec += MIN_INTERVAL;
|
||||
|
||||
G.sock = -1;
|
||||
parse_cmdline(argc, argv);
|
||||
|
||||
@ -782,6 +798,13 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
// all routers could have expired, check again
|
||||
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_ebtables();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user