chiark / gitweb /
Import release 0.1.14
[secnet.git] / secnet.h
index c40ed1bddd70cf03b54b3de13ca71d9cde954453..f8062e6a81704b035299274a05c213f73969002e 100644 (file)
--- a/secnet.h
+++ b/secnet.h
@@ -6,6 +6,7 @@
 #include "config.h"
 #include <stdlib.h>
 #include <stdarg.h>
+#include <stdio.h>
 #include <sys/poll.h>
 #include <sys/types.h>
 #include <sys/time.h>
@@ -15,7 +16,7 @@ typedef char *string_t;
 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 *****/
 
@@ -59,6 +60,8 @@ struct item {
     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;
@@ -107,28 +110,6 @@ extern uint32_t string_list_to_word(list_t *l, struct flagstr *f,
 
 /***** 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);
@@ -185,12 +166,10 @@ 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
-                                         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 *****/
@@ -231,6 +210,7 @@ struct buffer_if;
    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);
@@ -281,6 +261,8 @@ typedef bool_t comm_sendmsg_fn(void *commst, struct buffer_if *buf,
                               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;
@@ -296,7 +278,8 @@ struct log_if {
     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 */
 
@@ -368,6 +351,7 @@ typedef void netlink_register_fn(void *st, netlink_deliver_fn *deliver,
                                 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;
@@ -375,6 +359,7 @@ struct netlink_if {
     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 */
@@ -418,4 +403,36 @@ struct buffer_if {
     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 */