Fix to make ulogd daemonize properly with drl.
[distributedratelimiting.git] / drl / raterouter.h
1 /* See the DRL-LICENSE file for this file's software license. */
2
3 #ifndef _RATEROUTER_H_
4 #define _RATEROUTER_H_
5
6 #define _XOPEN_SOURCE 600 /* for pthread_rwlock_t */
7
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <netinet/in_systm.h>
11 #include <netinet/in.h>
12 #include <netinet/ip.h>
13 #include <netinet/tcp.h>
14 #include <netinet/udp.h>
15
16 #include <sys/types.h>
17 #include <sys/socket.h>
18 #include <sys/time.h>
19 #include <sys/un.h>
20 #include <sys/poll.h>
21
22 #include <arpa/inet.h>
23 #include <time.h>
24 #include <signal.h>
25 #include <math.h>
26 #include <limits.h>
27
28 #include <pthread.h>
29 #include <unistd.h>
30
31 #include <netdb.h>
32 #include <ifaddrs.h>  /* defines getifaddrs */
33 #include <string.h>
34
35 enum policies { POLICY_GRD = 1, POLICY_FPS = 2 };
36 enum commfabrics { COMM_MESH = 1, COMM_GOSSIP = 2 };
37 enum accountings { ACT_STANDARD = 1, ACT_SAMPLEHOLD = 2, ACT_SIMPLE = 3, ACT_MULTIPLE = 4 };
38 enum dampenings { DAMPEN_NONE = 0, DAMPEN_TEST = 1, DAMPEN_FAILED = 2, DAMPEN_PASSED = 3, DAMPEN_SKIP = 4 };
39 enum memberships { SWIM = 1, ZOOKEEPER = 2 };
40 enum failure_behaviors { PANIC = 1, QUORUM = 2 };
41
42 /* The comm library also has definitions for comfabrics. This prevents us
43  * from defining them twice. */
44 #define COMM_DEFS
45
46 /* global constants */
47 #define IDENT_CLEAN_INTERVAL 5 /* in seconds */
48
49 #define LIMITER_LISTEN_PORT 9001
50
51 /**
52  * The weight percentage increase that must occur before FPS does increase
53  * dampening.
54  */
55 #define LARGE_INCREASE_PERCENTAGE (0.05)
56
57 /**
58  * Below this rate, a limiter is basically treated as idle, and its limit is
59  * raised to allow for increases should the limiter suddenly become active.
60  *
61  * This is used for FPS only.  See estimate.c
62  */
63 #define FLOW_START_THRESHOLD (10000)
64
65 #define CLOSE_ENOUGH (0.90)
66
67 #define GRD_BIG_DROP (0.90)
68
69 /**
70  * All fields come from the ip protocol header.
71  *
72  * 1 byte for the protocol.
73  * 4 bytes for the source ip.
74  * 4 bytes for the destination ip.
75  * 2 bytes for the source port.
76  * 2 bytes for the destination port.
77  *
78  * 4+4+2+2+1 = 13.
79  */
80 #define FLOWKEYSIZE (13)
81
82 /* Causes each identity to track every flow in two tables.  One table is as
83  * specified in the config file.  The second is a standard table with
84  * "perfect" accounting so that we can compare the two.  Turn this off for 
85  * any type of production setting. */
86 //#define SHADOW_ACCTING
87
88 /* Turn this on to simulate network partitions.
89  * Turn off for production settings. */
90 #define ALLOW_PARTITION
91
92 /* forward declare some structs */
93 struct limiter;
94 struct identity;
95
96 /* prototypes for threaded processing DRL model */
97 void handle_estimation(void *arg);
98
99 #endif