24 #include <netinet/in.h>
26 #include <hicn/util/win_portability.h>
29 #include <hicn/util/token.h>
33 #define foreach_policy_tag \
46 #define _(x, y) POLICY_TAG_ ## x,
52 #define MAXSZ_POLICY_TAG_ 11
53 #define MAXSZ_POLICY_TAG MAXSZ_POLICY_TAG_ + 1
55 extern const char * policy_tag_str[];
56 extern const char policy_tag_short_str[];
60 policy_tag_from_str(
const char * str)
62 #define _(x, y) if (strcasecmp(str, policy_tag_str[POLICY_TAG_ ## x] ) == 0) { return POLICY_TAG_ ## x; } else
70 typedef int policy_tags_t;
73 void policy_tags_add(policy_tags_t * tags, policy_tag_t tag)
79 void policy_tags_remove(policy_tags_t * tags, policy_tag_t tag)
85 int policy_tags_has(policy_tags_t tags, policy_tag_t tag)
87 return tags & (1 << tag);
91 void policy_tags_union(policy_tags_t * tags, policy_tags_t * tags_to_union)
93 #define _(x, y) *tags |= policy_tags_has(*tags_to_union, POLICY_TAG_ ## x) ? (1 << POLICY_TAG_ ## x) : 0;
98 #define POLICY_TAGS_EMPTY 0
102 policy_tags_snprintf(
char * s,
size_t size, policy_tags_t tags)
104 #define _(x, y) s[POLICY_TAG_ ## x] = policy_tags_has(tags, POLICY_TAG_ ## x) ? y : '.';
107 s[POLICY_TAG_N] =
'\0';
108 return POLICY_TAG_N + 1;
111 #define MAXSZ_POLICY_TAGS_ POLICY_TAG_N + 1
112 #define MAXSZ_POLICY_TAGS MAXSZ_POLICY_TAGS_ + 1
118 #define foreach_policy_state \
127 #define _(x) POLICY_STATE_ ## x,
132 #define MAXSZ_POLICY_STATE_ 8
133 #define MAXSZ_POLICY_STATE MAXSZ_POLICY_STATE_ + 1
135 extern const char * policy_state_str[];
141 policy_state_t state;
145 #define MAXSZ_POLICY_TAG_STATE_ 8
146 #define MAXSZ_POLICY_TAG_STATE MAXSZ_POLICY_TAG_STATE_ + 1
148 int policy_tag_state_snprintf(
char * s,
size_t size,
const policy_tag_state_t * tag_state);
159 #define INTERFACE_STATS_NONE { \
175 #define POLICY_STATS_NONE { \
176 .wired = INTERFACE_STATS_NONE, \
177 .wifi = INTERFACE_STATS_NONE, \
178 .cellular = INTERFACE_STATS_NONE, \
179 .all = INTERFACE_STATS_NONE, \
183 uint32_t num_packets;
186 uint32_t latency_idle;
189 #define INTERFACE_COUNTERS_NONE { \
201 uint64_t last_update;
204 #define POLICY_COUNTERS_NONE (policy_counters_t) { \
205 .wired = INTERFACE_COUNTERS_NONE, \
206 .wifi = INTERFACE_COUNTERS_NONE, \
207 .cellular = INTERFACE_COUNTERS_NONE, \
208 .all = INTERFACE_COUNTERS_NONE, \
214 #define APP_NAME_LEN 128
217 char app_name[APP_NAME_LEN];
226 #define _(x, y) { POLICY_STATE_NEUTRAL, 0 },
228 #define _(x, y) [POLICY_TAG_ ## x] = { POLICY_STATE_NEUTRAL, 0 },
233 .stats = POLICY_STATS_NONE,
244 char ipv4_prefix[INET_ADDRSTRLEN + PFX_STRLEN];
245 char ipv6_prefix[INET6_ADDRSTRLEN + PFX_STRLEN];