PUD: cleanup includes
[olsrd.git] / lib / pud / src / dedup.h
1 #ifndef _PUD_DEDUP_H_
2 #define _PUD_DEDUP_H_
3
4 /* Plugin includes */
5
6 /* OLSR includes */
7 #include "olsr_types.h"
8 #include "olsr_protocol.h"
9
10 /* System includes */
11 #include <stdint.h>
12 #include <stdbool.h>
13 #include <pthread.h>
14
15 /* A de-duplication entry holding the information to compare, 18 bytes */
16 typedef struct _DeDupEntry {
17                 uint16_t seqno;
18                 union olsr_ip_addr originator;
19 } DeDupEntry;
20
21 /**
22  A list of de-duplication entries that are used to determine whether a received
23  OLSR message was already seen.
24
25  The list is a circular list.
26  */
27 typedef struct _DeDupList {
28         pthread_mutex_t mutex; /**< access mutex */
29
30         unsigned long long entriesMaxCount; /**< the maximum number of entries in the list */
31         DeDupEntry * entries; /**< the list entries */
32
33         unsigned long long entriesCount; /**< the number of entries in the list */
34         unsigned long long newestEntryIndex; /**< index of the newest entry in the list (zero-based) */
35 } DeDupList;
36
37 bool initDeDupList(DeDupList * deDupList, unsigned long long maxEntries);
38 void destroyDeDupList(DeDupList * deDupList);
39
40 void addToDeDup(DeDupList * deDupList, union olsr_message *olsrMessage);
41
42 bool isInDeDupList(DeDupList * deDupList, union olsr_message *olsrMessage);
43
44 #endif /* _PUD_DEDUP_H_ */