#include "config.h"
#include <stdlib.h>
#include <stdarg.h>
+#include <stdio.h>
#include <sys/poll.h>
#include <sys/types.h>
#include <sys/time.h>
typedef enum {False,True} bool_t;
#define ASSERT(x) do { if (!(x)) { fatal("assertion failed line %d file " \
- __FILE__ "\n",__LINE__); } } while(0)
+ __FILE__,__LINE__); } } while(0)
/***** CONFIGURATION support *****/
struct cloc loc;
};
+/* Note that it is unwise to use this structure directly; use the list
+ manipulation functions instead. */
struct list {
item_t *item;
struct list *next;
/***** END of configuration support *****/
-/***** LOG functions *****/
-
-#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_ERR 0x040
-#define M_SECURITY 0x080
-#define M_FATAL 0x100
-
-extern void fatal(char *message, ...);
-extern void fatal_perror(char *message, ...);
-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 void Message(uint32_t class, char *message, ...);
-
-/***** END of log functions *****/
-
/***** UTILITY functions *****/
extern char *safe_strdup(char *string, char *message);
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
- privileges. They should
- indicate that here when
- appropriate. */
+/* Some features (like netlink 'soft' routes) require that secnet
+ retain root privileges. They should indicate that here when
+ appropriate. */
+extern bool_t require_root_privileges;
extern string_t require_root_privileges_explanation;
/***** END of program lifetime support *****/
type. 'address' will be NULL if there was a problem with the query. It
will be freed once resolve_answer_fn returns. It is in network byte
order. */
+/* XXX extend to be able to provide multiple answers */
typedef void resolve_answer_fn(void *st, struct in_addr *addr);
typedef bool_t resolve_request_fn(void *st, string_t name,
resolve_answer_fn *cb, void *cst);
struct sockaddr_in *dest);
struct comm_if {
void *st;
+ uint32_t min_start_pad;
+ uint32_t min_end_pad;
comm_request_notify_fn *request_notify;
comm_release_notify_fn *release_notify;
comm_sendmsg_fn *sendmsg;
log_vmsg_fn *vlog;
};
/* (convenience function, defined in util.c) */
-extern void log(struct log_if *lf, int class, char *message, ...);
+extern void log(struct log_if *lf, int class, char *message, ...)
+FORMAT(printf,3,4);
/* SITE interface */
uint32_t max_end_pad);
typedef void netlink_output_config_fn(void *st, struct buffer_if *buf);
typedef bool_t netlink_check_config_fn(void *st, struct buffer_if *buf);
+typedef void netlink_set_mtu_fn(void *st, uint32_t new_mtu);
struct netlink_if {
void *st;
netlink_register_fn *reg;
netlink_link_quality_fn *set_quality;
netlink_output_config_fn *output_config;
netlink_check_config_fn *check_config;
+ netlink_set_mtu_fn *set_mtu;
};
/* DH interface */
uint32_t len; /* Total length allocated at base */
};
+/***** LOG functions *****/
+
+#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_ERR 0x040
+#define M_SECURITY 0x080
+#define M_FATAL 0x100
+
+/* The fatal() family of functions require messages that do not end in '\n' */
+extern NORETURN(fatal(char *message, ...));
+extern NORETURN(fatal_perror(char *message, ...));
+extern NORETURN(fatal_status(int status, char *message, ...));
+extern NORETURN(fatal_perror_status(int status, char *message, ...));
+
+/* The cfgfatal() family of functions require messages that end in '\n' */
+extern NORETURN(cfgfatal(struct cloc loc, string_t facility, char *message,
+ ...));
+extern void cfgfile_postreadcheck(struct cloc loc, FILE *f);
+extern NORETURN(vcfgfatal_maybefile(FILE *maybe_f, struct cloc loc,
+ string_t facility, char *message,
+ va_list));
+extern NORETURN(cfgfatal_maybefile(FILE *maybe_f, struct cloc loc,
+ string_t facility, char *message, ...));
+
+extern void Message(uint32_t class, char *message, ...) FORMAT(printf,2,3);
+
+/***** END of log functions *****/
+
#endif /* secnet_h */