1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2022 Felix Fietkau <nbd@nbd.name>
5 #ifndef __UNETD_SERVICE_H
6 #define __UNETD_SERVICE_H
11 struct network_service
{
12 struct vlist_node node
;
14 struct blob_attr
*config
;
18 const struct service_ops
*ops
;
20 struct vxlan_tunnel
*vxlan
;
25 struct network_host
*members
[];
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
);
37 extern const struct service_ops vxlan_ops
;
39 static inline const char *
40 network_service_name(struct network_service
*s
)
42 return s
->node
.avl
.key
;
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
);
50 static inline void network_services_update_start(struct network
*net
)
52 vlist_update(&net
->services
);
55 static inline void network_services_update_done(struct network
*net
)
57 vlist_flush(&net
->services
);