unet-cli: add DHT support
[project/unetd.git] / service.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * Copyright (C) 2022 Felix Fietkau <nbd@nbd.name>
4 */
5 #ifndef __UNETD_SERVICE_H
6 #define __UNETD_SERVICE_H
7
8 struct vxlan_tunnel;
9 struct service_ops;
10
11 struct network_service {
12 struct vlist_node node;
13
14 struct blob_attr *config;
15
16 const char *type;
17
18 const struct service_ops *ops;
19 union {
20 struct vxlan_tunnel *vxlan;
21 void *priv;
22 };
23
24 int n_members;
25 struct network_host *members[];
26 };
27
28 struct service_ops {
29 void (*init)(struct network *net,
30 struct network_service *s_new,
31 struct network_service *s_old);
32 void (*peer_update)(struct network *net, struct network_service *s,
33 struct network_peer *peer);
34 void (*free)(struct network *net, struct network_service *s);
35 };
36
37 extern const struct service_ops vxlan_ops;
38
39 static inline const char *
40 network_service_name(struct network_service *s)
41 {
42 return s->node.avl.key;
43 }
44
45 void network_services_init(struct network *net);
46 void network_services_free(struct network *net);
47 void network_services_add(struct network *net, struct blob_attr *data);
48 void network_services_peer_update(struct network *net, struct network_peer *peer);
49
50 static inline void network_services_update_start(struct network *net)
51 {
52 vlist_update(&net->services);
53 }
54
55 static inline void network_services_update_done(struct network *net)
56 {
57 vlist_flush(&net->services);
58 }
59
60 #endif