chiark / gitweb /
Import release 0.1.13
[secnet.git] / secnet.h
index 2535030f17fef6da146944d3384dca7b99cdf85d..7eed367b406f009be83626572b7757764e9a620c 100644 (file)
--- a/secnet.h
+++ b/secnet.h
 typedef char *string_t;
 typedef enum {False,True} bool_t;
 
-#define ASSERT(x) do { if (!(x)) { fatal("assertion failed line " __LINE__ \
-                                        " file " __FILE__ "\n"); } while(0)
-
-/***** SHARED types *****/
-
-/* These are stored in HOST byte order */
-struct subnet {
-    uint32_t prefix;
-    uint32_t mask;
-    uint32_t len;
-};
-
-struct subnet_list {
-    uint32_t entries;
-    struct subnet *list;
-};
-
-/***** END of shared types *****/
+#define ASSERT(x) do { if (!(x)) { fatal("assertion failed line %d file " \
+                                        __FILE__ "\n",__LINE__); } } while(0)
 
 /***** CONFIGURATION support *****/
 
@@ -75,6 +59,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;
@@ -112,10 +98,6 @@ extern uint32_t dict_read_number(dict_t *dict, string_t key, bool_t required,
                                 string_t desc, struct cloc loc, uint32_t def);
 extern bool_t dict_read_bool(dict_t *dict, string_t key, bool_t required,
                             string_t desc, struct cloc loc, bool_t def);
-extern void dict_read_subnet_list(dict_t *dict, string_t key, bool_t required,
-                                 string_t desc, struct cloc loc,
-                                 struct subnet_list *sl);
-extern uint32_t string_to_ipaddr(item_t *i, string_t desc);
 struct flagstr {
     string_t name;
     uint32_t value;
@@ -135,7 +117,7 @@ extern uint32_t string_list_to_word(list_t *l, struct flagstr *f,
 #define M_INFO        0x008
 #define M_NOTICE       0x010
 #define M_WARNING      0x020
-#define M_ERROR               0x040
+#define M_ERR         0x040
 #define M_SECURITY     0x080
 #define M_FATAL               0x100
 
@@ -205,12 +187,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 *****/
@@ -220,26 +200,26 @@ extern string_t require_root_privileges_explanation;
 /* Module initialisation function type - modules export one function of
    this type which is called to initialise them. For dynamically loaded
    modules it's called "secnet_module". */
-typedef void (init_module)(dict_t *dict);
+typedef void init_module(dict_t *dict);
 
 /***** END of module support *****/
 
 /***** CLOSURE TYPES and interface definitions *****/
 
-#define CL_PURE        0
-#define CL_RESOLVER    1
-#define CL_RANDOMSRC   2
-#define CL_RSAPUBKEY   3
-#define CL_RSAPRIVKEY  4
-#define CL_COMM        5
-#define CL_IPIF        6
-#define CL_LOG         7
-#define CL_SITE        8
-#define CL_TRANSFORM   9
-#define CL_NETLINK    10
-#define CL_DH         11
-#define CL_HASH       12
-#define CL_BUFFER     13
+#define CL_PURE         0
+#define CL_RESOLVER     1
+#define CL_RANDOMSRC    2
+#define CL_RSAPUBKEY    3
+#define CL_RSAPRIVKEY   4
+#define CL_COMM         5
+#define CL_IPIF         6
+#define CL_LOG          7
+#define CL_SITE         8
+#define CL_TRANSFORM    9
+#define CL_DH          11
+#define CL_HASH        12
+#define CL_BUFFER      13
+#define CL_NETLINK     14
 
 struct buffer_if;
 
@@ -251,6 +231,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);
@@ -301,6 +282,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;
@@ -374,7 +357,7 @@ struct transform_if {
    netlink_regnets_fn.  If buf has size 0 then the function is just
    being called for its site-effects (eg. making the site code attempt
    to bring up a network link) */
-typedef void netlink_deliver_fn(void *st, void *cid, struct buffer_if *buf);
+typedef void netlink_deliver_fn(void *st, struct buffer_if *buf);
 /* site code can tell netlink when outgoing packets will be dropped,
    so netlink can generate appropriate ICMP and make routing decisions */
 #define LINK_QUALITY_DOWN 0   /* No chance of a packet being delivered */
@@ -382,23 +365,21 @@ typedef void netlink_deliver_fn(void *st, void *cid, struct buffer_if *buf);
 #define LINK_QUALITY_DOWN_CURRENT_ADDRESS 2 /* Link down, current address information */
 #define LINK_QUALITY_UP 3     /* Link active */
 #define MAXIMUM_LINK_QUALITY 3
-typedef void netlink_link_quality_fn(void *st, void *cid, uint32_t quality);
-/* Register for packets from specified networks. Return value is
-   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,
-                                uint32_t options, string_t client_name);
-
+typedef void netlink_link_quality_fn(void *st, uint32_t quality);
+typedef void netlink_register_fn(void *st, netlink_deliver_fn *deliver,
+                                void *dst, uint32_t max_start_pad,
+                                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_regnets_fn *regnets;
+    netlink_register_fn *reg;
     netlink_deliver_fn *deliver;
     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 */