X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/9d3a4132788b198345116624761c12ed7bc936b6..8dea8d37a13fcc615daba3375809900f04a2e5a2:/secnet.h diff --git a/secnet.h b/secnet.h index 3ac5656..2535030 100644 --- a/secnet.h +++ b/secnet.h @@ -6,7 +6,6 @@ #include "config.h" #include #include -#include #include #include #include @@ -32,22 +31,13 @@ struct subnet_list { struct subnet *list; }; -/* Match an address (in HOST byte order) with a subnet list. - Returns True if matched. */ -extern bool_t subnet_match(struct subnet *s, uint32_t address); -extern bool_t subnet_matches_list(struct subnet_list *list, uint32_t address); -extern bool_t subnets_intersect(struct subnet a, struct subnet b); -extern bool_t subnet_intersects_with_list(struct subnet a, - struct subnet_list *b); -extern bool_t subnet_lists_intersect(struct subnet_list *a, - struct subnet_list *b); - /***** END of shared types *****/ /***** CONFIGURATION support *****/ extern bool_t just_check_config; /* If True then we're going to exit after reading the configuration file */ +extern bool_t background; /* If True then we'll eventually run as a daemon */ typedef struct dict dict_t; /* Configuration dictionary */ typedef struct closure closure_t; @@ -102,6 +92,7 @@ extern string_t *dict_keys(dict_t *dict); /* List-manipulation functions */ extern list_t *list_new(void); +extern uint32_t list_length(list_t *a); extern list_t *list_append(list_t *a, item_t *i); extern list_t *list_append_list(list_t *a, list_t *b); /* Returns an item from the list (index starts at 0), or NULL */ @@ -129,19 +120,24 @@ struct flagstr { string_t name; uint32_t value; }; +extern uint32_t string_to_word(string_t s, struct cloc loc, + struct flagstr *f, string_t desc); extern uint32_t string_list_to_word(list_t *l, struct flagstr *f, string_t desc); /***** END of configuration support *****/ -/***** UTILITY functions *****/ +/***** LOG functions *****/ -#define M_WARNING 1 -#define M_ERROR 2 -#define M_FATAL 4 -#define M_INFO 8 -#define M_DEBUG_CONFIG 16 -#define M_DEBUG_PHASE 32 +#define M_DEBUG_CONFIG 0x001 +#define M_DEBUG_PHASE 0x002 +#define M_DEBUG 0x004 +#define M_INFO 0x008 +#define M_NOTICE 0x010 +#define M_WARNING 0x020 +#define M_ERROR 0x040 +#define M_SECURITY 0x080 +#define M_FATAL 0x100 extern void fatal(char *message, ...); extern void fatal_perror(char *message, ...); @@ -149,13 +145,14 @@ extern void fatal_status(int status, char *message, ...); extern void fatal_perror_status(int status, char *message, ...); extern void cfgfatal(struct cloc loc, string_t facility, char *message, ...); -extern char *safe_strdup(char *string, char *message); -extern void *safe_malloc(size_t size, char *message); - extern void Message(uint32_t class, char *message, ...); -extern string_t ipaddr_to_string(uint32_t addr); -extern string_t subnet_to_string(struct subnet *sn); +/***** END of log functions *****/ + +/***** UTILITY functions *****/ + +extern char *safe_strdup(char *string, char *message); +extern void *safe_malloc(size_t size, char *message); extern int sys_cmd(const char *file, char *argc, ...); @@ -205,6 +202,9 @@ typedef void hook_fn(void *self, uint32_t newphase); bool_t add_hook(uint32_t phase, hook_fn *f, void *state); bool_t remove_hook(uint32_t phase, hook_fn *f, void *state); +extern uint32_t current_phase; +extern void enter_phase(uint32_t new_phase); + extern bool_t require_root_privileges; /* Some features (like netlink 'soft' routes) require that secnet retain root @@ -308,15 +308,15 @@ struct comm_if { /* LOG interface */ -typedef void log_msg_fn(void *st, int priority, char *message, ...); -typedef void log_vmsg_fn(void *st, int priority, char *message, va_list args); +typedef void log_msg_fn(void *st, int class, char *message, ...); +typedef void log_vmsg_fn(void *st, int class, char *message, va_list args); struct log_if { void *st; log_msg_fn *log; log_vmsg_fn *vlog; }; /* (convenience function, defined in util.c) */ -extern void log(struct log_if *lf, int priority, char *message, ...); +extern void log(struct log_if *lf, int class, char *message, ...); /* SITE interface */ @@ -387,10 +387,12 @@ typedef void netlink_link_quality_fn(void *st, void *cid, uint32_t quality); client identifier. 'hard_route' indicates whether the routes being registered are permanent (hard) or temporary (soft); some types of netlink device can only cope with hard routes. */ +#define NETLINK_OPTION_SOFTROUTE 1 +#define NETLINK_OPTION_ALLOW_ROUTE 2 typedef void *netlink_regnets_fn(void *st, struct subnet_list *networks, netlink_deliver_fn *deliver, void *dst, uint32_t max_start_pad, uint32_t max_end_pad, - bool_t hard_routes, string_t client_name); + uint32_t options, string_t client_name); struct netlink_if { void *st;