unet-cli: strip initial newline in usage message
[project/unetd.git] / network.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * Copyright (C) 2022 Felix Fietkau <nbd@nbd.name>
4 */
5 #ifndef __UNETD_NETWORK_H
6 #define __UNETD_NETWORK_H
7
8 #include <netinet/in.h>
9 #include <libubox/uloop.h>
10 #include "curve25519.h"
11
12 enum network_type {
13 NETWORK_TYPE_FILE,
14 NETWORK_TYPE_INLINE,
15 NETWORK_TYPE_DYNAMIC,
16 };
17
18 struct wg_ops;
19 struct network_group;
20 struct network_host;
21
22 struct network {
23 struct avl_node node;
24
25 struct wg wg;
26
27 struct {
28 struct blob_attr *data;
29 enum network_type type;
30 int keepalive;
31 uint8_t key[CURVE25519_KEY_SIZE];
32 uint8_t pubkey[CURVE25519_KEY_SIZE];
33 uint8_t auth_key[CURVE25519_KEY_SIZE];
34 const char *file;
35 const char *interface;
36 const char *update_cmd;
37 const char *domain;
38 struct blob_attr *tunnels;
39 struct blob_attr *net_data;
40 struct blob_attr *auth_connect;
41 struct blob_attr *peer_data;
42 } config;
43
44 struct {
45 uint64_t hash;
46 union network_addr addr;
47 struct network_host *local_host;
48 unsigned int keepalive;
49 int port;
50 int pex_port;
51 bool local_host_changed;
52 struct blob_attr *stun_list;
53 } net_config;
54
55 void *net_data;
56 size_t net_data_len;
57 uint64_t net_data_version;
58 int num_net_queries;
59
60 struct uloop_timeout reload_timer;
61
62 int ifindex;
63 struct network_host *prev_local_host;
64
65 struct list_head dynamic_peers;
66 struct avl_tree hosts;
67 struct vlist_tree peers;
68
69 struct avl_tree groups;
70 struct vlist_tree services;
71
72 struct uloop_timeout connect_timer;
73
74 struct network_pex pex;
75 struct network_stun stun;
76 };
77
78 enum {
79 NETWORK_ATTR_NAME,
80 NETWORK_ATTR_TYPE,
81 NETWORK_ATTR_KEY,
82 NETWORK_ATTR_AUTH_KEY,
83 NETWORK_ATTR_FILE,
84 NETWORK_ATTR_DATA,
85 NETWORK_ATTR_INTERFACE,
86 NETWORK_ATTR_UPDATE_CMD,
87 NETWORK_ATTR_KEEPALIVE,
88 NETWORK_ATTR_DOMAIN,
89 NETWORK_ATTR_TUNNELS,
90 NETWORK_ATTR_AUTH_CONNECT,
91 NETWORK_ATTR_PEER_DATA,
92 __NETWORK_ATTR_MAX,
93 };
94
95 extern struct avl_tree networks;
96 extern const struct blobmsg_policy network_policy[__NETWORK_ATTR_MAX];
97
98 static inline const char *network_name(struct network *net)
99 {
100 return net->node.key;
101 }
102
103 bool network_skip_endpoint_route(struct network *net, union network_endpoint *ep);
104 void network_fill_host_addr(union network_addr *addr, uint8_t *key);
105 int network_save_dynamic(struct network *net);
106 void network_soft_reload(struct network *net);
107 void network_free_all(void);
108
109 int unetd_network_add(const char *name, struct blob_attr *config);
110 int unetd_network_remove(const char *name);
111
112 #endif