vxlan: add bpf program to fix up tcp mss values
[project/unetd.git] / network.h
1 // SPDX-License-Identifier: GPL-2.0+
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 };
16
17 struct wg_ops;
18 struct network_group;
19 struct network_host;
20
21 struct network {
22 struct avl_node node;
23
24 struct wg wg;
25
26 struct {
27 struct blob_attr *data;
28 enum network_type type;
29 int keepalive;
30 uint8_t key[CURVE25519_KEY_SIZE];
31 uint8_t pubkey[CURVE25519_KEY_SIZE];
32 const char *file;
33 const char *interface;
34 const char *update_cmd;
35 const char *domain;
36 struct blob_attr *tunnels;
37 struct blob_attr *net_data;
38 } config;
39
40 struct {
41 union network_addr addr;
42 struct network_host *local_host;
43 unsigned int keepalive;
44 int port;
45 int pex_port;
46 bool local_host_changed;
47 } net_config;
48
49 int ifindex;
50 struct network_host *prev_local_host;
51 struct avl_tree hosts;
52 struct vlist_tree peers;
53
54 struct avl_tree groups;
55 struct vlist_tree services;
56
57 struct uloop_timeout connect_timer;
58
59 struct network_pex pex;
60 };
61
62 enum {
63 NETWORK_ATTR_NAME,
64 NETWORK_ATTR_TYPE,
65 NETWORK_ATTR_KEY,
66 NETWORK_ATTR_FILE,
67 NETWORK_ATTR_DATA,
68 NETWORK_ATTR_INTERFACE,
69 NETWORK_ATTR_UPDATE_CMD,
70 NETWORK_ATTR_KEEPALIVE,
71 NETWORK_ATTR_DOMAIN,
72 NETWORK_ATTR_TUNNELS,
73 __NETWORK_ATTR_MAX,
74 };
75
76 extern struct avl_tree networks;
77 extern const struct blobmsg_policy network_policy[__NETWORK_ATTR_MAX];
78
79 static inline const char *network_name(struct network *net)
80 {
81 return net->node.key;
82 }
83
84 void network_fill_host_addr(union network_addr *addr, uint8_t *key);
85 void network_free_all(void);
86
87 int unetd_network_add(const char *name, struct blob_attr *config);
88 int unetd_network_remove(const char *name);
89
90 #endif