]> git.meshlink.io Git - meshlink-tiny/blob - test/full.c
Add support for devtool_reset_node_counters to the full MeshLink shim.
[meshlink-tiny] / test / full.c
1 #include <assert.h>
2 #include <dlfcn.h>
3
4 #include "full.h"
5
6 meshlink_errno_t *full_meshlink_errno;
7 const char *(*full_meshlink_strerror)(meshlink_errno_t err) __attribute__((__warn_unused_result__));
8 meshlink_open_params_t *(*full_meshlink_open_params_init)(const char *confbase, const char *name, const char *appname, dev_class_t devclass) __attribute__((__warn_unused_result__));
9 void (*full_meshlink_open_params_free)(meshlink_open_params_t *params);
10 bool (*full_meshlink_open_params_set_netns)(meshlink_open_params_t *params, int netns) __attribute__((__warn_unused_result__));
11 bool (*full_meshlink_open_params_set_storage_key)(meshlink_open_params_t *params, const void *key, size_t keylen) __attribute__((__warn_unused_result__));
12 bool (*full_meshlink_open_params_set_storage_policy)(meshlink_open_params_t *params, meshlink_storage_policy_t policy) __attribute__((__warn_unused_result__));
13 bool (*full_meshlink_open_params_set_lock_filename)(meshlink_open_params_t *params, const char *filename) __attribute__((__warn_unused_result__));
14 struct meshlink_handle *(*full_meshlink_open_ex)(const meshlink_open_params_t *params) __attribute__((__warn_unused_result__));
15 struct meshlink_handle *(*full_meshlink_open)(const char *confbase, const char *name, const char *appname, dev_class_t devclass) __attribute__((__warn_unused_result__));
16 struct meshlink_handle *(*full_meshlink_open_encrypted)(const char *confbase, const char *name, const char *appname, dev_class_t devclass, const void *key, size_t keylen) __attribute__((__warn_unused_result__));
17 struct meshlink_handle *(*full_meshlink_open_ephemeral)(const char *name, const char *appname, dev_class_t devclass) __attribute__((__warn_unused_result__));
18 struct meshlink_submesh *(*full_meshlink_submesh_open)(struct meshlink_handle *mesh, const char *submesh) __attribute__((__warn_unused_result__));
19 bool (*full_meshlink_start)(struct meshlink_handle *mesh) __attribute__((__warn_unused_result__));
20 void (*full_meshlink_stop)(struct meshlink_handle *mesh);
21 void (*full_meshlink_close)(struct meshlink_handle *mesh);
22 bool (*full_meshlink_destroy)(const char *confbase) __attribute__((__warn_unused_result__));
23 bool (*full_meshlink_destroy_ex)(const meshlink_open_params_t *params) __attribute__((__warn_unused_result__));
24 void (*full_meshlink_set_receive_cb)(struct meshlink_handle *mesh, meshlink_receive_cb_t cb);
25 void (*full_meshlink_set_connection_try_cb)(struct meshlink_handle *mesh, meshlink_connection_try_cb_t cb);
26 void (*full_meshlink_set_node_status_cb)(struct meshlink_handle *mesh, meshlink_node_status_cb_t cb);
27 void (*full_meshlink_set_node_pmtu_cb)(struct meshlink_handle *mesh, meshlink_node_pmtu_cb_t cb);
28 void (*full_meshlink_set_node_duplicate_cb)(struct meshlink_handle *mesh, meshlink_node_duplicate_cb_t cb);
29 void (*full_meshlink_set_log_cb)(struct meshlink_handle *mesh, meshlink_log_level_t level, meshlink_log_cb_t cb);
30 void (*full_meshlink_set_error_cb)(struct meshlink_handle *mesh, meshlink_error_cb_t cb);
31 void (*full_meshlink_set_blacklisted_cb)(struct meshlink_handle *mesh, meshlink_blacklisted_cb_t cb);
32 bool (*full_meshlink_send)(struct meshlink_handle *mesh, struct meshlink_node *destination, const void *data, size_t len) __attribute__((__warn_unused_result__));
33 ssize_t (*full_meshlink_get_pmtu)(struct meshlink_handle *mesh, struct meshlink_node *destination) __attribute__((__warn_unused_result__));
34 struct meshlink_node *(*full_meshlink_get_self)(struct meshlink_handle *mesh) __attribute__((__warn_unused_result__));
35 struct meshlink_node *(*full_meshlink_get_node)(struct meshlink_handle *mesh, const char *name) __attribute__((__warn_unused_result__));
36 struct meshlink_submesh *(*full_meshlink_get_submesh)(struct meshlink_handle *mesh, const char *name) __attribute__((__warn_unused_result__));
37 char *(*full_meshlink_get_fingerprint)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
38 struct meshlink_node **(*full_meshlink_get_all_nodes)(struct meshlink_handle *mesh, struct meshlink_node **nodes, size_t *nmemb) __attribute__((__warn_unused_result__));
39 bool (*full_meshlink_sign)(struct meshlink_handle *mesh, const void *data, size_t len, void *signature, size_t *siglen) __attribute__((__warn_unused_result__));
40 struct meshlink_node **(*full_meshlink_get_all_nodes_by_dev_class)(struct meshlink_handle *mesh, dev_class_t devclass, struct meshlink_node **nodes, size_t *nmemb) __attribute__((__warn_unused_result__));
41 struct meshlink_node **(*full_meshlink_get_all_nodes_by_submesh)(struct meshlink_handle *mesh, struct meshlink_submesh *submesh, struct meshlink_node **nodes, size_t *nmemb) __attribute__((__warn_unused_result__));
42 struct meshlink_node **(*full_meshlink_get_all_nodes_by_last_reachable)(struct meshlink_handle *mesh, time_t start, time_t end, struct meshlink_node **nodes, size_t *nmemb) __attribute__((__warn_unused_result__));
43 struct meshlink_node **(*full_meshlink_get_all_nodes_by_blacklisted)(struct meshlink_handle *mesh, bool blacklisted, struct meshlink_node **nodes, size_t *nmemb) __attribute__((__warn_unused_result__));
44 dev_class_t (*full_meshlink_get_node_dev_class)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
45 bool (*full_meshlink_get_node_blacklisted)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
46 struct meshlink_submesh *(*full_meshlink_get_node_submesh)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
47 bool (*full_meshlink_get_node_reachability)(struct meshlink_handle *mesh, struct meshlink_node *node, time_t *last_reachable, time_t *last_unreachable);
48 bool (*full_meshlink_verify)(struct meshlink_handle *mesh, struct meshlink_node *source, const void *data, size_t len, const void *signature, size_t siglen) __attribute__((__warn_unused_result__));
49 bool (*full_meshlink_set_canonical_address)(struct meshlink_handle *mesh, struct meshlink_node *node, const char *address, const char *port) __attribute__((__warn_unused_result__));
50 bool (*full_meshlink_clear_canonical_address)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
51 bool (*full_meshlink_add_invitation_address)(struct meshlink_handle *mesh, const char *address, const char *port) __attribute__((__warn_unused_result__));
52 void (*full_meshlink_clear_invitation_addresses)(struct meshlink_handle *mesh);
53 char *(*full_meshlink_get_external_address)(struct meshlink_handle *mesh) __attribute__((__warn_unused_result__));
54 char *(*full_meshlink_get_external_address_for_family)(struct meshlink_handle *mesh, int address_family) __attribute__((__warn_unused_result__));
55 char *(*full_meshlink_get_local_address_for_family)(struct meshlink_handle *mesh, int address_family) __attribute__((__warn_unused_result__));
56 bool (*full_meshlink_add_external_address)(struct meshlink_handle *mesh) __attribute__((__warn_unused_result__));
57 int (*full_meshlink_get_port)(struct meshlink_handle *mesh) __attribute__((__warn_unused_result__));
58 bool (*full_meshlink_set_port)(struct meshlink_handle *mesh, int port) __attribute__((__warn_unused_result__));
59 void (*full_meshlink_set_invitation_timeout)(struct meshlink_handle *mesh, int timeout);
60 char *(*full_meshlink_invite_ex)(struct meshlink_handle *mesh, struct meshlink_submesh *submesh, const char *name, uint32_t flags) __attribute__((__warn_unused_result__));
61 char *(*full_meshlink_invite)(struct meshlink_handle *mesh, struct meshlink_submesh *submesh, const char *name) __attribute__((__warn_unused_result__));
62 bool (*full_meshlink_join)(struct meshlink_handle *mesh, const char *invitation) __attribute__((__warn_unused_result__));
63 char *(*full_meshlink_export)(struct meshlink_handle *mesh) __attribute__((__warn_unused_result__));
64 bool (*full_meshlink_import)(struct meshlink_handle *mesh, const char *data) __attribute__((__warn_unused_result__));
65 bool (*full_meshlink_forget_node)(struct meshlink_handle *mesh, struct meshlink_node *node);
66 bool (*full_meshlink_blacklist)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
67 bool (*full_meshlink_blacklist_by_name)(struct meshlink_handle *mesh, const char *name) __attribute__((__warn_unused_result__));
68 bool (*full_meshlink_whitelist)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
69 bool (*full_meshlink_whitelist_by_name)(struct meshlink_handle *mesh, const char *name) __attribute__((__warn_unused_result__));
70 void (*full_meshlink_set_default_blacklist)(struct meshlink_handle *mesh, bool blacklist);
71 void (*full_meshlink_set_channel_listen_cb)(struct meshlink_handle *mesh, meshlink_channel_listen_cb_t cb);
72 void (*full_meshlink_set_channel_accept_cb)(struct meshlink_handle *mesh, meshlink_channel_accept_cb_t cb);
73 void (*full_meshlink_set_channel_receive_cb)(struct meshlink_handle *mesh, struct meshlink_channel *channel, meshlink_channel_receive_cb_t cb);
74 void (*full_meshlink_set_channel_poll_cb)(struct meshlink_handle *mesh, struct meshlink_channel *channel, meshlink_channel_poll_cb_t cb);
75 void (*full_meshlink_set_channel_sndbuf)(struct meshlink_handle *mesh, struct meshlink_channel *channel, size_t size);
76 void (*full_meshlink_set_channel_rcvbuf)(struct meshlink_handle *mesh, struct meshlink_channel *channel, size_t size);
77 void (*full_meshlink_set_channel_sndbuf_storage)(struct meshlink_handle *mesh, struct meshlink_channel *channel, void *buf, size_t size);
78 void (*full_meshlink_set_channel_rcvbuf_storage)(struct meshlink_handle *mesh, struct meshlink_channel *channel, void *buf, size_t size);
79 void (*full_meshlink_set_channel_flags)(struct meshlink_handle *mesh, struct meshlink_channel *channel, uint32_t flags);
80 struct meshlink_channel *(*full_meshlink_channel_open_ex)(struct meshlink_handle *mesh, struct meshlink_node *node, uint16_t port, meshlink_channel_receive_cb_t cb, const void *data, size_t len, uint32_t flags) __attribute__((__warn_unused_result__));
81 struct meshlink_channel *(*full_meshlink_channel_open)(struct meshlink_handle *mesh, struct meshlink_node *node, uint16_t port, meshlink_channel_receive_cb_t cb, const void *data, size_t len) __attribute__((__warn_unused_result__));
82 void (*full_meshlink_channel_shutdown)(struct meshlink_handle *mesh, struct meshlink_channel *channel, int direction);
83 void (*full_meshlink_channel_close)(struct meshlink_handle *mesh, struct meshlink_channel *channel);
84 void (*full_meshlink_channel_abort)(struct meshlink_handle *mesh, struct meshlink_channel *channel);
85 ssize_t (*full_meshlink_channel_send)(struct meshlink_handle *mesh, struct meshlink_channel *channel, const void *data, size_t len) __attribute__((__warn_unused_result__));
86 bool (*full_meshlink_channel_aio_send)(struct meshlink_handle *mesh, struct meshlink_channel *channel, const void *data, size_t len, meshlink_aio_cb_t cb, void *priv) __attribute__((__warn_unused_result__));
87 bool (*full_meshlink_channel_aio_fd_send)(struct meshlink_handle *mesh, struct meshlink_channel *channel, int fd, size_t len, meshlink_aio_fd_cb_t cb, void *priv) __attribute__((__warn_unused_result__));
88 bool (*full_meshlink_channel_aio_receive)(struct meshlink_handle *mesh, struct meshlink_channel *channel, const void *data, size_t len, meshlink_aio_cb_t cb, void *priv) __attribute__((__warn_unused_result__));
89 bool (*full_meshlink_channel_aio_fd_receive)(struct meshlink_handle *mesh, struct meshlink_channel *channel, int fd, size_t len, meshlink_aio_fd_cb_t cb, void *priv) __attribute__((__warn_unused_result__));
90 uint32_t (*full_meshlink_channel_get_flags)(struct meshlink_handle *mesh, struct meshlink_channel *channel) __attribute__((__warn_unused_result__));
91 size_t (*full_meshlink_channel_get_sendq)(struct meshlink_handle *mesh, struct meshlink_channel *channel) __attribute__((__warn_unused_result__));
92 size_t (*full_meshlink_channel_get_recvq)(struct meshlink_handle *mesh, struct meshlink_channel *channel) __attribute__((__warn_unused_result__));
93 size_t (*full_meshlink_channel_get_mss)(struct meshlink_handle *mesh, struct meshlink_channel *channel) __attribute__((__warn_unused_result__));
94 void (*full_meshlink_set_node_channel_timeout)(struct meshlink_handle *mesh, struct meshlink_node *node, int timeout);
95 void (*full_meshlink_hint_address)(struct meshlink_handle *mesh, struct meshlink_node *node, const struct sockaddr *addr);
96 void (*full_meshlink_enable_discovery)(struct meshlink_handle *mesh, bool enable);
97 void (*full_meshlink_hint_network_change)(struct meshlink_handle *mesh);
98 bool (*full_meshlink_encrypted_key_rotate)(struct meshlink_handle *mesh, const void *key, size_t keylen) __attribute__((__warn_unused_result__));
99 void (*full_meshlink_set_dev_class_timeouts)(struct meshlink_handle *mesh, dev_class_t devclass, int pinginterval, int pingtimeout);
100 void (*full_meshlink_set_dev_class_fast_retry_period)(struct meshlink_handle *mesh, dev_class_t devclass, int fast_retry_period);
101 void (*full_meshlink_set_dev_class_maxtimeout)(struct meshlink_handle *mesh, dev_class_t devclass, int maxtimeout);
102 void (*full_meshlink_reset_timers)(struct meshlink_handle *mesh);
103 void (*full_meshlink_set_inviter_commits_first)(struct meshlink_handle *mesh, bool inviter_commits_first);
104 void (*full_meshlink_set_external_address_discovery_url)(struct meshlink_handle *mesh, const char *url);
105 void (*full_meshlink_set_scheduling_granularity)(struct meshlink_handle *mesh, long granularity);
106 void (*full_meshlink_set_storage_policy)(struct meshlink_handle *mesh, meshlink_storage_policy_t policy);
107
108 full_devtool_set_inviter_commits_first_t *full_devtool_set_inviter_commits_first;
109 void (*full_devtool_reset_node_counters)(struct meshlink_handle *mesh, meshlink_node_t *node, struct devtool_node_status *);
110
111 void init_full(void) {
112         void *handle = dlopen("libmeshlink.so", RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND);
113         assert(handle);
114
115         assert(full_meshlink_errno = dlsym(handle, "meshlink_errno"));
116         assert(full_meshlink_strerror = dlsym(handle, "meshlink_strerror"));
117         assert(full_meshlink_open_params_init = dlsym(handle, "meshlink_open_params_init"));
118         assert(full_meshlink_open_params_free = dlsym(handle, "meshlink_open_params_free"));
119         assert(full_meshlink_open_params_set_netns = dlsym(handle, "meshlink_open_params_set_netns"));
120         assert(full_meshlink_open_params_set_storage_key = dlsym(handle, "meshlink_open_params_set_storage_key"));
121         assert(full_meshlink_open_params_set_storage_policy = dlsym(handle, "meshlink_open_params_set_storage_policy"));
122         assert(full_meshlink_open_params_set_lock_filename = dlsym(handle, "meshlink_open_params_set_lock_filename"));
123         assert(full_meshlink_open_ex = dlsym(handle, "meshlink_open_ex"));
124         assert(full_meshlink_open = dlsym(handle, "meshlink_open"));
125         assert(full_meshlink_open_encrypted = dlsym(handle, "meshlink_open_encrypted"));
126         assert(full_meshlink_open_ephemeral = dlsym(handle, "meshlink_open_ephemeral"));
127         assert(full_meshlink_submesh_open = dlsym(handle, "meshlink_submesh_open"));
128         assert(full_meshlink_start = dlsym(handle, "meshlink_start"));
129         assert(full_meshlink_stop = dlsym(handle, "meshlink_stop"));
130         assert(full_meshlink_close = dlsym(handle, "meshlink_close"));
131         assert(full_meshlink_destroy = dlsym(handle, "meshlink_destroy"));
132         assert(full_meshlink_destroy_ex = dlsym(handle, "meshlink_destroy_ex"));
133         assert(full_meshlink_set_receive_cb = dlsym(handle, "meshlink_set_receive_cb"));
134         assert(full_meshlink_set_connection_try_cb = dlsym(handle, "meshlink_set_connection_try_cb"));
135         assert(full_meshlink_set_node_status_cb = dlsym(handle, "meshlink_set_node_status_cb"));
136         assert(full_meshlink_set_node_pmtu_cb = dlsym(handle, "meshlink_set_node_pmtu_cb"));
137         assert(full_meshlink_set_node_duplicate_cb = dlsym(handle, "meshlink_set_node_duplicate_cb"));
138         assert(full_meshlink_set_log_cb = dlsym(handle, "meshlink_set_log_cb"));
139         assert(full_meshlink_set_error_cb = dlsym(handle, "meshlink_set_error_cb"));
140         assert(full_meshlink_set_blacklisted_cb = dlsym(handle, "meshlink_set_blacklisted_cb"));
141         assert(full_meshlink_send = dlsym(handle, "meshlink_send"));
142         assert(full_meshlink_get_pmtu = dlsym(handle, "meshlink_get_pmtu"));
143         assert(full_meshlink_get_self = dlsym(handle, "meshlink_get_self"));
144         assert(full_meshlink_get_node = dlsym(handle, "meshlink_get_node"));
145         assert(full_meshlink_get_submesh = dlsym(handle, "meshlink_get_submesh"));
146         assert(full_meshlink_get_fingerprint = dlsym(handle, "meshlink_get_fingerprint"));
147         assert(full_meshlink_get_all_nodes = dlsym(handle, "meshlink_get_all_nodes"));
148         assert(full_meshlink_sign = dlsym(handle, "meshlink_sign"));
149         assert(full_meshlink_get_all_nodes_by_dev_class = dlsym(handle, "meshlink_get_all_nodes_by_dev_class"));
150         assert(full_meshlink_get_all_nodes_by_submesh = dlsym(handle, "meshlink_get_all_nodes_by_submesh"));
151         assert(full_meshlink_get_all_nodes_by_last_reachable = dlsym(handle, "meshlink_get_all_nodes_by_last_reachable"));
152         assert(full_meshlink_get_all_nodes_by_blacklisted = dlsym(handle, "meshlink_get_all_nodes_by_blacklisted"));
153         assert(full_meshlink_get_node_dev_class = dlsym(handle, "meshlink_get_node_dev_class"));
154         assert(full_meshlink_get_node_blacklisted = dlsym(handle, "meshlink_get_node_blacklisted"));
155         assert(full_meshlink_get_node_submesh = dlsym(handle, "meshlink_get_node_submesh"));
156         assert(full_meshlink_get_node_reachability = dlsym(handle, "meshlink_get_node_reachability"));
157         assert(full_meshlink_verify = dlsym(handle, "meshlink_verify"));
158         assert(full_meshlink_set_canonical_address = dlsym(handle, "meshlink_set_canonical_address"));
159         assert(full_meshlink_clear_canonical_address = dlsym(handle, "meshlink_clear_canonical_address"));
160         assert(full_meshlink_add_invitation_address = dlsym(handle, "meshlink_add_invitation_address"));
161         assert(full_meshlink_clear_invitation_addresses = dlsym(handle, "meshlink_clear_invitation_addresses"));
162         assert(full_meshlink_get_external_address = dlsym(handle, "meshlink_get_external_address"));
163         assert(full_meshlink_get_external_address_for_family = dlsym(handle, "meshlink_get_external_address_for_family"));
164         assert(full_meshlink_get_local_address_for_family = dlsym(handle, "meshlink_get_local_address_for_family"));
165         assert(full_meshlink_add_external_address = dlsym(handle, "meshlink_add_external_address"));
166         assert(full_meshlink_get_port = dlsym(handle, "meshlink_get_port"));
167         assert(full_meshlink_set_port = dlsym(handle, "meshlink_set_port"));
168         assert(full_meshlink_set_invitation_timeout = dlsym(handle, "meshlink_set_invitation_timeout"));
169         assert(full_meshlink_invite_ex = dlsym(handle, "meshlink_invite_ex"));
170         assert(full_meshlink_invite = dlsym(handle, "meshlink_invite"));
171         assert(full_meshlink_join = dlsym(handle, "meshlink_join"));
172         assert(full_meshlink_export = dlsym(handle, "meshlink_export"));
173         assert(full_meshlink_import = dlsym(handle, "meshlink_import"));
174         assert(full_meshlink_forget_node = dlsym(handle, "meshlink_forget_node"));
175         assert(full_meshlink_blacklist = dlsym(handle, "meshlink_blacklist"));
176         assert(full_meshlink_blacklist_by_name = dlsym(handle, "meshlink_blacklist_by_name"));
177         assert(full_meshlink_whitelist = dlsym(handle, "meshlink_whitelist"));
178         assert(full_meshlink_whitelist_by_name = dlsym(handle, "meshlink_whitelist_by_name"));
179         assert(full_meshlink_set_default_blacklist = dlsym(handle, "meshlink_set_default_blacklist"));
180         assert(full_meshlink_set_channel_listen_cb = dlsym(handle, "meshlink_set_channel_listen_cb"));
181         assert(full_meshlink_set_channel_accept_cb = dlsym(handle, "meshlink_set_channel_accept_cb"));
182         assert(full_meshlink_set_channel_receive_cb = dlsym(handle, "meshlink_set_channel_receive_cb"));
183         assert(full_meshlink_set_channel_poll_cb = dlsym(handle, "meshlink_set_channel_poll_cb"));
184         assert(full_meshlink_set_channel_sndbuf = dlsym(handle, "meshlink_set_channel_sndbuf"));
185         assert(full_meshlink_set_channel_rcvbuf = dlsym(handle, "meshlink_set_channel_rcvbuf"));
186         assert(full_meshlink_set_channel_sndbuf_storage = dlsym(handle, "meshlink_set_channel_sndbuf_storage"));
187         assert(full_meshlink_set_channel_rcvbuf_storage = dlsym(handle, "meshlink_set_channel_rcvbuf_storage"));
188         assert(full_meshlink_set_channel_flags = dlsym(handle, "meshlink_set_channel_flags"));
189         assert(full_meshlink_channel_open_ex = dlsym(handle, "meshlink_channel_open_ex"));
190         assert(full_meshlink_channel_open = dlsym(handle, "meshlink_channel_open"));
191         assert(full_meshlink_channel_shutdown = dlsym(handle, "meshlink_channel_shutdown"));
192         assert(full_meshlink_channel_close = dlsym(handle, "meshlink_channel_close"));
193         assert(full_meshlink_channel_abort = dlsym(handle, "meshlink_channel_abort"));
194         assert(full_meshlink_channel_send = dlsym(handle, "meshlink_channel_send"));
195         assert(full_meshlink_channel_aio_send = dlsym(handle, "meshlink_channel_aio_send"));
196         assert(full_meshlink_channel_aio_fd_send = dlsym(handle, "meshlink_channel_aio_fd_send"));
197         assert(full_meshlink_channel_aio_receive = dlsym(handle, "meshlink_channel_aio_receive"));
198         assert(full_meshlink_channel_aio_fd_receive = dlsym(handle, "meshlink_channel_aio_fd_receive"));
199         assert(full_meshlink_channel_get_flags = dlsym(handle, "meshlink_channel_get_flags"));
200         assert(full_meshlink_channel_get_sendq = dlsym(handle, "meshlink_channel_get_sendq"));
201         assert(full_meshlink_channel_get_recvq = dlsym(handle, "meshlink_channel_get_recvq"));
202         assert(full_meshlink_channel_get_mss = dlsym(handle, "meshlink_channel_get_mss"));
203         assert(full_meshlink_set_node_channel_timeout = dlsym(handle, "meshlink_set_node_channel_timeout"));
204         assert(full_meshlink_hint_address = dlsym(handle, "meshlink_hint_address"));
205         assert(full_meshlink_enable_discovery = dlsym(handle, "meshlink_enable_discovery"));
206         assert(full_meshlink_hint_network_change = dlsym(handle, "meshlink_hint_network_change"));
207         assert(full_meshlink_encrypted_key_rotate = dlsym(handle, "meshlink_encrypted_key_rotate"));
208         assert(full_meshlink_set_dev_class_timeouts = dlsym(handle, "meshlink_set_dev_class_timeouts"));
209         assert(full_meshlink_set_dev_class_fast_retry_period = dlsym(handle, "meshlink_set_dev_class_fast_retry_period"));
210         assert(full_meshlink_set_dev_class_maxtimeout = dlsym(handle, "meshlink_set_dev_class_maxtimeout"));
211         assert(full_meshlink_reset_timers = dlsym(handle, "meshlink_reset_timers"));
212         assert(full_meshlink_set_inviter_commits_first = dlsym(handle, "meshlink_set_inviter_commits_first"));
213         assert(full_meshlink_set_external_address_discovery_url = dlsym(handle, "meshlink_set_external_address_discovery_url"));
214         assert(full_meshlink_set_scheduling_granularity = dlsym(handle, "meshlink_set_scheduling_granularity"));
215         assert(full_meshlink_set_storage_policy = dlsym(handle, "meshlink_set_storage_policy"));
216
217         assert(full_devtool_set_inviter_commits_first = dlsym(handle, "devtool_set_inviter_commits_first"));
218         assert(full_devtool_reset_node_counters = dlsym(handle, "devtool_reset_node_counters"));
219 }