1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2022 Felix Fietkau <nbd@nbd.name>
5 #ifndef __UNETD_NETWORK_H
6 #define __UNETD_NETWORK_H
8 #include <netinet/in.h>
9 #include <libubox/uloop.h>
10 #include "curve25519.h"
28 struct blob_attr
*data
;
29 enum network_type type
;
31 uint8_t key
[CURVE25519_KEY_SIZE
];
32 uint8_t pubkey
[CURVE25519_KEY_SIZE
];
33 uint8_t auth_key
[CURVE25519_KEY_SIZE
];
35 const char *interface
;
36 const char *update_cmd
;
38 struct blob_attr
*tunnels
;
39 struct blob_attr
*net_data
;
40 struct blob_attr
*auth_connect
;
41 struct blob_attr
*peer_data
;
46 union network_addr addr
;
47 struct network_host
*local_host
;
48 unsigned int keepalive
;
51 bool local_host_changed
;
52 struct blob_attr
*stun_list
;
57 uint64_t net_data_version
;
60 struct uloop_timeout reload_timer
;
63 struct network_host
*prev_local_host
;
65 struct list_head dynamic_peers
;
66 struct avl_tree hosts
;
67 struct vlist_tree peers
;
69 struct avl_tree groups
;
70 struct vlist_tree services
;
72 struct uloop_timeout connect_timer
;
74 struct network_pex pex
;
75 struct network_stun stun
;
82 NETWORK_ATTR_AUTH_KEY
,
85 NETWORK_ATTR_INTERFACE
,
86 NETWORK_ATTR_UPDATE_CMD
,
87 NETWORK_ATTR_KEEPALIVE
,
90 NETWORK_ATTR_AUTH_CONNECT
,
91 NETWORK_ATTR_PEER_DATA
,
95 extern struct avl_tree networks
;
96 extern const struct blobmsg_policy network_policy
[__NETWORK_ATTR_MAX
];
98 static inline const char *network_name(struct network
*net
)
100 return net
->node
.key
;
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);
109 int unetd_network_add(const char *name
, struct blob_attr
*config
);
110 int unetd_network_remove(const char *name
);