-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathconnlist_timer.c
43 lines (37 loc) · 1.06 KB
/
connlist_timer.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/timer.h>
#include <linux/jiffies.h>
#include "connlist.h"
#include "connlist_timer.h"
struct timer_list aids_connlist_timer;
static void aids_connlist_timer_func(unsigned long arg)
{
aids_connlist_entry* entry;
unsigned long flags;
spin_lock_irqsave(&g_connlist_spinlock, flags);
rcu_read_lock();
list_for_each_entry_rcu(entry, &g_aids_connlist_head, link) {
if(!time_after64(jiffies_64, entry->conn_info.timeout))
break;
aids_connlist_delete_sync(entry, 1);
}
rcu_read_unlock();
spin_unlock_irqrestore(&g_connlist_spinlock, flags);
aids_connlist_timer.expires = AIDS_CONNLIST_TIMEOUT_CHECK;
add_timer(&aids_connlist_timer);
}
int aids_connlist_timer_init(void)
{
init_timer(&aids_connlist_timer);
aids_connlist_timer.function = &aids_connlist_timer_func;
aids_connlist_timer.data = 0;
aids_connlist_timer.expires = AIDS_CONNLIST_TIMEOUT_CHECK;
add_timer(&aids_connlist_timer);
return 0;
}
void aids_connlist_timer_deinit(void)
{
del_timer(&aids_connlist_timer);
}