host: deal with host/peer null pointers in debug messages
[project/unetd.git] / network.h
index da0a28182916495e64bbb2290d9435841f0f4939..933921aaf3228e340a1370586aa5f8c3f56e134c 100644 (file)
--- a/network.h
+++ b/network.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0+
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (C) 2022 Felix Fietkau <nbd@nbd.name>
  */
@@ -12,6 +12,7 @@
 enum network_type {
        NETWORK_TYPE_FILE,
        NETWORK_TYPE_INLINE,
+       NETWORK_TYPE_DYNAMIC,
 };
 
 struct wg_ops;
@@ -29,11 +30,14 @@ struct network {
                int keepalive;
                uint8_t key[CURVE25519_KEY_SIZE];
                uint8_t pubkey[CURVE25519_KEY_SIZE];
+               uint8_t auth_key[CURVE25519_KEY_SIZE];
                const char *file;
                const char *interface;
                const char *update_cmd;
                const char *domain;
+               struct blob_attr *tunnels;
                struct blob_attr *net_data;
+               struct blob_attr *auth_connect;
        } config;
 
        struct {
@@ -45,6 +49,14 @@ struct network {
                bool local_host_changed;
        } net_config;
 
+       void *net_data;
+       size_t net_data_len;
+       uint64_t net_data_version;
+       int num_net_queries;
+
+       struct uloop_timeout reload_timer;
+
+       int ifindex;
        struct network_host *prev_local_host;
        struct avl_tree hosts;
        struct vlist_tree peers;
@@ -61,12 +73,15 @@ enum {
        NETWORK_ATTR_NAME,
        NETWORK_ATTR_TYPE,
        NETWORK_ATTR_KEY,
+       NETWORK_ATTR_AUTH_KEY,
        NETWORK_ATTR_FILE,
        NETWORK_ATTR_DATA,
        NETWORK_ATTR_INTERFACE,
        NETWORK_ATTR_UPDATE_CMD,
        NETWORK_ATTR_KEEPALIVE,
        NETWORK_ATTR_DOMAIN,
+       NETWORK_ATTR_TUNNELS,
+       NETWORK_ATTR_AUTH_CONNECT,
        __NETWORK_ATTR_MAX,
 };
 
@@ -79,6 +94,7 @@ static inline const char *network_name(struct network *net)
 }
 
 void network_fill_host_addr(union network_addr *addr, uint8_t *key);
+int network_save_dynamic(struct network *net);
 void network_free_all(void);
 
 int unetd_network_add(const char *name, struct blob_attr *config);