Add UDP discovery mechanism.
[tinc] / src / net_packet.c
1 /*
2     net_packet.c -- Handles in- and outgoing VPN packets
3     Copyright (C) 1998-2005 Ivo Timmermans,
4                   2000-2014 Guus Sliepen <guus@tinc-vpn.org>
5                   2010      Timothy Redaelli <timothy@redaelli.eu>
6                   2010      Brandon Black <blblack@gmail.com>
7
8     This program is free software; you can redistribute it and/or modify
9     it under the terms of the GNU General Public License as published by
10     the Free Software Foundation; either version 2 of the License, or
11     (at your option) any later version.
12
13     This program is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16     GNU General Public License for more details.
17
18     You should have received a copy of the GNU General Public License along
19     with this program; if not, write to the Free Software Foundation, Inc.,
20     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 */
22
23 #include "system.h"
24
25 #ifdef HAVE_ZLIB
26 #include <zlib.h>
27 #endif
28
29 #ifdef HAVE_LZO
30 #include LZO1X_H
31 #endif
32
33 #include "cipher.h"
34 #include "conf.h"
35 #include "connection.h"
36 #include "crypto.h"
37 #include "digest.h"
38 #include "device.h"
39 #include "ethernet.h"
40 #include "graph.h"
41 #include "logger.h"
42 #include "net.h"
43 #include "netutl.h"
44 #include "protocol.h"
45 #include "route.h"
46 #include "utils.h"
47 #include "xalloc.h"
48
49 #ifndef MAX
50 #define MAX(a, b) ((a) > (b) ? (a) : (b))
51 #endif
52
53 int keylifetime = 0;
54 #ifdef HAVE_LZO
55 static char lzo_wrkmem[LZO1X_999_MEM_COMPRESS > LZO1X_1_MEM_COMPRESS ? LZO1X_999_MEM_COMPRESS : LZO1X_1_MEM_COMPRESS];
56 #endif
57
58 static void send_udppacket(node_t *, vpn_packet_t *);
59
60 unsigned replaywin = 16;
61 bool localdiscovery = true;
62 bool udp_discovery = true;
63 int udp_discovery_interval = 9;
64 int udp_discovery_timeout = 30;
65
66 #define MAX_SEQNO 1073741824
67
68 static void send_udp_probe_packet(node_t *n, int len) {
69         vpn_packet_t packet;
70         packet.offset = DEFAULT_PACKET_OFFSET;
71         memset(DATA(&packet), 0, 14);
72         randomize(DATA(&packet) + 14, len - 14);
73         packet.len = len;
74         packet.priority = 0;
75
76         logger(DEBUG_TRAFFIC, LOG_INFO, "Sending UDP probe length %d to %s (%s)", len, n->name, n->hostname);
77
78         send_udppacket(n, &packet);
79 }
80
81 static void send_mtu_probe_handler(void *data) {
82         node_t *n = data;
83
84         if(!n->status.reachable || !n->status.validkey) {
85                 logger(DEBUG_TRAFFIC, LOG_INFO, "Trying to send MTU probe to unreachable or rekeying node %s (%s)", n->name, n->hostname);
86                 n->mtuprobes = 0;
87                 return;
88         }
89
90         /* mtuprobes == 1..30: initial discovery, send bursts with 1 second interval
91            mtuprobes ==    31: sleep pinginterval seconds
92            mtuprobes ==    32: send 1 burst, sleep pingtimeout second
93            mtuprobes ==    33: no response from other side, restart PMTU discovery process */
94
95         n->mtuprobes++;
96         int timeout = 1;
97
98         if(n->mtuprobes > 32) {
99                 if(!n->minmtu) {
100                         n->mtuprobes = 31;
101                         timeout = pinginterval;
102                         goto end;
103                 }
104
105                 logger(DEBUG_TRAFFIC, LOG_INFO, "%s (%s) did not respond to UDP ping, restarting PMTU discovery", n->name, n->hostname);
106                 n->status.udp_confirmed = false;
107                 n->mtuprobes = 1;
108                 n->minmtu = 0;
109                 n->maxmtu = MTU;
110         }
111
112         if(n->mtuprobes >= 10 && n->mtuprobes < 32 && !n->minmtu) {
113                 logger(DEBUG_TRAFFIC, LOG_INFO, "No response to MTU probes from %s (%s)", n->name, n->hostname);
114                 n->mtuprobes = 31;
115         }
116
117         if(n->mtuprobes == 30 || (n->mtuprobes < 30 && n->minmtu >= n->maxmtu)) {
118                 if(n->minmtu > n->maxmtu)
119                         n->minmtu = n->maxmtu;
120                 else
121                         n->maxmtu = n->minmtu;
122                 n->mtu = n->minmtu;
123                 logger(DEBUG_TRAFFIC, LOG_INFO, "Fixing MTU of %s (%s) to %d after %d probes", n->name, n->hostname, n->mtu, n->mtuprobes);
124                 n->mtuprobes = 31;
125         }
126
127         if(n->mtuprobes == 31) {
128                 timeout = pinginterval;
129                 goto end;
130         } else if(n->mtuprobes == 32) {
131                 timeout = pingtimeout;
132         }
133
134         /* After the initial discovery, a fourth packet is added to each batch with a
135            size larger than the currently known PMTU, to test if the PMTU has increased. */
136         if (n->mtuprobes >= 30 && n->maxmtu + 8 < MTU)
137                 send_udp_probe_packet(n, n->maxmtu + 8);
138
139         /* Probes are sent in batches of three, with random sizes between the
140            lower and upper boundaries for the MTU thus far discovered. */
141         for (int i = 0; i < 3; i++) {
142                 int len = n->maxmtu;
143                 if(n->minmtu < n->maxmtu)
144                         len = n->minmtu + 1 + rand() % (n->maxmtu - n->minmtu);
145
146                 send_udp_probe_packet(n, MAX(len, 64));
147         }
148
149         /* In case local discovery is enabled, another packet is added to each batch,
150            which will be broadcast to the local network. */
151         if(localdiscovery && n->mtuprobes <= 10 && n->prevedge) {
152                 n->status.send_locally = true;
153                 send_udp_probe_packet(n, 16);
154                 n->status.send_locally = false;
155         }
156
157         n->probe_counter = 0;
158         gettimeofday(&n->probe_time, NULL);
159
160         /* Calculate the packet loss of incoming traffic by comparing the rate of
161            packets received to the rate with which the sequence number has increased.
162          */
163
164         if(n->received > n->prev_received)
165                 n->packetloss = 1.0 - (n->received - n->prev_received) / (float)(n->received_seqno - n->prev_received_seqno);
166         else
167                 n->packetloss = n->received_seqno <= n->prev_received_seqno;
168
169         n->prev_received_seqno = n->received_seqno;
170         n->prev_received = n->received;
171
172 end:
173         timeout_set(&n->mtutimeout, &(struct timeval){timeout, rand() % 100000});
174 }
175
176 void send_mtu_probe(node_t *n) {
177         timeout_add(&n->mtutimeout, send_mtu_probe_handler, n, &(struct timeval){1, 0});
178         send_mtu_probe_handler(n);
179 }
180
181 static void udp_probe_timeout_handler(void *data) {
182         node_t *n = data;
183         if(!n->status.udp_confirmed)
184                 return;
185
186         logger(DEBUG_TRAFFIC, LOG_INFO, "Too much time has elapsed since last UDP ping response from %s (%s), stopping UDP communication", n->name, n->hostname);
187         n->status.udp_confirmed = false;
188         n->mtuprobes = 1;
189         n->minmtu = 0;
190         n->maxmtu = MTU;
191 }
192
193 static void udp_probe_h(node_t *n, vpn_packet_t *packet, length_t len) {
194         if(!DATA(packet)[0]) {
195                 logger(DEBUG_TRAFFIC, LOG_INFO, "Got UDP probe request %d from %s (%s)", packet->len, n->name, n->hostname);
196
197                 /* It's a probe request, send back a reply */
198
199                 /* Type 2 probe replies were introduced in protocol 17.3 */
200                 if ((n->options >> 24) >= 3) {
201                         uint8_t *data = DATA(packet);
202                         *data++ = 2;
203                         uint16_t len16 = htons(len); memcpy(data, &len16, 2); data += 2;
204                         struct timeval now;
205                         gettimeofday(&now, NULL);
206                         uint32_t sec = htonl(now.tv_sec); memcpy(data, &sec, 4); data += 4;
207                         uint32_t usec = htonl(now.tv_usec); memcpy(data, &usec, 4); data += 4;
208                         packet->len -= 10;
209                 } else {
210                         /* Legacy protocol: n won't understand type 2 probe replies. */
211                         DATA(packet)[0] = 1;
212                 }
213
214                 /* Temporarily set udp_confirmed, so that the reply is sent
215                    back exactly the way it came in. */
216
217                 bool udp_confirmed = n->status.udp_confirmed;
218                 n->status.udp_confirmed = true;
219                 send_udppacket(n, packet);
220                 n->status.udp_confirmed = udp_confirmed;
221         } else {
222                 length_t probelen = len;
223                 if (DATA(packet)[0] == 2) {
224                         if (len < 3)
225                                 logger(DEBUG_TRAFFIC, LOG_WARNING, "Received invalid (too short) UDP probe reply from %s (%s)", n->name, n->hostname);
226                         else {
227                                 uint16_t probelen16; memcpy(&probelen16, DATA(packet) + 1, 2); probelen = ntohs(probelen16);
228                         }
229                 }
230                 logger(DEBUG_TRAFFIC, LOG_INFO, "Got type %d UDP probe reply %d from %s (%s)", DATA(packet)[0], probelen, n->name, n->hostname);
231
232                 /* It's a valid reply: now we know bidirectional communication
233                    is possible using the address and socket that the reply
234                    packet used. */
235                 n->status.udp_confirmed = true;
236
237                 if(udp_discovery) {
238                         timeout_del(&n->udp_ping_timeout);
239                         timeout_add(&n->udp_ping_timeout, &udp_probe_timeout_handler, n, &(struct timeval){udp_discovery_timeout, 0});
240                 }
241
242                 /* If we haven't established the PMTU yet, restart the discovery process. */
243
244                 if(n->mtuprobes > 30) {
245                         if (probelen == n->maxmtu + 8) {
246                                 logger(DEBUG_TRAFFIC, LOG_INFO, "Increase in PMTU to %s (%s) detected, restarting PMTU discovery", n->name, n->hostname);
247                                 n->maxmtu = MTU;
248                                 n->mtuprobes = 10;
249                                 return;
250                         }
251
252                         if(n->minmtu)
253                                 n->mtuprobes = 30;
254                         else
255                                 n->mtuprobes = 1;
256                 }
257
258                 /* If applicable, raise the minimum supported MTU */
259
260                 if(probelen > n->maxmtu)
261                         probelen = n->maxmtu;
262                 if(n->minmtu < probelen)
263                         n->minmtu = probelen;
264
265                 /* Calculate RTT and bandwidth.
266                    The RTT is the time between the MTU probe burst was sent and the first
267                    reply is received. The bandwidth is measured using the time between the
268                    arrival of the first and third probe reply (or type 2 probe requests).
269                  */
270
271                 struct timeval now, diff;
272                 gettimeofday(&now, NULL);
273                 timersub(&now, &n->probe_time, &diff);
274
275                 struct timeval probe_timestamp = now;
276                 if (DATA(packet)[0] == 2 && packet->len >= 11) {
277                         uint32_t sec; memcpy(&sec, DATA(packet) + 3, 4);
278                         uint32_t usec; memcpy(&usec, DATA(packet) + 7, 4);
279                         probe_timestamp.tv_sec = ntohl(sec);
280                         probe_timestamp.tv_usec = ntohl(usec);
281                 }
282                 
283                 n->probe_counter++;
284
285                 if(n->probe_counter == 1) {
286                         n->rtt = diff.tv_sec + diff.tv_usec * 1e-6;
287                         n->probe_time = probe_timestamp;
288                 } else if(n->probe_counter == 3) {
289                         struct timeval probe_timestamp_diff;
290                         timersub(&probe_timestamp, &n->probe_time, &probe_timestamp_diff);
291                         n->bandwidth = 2.0 * probelen / (probe_timestamp_diff.tv_sec + probe_timestamp_diff.tv_usec * 1e-6);
292                         logger(DEBUG_TRAFFIC, LOG_DEBUG, "%s (%s) RTT %.2f ms, burst bandwidth %.3f Mbit/s, rx packet loss %.2f %%", n->name, n->hostname, n->rtt * 1e3, n->bandwidth * 8e-6, n->packetloss * 1e2);
293                 }
294         }
295 }
296
297 static length_t compress_packet(uint8_t *dest, const uint8_t *source, length_t len, int level) {
298         if(level == 0) {
299                 memcpy(dest, source, len);
300                 return len;
301         } else if(level == 10) {
302 #ifdef HAVE_LZO
303                 lzo_uint lzolen = MAXSIZE;
304                 lzo1x_1_compress(source, len, dest, &lzolen, lzo_wrkmem);
305                 return lzolen;
306 #else
307                 return -1;
308 #endif
309         } else if(level < 10) {
310 #ifdef HAVE_ZLIB
311                 unsigned long destlen = MAXSIZE;
312                 if(compress2(dest, &destlen, source, len, level) == Z_OK)
313                         return destlen;
314                 else
315 #endif
316                         return -1;
317         } else {
318 #ifdef HAVE_LZO
319                 lzo_uint lzolen = MAXSIZE;
320                 lzo1x_999_compress(source, len, dest, &lzolen, lzo_wrkmem);
321                 return lzolen;
322 #else
323                 return -1;
324 #endif
325         }
326
327         return -1;
328 }
329
330 static length_t uncompress_packet(uint8_t *dest, const uint8_t *source, length_t len, int level) {
331         if(level == 0) {
332                 memcpy(dest, source, len);
333                 return len;
334         } else if(level > 9) {
335 #ifdef HAVE_LZO
336                 lzo_uint lzolen = MAXSIZE;
337                 if(lzo1x_decompress_safe(source, len, dest, &lzolen, NULL) == LZO_E_OK)
338                         return lzolen;
339                 else
340 #endif
341                         return -1;
342         }
343 #ifdef HAVE_ZLIB
344         else {
345                 unsigned long destlen = MAXSIZE;
346                 if(uncompress(dest, &destlen, source, len) == Z_OK)
347                         return destlen;
348                 else
349                         return -1;
350         }
351 #endif
352
353         return -1;
354 }
355
356 /* VPN packet I/O */
357
358 static void receive_packet(node_t *n, vpn_packet_t *packet) {
359         logger(DEBUG_TRAFFIC, LOG_DEBUG, "Received packet of %d bytes from %s (%s)",
360                            packet->len, n->name, n->hostname);
361
362         n->in_packets++;
363         n->in_bytes += packet->len;
364
365         route(n, packet);
366 }
367
368 static bool try_mac(node_t *n, const vpn_packet_t *inpkt) {
369         if(n->status.sptps)
370                 return sptps_verify_datagram(&n->sptps, DATA(inpkt), inpkt->len);
371
372 #ifdef DISABLE_LEGACY
373         return false;
374 #else
375         if(!digest_active(n->indigest) || inpkt->len < sizeof(seqno_t) + digest_length(n->indigest))
376                 return false;
377
378         return digest_verify(n->indigest, SEQNO(inpkt), inpkt->len - digest_length(n->indigest), DATA(inpkt) + inpkt->len - digest_length(n->indigest));
379 #endif
380 }
381
382 static bool receive_udppacket(node_t *n, vpn_packet_t *inpkt) {
383         vpn_packet_t pkt1, pkt2;
384         vpn_packet_t *pkt[] = { &pkt1, &pkt2, &pkt1, &pkt2 };
385         int nextpkt = 0;
386         size_t outlen;
387         pkt1.offset = DEFAULT_PACKET_OFFSET;
388         pkt2.offset = DEFAULT_PACKET_OFFSET;
389
390         if(n->status.sptps) {
391                 if(!n->sptps.state) {
392                         if(!n->status.waitingforkey) {
393                                 logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got packet from %s (%s) but we haven't exchanged keys yet", n->name, n->hostname);
394                                 send_req_key(n);
395                         } else {
396                                 logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got packet from %s (%s) but he hasn't got our key yet", n->name, n->hostname);
397                         }
398                         return false;
399                 }
400                 inpkt->offset += 2 * sizeof(node_id_t);
401                 if(!sptps_receive_data(&n->sptps, DATA(inpkt), inpkt->len - 2 * sizeof(node_id_t))) {
402                         logger(DEBUG_TRAFFIC, LOG_ERR, "Got bad packet from %s (%s)", n->name, n->hostname);
403                         return false;
404                 }
405                 return true;
406         }
407
408 #ifdef DISABLE_LEGACY
409         return false;
410 #else
411         if(!n->status.validkey) {
412                 logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got packet from %s (%s) but he hasn't got our key yet", n->name, n->hostname);
413                 return false;
414         }
415
416         /* Check packet length */
417
418         if(inpkt->len < sizeof(seqno_t) + digest_length(n->indigest)) {
419                 logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got too short packet from %s (%s)",
420                                         n->name, n->hostname);
421                 return false;
422         }
423
424         /* It's a legacy UDP packet, the data starts after the seqno */
425
426         inpkt->offset += sizeof(seqno_t);
427
428         /* Check the message authentication code */
429
430         if(digest_active(n->indigest)) {
431                 inpkt->len -= digest_length(n->indigest);
432                 if(!digest_verify(n->indigest, SEQNO(inpkt), inpkt->len, SEQNO(inpkt) + inpkt->len)) {
433                         logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got unauthenticated packet from %s (%s)", n->name, n->hostname);
434                         return false;
435                 }
436         }
437         /* Decrypt the packet */
438
439         if(cipher_active(n->incipher)) {
440                 vpn_packet_t *outpkt = pkt[nextpkt++];
441                 outlen = MAXSIZE;
442
443                 if(!cipher_decrypt(n->incipher, SEQNO(inpkt), inpkt->len, SEQNO(outpkt), &outlen, true)) {
444                         logger(DEBUG_TRAFFIC, LOG_DEBUG, "Error decrypting packet from %s (%s)", n->name, n->hostname);
445                         return false;
446                 }
447
448                 outpkt->len = outlen;
449                 inpkt = outpkt;
450         }
451
452         /* Check the sequence number */
453
454         seqno_t seqno;
455         memcpy(&seqno, SEQNO(inpkt), sizeof seqno);
456         seqno = ntohl(seqno);
457         inpkt->len -= sizeof seqno;
458
459         if(replaywin) {
460                 if(seqno != n->received_seqno + 1) {
461                         if(seqno >= n->received_seqno + replaywin * 8) {
462                                 if(n->farfuture++ < replaywin >> 2) {
463                                         logger(DEBUG_ALWAYS, LOG_WARNING, "Packet from %s (%s) is %d seqs in the future, dropped (%u)",
464                                                 n->name, n->hostname, seqno - n->received_seqno - 1, n->farfuture);
465                                         return false;
466                                 }
467                                 logger(DEBUG_ALWAYS, LOG_WARNING, "Lost %d packets from %s (%s)",
468                                                 seqno - n->received_seqno - 1, n->name, n->hostname);
469                                 memset(n->late, 0, replaywin);
470                         } else if (seqno <= n->received_seqno) {
471                                 if((n->received_seqno >= replaywin * 8 && seqno <= n->received_seqno - replaywin * 8) || !(n->late[(seqno / 8) % replaywin] & (1 << seqno % 8))) {
472                                         logger(DEBUG_ALWAYS, LOG_WARNING, "Got late or replayed packet from %s (%s), seqno %d, last received %d",
473                                                 n->name, n->hostname, seqno, n->received_seqno);
474                                         return false;
475                                 }
476                         } else {
477                                 for(int i = n->received_seqno + 1; i < seqno; i++)
478                                         n->late[(i / 8) % replaywin] |= 1 << i % 8;
479                         }
480                 }
481
482                 n->farfuture = 0;
483                 n->late[(seqno / 8) % replaywin] &= ~(1 << seqno % 8);
484         }
485
486         if(seqno > n->received_seqno)
487                 n->received_seqno = seqno;
488
489         n->received++;
490
491         if(n->received_seqno > MAX_SEQNO)
492                 regenerate_key();
493
494         /* Decompress the packet */
495
496         length_t origlen = inpkt->len;
497
498         if(n->incompression) {
499                 vpn_packet_t *outpkt = pkt[nextpkt++];
500
501                 if((outpkt->len = uncompress_packet(DATA(outpkt), DATA(inpkt), inpkt->len, n->incompression)) < 0) {
502                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while uncompressing packet from %s (%s)",
503                                                  n->name, n->hostname);
504                         return false;
505                 }
506
507                 inpkt = outpkt;
508
509                 origlen -= MTU/64 + 20;
510         }
511
512         inpkt->priority = 0;
513
514         if(!DATA(inpkt)[12] && !DATA(inpkt)[13])
515                 udp_probe_h(n, inpkt, origlen);
516         else
517                 receive_packet(n, inpkt);
518         return true;
519 #endif
520 }
521
522 void receive_tcppacket(connection_t *c, const char *buffer, int len) {
523         vpn_packet_t outpkt;
524         outpkt.offset = DEFAULT_PACKET_OFFSET;
525
526         if(len > sizeof outpkt.data - outpkt.offset)
527                 return;
528
529         outpkt.len = len;
530         if(c->options & OPTION_TCPONLY)
531                 outpkt.priority = 0;
532         else
533                 outpkt.priority = -1;
534         memcpy(DATA(&outpkt), buffer, len);
535
536         receive_packet(c->node, &outpkt);
537 }
538
539 static void send_sptps_packet(node_t *n, vpn_packet_t *origpkt) {
540         if(!n->status.validkey && !n->connection)
541                 return;
542
543         uint8_t type = 0;
544         int offset = 0;
545
546         if(!(DATA(origpkt)[12] | DATA(origpkt)[13])) {
547                 sptps_send_record(&n->sptps, PKT_PROBE, (char *)DATA(origpkt), origpkt->len);
548                 return;
549         }
550
551         if(routing_mode == RMODE_ROUTER)
552                 offset = 14;
553         else
554                 type = PKT_MAC;
555
556         if(origpkt->len < offset)
557                 return;
558
559         vpn_packet_t outpkt;
560
561         if(n->outcompression) {
562                 outpkt.offset = 0;
563                 int len = compress_packet(DATA(&outpkt) + offset, DATA(origpkt) + offset, origpkt->len - offset, n->outcompression);
564                 if(len < 0) {
565                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while compressing packet to %s (%s)", n->name, n->hostname);
566                 } else if(len < origpkt->len - offset) {
567                         outpkt.len = len + offset;
568                         origpkt = &outpkt;
569                         type |= PKT_COMPRESSED;
570                 }
571         }
572
573         /* If we have a direct metaconnection to n, and we can't use UDP, then
574            don't bother with SPTPS and just use a "plaintext" PACKET message.
575            We don't really care about end-to-end security since we're not
576            sending the message through any intermediate nodes. */
577         if(n->connection && origpkt->len > n->minmtu)
578                 send_tcppacket(n->connection, origpkt);
579         else
580                 sptps_send_record(&n->sptps, type, DATA(origpkt) + offset, origpkt->len - offset);
581         return;
582 }
583
584 static void adapt_socket(const sockaddr_t *sa, int *sock) {
585         /* Make sure we have a suitable socket for the chosen address */
586         if(listen_socket[*sock].sa.sa.sa_family != sa->sa.sa_family) {
587                 for(int i = 0; i < listen_sockets; i++) {
588                         if(listen_socket[i].sa.sa.sa_family == sa->sa.sa_family) {
589                                 *sock = i;
590                                 break;
591                         }
592                 }
593         }
594 }
595
596 static void choose_udp_address(const node_t *n, const sockaddr_t **sa, int *sock) {
597         /* Latest guess */
598         *sa = &n->address;
599         *sock = n->sock;
600
601         /* If the UDP address is confirmed, use it. */
602         if(n->status.udp_confirmed)
603                 return;
604
605         /* Send every third packet to n->address; that could be set
606            to the node's reflexive UDP address discovered during key
607            exchange. */
608
609         static int x = 0;
610         if(++x >= 3) {
611                 x = 0;
612                 return;
613         }
614
615         /* Otherwise, address are found in edges to this node.
616            So we pick a random edge and a random socket. */
617
618         int i = 0;
619         int j = rand() % n->edge_tree->count;
620         edge_t *candidate = NULL;
621
622         for splay_each(edge_t, e, n->edge_tree) {
623                 if(i++ == j) {
624                         candidate = e->reverse;
625                         break;
626                 }
627         }
628
629         if(candidate) {
630                 *sa = &candidate->address;
631                 *sock = rand() % listen_sockets;
632         }
633
634         adapt_socket(*sa, sock);
635 }
636
637 static void choose_local_address(const node_t *n, const sockaddr_t **sa, int *sock) {
638         *sa = NULL;
639
640         /* Pick one of the edges from this node at random, then use its local address. */
641
642         int i = 0;
643         int j = rand() % n->edge_tree->count;
644         edge_t *candidate = NULL;
645
646         for splay_each(edge_t, e, n->edge_tree) {
647                 if(i++ == j) {
648                         candidate = e;
649                         break;
650                 }
651         }
652
653         if (candidate && candidate->local_address.sa.sa_family) {
654                 *sa = &candidate->local_address;
655                 *sock = rand() % listen_sockets;
656                 adapt_socket(*sa, sock);
657         }
658 }
659
660 static void send_udppacket(node_t *n, vpn_packet_t *origpkt) {
661         vpn_packet_t pkt1, pkt2;
662         vpn_packet_t *pkt[] = { &pkt1, &pkt2, &pkt1, &pkt2 };
663         vpn_packet_t *inpkt = origpkt;
664         int nextpkt = 0;
665         vpn_packet_t *outpkt;
666         int origlen = origpkt->len;
667         size_t outlen;
668 #if defined(SOL_IP) && defined(IP_TOS)
669         static int priority = 0;
670         int origpriority = origpkt->priority;
671 #endif
672
673         pkt1.offset = DEFAULT_PACKET_OFFSET;
674         pkt2.offset = DEFAULT_PACKET_OFFSET;
675
676         if(!n->status.reachable) {
677                 logger(DEBUG_TRAFFIC, LOG_INFO, "Trying to send UDP packet to unreachable node %s (%s)", n->name, n->hostname);
678                 return;
679         }
680
681         if(n->status.sptps)
682                 return send_sptps_packet(n, origpkt);
683
684 #ifdef DISABLE_LEGACY
685         return;
686 #else
687         /* Make sure we have a valid key */
688
689         if(!n->status.validkey) {
690                 logger(DEBUG_TRAFFIC, LOG_INFO,
691                                    "No valid key known yet for %s (%s), forwarding via TCP",
692                                    n->name, n->hostname);
693                 send_tcppacket(n->nexthop->connection, origpkt);
694                 return;
695         }
696
697         if(n->options & OPTION_PMTU_DISCOVERY && inpkt->len > n->minmtu && (DATA(inpkt)[12] | DATA(inpkt)[13])) {
698                 logger(DEBUG_TRAFFIC, LOG_INFO,
699                                 "Packet for %s (%s) larger than minimum MTU, forwarding via %s",
700                                 n->name, n->hostname, n != n->nexthop ? n->nexthop->name : "TCP");
701
702                 if(n != n->nexthop)
703                         send_packet(n->nexthop, origpkt);
704                 else
705                         send_tcppacket(n->nexthop->connection, origpkt);
706
707                 return;
708         }
709
710         /* Compress the packet */
711
712         if(n->outcompression) {
713                 outpkt = pkt[nextpkt++];
714
715                 if((outpkt->len = compress_packet(DATA(outpkt), DATA(inpkt), inpkt->len, n->outcompression)) < 0) {
716                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while compressing packet to %s (%s)",
717                                    n->name, n->hostname);
718                         return;
719                 }
720
721                 inpkt = outpkt;
722         }
723
724         /* Add sequence number */
725
726         seqno_t seqno = htonl(++(n->sent_seqno));
727         memcpy(SEQNO(inpkt), &seqno, sizeof seqno);
728         inpkt->len += sizeof seqno;
729
730         /* Encrypt the packet */
731
732         if(cipher_active(n->outcipher)) {
733                 outpkt = pkt[nextpkt++];
734                 outlen = MAXSIZE;
735
736                 if(!cipher_encrypt(n->outcipher, SEQNO(inpkt), inpkt->len, SEQNO(outpkt), &outlen, true)) {
737                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while encrypting packet to %s (%s)", n->name, n->hostname);
738                         goto end;
739                 }
740
741                 outpkt->len = outlen;
742                 inpkt = outpkt;
743         }
744
745         /* Add the message authentication code */
746
747         if(digest_active(n->outdigest)) {
748                 if(!digest_create(n->outdigest, SEQNO(inpkt), inpkt->len, SEQNO(inpkt) + inpkt->len)) {
749                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while encrypting packet to %s (%s)", n->name, n->hostname);
750                         goto end;
751                 }
752
753                 inpkt->len += digest_length(n->outdigest);
754         }
755
756         /* Send the packet */
757
758         const sockaddr_t *sa = NULL;
759         int sock;
760
761         if(n->status.send_locally)
762                 choose_local_address(n, &sa, &sock);
763         if(!sa)
764                 choose_udp_address(n, &sa, &sock);
765
766 #if defined(SOL_IP) && defined(IP_TOS)
767         if(priorityinheritance && origpriority != priority
768            && listen_socket[n->sock].sa.sa.sa_family == AF_INET) {
769                 priority = origpriority;
770                 logger(DEBUG_TRAFFIC, LOG_DEBUG, "Setting outgoing packet priority to %d", priority);
771                 if(setsockopt(listen_socket[n->sock].udp.fd, SOL_IP, IP_TOS, &priority, sizeof(priority))) /* SO_PRIORITY doesn't seem to work */
772                         logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s", "setsockopt", sockstrerror(sockerrno));
773         }
774 #endif
775
776         if(sendto(listen_socket[sock].udp.fd, SEQNO(inpkt), inpkt->len, 0, &sa->sa, SALEN(sa->sa)) < 0 && !sockwouldblock(sockerrno)) {
777                 if(sockmsgsize(sockerrno)) {
778                         if(n->maxmtu >= origlen)
779                                 n->maxmtu = origlen - 1;
780                         if(n->mtu >= origlen)
781                                 n->mtu = origlen - 1;
782                 } else
783                         logger(DEBUG_TRAFFIC, LOG_WARNING, "Error sending packet to %s (%s): %s", n->name, n->hostname, sockstrerror(sockerrno));
784         }
785
786 end:
787         origpkt->len = origlen;
788 #endif
789 }
790
791 static bool send_sptps_data_priv(node_t *to, node_t *from, int type, const void *data, size_t len) {
792         node_t *relay = (to->via != myself && (type == PKT_PROBE || (len - SPTPS_DATAGRAM_OVERHEAD) <= to->via->minmtu)) ? to->via : to->nexthop;
793         bool direct = from == myself && to == relay;
794         bool relay_supported = (relay->options >> 24) >= 4;
795         bool tcponly = (myself->options | relay->options) & OPTION_TCPONLY;
796
797         /* Send it via TCP if it is a handshake packet, TCPOnly is in use, this is a relay packet that the other node cannot understand, or this packet is larger than the MTU.
798            TODO: When relaying, the original sender does not know the end-to-end PMTU (it only knows the PMTU of the first hop).
799                  This can lead to scenarios where large packets are sent over UDP to relay, but then relay has no choice but fall back to TCP. */
800
801         if(type == SPTPS_HANDSHAKE || tcponly || (!direct && !relay_supported) || (type != PKT_PROBE && (len - SPTPS_DATAGRAM_OVERHEAD) > relay->minmtu)) {
802                 char buf[len * 4 / 3 + 5];
803                 b64encode(data, buf, len);
804                 /* If no valid key is known yet, send the packets using ANS_KEY requests,
805                    to ensure we get to learn the reflexive UDP address. */
806                 if(from == myself && !to->status.validkey) {
807                         to->incompression = myself->incompression;
808                         return send_request(to->nexthop->connection, "%d %s %s %s -1 -1 -1 %d", ANS_KEY, from->name, to->name, buf, to->incompression);
809                 } else {
810                         return send_request(to->nexthop->connection, "%d %s %s %d %s", REQ_KEY, from->name, to->name, REQ_SPTPS, buf);
811                 }
812         }
813
814         size_t overhead = 0;
815         if(relay_supported) overhead += sizeof to->id + sizeof from->id;
816         char buf[len + overhead]; char* buf_ptr = buf;
817         if(relay_supported) {
818                 if(direct) {
819                         /* Inform the recipient that this packet was sent directly. */
820                         node_id_t nullid = {};
821                         memcpy(buf_ptr, &nullid, sizeof nullid); buf_ptr += sizeof nullid;
822                 } else {
823                         memcpy(buf_ptr, &to->id, sizeof to->id); buf_ptr += sizeof to->id;
824                 }
825                 memcpy(buf_ptr, &from->id, sizeof from->id); buf_ptr += sizeof from->id;
826
827         }
828         /* TODO: if this copy turns out to be a performance concern, change sptps_send_record() to add some "pre-padding" to the buffer and use that instead */
829         memcpy(buf_ptr, data, len); buf_ptr += len;
830
831         const sockaddr_t *sa = NULL;
832         int sock;
833         if(relay->status.send_locally)
834                 choose_local_address(relay, &sa, &sock);
835         if(!sa)
836                 choose_udp_address(relay, &sa, &sock);
837         logger(DEBUG_TRAFFIC, LOG_INFO, "Sending packet from %s (%s) to %s (%s) via %s (%s)", from->name, from->hostname, to->name, to->hostname, relay->name, relay->hostname);
838         if(sendto(listen_socket[sock].udp.fd, buf, buf_ptr - buf, 0, &sa->sa, SALEN(sa->sa)) < 0 && !sockwouldblock(sockerrno)) {
839                 if(sockmsgsize(sockerrno)) {
840                         // Compensate for SPTPS overhead
841                         len -= SPTPS_DATAGRAM_OVERHEAD;
842                         if(relay->maxmtu >= len)
843                                 relay->maxmtu = len - 1;
844                         if(relay->mtu >= len)
845                                 relay->mtu = len - 1;
846                 } else {
847                         logger(DEBUG_TRAFFIC, LOG_WARNING, "Error sending UDP SPTPS packet to %s (%s): %s", relay->name, relay->hostname, sockstrerror(sockerrno));
848                         return false;
849                 }
850         }
851
852         return true;
853 }
854
855 bool send_sptps_data(void *handle, uint8_t type, const void *data, size_t len) {
856         return send_sptps_data_priv(handle, myself, type, data, len);
857 }
858
859 bool receive_sptps_record(void *handle, uint8_t type, const void *data, uint16_t len) {
860         node_t *from = handle;
861
862         if(type == SPTPS_HANDSHAKE) {
863                 if(!from->status.validkey) {
864                         from->status.validkey = true;
865                         from->status.waitingforkey = false;
866                         logger(DEBUG_META, LOG_INFO, "SPTPS key exchange with %s (%s) succesful", from->name, from->hostname);
867                 }
868                 return true;
869         }
870
871         if(len > MTU) {
872                 logger(DEBUG_ALWAYS, LOG_ERR, "Packet from %s (%s) larger than maximum supported size (%d > %d)", from->name, from->hostname, len, MTU);
873                 return false;
874         }
875
876         vpn_packet_t inpkt;
877         inpkt.offset = DEFAULT_PACKET_OFFSET;
878
879         if(type == PKT_PROBE) {
880                 inpkt.len = len;
881                 memcpy(DATA(&inpkt), data, len);
882                 udp_probe_h(from, &inpkt, len);
883                 return true;
884         }
885
886         if(type & ~(PKT_COMPRESSED | PKT_MAC)) {
887                 logger(DEBUG_ALWAYS, LOG_ERR, "Unexpected SPTPS record type %d len %d from %s (%s)", type, len, from->name, from->hostname);
888                 return false;
889         }
890
891         /* Check if we have the headers we need */
892         if(routing_mode != RMODE_ROUTER && !(type & PKT_MAC)) {
893                 logger(DEBUG_TRAFFIC, LOG_ERR, "Received packet from %s (%s) without MAC header (maybe Mode is not set correctly)", from->name, from->hostname);
894                 return false;
895         } else if(routing_mode == RMODE_ROUTER && (type & PKT_MAC)) {
896                 logger(DEBUG_TRAFFIC, LOG_WARNING, "Received packet from %s (%s) with MAC header (maybe Mode is not set correctly)", from->name, from->hostname);
897         }
898
899         int offset = (type & PKT_MAC) ? 0 : 14;
900         if(type & PKT_COMPRESSED) {
901                 length_t ulen = uncompress_packet(DATA(&inpkt) + offset, (const uint8_t *)data, len, from->incompression);
902                 if(ulen < 0) {
903                         return false;
904                 } else {
905                         inpkt.len = ulen + offset;
906                 }
907                 if(inpkt.len > MAXSIZE)
908                         abort();
909         } else {
910                 memcpy(DATA(&inpkt) + offset, data, len);
911                 inpkt.len = len + offset;
912         }
913
914         /* Generate the Ethernet packet type if necessary */
915         if(offset) {
916                 switch(DATA(&inpkt)[14] >> 4) {
917                         case 4:
918                                 DATA(&inpkt)[12] = 0x08;
919                                 DATA(&inpkt)[13] = 0x00;
920                                 break;
921                         case 6:
922                                 DATA(&inpkt)[12] = 0x86;
923                                 DATA(&inpkt)[13] = 0xDD;
924                                 break;
925                         default:
926                                 logger(DEBUG_TRAFFIC, LOG_ERR,
927                                                    "Unknown IP version %d while reading packet from %s (%s)",
928                                                    DATA(&inpkt)[14] >> 4, from->name, from->hostname);
929                                 return false;
930                 }
931         }
932
933         receive_packet(from, &inpkt);
934         return true;
935 }
936
937 // This function tries to get SPTPS keys, if they aren't already known.
938 // This function makes no guarantees - it is up to the caller to check the node's state to figure out if the keys are available.
939 static void try_sptps(node_t *n) {
940         if(n->status.validkey)
941                 return;
942
943         logger(DEBUG_TRAFFIC, LOG_INFO, "No valid key known yet for %s (%s)", n->name, n->hostname);
944
945         if(!n->status.waitingforkey)
946                 send_req_key(n);
947         else if(n->last_req_key + 10 < now.tv_sec) {
948                 logger(DEBUG_ALWAYS, LOG_DEBUG, "No key from %s after 10 seconds, restarting SPTPS", n->name);
949                 sptps_stop(&n->sptps);
950                 n->status.waitingforkey = false;
951                 send_req_key(n);
952         }
953
954         return;
955 }
956
957 // This function tries to establish a UDP tunnel to a node so that packets can be sent.
958 // If a tunnel is already established, it makes sure it stays up.
959 // This function makes no guarantees - it is up to the caller to check the node's state to figure out if UDP is usable.
960 static void try_udp(node_t* n) {
961         if(!udp_discovery)
962                 return;
963
964         struct timeval now;
965         gettimeofday(&now, NULL);
966         struct timeval ping_tx_elapsed;
967         timersub(&now, &n->udp_ping_sent, &ping_tx_elapsed);
968
969         if(ping_tx_elapsed.tv_sec >= udp_discovery_interval) {
970                 send_udp_probe_packet(n, MAX(n->minmtu, 16));
971                 n->udp_ping_sent = now;
972         }
973 }
974
975 // This function tries to establish a tunnel to a node (or its relay) so that packets can be sent (e.g. get SPTPS keys).
976 // If a tunnel is already established, it tries to improve it (e.g. by trying to establish a UDP tunnel instead of TCP).
977 // This function makes no guarantees - it is up to the caller to check the node's state to figure out if TCP and/or UDP is usable.
978 // By calling this function repeatedly, the tunnel is gradually improved until we hit the wall imposed by the underlying network environment.
979 // It is recommended to call this function every time a packet is sent (or intended to be sent) to a node,
980 // so that the tunnel keeps improving as packets flow, and then gracefully downgrades itself as it goes idle.
981 static void try_tx(node_t *n) {
982         /* If n is a TCP-only neighbor, we'll only use "cleartext" PACKET
983            messages anyway, so there's no need for SPTPS at all. Otherwise, get the keys. */
984         if(n->status.sptps && !(n->connection && ((myself->options | n->options) & OPTION_TCPONLY))) {
985                 try_sptps(n);
986                 if (!n->status.validkey)
987                         return;
988         }
989
990         node_t *via = (n->via == myself) ? n->nexthop : n->via;
991         
992         if((myself->options | via->options) & OPTION_TCPONLY)
993                 return;
994
995         if(!n->status.sptps && !via->status.validkey && via->last_req_key + 10 <= now.tv_sec) {
996                 send_req_key(via);
997                 via->last_req_key = now.tv_sec;
998         } else if(via == n || !n->status.sptps || (via->options >> 24) >= 4)
999                 try_udp(via);
1000
1001         /* If we don't know how to reach "via" yet, then try to reach it through a relay. */
1002         if(n->status.sptps && !via->status.udp_confirmed && via->nexthop != via && (via->nexthop->options >> 24) >= 4)
1003                 try_tx(via->nexthop);
1004 }
1005
1006 /*
1007   send a packet to the given vpn ip.
1008 */
1009 void send_packet(node_t *n, vpn_packet_t *packet) {
1010         node_t *via;
1011
1012         if(n == myself) {
1013                 if(overwrite_mac)
1014                          memcpy(DATA(packet), mymac.x, ETH_ALEN);
1015                 n->out_packets++;
1016                 n->out_bytes += packet->len;
1017                 devops.write(packet);
1018                 return;
1019         }
1020
1021         logger(DEBUG_TRAFFIC, LOG_ERR, "Sending packet of %d bytes to %s (%s)",
1022                            packet->len, n->name, n->hostname);
1023
1024         if(!n->status.reachable) {
1025                 logger(DEBUG_TRAFFIC, LOG_INFO, "Node %s (%s) is not reachable",
1026                                    n->name, n->hostname);
1027                 return;
1028         }
1029
1030         n->out_packets++;
1031         n->out_bytes += packet->len;
1032
1033         if(n->status.sptps) {
1034                 send_sptps_packet(n, packet);
1035                 goto end;
1036         }
1037
1038         via = (packet->priority == -1 || n->via == myself) ? n->nexthop : n->via;
1039
1040         if(via != n)
1041                 logger(DEBUG_TRAFFIC, LOG_INFO, "Sending packet to %s via %s (%s)",
1042                            n->name, via->name, n->via->hostname);
1043
1044         if(packet->priority == -1 || ((myself->options | via->options) & OPTION_TCPONLY)) {
1045                 if(!send_tcppacket(via->connection, packet))
1046                         terminate_connection(via->connection, true);
1047         } else
1048                 send_udppacket(via, packet);
1049
1050 end:
1051         /* Try to improve the tunnel.
1052            Note that we do this *after* we send the packet because sending actual packets take priority
1053            with regard to the send buffer space and latency. */
1054         try_tx(n);
1055 }
1056
1057 /* Broadcast a packet using the minimum spanning tree */
1058
1059 void broadcast_packet(const node_t *from, vpn_packet_t *packet) {
1060         // Always give ourself a copy of the packet.
1061         if(from != myself)
1062                 send_packet(myself, packet);
1063
1064         // In TunnelServer mode, do not forward broadcast packets.
1065         // The MST might not be valid and create loops.
1066         if(tunnelserver || broadcast_mode == BMODE_NONE)
1067                 return;
1068
1069         logger(DEBUG_TRAFFIC, LOG_INFO, "Broadcasting packet of %d bytes from %s (%s)",
1070                            packet->len, from->name, from->hostname);
1071
1072         switch(broadcast_mode) {
1073                 // In MST mode, broadcast packets travel via the Minimum Spanning Tree.
1074                 // This guarantees all nodes receive the broadcast packet, and
1075                 // usually distributes the sending of broadcast packets over all nodes.
1076                 case BMODE_MST:
1077                         for list_each(connection_t, c, connection_list)
1078                                 if(c->edge && c->status.mst && c != from->nexthop->connection)
1079                                         send_packet(c->node, packet);
1080                         break;
1081
1082                 // In direct mode, we send copies to each node we know of.
1083                 // However, this only reaches nodes that can be reached in a single hop.
1084                 // We don't have enough information to forward broadcast packets in this case.
1085                 case BMODE_DIRECT:
1086                         if(from != myself)
1087                                 break;
1088
1089                         for splay_each(node_t, n, node_tree)
1090                                 if(n->status.reachable && n != myself && ((n->via == myself && n->nexthop == n) || n->via == n))
1091                                         send_packet(n, packet);
1092                         break;
1093
1094                 default:
1095                         break;
1096         }
1097 }
1098
1099 static node_t *try_harder(const sockaddr_t *from, const vpn_packet_t *pkt) {
1100         node_t *n = NULL;
1101         bool hard = false;
1102         static time_t last_hard_try = 0;
1103
1104         for splay_each(edge_t, e, edge_weight_tree) {
1105                 if(!e->to->status.reachable || e->to == myself)
1106                         continue;
1107
1108                 if(sockaddrcmp_noport(from, &e->address)) {
1109                         if(last_hard_try == now.tv_sec)
1110                                 continue;
1111                         hard = true;
1112                 }
1113
1114                 if(!try_mac(e->to, pkt))
1115                         continue;
1116
1117                 n = e->to;
1118                 break;
1119         }
1120
1121         if(hard)
1122                 last_hard_try = now.tv_sec;
1123
1124         last_hard_try = now.tv_sec;
1125         return n;
1126 }
1127
1128 void handle_incoming_vpn_data(void *data, int flags) {
1129         listen_socket_t *ls = data;
1130         vpn_packet_t pkt;
1131         char *hostname;
1132         node_id_t nullid = {};
1133         sockaddr_t addr = {};
1134         socklen_t addrlen = sizeof addr;
1135         node_t *from, *to;
1136         bool direct = false;
1137
1138         pkt.offset = 0;
1139         int len = recvfrom(ls->udp.fd, DATA(&pkt), MAXSIZE, 0, &addr.sa, &addrlen);
1140
1141         if(len <= 0 || len > MAXSIZE) {
1142                 if(!sockwouldblock(sockerrno))
1143                         logger(DEBUG_ALWAYS, LOG_ERR, "Receiving packet failed: %s", sockstrerror(sockerrno));
1144                 return;
1145         }
1146
1147         pkt.len = len;
1148
1149         sockaddrunmap(&addr); /* Some braindead IPv6 implementations do stupid things. */
1150
1151         // Try to figure out who sent this packet.
1152
1153         node_t *n = lookup_node_udp(&addr);
1154
1155         if(!n) {
1156                 // It might be from a 1.1 node, which might have a source ID in the packet.
1157                 pkt.offset = 2 * sizeof(node_id_t);
1158                 from = lookup_node_id(SRCID(&pkt));
1159                 if(from && !memcmp(DSTID(&pkt), &nullid, sizeof nullid) && from->status.sptps) {
1160                         if(sptps_verify_datagram(&from->sptps, DATA(&pkt), pkt.len - 2 * sizeof(node_id_t)))
1161                                 n = from;
1162                         else
1163                                 goto skip_harder;
1164                 }
1165         }
1166
1167         if(!n) {
1168                 pkt.offset = 0;
1169                 n = try_harder(&addr, &pkt);
1170         }
1171
1172 skip_harder:
1173         if(!n) {
1174                 if(debug_level >= DEBUG_PROTOCOL) {
1175                         hostname = sockaddr2hostname(&addr);
1176                         logger(DEBUG_PROTOCOL, LOG_WARNING, "Received UDP packet from unknown source %s", hostname);
1177                         free(hostname);
1178                 }
1179                 return;
1180         }
1181
1182         if(n->status.sptps) {
1183                 pkt.offset = 2 * sizeof(node_id_t);
1184
1185                 if(!memcmp(DSTID(&pkt), &nullid, sizeof nullid)) {
1186                         direct = true;
1187                         from = n;
1188                         to = myself;
1189                 } else {
1190                         from = lookup_node_id(SRCID(&pkt));
1191                         to = lookup_node_id(DSTID(&pkt));
1192                 }
1193                 if(!from || !to) {
1194                         logger(DEBUG_PROTOCOL, LOG_WARNING, "Received UDP packet from %s (%s) with unknown source and/or destination ID", n->name, n->hostname);
1195                         return;
1196                 }
1197
1198                 if(to != myself) {
1199                         send_sptps_data_priv(to, n, 0, DATA(&pkt), pkt.len - 2 * sizeof(node_id_t));
1200                         return;
1201                 }
1202         } else {
1203                 direct = true;
1204                 from = n;
1205         }
1206
1207         pkt.offset = 0;
1208         if(!receive_udppacket(from, &pkt))
1209                 return;
1210
1211         n->sock = ls - listen_socket;
1212         if(direct && sockaddrcmp(&addr, &n->address))
1213                 update_node_udp(n, &addr);
1214 }
1215
1216 void handle_device_data(void *data, int flags) {
1217         vpn_packet_t packet;
1218         packet.offset = DEFAULT_PACKET_OFFSET;
1219         packet.priority = 0;
1220
1221         if(devops.read(&packet)) {
1222                 myself->in_packets++;
1223                 myself->in_bytes += packet.len;
1224                 route(myself, &packet);
1225         }
1226 }