#include "utils.h"
static struct sync_flag bar_reachable;
-static struct sync_flag pmtu_flag;
static void status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool reachable) {
(void)mesh;
}
}
-static void pmtu_cb(meshlink_handle_t *mesh, meshlink_node_t *node, uint16_t pmtu) {
- (void)mesh;
-
- if(pmtu && !strcmp(node->name, "bar")) {
- set_sync_flag(&pmtu_flag, true);
- }
-}
-
int main(void) {
init_sync_flag(&bar_reachable);
- init_sync_flag(&pmtu_flag);
meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
// Check that foo knows bar, but that it is not reachable.
- time_t last_reachable;
- time_t last_unreachable;
meshlink_node_t *bar = meshlink_get_node(mesh1, "bar");
assert(bar);
- assert(!meshlink_get_node_reachability(mesh1, bar, &last_reachable, &last_unreachable));
- assert(!last_reachable);
- assert(!last_unreachable);
-
- // Start both instances
-
- meshlink_set_node_status_cb(mesh1, status_cb);
- meshlink_set_node_pmtu_cb(mesh1, pmtu_cb);
-
- assert(meshlink_start(mesh1));
- assert(meshlink_start(mesh2));
-
- // Wait for the two to connect.
-
- assert(wait_sync_flag(&bar_reachable, 10));
-
- // Wait for UDP communication to become possible.
-
- assert(wait_sync_flag(&pmtu_flag, 10));
-
- // Check that we now have reachability information
-
- assert(meshlink_get_node_reachability(mesh1, bar, &last_reachable, &last_unreachable));
- assert(last_reachable);
-
- // Stop the meshes.
-
- meshlink_stop(mesh1);
- meshlink_stop(mesh2);
-
- // Check that bar is no longer reachable
-
- assert(!meshlink_get_node_reachability(mesh1, bar, &last_reachable, &last_unreachable));
- assert(last_reachable);
- assert(last_unreachable);
- assert(last_reachable <= last_unreachable);
// Clean up.