initial commit
[project/unetd.git] / host.h
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3 * Copyright (C) 2022 Felix Fietkau <nbd@nbd.name>
4 */
5 #ifndef __UNETD_HOST_H
6 #define __UNETD_HOST_H
7
8 struct network_peer {
9 struct vlist_node node;
10 uint8_t key[CURVE25519_KEY_SIZE];
11 union network_addr local_addr;
12 const char *endpoint;
13 struct blob_attr *ipaddr;
14 struct blob_attr *subnet;
15 int port;
16
17 struct {
18 int connect_attempt;
19 bool connected;
20 bool handshake;
21 bool has_local_ep_addr;
22 union network_addr local_ep_addr;
23 union network_endpoint endpoint;
24
25 union network_endpoint next_endpoint;
26 uint64_t last_ep_update;
27
28 uint64_t rx_bytes;
29 uint64_t last_handshake;
30 uint64_t last_request;
31 int idle;
32 } state;
33 };
34
35 struct network_host {
36 struct avl_node node;
37
38 struct network_peer peer;
39 };
40
41 struct network_group {
42 struct avl_node node;
43 const char *name;
44
45 int n_members;
46 struct network_host **members;
47 };
48
49 static inline const char *network_host_name(struct network_host *host)
50 {
51 return host->node.key;
52 }
53
54 static inline const char *network_peer_name(struct network_peer *peer)
55 {
56 struct network_host *host = container_of(peer, struct network_host, peer);
57
58 return network_host_name(host);
59 }
60
61 void network_hosts_update_start(struct network *net);
62 void network_hosts_update_done(struct network *net);
63 void network_hosts_add(struct network *net, struct blob_attr *hosts);
64
65 void network_hosts_init(struct network *net);
66 void network_hosts_free(struct network *net);
67
68 #endif