+ timeout_set(&mesh->loop, data, &(struct timeval){mesh->pingtimeout, rand() % 100000});
+}
+
+// devclass asc, last_connect_try desc
+static int node_compare_devclass_asc_last_connect_try_desc(const void *a, const void *b)
+{
+ const node_t *na = a, *nb = b;
+
+ if(na->devclass < nb->devclass)
+ { return -1; }
+
+ if(na->devclass > nb->devclass)
+ { return 1; }
+
+ if(na->last_connect_try == nb->last_connect_try)
+ return 0;
+
+ if(nb->last_connect_try == 0 || na->last_connect_try < nb->last_connect_try)
+ return -1;
+
+ if(na->last_connect_try == 0 || na->last_connect_try > nb->last_connect_try)
+ return 1;
+
+ return 0;
+}
+
+// last_connect_try desc
+static int node_compare_last_connect_try_desc(const void *a, const void *b)
+{
+ const node_t *na = a, *nb = b;
+
+ if(na->last_connect_try == nb->last_connect_try)
+ return 0;
+
+ if(nb->last_connect_try == 0 || na->last_connect_try < nb->last_connect_try)
+ return -1;
+
+ if(na->last_connect_try == 0 || na->last_connect_try > nb->last_connect_try)
+ return 1;
+
+ return 0;
+}
+
+// devclass desc
+static int node_compare_devclass_desc(const void *a, const void *b)
+{
+ const node_t *na = a, *nb = b;
+
+ if(na->devclass < nb->devclass)
+ { return -1; }
+
+ if(na->devclass > nb->devclass)
+ { return 1; }
+
+ return 0;