417c74ece48d162a35eacfcf10a81b1d4cc6a07e
[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-2021 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 #define ZLIB_CONST
27 #include <zlib.h>
28 #include <assert.h>
29
30 #endif
31
32 #ifdef HAVE_LZO
33 #include LZO1X_H
34 #endif
35
36 #ifdef LZ4_H
37 #include LZ4_H
38 #endif
39
40 #include "address_cache.h"
41 #include "cipher.h"
42 #include "conf.h"
43 #include "connection.h"
44 #include "crypto.h"
45 #include "digest.h"
46 #include "device.h"
47 #include "ethernet.h"
48 #include "ipv4.h"
49 #include "ipv6.h"
50 #include "graph.h"
51 #include "logger.h"
52 #include "net.h"
53 #include "netutl.h"
54 #include "protocol.h"
55 #include "route.h"
56 #include "utils.h"
57 #include "xalloc.h"
58
59 #ifndef MAX
60 #define MAX(a, b) ((a) > (b) ? (a) : (b))
61 #endif
62
63 /* The minimum size of a probe is 14 bytes, but since we normally use CBC mode
64    encryption, we can add a few extra random bytes without increasing the
65    resulting packet size. */
66 #define MIN_PROBE_SIZE 18
67
68 int keylifetime = 0;
69 #ifdef HAVE_LZO
70 static char lzo_wrkmem[LZO1X_999_MEM_COMPRESS > LZO1X_1_MEM_COMPRESS ? LZO1X_999_MEM_COMPRESS : LZO1X_1_MEM_COMPRESS];
71 #endif
72
73 #ifdef HAVE_LZ4_BUILTIN
74 static LZ4_stream_t lz4_stream;
75 #else
76 static void *lz4_state = NULL;
77 #endif /* HAVE_LZ4_BUILTIN */
78
79 static void send_udppacket(node_t *, vpn_packet_t *);
80
81 unsigned replaywin = 32;
82 bool localdiscovery = true;
83 bool udp_discovery = true;
84 int udp_discovery_keepalive_interval = 10;
85 int udp_discovery_interval = 2;
86 int udp_discovery_timeout = 30;
87
88 #define MAX_SEQNO 1073741824
89
90 static void try_fix_mtu(node_t *n) {
91         if(n->mtuprobes < 0) {
92                 return;
93         }
94
95         if(n->mtuprobes == 20 || n->minmtu >= n->maxmtu) {
96                 if(n->minmtu > n->maxmtu) {
97                         n->minmtu = n->maxmtu;
98                 } else {
99                         n->maxmtu = n->minmtu;
100                 }
101
102                 n->mtu = n->minmtu;
103                 logger(DEBUG_TRAFFIC, LOG_INFO, "Fixing MTU of %s (%s) to %d after %d probes", n->name, n->hostname, n->mtu, n->mtuprobes);
104                 n->mtuprobes = -1;
105         }
106 }
107
108 static void udp_probe_timeout_handler(void *data) {
109         node_t *n = data;
110
111         if(!n->status.udp_confirmed) {
112                 return;
113         }
114
115         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);
116         n->status.udp_confirmed = false;
117         n->udp_ping_rtt = -1;
118         n->maxrecentlen = 0;
119         n->mtuprobes = 0;
120         n->minmtu = 0;
121         n->maxmtu = MTU;
122 }
123
124 static void send_udp_probe_reply(node_t *n, vpn_packet_t *packet, length_t len) {
125         if(!n->status.sptps && !n->status.validkey) {
126                 logger(DEBUG_TRAFFIC, LOG_INFO, "Trying to send UDP probe reply to %s (%s) but we don't have his key yet", n->name, n->hostname);
127                 return;
128         }
129
130         /* Type 2 probe replies were introduced in protocol 17.3 */
131         if((n->options >> 24) >= 3) {
132                 DATA(packet)[0] = 2;
133                 uint16_t len16 = htons(len);
134                 memcpy(DATA(packet) + 1, &len16, 2);
135                 packet->len = MIN_PROBE_SIZE;
136                 logger(DEBUG_TRAFFIC, LOG_INFO, "Sending type 2 probe reply length %u to %s (%s)", len, n->name, n->hostname);
137
138         } else {
139                 /* Legacy protocol: n won't understand type 2 probe replies. */
140                 DATA(packet)[0] = 1;
141                 logger(DEBUG_TRAFFIC, LOG_INFO, "Sending type 1 probe reply length %u to %s (%s)", len, n->name, n->hostname);
142         }
143
144         /* Temporarily set udp_confirmed, so that the reply is sent
145            back exactly the way it came in. */
146
147         bool udp_confirmed = n->status.udp_confirmed;
148         n->status.udp_confirmed = true;
149         send_udppacket(n, packet);
150         n->status.udp_confirmed = udp_confirmed;
151 }
152
153 static void udp_probe_h(node_t *n, vpn_packet_t *packet, length_t len) {
154         if(!DATA(packet)[0]) {
155                 logger(DEBUG_TRAFFIC, LOG_INFO, "Got UDP probe request %d from %s (%s)", packet->len, n->name, n->hostname);
156                 send_udp_probe_reply(n, packet, len);
157                 return;
158         }
159
160         if(DATA(packet)[0] == 2) {
161                 // It's a type 2 probe reply, use the length field inside the packet
162                 uint16_t len16;
163                 memcpy(&len16, DATA(packet) + 1, 2);
164                 len = ntohs(len16);
165         }
166
167         if(n->status.ping_sent) {  // a probe in flight
168                 gettimeofday(&now, NULL);
169                 struct timeval rtt;
170                 timersub(&now, &n->udp_ping_sent, &rtt);
171                 n->udp_ping_rtt = rtt.tv_sec * 1000000 + rtt.tv_usec;
172                 n->status.ping_sent = false;
173                 logger(DEBUG_TRAFFIC, LOG_INFO, "Got type %d UDP probe reply %d from %s (%s) rtt=%d.%03d", DATA(packet)[0], len, n->name, n->hostname, n->udp_ping_rtt / 1000, n->udp_ping_rtt % 1000);
174         } else {
175                 logger(DEBUG_TRAFFIC, LOG_INFO, "Got type %d UDP probe reply %d from %s (%s)", DATA(packet)[0], len, n->name, n->hostname);
176         }
177
178         /* It's a valid reply: now we know bidirectional communication
179            is possible using the address and socket that the reply
180            packet used. */
181         if(!n->status.udp_confirmed) {
182                 n->status.udp_confirmed = true;
183
184                 if(!n->address_cache) {
185                         n->address_cache = open_address_cache(n);
186                 }
187
188                 reset_address_cache(n->address_cache, &n->address);
189         }
190
191         // Reset the UDP ping timer.
192
193         if(udp_discovery) {
194                 timeout_del(&n->udp_ping_timeout);
195                 timeout_add(&n->udp_ping_timeout, &udp_probe_timeout_handler, n, &(struct timeval) {
196                         udp_discovery_timeout, 0
197                 });
198         }
199
200         if(len > n->maxmtu) {
201                 logger(DEBUG_TRAFFIC, LOG_INFO, "Increase in PMTU to %s (%s) detected, restarting PMTU discovery", n->name, n->hostname);
202                 n->minmtu = len;
203                 n->maxmtu = MTU;
204                 /* Set mtuprobes to 1 so that try_mtu() doesn't reset maxmtu */
205                 n->mtuprobes = 1;
206                 return;
207         } else if(n->mtuprobes < 0 && len == n->maxmtu) {
208                 /* We got a maxmtu sized packet, confirming the PMTU is still valid. */
209                 n->mtuprobes = -1;
210                 n->mtu_ping_sent = now;
211         }
212
213         /* If applicable, raise the minimum supported MTU */
214
215         if(n->minmtu < len) {
216                 n->minmtu = len;
217                 try_fix_mtu(n);
218         }
219 }
220
221 #ifdef HAVE_LZ4
222 static length_t compress_packet_lz4(uint8_t *dest, const uint8_t *source, length_t len) {
223 #ifdef HAVE_LZ4_BUILTIN
224         return LZ4_compress_fast_extState(&lz4_stream, (const char *) source, (char *) dest, len, MAXSIZE, 0);
225 #else
226
227         /* @FIXME: Put this in a better place, and free() it too. */
228         if(lz4_state == NULL) {
229                 lz4_state = malloc(LZ4_sizeofState());
230         }
231
232         if(lz4_state == NULL) {
233                 logger(DEBUG_ALWAYS, LOG_ERR, "Failed to allocate lz4_state, error: %i", errno);
234                 return 0;
235         }
236
237         return LZ4_compress_fast_extState(lz4_state, (const char *) source, (char *) dest, len, MAXSIZE, 0);
238 #endif /* HAVE_LZ4_BUILTIN */
239 }
240 #endif /* HAVE_LZ4 */
241
242 #ifdef HAVE_LZO
243 static length_t compress_packet_lzo(uint8_t *dest, const uint8_t *source, length_t len, int level) {
244         assert(level == 10 || level == 11);
245
246         lzo_uint lzolen = MAXSIZE;
247         int result;
248
249         if(level == 11) {
250                 result = lzo1x_999_compress(source, len, dest, &lzolen, lzo_wrkmem);
251         } else { // level == 10
252                 result = lzo1x_1_compress(source, len, dest, &lzolen, lzo_wrkmem);
253         }
254
255         if(result == LZO_E_OK) {
256                 return lzolen;
257         } else {
258                 return 0;
259         }
260 }
261 #endif
262
263 static length_t compress_packet(uint8_t *dest, const uint8_t *source, length_t len, int level) {
264         switch(level) {
265 #ifdef HAVE_LZ4
266
267         case 12:
268                 return compress_packet_lz4(dest, source, len);
269 #endif
270
271 #ifdef HAVE_LZO
272
273         case 11:
274         case 10:
275                 return compress_packet_lzo(dest, source, len, level);
276 #endif
277 #ifdef HAVE_ZLIB
278
279         case 9:
280         case 8:
281         case 7:
282         case 6:
283         case 5:
284         case 4:
285         case 3:
286         case 2:
287         case 1: {
288                 unsigned long dest_len = MAXSIZE;
289
290                 if(compress2(dest, (unsigned long *) &dest_len, source, len, level) == Z_OK) {
291                         return dest_len;
292                 } else {
293                         return 0;
294                 }
295         }
296
297 #endif
298
299         case 0:
300                 memcpy(dest, source, len);
301                 return len;
302
303         default:
304                 return 0;
305         }
306 }
307
308 static length_t uncompress_packet(uint8_t *dest, const uint8_t *source, length_t len, int level) {
309         switch(level) {
310 #ifdef HAVE_LZ4
311
312         case 12:
313                 return LZ4_decompress_safe((char *)source, (char *) dest, len, MAXSIZE);
314
315 #endif
316 #ifdef HAVE_LZO
317
318         case 11:
319         case 10: {
320                 lzo_uint dst_len = MAXSIZE;
321
322                 if(lzo1x_decompress_safe(source, len, dest, (lzo_uint *) &dst_len, NULL) == LZO_E_OK) {
323                         return dst_len;
324                 } else {
325                         return 0;
326                 }
327         }
328
329 #endif
330 #ifdef HAVE_ZLIB
331
332         case 9:
333         case 8:
334         case 7:
335         case 6:
336         case 5:
337         case 4:
338         case 3:
339         case 2:
340         case 1: {
341                 unsigned long destlen = MAXSIZE;
342                 static z_stream stream;
343
344                 if(stream.next_in) {
345                         inflateReset(&stream);
346                 } else {
347                         inflateInit(&stream);
348                 }
349
350                 stream.next_in = source;
351                 stream.avail_in = len;
352                 stream.next_out = dest;
353                 stream.avail_out = destlen;
354                 stream.total_out = 0;
355
356                 if(inflate(&stream, Z_FINISH) == Z_STREAM_END) {
357                         return stream.total_out;
358                 } else {
359                         return 0;
360                 }
361         }
362
363 #endif
364
365         case 0:
366                 memcpy(dest, source, len);
367                 return len;
368
369         default:
370                 return 0;
371         }
372 }
373
374 /* VPN packet I/O */
375
376 static void receive_packet(node_t *n, vpn_packet_t *packet) {
377         logger(DEBUG_TRAFFIC, LOG_DEBUG, "Received packet of %d bytes from %s (%s)",
378                packet->len, n->name, n->hostname);
379
380         n->in_packets++;
381         n->in_bytes += packet->len;
382
383         route(n, packet);
384 }
385
386 static bool try_mac(node_t *n, const vpn_packet_t *inpkt) {
387         if(n->status.sptps) {
388                 return sptps_verify_datagram(&n->sptps, DATA(inpkt), inpkt->len);
389         }
390
391 #ifdef DISABLE_LEGACY
392         return false;
393 #else
394
395         if(!n->status.validkey_in || !digest_active(n->indigest) || (size_t)inpkt->len < sizeof(seqno_t) + digest_length(n->indigest)) {
396                 return false;
397         }
398
399         return digest_verify(n->indigest, inpkt->data, inpkt->len - digest_length(n->indigest), inpkt->data + inpkt->len - digest_length(n->indigest));
400 #endif
401 }
402
403 static bool receive_udppacket(node_t *n, vpn_packet_t *inpkt) {
404         if(n->status.sptps) {
405                 if(!n->sptps.state) {
406                         if(!n->status.waitingforkey) {
407                                 logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got packet from %s (%s) but we haven't exchanged keys yet", n->name, n->hostname);
408                                 send_req_key(n);
409                         } else {
410                                 logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got packet from %s (%s) but he hasn't got our key yet", n->name, n->hostname);
411                         }
412
413                         return false;
414                 }
415
416                 n->status.udppacket = true;
417                 bool result = sptps_receive_data(&n->sptps, DATA(inpkt), inpkt->len);
418                 n->status.udppacket = false;
419
420                 if(!result) {
421                         /* Uh-oh. It might be that the tunnel is stuck in some corrupted state,
422                            so let's restart SPTPS in case that helps. But don't do that too often
423                            to prevent storms, and because that would make life a little too easy
424                            for external attackers trying to DoS us. */
425                         if(n->last_req_key < now.tv_sec - 10) {
426                                 logger(DEBUG_PROTOCOL, LOG_ERR, "Failed to decode raw TCP packet from %s (%s), restarting SPTPS", n->name, n->hostname);
427                                 send_req_key(n);
428                         }
429
430                         return false;
431                 }
432
433                 return true;
434         }
435
436 #ifdef DISABLE_LEGACY
437         return false;
438 #else
439         vpn_packet_t pkt1, pkt2;
440         vpn_packet_t *pkt[] = { &pkt1, &pkt2, &pkt1, &pkt2 };
441         int nextpkt = 0;
442         size_t outlen;
443         pkt1.offset = DEFAULT_PACKET_OFFSET;
444         pkt2.offset = DEFAULT_PACKET_OFFSET;
445
446         if(!n->status.validkey_in) {
447                 logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got packet from %s (%s) but he hasn't got our key yet", n->name, n->hostname);
448                 return false;
449         }
450
451         /* Check packet length */
452
453         if((size_t)inpkt->len < sizeof(seqno_t) + digest_length(n->indigest)) {
454                 logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got too short packet from %s (%s)",
455                        n->name, n->hostname);
456                 return false;
457         }
458
459         /* It's a legacy UDP packet, the data starts after the seqno */
460
461         inpkt->offset += sizeof(seqno_t);
462
463         /* Check the message authentication code */
464
465         if(digest_active(n->indigest)) {
466                 inpkt->len -= digest_length(n->indigest);
467
468                 if(!digest_verify(n->indigest, SEQNO(inpkt), inpkt->len, SEQNO(inpkt) + inpkt->len)) {
469                         logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got unauthenticated packet from %s (%s)", n->name, n->hostname);
470                         return false;
471                 }
472         }
473
474         /* Decrypt the packet */
475
476         if(cipher_active(n->incipher)) {
477                 vpn_packet_t *outpkt = pkt[nextpkt++];
478                 outlen = MAXSIZE;
479
480                 if(!cipher_decrypt(n->incipher, SEQNO(inpkt), inpkt->len, SEQNO(outpkt), &outlen, true)) {
481                         logger(DEBUG_TRAFFIC, LOG_DEBUG, "Error decrypting packet from %s (%s)", n->name, n->hostname);
482                         return false;
483                 }
484
485                 outpkt->len = outlen;
486                 inpkt = outpkt;
487         }
488
489         /* Check the sequence number */
490
491         seqno_t seqno;
492         memcpy(&seqno, SEQNO(inpkt), sizeof(seqno));
493         seqno = ntohl(seqno);
494         inpkt->len -= sizeof(seqno);
495
496         if(replaywin) {
497                 if(seqno != n->received_seqno + 1) {
498                         if(seqno >= n->received_seqno + replaywin * 8) {
499                                 if(n->farfuture++ < replaywin >> 2) {
500                                         logger(DEBUG_TRAFFIC, LOG_WARNING, "Packet from %s (%s) is %d seqs in the future, dropped (%u)",
501                                                n->name, n->hostname, seqno - n->received_seqno - 1, n->farfuture);
502                                         return false;
503                                 }
504
505                                 logger(DEBUG_TRAFFIC, LOG_WARNING, "Lost %d packets from %s (%s)",
506                                        seqno - n->received_seqno - 1, n->name, n->hostname);
507                                 memset(n->late, 0, replaywin);
508                         } else if(seqno <= n->received_seqno) {
509                                 if((n->received_seqno >= replaywin * 8 && seqno <= n->received_seqno - replaywin * 8) || !(n->late[(seqno / 8) % replaywin] & (1 << seqno % 8))) {
510                                         logger(DEBUG_TRAFFIC, LOG_WARNING, "Got late or replayed packet from %s (%s), seqno %d, last received %d",
511                                                n->name, n->hostname, seqno, n->received_seqno);
512                                         return false;
513                                 }
514                         } else {
515                                 for(seqno_t i = n->received_seqno + 1; i < seqno; i++) {
516                                         n->late[(i / 8) % replaywin] |= 1 << i % 8;
517                                 }
518                         }
519                 }
520
521                 n->farfuture = 0;
522                 n->late[(seqno / 8) % replaywin] &= ~(1 << seqno % 8);
523         }
524
525         if(seqno > n->received_seqno) {
526                 n->received_seqno = seqno;
527         }
528
529         n->received++;
530
531         if(n->received_seqno > MAX_SEQNO) {
532                 regenerate_key();
533         }
534
535         /* Decompress the packet */
536
537         length_t origlen = inpkt->len;
538
539         if(n->incompression) {
540                 vpn_packet_t *outpkt = pkt[nextpkt++];
541
542                 if(!(outpkt->len = uncompress_packet(DATA(outpkt), DATA(inpkt), inpkt->len, n->incompression))) {
543                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while uncompressing packet from %s (%s)",
544                                n->name, n->hostname);
545                         return false;
546                 }
547
548                 inpkt = outpkt;
549
550                 if(origlen > MTU / 64 + 20) {
551                         origlen -= MTU / 64 + 20;
552                 } else {
553                         origlen = 0;
554                 }
555         }
556
557         if(inpkt->len > n->maxrecentlen) {
558                 n->maxrecentlen = inpkt->len;
559         }
560
561         inpkt->priority = 0;
562
563         if(!DATA(inpkt)[12] && !DATA(inpkt)[13]) {
564                 udp_probe_h(n, inpkt, origlen);
565         } else {
566                 receive_packet(n, inpkt);
567         }
568
569         return true;
570 #endif
571 }
572
573 void receive_tcppacket(connection_t *c, const char *buffer, size_t len) {
574         vpn_packet_t outpkt;
575         outpkt.offset = DEFAULT_PACKET_OFFSET;
576
577         if(len > sizeof(outpkt.data) - outpkt.offset) {
578                 return;
579         }
580
581         outpkt.len = len;
582
583         if(c->options & OPTION_TCPONLY) {
584                 outpkt.priority = 0;
585         } else {
586                 outpkt.priority = -1;
587         }
588
589         memcpy(DATA(&outpkt), buffer, len);
590
591         receive_packet(c->node, &outpkt);
592 }
593
594 bool receive_tcppacket_sptps(connection_t *c, const char *data, size_t len) {
595         if(len < sizeof(node_id_t) + sizeof(node_id_t)) {
596                 logger(DEBUG_PROTOCOL, LOG_ERR, "Got too short TCP SPTPS packet from %s (%s)", c->name, c->hostname);
597                 return false;
598         }
599
600         node_t *to = lookup_node_id((node_id_t *)data);
601         data += sizeof(node_id_t);
602         len -= sizeof(node_id_t);
603
604         if(!to) {
605                 logger(DEBUG_PROTOCOL, LOG_ERR, "Got TCP SPTPS packet from %s (%s) with unknown destination ID", c->name, c->hostname);
606                 return true;
607         }
608
609         node_t *from = lookup_node_id((node_id_t *)data);
610         data += sizeof(node_id_t);
611         len -= sizeof(node_id_t);
612
613         if(!from) {
614                 logger(DEBUG_PROTOCOL, LOG_ERR, "Got TCP SPTPS packet from %s (%s) with unknown source ID", c->name, c->hostname);
615                 return true;
616         }
617
618         if(!to->status.reachable) {
619                 /* This can happen in the form of a race condition
620                    if the node just became unreachable. */
621                 logger(DEBUG_TRAFFIC, LOG_WARNING, "Cannot relay TCP packet from %s (%s) because the destination, %s (%s), is unreachable", from->name, from->hostname, to->name, to->hostname);
622                 return true;
623         }
624
625         /* Help the sender reach us over UDP.
626            Note that we only do this if we're the destination or the static relay;
627            otherwise every hop would initiate its own UDP info message, resulting in elevated chatter. */
628         if(to->via == myself) {
629                 send_udp_info(myself, from);
630         }
631
632         /* If we're not the final recipient, relay the packet. */
633
634         if(to != myself) {
635                 if(to->status.validkey) {
636                         send_sptps_data(to, from, 0, data, len);
637                 }
638
639                 try_tx(to, true);
640                 return true;
641         }
642
643         /* The packet is for us */
644
645         if(!sptps_receive_data(&from->sptps, data, len)) {
646                 /* Uh-oh. It might be that the tunnel is stuck in some corrupted state,
647                    so let's restart SPTPS in case that helps. But don't do that too often
648                    to prevent storms. */
649                 if(from->last_req_key < now.tv_sec - 10) {
650                         logger(DEBUG_PROTOCOL, LOG_ERR, "Failed to decode raw TCP packet from %s (%s), restarting SPTPS", from->name, from->hostname);
651                         send_req_key(from);
652                 }
653
654                 return true;
655         }
656
657         send_mtu_info(myself, from, MTU);
658         return true;
659 }
660
661 static void send_sptps_packet(node_t *n, vpn_packet_t *origpkt) {
662         if(!n->status.validkey && !n->connection) {
663                 return;
664         }
665
666         uint8_t type = 0;
667         int offset = 0;
668
669         if((!(DATA(origpkt)[12] | DATA(origpkt)[13])) && (n->sptps.outstate))  {
670                 sptps_send_record(&n->sptps, PKT_PROBE, (char *)DATA(origpkt), origpkt->len);
671                 return;
672         }
673
674         if(routing_mode == RMODE_ROUTER) {
675                 offset = 14;
676         } else {
677                 type = PKT_MAC;
678         }
679
680         if(origpkt->len < offset) {
681                 return;
682         }
683
684         vpn_packet_t outpkt;
685
686         if(n->outcompression) {
687                 outpkt.offset = 0;
688                 length_t len = compress_packet(DATA(&outpkt) + offset, DATA(origpkt) + offset, origpkt->len - offset, n->outcompression);
689
690                 if(!len) {
691                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while compressing packet to %s (%s)", n->name, n->hostname);
692                 } else if(len < origpkt->len - offset) {
693                         outpkt.len = len + offset;
694                         origpkt = &outpkt;
695                         type |= PKT_COMPRESSED;
696                 }
697         }
698
699         /* If we have a direct metaconnection to n, and we can't use UDP, then
700            don't bother with SPTPS and just use a "plaintext" PACKET message.
701            We don't really care about end-to-end security since we're not
702            sending the message through any intermediate nodes. */
703         if(n->connection && origpkt->len > n->minmtu) {
704                 send_tcppacket(n->connection, origpkt);
705         } else {
706                 sptps_send_record(&n->sptps, type, DATA(origpkt) + offset, origpkt->len - offset);
707         }
708
709         return;
710 }
711
712 static void adapt_socket(const sockaddr_t *sa, int *sock) {
713         /* Make sure we have a suitable socket for the chosen address */
714         if(listen_socket[*sock].sa.sa.sa_family != sa->sa.sa_family) {
715                 for(int i = 0; i < listen_sockets; i++) {
716                         if(listen_socket[i].sa.sa.sa_family == sa->sa.sa_family) {
717                                 *sock = i;
718                                 break;
719                         }
720                 }
721         }
722 }
723
724 static void choose_udp_address(const node_t *n, const sockaddr_t **sa, int *sock) {
725         /* Latest guess */
726         *sa = &n->address;
727         *sock = n->sock;
728
729         /* If the UDP address is confirmed, use it. */
730         if(n->status.udp_confirmed) {
731                 return;
732         }
733
734         /* Send every third packet to n->address; that could be set
735            to the node's reflexive UDP address discovered during key
736            exchange. */
737
738         static int x = 0;
739
740         if(++x >= 3) {
741                 x = 0;
742                 return;
743         }
744
745         /* Otherwise, address are found in edges to this node.
746            So we pick a random edge and a random socket. */
747
748         int i = 0;
749         int j = rand() % n->edge_tree->count;
750         edge_t *candidate = NULL;
751
752         for splay_each(edge_t, e, n->edge_tree) {
753                 if(i++ == j) {
754                         candidate = e->reverse;
755                         break;
756                 }
757         }
758
759         if(candidate) {
760                 *sa = &candidate->address;
761                 *sock = rand() % listen_sockets;
762         }
763
764         adapt_socket(*sa, sock);
765 }
766
767 static void choose_local_address(const node_t *n, const sockaddr_t **sa, int *sock) {
768         *sa = NULL;
769
770         /* Pick one of the edges from this node at random, then use its local address. */
771
772         int i = 0;
773         int j = rand() % n->edge_tree->count;
774         edge_t *candidate = NULL;
775
776         for splay_each(edge_t, e, n->edge_tree) {
777                 if(i++ == j) {
778                         candidate = e;
779                         break;
780                 }
781         }
782
783         if(candidate && candidate->local_address.sa.sa_family) {
784                 *sa = &candidate->local_address;
785                 *sock = rand() % listen_sockets;
786                 adapt_socket(*sa, sock);
787         }
788 }
789
790 static void send_udppacket(node_t *n, vpn_packet_t *origpkt) {
791         if(!n->status.reachable) {
792                 logger(DEBUG_TRAFFIC, LOG_INFO, "Trying to send UDP packet to unreachable node %s (%s)", n->name, n->hostname);
793                 return;
794         }
795
796         if(n->status.sptps) {
797                 send_sptps_packet(n, origpkt);
798                 return;
799         }
800
801 #ifdef DISABLE_LEGACY
802         return;
803 #else
804         vpn_packet_t pkt1, pkt2;
805         vpn_packet_t *pkt[] = { &pkt1, &pkt2, &pkt1, &pkt2 };
806         vpn_packet_t *inpkt = origpkt;
807         int nextpkt = 0;
808         vpn_packet_t *outpkt;
809         int origlen = origpkt->len;
810         size_t outlen;
811         int origpriority = origpkt->priority;
812
813         pkt1.offset = DEFAULT_PACKET_OFFSET;
814         pkt2.offset = DEFAULT_PACKET_OFFSET;
815
816         /* Make sure we have a valid key */
817
818         if(!n->status.validkey) {
819                 logger(DEBUG_TRAFFIC, LOG_INFO,
820                        "No valid key known yet for %s (%s), forwarding via TCP",
821                        n->name, n->hostname);
822                 send_tcppacket(n->nexthop->connection, origpkt);
823                 return;
824         }
825
826         if(n->options & OPTION_PMTU_DISCOVERY && inpkt->len > n->minmtu && (DATA(inpkt)[12] | DATA(inpkt)[13])) {
827                 logger(DEBUG_TRAFFIC, LOG_INFO,
828                        "Packet for %s (%s) larger than minimum MTU, forwarding via %s",
829                        n->name, n->hostname, n != n->nexthop ? n->nexthop->name : "TCP");
830
831                 if(n != n->nexthop) {
832                         send_packet(n->nexthop, origpkt);
833                 } else {
834                         send_tcppacket(n->nexthop->connection, origpkt);
835                 }
836
837                 return;
838         }
839
840         /* Compress the packet */
841
842         if(n->outcompression) {
843                 outpkt = pkt[nextpkt++];
844
845                 if(!(outpkt->len = compress_packet(DATA(outpkt), DATA(inpkt), inpkt->len, n->outcompression))) {
846                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while compressing packet to %s (%s)",
847                                n->name, n->hostname);
848                         return;
849                 }
850
851                 inpkt = outpkt;
852         }
853
854         /* Add sequence number */
855
856         seqno_t seqno = htonl(++(n->sent_seqno));
857         memcpy(SEQNO(inpkt), &seqno, sizeof(seqno));
858         inpkt->len += sizeof(seqno);
859
860         /* Encrypt the packet */
861
862         if(cipher_active(n->outcipher)) {
863                 outpkt = pkt[nextpkt++];
864                 outlen = MAXSIZE;
865
866                 if(!cipher_encrypt(n->outcipher, SEQNO(inpkt), inpkt->len, SEQNO(outpkt), &outlen, true)) {
867                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while encrypting packet to %s (%s)", n->name, n->hostname);
868                         goto end;
869                 }
870
871                 outpkt->len = outlen;
872                 inpkt = outpkt;
873         }
874
875         /* Add the message authentication code */
876
877         if(digest_active(n->outdigest)) {
878                 if(!digest_create(n->outdigest, SEQNO(inpkt), inpkt->len, SEQNO(inpkt) + inpkt->len)) {
879                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while encrypting packet to %s (%s)", n->name, n->hostname);
880                         goto end;
881                 }
882
883                 inpkt->len += digest_length(n->outdigest);
884         }
885
886         /* Send the packet */
887
888         const sockaddr_t *sa = NULL;
889         int sock;
890
891         if(n->status.send_locally) {
892                 choose_local_address(n, &sa, &sock);
893         }
894
895         if(!sa) {
896                 choose_udp_address(n, &sa, &sock);
897         }
898
899         if(priorityinheritance && origpriority != listen_socket[sock].priority) {
900                 listen_socket[sock].priority = origpriority;
901
902                 switch(sa->sa.sa_family) {
903 #if defined(IP_TOS)
904
905                 case AF_INET:
906                         logger(DEBUG_TRAFFIC, LOG_DEBUG, "Setting IPv4 outgoing packet priority to %d", origpriority);
907
908                         if(setsockopt(listen_socket[sock].udp.fd, IPPROTO_IP, IP_TOS, (void *)&origpriority, sizeof(origpriority))) { /* SO_PRIORITY doesn't seem to work */
909                                 logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s", "setsockopt", sockstrerror(sockerrno));
910                         }
911
912                         break;
913 #endif
914 #if defined(IPV6_TCLASS)
915
916                 case AF_INET6:
917                         logger(DEBUG_TRAFFIC, LOG_DEBUG, "Setting IPv6 outgoing packet priority to %d", origpriority);
918
919                         if(setsockopt(listen_socket[sock].udp.fd, IPPROTO_IPV6, IPV6_TCLASS, (void *)&origpriority, sizeof(origpriority))) { /* SO_PRIORITY doesn't seem to work */
920                                 logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s", "setsockopt", sockstrerror(sockerrno));
921                         }
922
923                         break;
924 #endif
925
926                 default:
927                         break;
928                 }
929         }
930
931         if(sendto(listen_socket[sock].udp.fd, (void *)SEQNO(inpkt), inpkt->len, 0, &sa->sa, SALEN(sa->sa)) < 0 && !sockwouldblock(sockerrno)) {
932                 if(sockmsgsize(sockerrno)) {
933                         if(n->maxmtu >= origlen) {
934                                 n->maxmtu = origlen - 1;
935                         }
936
937                         if(n->mtu >= origlen) {
938                                 n->mtu = origlen - 1;
939                         }
940
941                         try_fix_mtu(n);
942                 } else {
943                         logger(DEBUG_TRAFFIC, LOG_WARNING, "Error sending packet to %s (%s): %s", n->name, n->hostname, sockstrerror(sockerrno));
944                 }
945         }
946
947 end:
948         origpkt->len = origlen;
949 #endif
950 }
951
952 bool send_sptps_data(node_t *to, node_t *from, int type, const void *data, size_t len) {
953         node_t *relay = (to->via != myself && (type == PKT_PROBE || (len - SPTPS_DATAGRAM_OVERHEAD) <= to->via->minmtu)) ? to->via : to->nexthop;
954         bool direct = from == myself && to == relay;
955         bool relay_supported = (relay->options >> 24) >= 4;
956         bool tcponly = (myself->options | relay->options) & OPTION_TCPONLY;
957
958         /* 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. */
959
960         if(type == SPTPS_HANDSHAKE || tcponly || (!direct && !relay_supported) || (type != PKT_PROBE && (len - SPTPS_DATAGRAM_OVERHEAD) > relay->minmtu)) {
961                 if(type != SPTPS_HANDSHAKE && (to->nexthop->connection->options >> 24) >= 7) {
962                         char buf[len + sizeof(to->id) + sizeof(from->id)];
963                         char *buf_ptr = buf;
964                         memcpy(buf_ptr, &to->id, sizeof(to->id));
965                         buf_ptr += sizeof(to->id);
966                         memcpy(buf_ptr, &from->id, sizeof(from->id));
967                         buf_ptr += sizeof(from->id);
968                         memcpy(buf_ptr, data, len);
969                         logger(DEBUG_TRAFFIC, LOG_INFO, "Sending packet from %s (%s) to %s (%s) via %s (%s) (TCP)", from->name, from->hostname, to->name, to->hostname, to->nexthop->name, to->nexthop->hostname);
970                         return send_sptps_tcppacket(to->nexthop->connection, buf, sizeof(buf));
971                 }
972
973                 char buf[len * 4 / 3 + 5];
974                 b64encode(data, buf, len);
975
976                 /* If this is a handshake packet, use ANS_KEY instead of REQ_KEY, for two reasons:
977                     - We don't want intermediate nodes to switch to UDP to relay these packets;
978                     - ANS_KEY allows us to learn the reflexive UDP address. */
979                 if(type == SPTPS_HANDSHAKE) {
980                         to->incompression = myself->incompression;
981                         return send_request(to->nexthop->connection, "%d %s %s %s -1 -1 -1 %d", ANS_KEY, from->name, to->name, buf, to->incompression);
982                 } else {
983                         return send_request(to->nexthop->connection, "%d %s %s %d %s", REQ_KEY, from->name, to->name, SPTPS_PACKET, buf);
984                 }
985         }
986
987         size_t overhead = 0;
988
989         if(relay_supported) {
990                 overhead += sizeof(to->id) + sizeof(from->id);
991         }
992
993         char buf[len + overhead];
994         char *buf_ptr = buf;
995
996         if(relay_supported) {
997                 if(direct) {
998                         /* Inform the recipient that this packet was sent directly. */
999                         node_id_t nullid = {0};
1000                         memcpy(buf_ptr, &nullid, sizeof(nullid));
1001                         buf_ptr += sizeof(nullid);
1002                 } else {
1003                         memcpy(buf_ptr, &to->id, sizeof(to->id));
1004                         buf_ptr += sizeof(to->id);
1005                 }
1006
1007                 memcpy(buf_ptr, &from->id, sizeof(from->id));
1008                 buf_ptr += sizeof(from->id);
1009
1010         }
1011
1012         /* 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 */
1013         memcpy(buf_ptr, data, len);
1014         buf_ptr += len;
1015
1016         const sockaddr_t *sa = NULL;
1017         int sock;
1018
1019         if(relay->status.send_locally) {
1020                 choose_local_address(relay, &sa, &sock);
1021         }
1022
1023         if(!sa) {
1024                 choose_udp_address(relay, &sa, &sock);
1025         }
1026
1027         logger(DEBUG_TRAFFIC, LOG_INFO, "Sending packet from %s (%s) to %s (%s) via %s (%s) (UDP)", from->name, from->hostname, to->name, to->hostname, relay->name, relay->hostname);
1028
1029         if(sendto(listen_socket[sock].udp.fd, buf, buf_ptr - buf, 0, &sa->sa, SALEN(sa->sa)) < 0 && !sockwouldblock(sockerrno)) {
1030                 if(sockmsgsize(sockerrno)) {
1031                         // Compensate for SPTPS overhead
1032                         len -= SPTPS_DATAGRAM_OVERHEAD;
1033
1034                         if(relay->maxmtu >= len) {
1035                                 relay->maxmtu = len - 1;
1036                         }
1037
1038                         if(relay->mtu >= len) {
1039                                 relay->mtu = len - 1;
1040                         }
1041
1042                         try_fix_mtu(relay);
1043                 } else {
1044                         logger(DEBUG_TRAFFIC, LOG_WARNING, "Error sending UDP SPTPS packet to %s (%s): %s", relay->name, relay->hostname, sockstrerror(sockerrno));
1045                         return false;
1046                 }
1047         }
1048
1049         return true;
1050 }
1051
1052 bool receive_sptps_record(void *handle, uint8_t type, const void *data, uint16_t len) {
1053         node_t *from = handle;
1054
1055         if(type == SPTPS_HANDSHAKE) {
1056                 if(!from->status.validkey) {
1057                         from->status.validkey = true;
1058                         from->status.waitingforkey = false;
1059                         logger(DEBUG_META, LOG_INFO, "SPTPS key exchange with %s (%s) successful", from->name, from->hostname);
1060                 }
1061
1062                 return true;
1063         }
1064
1065         if(len > MTU) {
1066                 logger(DEBUG_ALWAYS, LOG_ERR, "Packet from %s (%s) larger than maximum supported size (%d > %d)", from->name, from->hostname, len, MTU);
1067                 return false;
1068         }
1069
1070         vpn_packet_t inpkt;
1071         inpkt.offset = DEFAULT_PACKET_OFFSET;
1072         inpkt.priority = 0;
1073
1074         if(type == PKT_PROBE) {
1075                 if(!from->status.udppacket) {
1076                         logger(DEBUG_ALWAYS, LOG_ERR, "Got SPTPS PROBE packet from %s (%s) via TCP", from->name, from->hostname);
1077                         return false;
1078                 }
1079
1080                 inpkt.len = len;
1081                 memcpy(DATA(&inpkt), data, len);
1082
1083                 if(inpkt.len > from->maxrecentlen) {
1084                         from->maxrecentlen = inpkt.len;
1085                 }
1086
1087                 udp_probe_h(from, &inpkt, len);
1088                 return true;
1089         }
1090
1091         if(type & ~(PKT_COMPRESSED | PKT_MAC)) {
1092                 logger(DEBUG_ALWAYS, LOG_ERR, "Unexpected SPTPS record type %d len %d from %s (%s)", type, len, from->name, from->hostname);
1093                 return false;
1094         }
1095
1096         /* Check if we have the headers we need */
1097         if(routing_mode != RMODE_ROUTER && !(type & PKT_MAC)) {
1098                 logger(DEBUG_TRAFFIC, LOG_ERR, "Received packet from %s (%s) without MAC header (maybe Mode is not set correctly)", from->name, from->hostname);
1099                 return false;
1100         } else if(routing_mode == RMODE_ROUTER && (type & PKT_MAC)) {
1101                 logger(DEBUG_TRAFFIC, LOG_WARNING, "Received packet from %s (%s) with MAC header (maybe Mode is not set correctly)", from->name, from->hostname);
1102         }
1103
1104         int offset = (type & PKT_MAC) ? 0 : 14;
1105
1106         if(type & PKT_COMPRESSED) {
1107                 length_t ulen = uncompress_packet(DATA(&inpkt) + offset, (const uint8_t *)data, len, from->incompression);
1108
1109                 if(!ulen) {
1110                         return false;
1111                 } else {
1112                         inpkt.len = ulen + offset;
1113                 }
1114
1115                 if(inpkt.len > MAXSIZE) {
1116                         abort();
1117                 }
1118         } else {
1119                 memcpy(DATA(&inpkt) + offset, data, len);
1120                 inpkt.len = len + offset;
1121         }
1122
1123         /* Generate the Ethernet packet type if necessary */
1124         if(offset) {
1125                 switch(DATA(&inpkt)[14] >> 4) {
1126                 case 4:
1127                         DATA(&inpkt)[12] = 0x08;
1128                         DATA(&inpkt)[13] = 0x00;
1129                         break;
1130
1131                 case 6:
1132                         DATA(&inpkt)[12] = 0x86;
1133                         DATA(&inpkt)[13] = 0xDD;
1134                         break;
1135
1136                 default:
1137                         logger(DEBUG_TRAFFIC, LOG_ERR,
1138                                "Unknown IP version %d while reading packet from %s (%s)",
1139                                DATA(&inpkt)[14] >> 4, from->name, from->hostname);
1140                         return false;
1141                 }
1142         }
1143
1144         if(from->status.udppacket && inpkt.len > from->maxrecentlen) {
1145                 from->maxrecentlen = inpkt.len;
1146         }
1147
1148         receive_packet(from, &inpkt);
1149         return true;
1150 }
1151
1152 // This function tries to get SPTPS keys, if they aren't already known.
1153 // 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.
1154 static void try_sptps(node_t *n) {
1155         if(n->status.validkey) {
1156                 return;
1157         }
1158
1159         logger(DEBUG_TRAFFIC, LOG_INFO, "No valid key known yet for %s (%s)", n->name, n->hostname);
1160
1161         if(!n->status.waitingforkey) {
1162                 send_req_key(n);
1163         } else if(n->last_req_key + 10 < now.tv_sec) {
1164                 logger(DEBUG_ALWAYS, LOG_DEBUG, "No key from %s after 10 seconds, restarting SPTPS", n->name);
1165                 sptps_stop(&n->sptps);
1166                 n->status.waitingforkey = false;
1167                 send_req_key(n);
1168         }
1169
1170         return;
1171 }
1172
1173 static void send_udp_probe_packet(node_t *n, int len) {
1174         vpn_packet_t packet;
1175
1176         if(len > sizeof(packet.data)) {
1177                 logger(DEBUG_TRAFFIC, LOG_INFO, "Truncating probe length %d to %s (%s)", len, n->name, n->hostname);
1178                 len = sizeof(packet.data);
1179         }
1180
1181         packet.offset = DEFAULT_PACKET_OFFSET;
1182         memset(DATA(&packet), 0, 14);
1183         randomize(DATA(&packet) + 14, len - 14);
1184         packet.len = len;
1185         packet.priority = 0;
1186
1187         logger(DEBUG_TRAFFIC, LOG_INFO, "Sending UDP probe length %d to %s (%s)", len, n->name, n->hostname);
1188
1189         send_udppacket(n, &packet);
1190 }
1191
1192 // This function tries to establish a UDP tunnel to a node so that packets can be sent.
1193 // If a tunnel is already established, it makes sure it stays up.
1194 // This function makes no guarantees - it is up to the caller to check the node's state to figure out if UDP is usable.
1195 static void try_udp(node_t *n) {
1196         if(!udp_discovery) {
1197                 return;
1198         }
1199
1200         /* Send gratuitous probe replies to 1.1 nodes. */
1201
1202         if((n->options >> 24) >= 3 && n->status.udp_confirmed) {
1203                 struct timeval ping_tx_elapsed;
1204                 timersub(&now, &n->udp_reply_sent, &ping_tx_elapsed);
1205
1206                 if(ping_tx_elapsed.tv_sec >= udp_discovery_keepalive_interval - 1) {
1207                         n->udp_reply_sent = now;
1208
1209                         if(n->maxrecentlen) {
1210                                 vpn_packet_t pkt;
1211                                 pkt.len = n->maxrecentlen;
1212                                 pkt.offset = DEFAULT_PACKET_OFFSET;
1213                                 memset(DATA(&pkt), 0, 14);
1214                                 randomize(DATA(&pkt) + 14, MIN_PROBE_SIZE - 14);
1215                                 send_udp_probe_reply(n, &pkt, pkt.len);
1216                                 n->maxrecentlen = 0;
1217                         }
1218                 }
1219         }
1220
1221         /* Probe request */
1222
1223         struct timeval ping_tx_elapsed;
1224         timersub(&now, &n->udp_ping_sent, &ping_tx_elapsed);
1225
1226         int interval = n->status.udp_confirmed ? udp_discovery_keepalive_interval : udp_discovery_interval;
1227
1228         if(ping_tx_elapsed.tv_sec >= interval) {
1229                 gettimeofday(&now, NULL);
1230                 n->udp_ping_sent = now; // a probe in flight
1231                 n->status.ping_sent = true;
1232                 send_udp_probe_packet(n, MIN_PROBE_SIZE);
1233
1234                 if(localdiscovery && !n->status.udp_confirmed && n->prevedge) {
1235                         n->status.send_locally = true;
1236                         send_udp_probe_packet(n, MIN_PROBE_SIZE);
1237                         n->status.send_locally = false;
1238                 }
1239         }
1240 }
1241
1242 static length_t choose_initial_maxmtu(node_t *n) {
1243 #ifdef IP_MTU
1244
1245         int sock = -1;
1246
1247         const sockaddr_t *sa = NULL;
1248         int sockindex;
1249         choose_udp_address(n, &sa, &sockindex);
1250
1251         if(!sa) {
1252                 return MTU;
1253         }
1254
1255         sock = socket(sa->sa.sa_family, SOCK_DGRAM, IPPROTO_UDP);
1256
1257         if(sock < 0) {
1258                 logger(DEBUG_TRAFFIC, LOG_ERR, "Creating MTU assessment socket for %s (%s) failed: %s", n->name, n->hostname, sockstrerror(sockerrno));
1259                 return MTU;
1260         }
1261
1262         if(connect(sock, &sa->sa, SALEN(sa->sa))) {
1263                 logger(DEBUG_TRAFFIC, LOG_ERR, "Connecting MTU assessment socket for %s (%s) failed: %s", n->name, n->hostname, sockstrerror(sockerrno));
1264                 close(sock);
1265                 return MTU;
1266         }
1267
1268         int ip_mtu;
1269         socklen_t ip_mtu_len = sizeof(ip_mtu);
1270
1271         if(getsockopt(sock, IPPROTO_IP, IP_MTU, &ip_mtu, &ip_mtu_len)) {
1272                 logger(DEBUG_TRAFFIC, LOG_ERR, "getsockopt(IP_MTU) on %s (%s) failed: %s", n->name, n->hostname, sockstrerror(sockerrno));
1273                 close(sock);
1274                 return MTU;
1275         }
1276
1277         close(sock);
1278
1279         /* getsockopt(IP_MTU) returns the MTU of the physical interface.
1280            We need to remove various overheads to get to the tinc MTU. */
1281         length_t mtu = ip_mtu;
1282         mtu -= (sa->sa.sa_family == AF_INET6) ? sizeof(struct ip6_hdr) : sizeof(struct ip);
1283         mtu -= 8; /* UDP */
1284
1285         if(n->status.sptps) {
1286                 mtu -= SPTPS_DATAGRAM_OVERHEAD;
1287
1288                 if((n->options >> 24) >= 4) {
1289                         mtu -= sizeof(node_id_t) + sizeof(node_id_t);
1290                 }
1291
1292 #ifndef DISABLE_LEGACY
1293         } else {
1294                 mtu -= digest_length(n->outdigest);
1295
1296                 /* Now it's tricky. We use CBC mode, so the length of the
1297                    encrypted payload must be a multiple of the blocksize. The
1298                    sequence number is also part of the encrypted payload, so we
1299                    must account for it after correcting for the blocksize.
1300                    Furthermore, the padding in the last block must be at least
1301                    1 byte. */
1302
1303                 length_t blocksize = cipher_blocksize(n->outcipher);
1304
1305                 if(blocksize > 1) {
1306                         mtu /= blocksize;
1307                         mtu *= blocksize;
1308                         mtu--;
1309                 }
1310
1311                 mtu -= 4; // seqno
1312 #endif
1313         }
1314
1315         if(mtu < 512) {
1316                 logger(DEBUG_TRAFFIC, LOG_ERR, "getsockopt(IP_MTU) on %s (%s) returned absurdly small value: %d", n->name, n->hostname, ip_mtu);
1317                 return MTU;
1318         }
1319
1320         if(mtu > MTU) {
1321                 return MTU;
1322         }
1323
1324         logger(DEBUG_TRAFFIC, LOG_INFO, "Using system-provided maximum tinc MTU for %s (%s): %hd", n->name, n->hostname, mtu);
1325         return mtu;
1326
1327 #else
1328         (void)n;
1329         return MTU;
1330 #endif
1331 }
1332
1333 /* This function tries to determines the MTU of a node.
1334    By calling this function repeatedly, n->minmtu will be progressively
1335    increased, and at some point, n->mtu will be fixed to n->minmtu.  If the MTU
1336    is already fixed, this function checks if it can be increased.
1337 */
1338
1339 static void try_mtu(node_t *n) {
1340         if(!(n->options & OPTION_PMTU_DISCOVERY)) {
1341                 return;
1342         }
1343
1344         if(udp_discovery && !n->status.udp_confirmed) {
1345                 n->maxrecentlen = 0;
1346                 n->mtuprobes = 0;
1347                 n->minmtu = 0;
1348                 n->maxmtu = MTU;
1349                 return;
1350         }
1351
1352         /* mtuprobes == 0..19: initial discovery, send bursts with 1 second interval, mtuprobes++
1353            mtuprobes ==    20: fix MTU, and go to -1
1354            mtuprobes ==    -1: send one maxmtu and one maxmtu+1 probe every pinginterval
1355            mtuprobes ==-2..-3: send one maxmtu probe every second
1356            mtuprobes ==    -4: maxmtu no longer valid, reset minmtu and maxmtu and go to 0 */
1357
1358         struct timeval elapsed;
1359         timersub(&now, &n->mtu_ping_sent, &elapsed);
1360
1361         if(n->mtuprobes >= 0) {
1362                 if(n->mtuprobes != 0 && elapsed.tv_sec == 0 && elapsed.tv_usec < 333333) {
1363                         return;
1364                 }
1365         } else {
1366                 if(n->mtuprobes < -1) {
1367                         if(elapsed.tv_sec < 1) {
1368                                 return;
1369                         }
1370                 } else {
1371                         if(elapsed.tv_sec < pinginterval) {
1372                                 return;
1373                         }
1374                 }
1375         }
1376
1377         n->mtu_ping_sent = now;
1378
1379         try_fix_mtu(n);
1380
1381         if(n->mtuprobes < -3) {
1382                 /* We lost three MTU probes, restart discovery */
1383                 logger(DEBUG_TRAFFIC, LOG_INFO, "Decrease in PMTU to %s (%s) detected, restarting PMTU discovery", n->name, n->hostname);
1384                 n->mtuprobes = 0;
1385                 n->minmtu = 0;
1386         }
1387
1388         if(n->mtuprobes < 0) {
1389                 /* After the initial discovery, we only send one maxmtu and one
1390                    maxmtu+1 probe to detect PMTU increases. */
1391                 send_udp_probe_packet(n, n->maxmtu);
1392
1393                 if(n->mtuprobes == -1 && n->maxmtu + 1 < MTU) {
1394                         send_udp_probe_packet(n, n->maxmtu + 1);
1395                 }
1396
1397                 n->mtuprobes--;
1398         } else {
1399                 /* Before initial discovery begins, set maxmtu to the most likely value.
1400                    If it's underestimated, we will correct it after initial discovery. */
1401                 if(n->mtuprobes == 0) {
1402                         n->maxmtu = choose_initial_maxmtu(n);
1403                 }
1404
1405                 for(;;) {
1406                         /* Decreasing the number of probes per cycle might make the algorithm react faster to lost packets,
1407                            but it will typically increase convergence time in the no-loss case. */
1408                         const length_t probes_per_cycle = 8;
1409
1410                         /* This magic value was determined using math simulations.
1411                            It will result in a 1329-byte first probe, followed (if there was a reply) by a 1407-byte probe.
1412                            Since 1407 is just below the range of tinc MTUs over typical networks,
1413                            this fine-tuning allows tinc to cover a lot of ground very quickly.
1414                            This fine-tuning is only valid for maxmtu = MTU; if maxmtu is smaller,
1415                            then it's better to use a multiplier of 1. Indeed, this leads to an interesting scenario
1416                            if choose_initial_maxmtu() returns the actual MTU value - it will get confirmed with one single probe. */
1417                         const float multiplier = (n->maxmtu == MTU) ? 0.97 : 1;
1418
1419                         const float cycle_position = probes_per_cycle - (n->mtuprobes % probes_per_cycle) - 1;
1420                         const length_t minmtu = MAX(n->minmtu, 512);
1421                         const float interval = n->maxmtu - minmtu;
1422
1423                         length_t offset = 0;
1424
1425                         /* powf can be underflowed if n->maxmtu is less than 512 due to the minmtu MAX bound */
1426                         if(interval > 0) {
1427                                 /* The core of the discovery algorithm is this exponential.
1428                                         It produces very large probes early in the cycle, and then it very quickly decreases the probe size.
1429                                         This reflects the fact that in the most difficult cases, we don't get any feedback for probes that
1430                                         are too large, and therefore we need to concentrate on small offsets so that we can quickly converge
1431                                         on the precise MTU as we are approaching it.
1432                                         The last probe of the cycle is always 1 byte in size - this is to make sure we'll get at least one
1433                                         reply per cycle so that we can make progress. */
1434                                 offset = powf(interval, multiplier * cycle_position / (probes_per_cycle - 1));
1435                         }
1436
1437                         length_t maxmtu = n->maxmtu;
1438                         send_udp_probe_packet(n, minmtu + offset);
1439
1440                         /* If maxmtu changed, it means the probe was rejected by the system because it was too large.
1441                            In that case, we recalculate with the new maxmtu and try again. */
1442                         if(n->mtuprobes < 0 || maxmtu == n->maxmtu) {
1443                                 break;
1444                         }
1445                 }
1446
1447                 if(n->mtuprobes >= 0) {
1448                         n->mtuprobes++;
1449                 }
1450         }
1451 }
1452
1453 /* These functions try to establish a tunnel to a node (or its relay) so that
1454    packets can be sent (e.g. exchange keys).
1455    If a tunnel is already established, it tries to improve it (e.g. by trying
1456    to establish a UDP tunnel instead of TCP).  This function makes no
1457    guarantees - it is up to the caller to check the node's state to figure out
1458    if TCP and/or UDP is usable.  By calling this function repeatedly, the
1459    tunnel is gradually improved until we hit the wall imposed by the underlying
1460    network environment.  It is recommended to call this function every time a
1461    packet is sent (or intended to be sent) to a node, so that the tunnel keeps
1462    improving as packets flow, and then gracefully downgrades itself as it goes
1463    idle.
1464 */
1465
1466 static void try_tx_sptps(node_t *n, bool mtu) {
1467         /* If n is a TCP-only neighbor, we'll only use "cleartext" PACKET
1468            messages anyway, so there's no need for SPTPS at all. */
1469
1470         if(n->connection && ((myself->options | n->options) & OPTION_TCPONLY)) {
1471                 return;
1472         }
1473
1474         /* Otherwise, try to do SPTPS authentication with n if necessary. */
1475
1476         try_sptps(n);
1477
1478         /* Do we need to statically relay packets? */
1479
1480         node_t *via = (n->via == myself) ? n->nexthop : n->via;
1481
1482         /* If we do have a static relay, try everything with that one instead, if it supports relaying. */
1483
1484         if(via != n) {
1485                 if((via->options >> 24) < 4) {
1486                         return;
1487                 }
1488
1489                 try_tx(via, mtu);
1490                 return;
1491         }
1492
1493         /* Otherwise, try to establish UDP connectivity. */
1494
1495         try_udp(n);
1496
1497         if(mtu) {
1498                 try_mtu(n);
1499         }
1500
1501         /* If we don't have UDP connectivity (yet), we need to use a dynamic relay (nexthop)
1502            while we try to establish direct connectivity. */
1503
1504         if(!n->status.udp_confirmed && n != n->nexthop && (n->nexthop->options >> 24) >= 4) {
1505                 try_tx(n->nexthop, mtu);
1506         }
1507 }
1508
1509 static void try_tx_legacy(node_t *n, bool mtu) {
1510         /* Does he have our key? If not, send one. */
1511
1512         if(!n->status.validkey_in) {
1513                 send_ans_key(n);
1514         }
1515
1516         /* Check if we already have a key, or request one. */
1517
1518         if(!n->status.validkey) {
1519                 if(n->last_req_key + 10 <= now.tv_sec) {
1520                         send_req_key(n);
1521                         n->last_req_key = now.tv_sec;
1522                 }
1523
1524                 return;
1525         }
1526
1527         try_udp(n);
1528
1529         if(mtu) {
1530                 try_mtu(n);
1531         }
1532 }
1533
1534 void try_tx(node_t *n, bool mtu) {
1535         if(!n->status.reachable) {
1536                 return;
1537         }
1538
1539         if(n->status.sptps) {
1540                 try_tx_sptps(n, mtu);
1541         } else {
1542                 try_tx_legacy(n, mtu);
1543         }
1544 }
1545
1546 void send_packet(node_t *n, vpn_packet_t *packet) {
1547         // If it's for myself, write it to the tun/tap device.
1548
1549         if(n == myself) {
1550                 if(overwrite_mac) {
1551                         memcpy(DATA(packet), mymac.x, ETH_ALEN);
1552                         // Use an arbitrary fake source address.
1553                         memcpy(DATA(packet) + ETH_ALEN, DATA(packet), ETH_ALEN);
1554                         DATA(packet)[ETH_ALEN * 2 - 1] ^= 0xFF;
1555                 }
1556
1557                 n->out_packets++;
1558                 n->out_bytes += packet->len;
1559                 devops.write(packet);
1560                 return;
1561         }
1562
1563         logger(DEBUG_TRAFFIC, LOG_ERR, "Sending packet of %d bytes to %s (%s)", packet->len, n->name, n->hostname);
1564
1565         // If the node is not reachable, drop it.
1566
1567         if(!n->status.reachable) {
1568                 logger(DEBUG_TRAFFIC, LOG_INFO, "Node %s (%s) is not reachable", n->name, n->hostname);
1569                 return;
1570         }
1571
1572         // Keep track of packet statistics.
1573
1574         n->out_packets++;
1575         n->out_bytes += packet->len;
1576
1577         // Check if it should be sent as an SPTPS packet.
1578
1579         if(n->status.sptps) {
1580                 send_sptps_packet(n, packet);
1581                 try_tx(n, true);
1582                 return;
1583         }
1584
1585         // Determine which node to actually send it to.
1586
1587         node_t *via = (packet->priority == -1 || n->via == myself) ? n->nexthop : n->via;
1588
1589         if(via != n) {
1590                 logger(DEBUG_TRAFFIC, LOG_INFO, "Sending packet to %s via %s (%s)", n->name, via->name, n->via->hostname);
1591         }
1592
1593         // Try to send via UDP, unless TCP is forced.
1594
1595         if(packet->priority == -1 || ((myself->options | via->options) & OPTION_TCPONLY)) {
1596                 if(!send_tcppacket(via->connection, packet)) {
1597                         terminate_connection(via->connection, true);
1598                 }
1599
1600                 return;
1601         }
1602
1603         send_udppacket(via, packet);
1604         try_tx(via, true);
1605 }
1606
1607 void broadcast_packet(const node_t *from, vpn_packet_t *packet) {
1608         // Always give ourself a copy of the packet.
1609         if(from != myself) {
1610                 send_packet(myself, packet);
1611         }
1612
1613         // In TunnelServer mode, do not forward broadcast packets.
1614         // The MST might not be valid and create loops.
1615         if(tunnelserver || broadcast_mode == BMODE_NONE) {
1616                 return;
1617         }
1618
1619         logger(DEBUG_TRAFFIC, LOG_INFO, "Broadcasting packet of %d bytes from %s (%s)",
1620                packet->len, from->name, from->hostname);
1621
1622         switch(broadcast_mode) {
1623         // In MST mode, broadcast packets travel via the Minimum Spanning Tree.
1624         // This guarantees all nodes receive the broadcast packet, and
1625         // usually distributes the sending of broadcast packets over all nodes.
1626         case BMODE_MST:
1627                 for list_each(connection_t, c, connection_list)
1628                         if(c->edge && c->status.mst && c != from->nexthop->connection) {
1629                                 send_packet(c->node, packet);
1630                         }
1631
1632                 break;
1633
1634         // In direct mode, we send copies to each node we know of.
1635         // However, this only reaches nodes that can be reached in a single hop.
1636         // We don't have enough information to forward broadcast packets in this case.
1637         case BMODE_DIRECT:
1638                 if(from != myself) {
1639                         break;
1640                 }
1641
1642                 for splay_each(node_t, n, node_tree)
1643                         if(n->status.reachable && n != myself && ((n->via == myself && n->nexthop == n) || n->via == n)) {
1644                                 send_packet(n, packet);
1645                         }
1646
1647                 break;
1648
1649         default:
1650                 break;
1651         }
1652 }
1653
1654 /* We got a packet from some IP address, but we don't know who sent it.  Try to
1655    verify the message authentication code against all active session keys.
1656    Since this is actually an expensive operation, we only do a full check once
1657    a minute, the rest of the time we only check against nodes for which we know
1658    an IP address that matches the one from the packet.  */
1659
1660 static node_t *try_harder(const sockaddr_t *from, const vpn_packet_t *pkt) {
1661         node_t *match = NULL;
1662         bool hard = false;
1663         static time_t last_hard_try = 0;
1664
1665         for splay_each(node_t, n, node_tree) {
1666                 if(!n->status.reachable || n == myself) {
1667                         continue;
1668                 }
1669
1670                 if(!n->status.validkey_in && !(n->status.sptps && n->sptps.instate)) {
1671                         continue;
1672                 }
1673
1674                 bool soft = false;
1675
1676                 for splay_each(edge_t, e, n->edge_tree) {
1677                         if(!e->reverse) {
1678                                 continue;
1679                         }
1680
1681                         if(!sockaddrcmp_noport(from, &e->reverse->address)) {
1682                                 soft = true;
1683                                 break;
1684                         }
1685                 }
1686
1687                 if(!soft) {
1688                         if(last_hard_try == now.tv_sec) {
1689                                 continue;
1690                         }
1691
1692                         hard = true;
1693                 }
1694
1695                 if(!try_mac(n, pkt)) {
1696                         continue;
1697                 }
1698
1699                 match = n;
1700                 break;
1701         }
1702
1703         if(hard) {
1704                 last_hard_try = now.tv_sec;
1705         }
1706
1707         return match;
1708 }
1709
1710 static void handle_incoming_vpn_packet(listen_socket_t *ls, vpn_packet_t *pkt, sockaddr_t *addr) {
1711         char *hostname;
1712         node_id_t nullid = {0};
1713         node_t *from, *to;
1714         bool direct = false;
1715
1716         sockaddrunmap(addr); /* Some braindead IPv6 implementations do stupid things. */
1717
1718         // Try to figure out who sent this packet.
1719
1720         node_t *n = lookup_node_udp(addr);
1721
1722         if(n && !n->status.udp_confirmed) {
1723                 n = NULL;        // Don't believe it if we don't have confirmation yet.
1724         }
1725
1726         if(!n) {
1727                 // It might be from a 1.1 node, which might have a source ID in the packet.
1728                 pkt->offset = 2 * sizeof(node_id_t);
1729                 from = lookup_node_id(SRCID(pkt));
1730
1731                 if(from && from->status.sptps && !memcmp(DSTID(pkt), &nullid, sizeof(nullid))) {
1732                         if(sptps_verify_datagram(&from->sptps, DATA(pkt), pkt->len - 2 * sizeof(node_id_t))) {
1733                                 n = from;
1734                         } else {
1735                                 goto skip_harder;
1736                         }
1737                 }
1738         }
1739
1740         if(!n) {
1741                 pkt->offset = 0;
1742                 n = try_harder(addr, pkt);
1743         }
1744
1745 skip_harder:
1746
1747         if(!n) {
1748                 if(debug_level >= DEBUG_PROTOCOL) {
1749                         hostname = sockaddr2hostname(addr);
1750                         logger(DEBUG_PROTOCOL, LOG_WARNING, "Received UDP packet from unknown source %s", hostname);
1751                         free(hostname);
1752                 }
1753
1754                 return;
1755         }
1756
1757         pkt->offset = 0;
1758
1759         if(n->status.sptps) {
1760                 bool relay_enabled = (n->options >> 24) >= 4;
1761
1762                 if(relay_enabled) {
1763                         pkt->offset = 2 * sizeof(node_id_t);
1764                         pkt->len -= pkt->offset;
1765                 }
1766
1767                 if(!relay_enabled || !memcmp(DSTID(pkt), &nullid, sizeof(nullid))) {
1768                         direct = true;
1769                         from = n;
1770                         to = myself;
1771                 } else {
1772                         from = lookup_node_id(SRCID(pkt));
1773                         to = lookup_node_id(DSTID(pkt));
1774                 }
1775
1776                 if(!from || !to) {
1777                         logger(DEBUG_PROTOCOL, LOG_WARNING, "Received UDP packet from %s (%s) with unknown source and/or destination ID", n->name, n->hostname);
1778                         return;
1779                 }
1780
1781                 if(!to->status.reachable) {
1782                         /* This can happen in the form of a race condition
1783                            if the node just became unreachable. */
1784                         logger(DEBUG_TRAFFIC, LOG_WARNING, "Cannot relay packet from %s (%s) because the destination, %s (%s), is unreachable", from->name, from->hostname, to->name, to->hostname);
1785                         return;
1786                 }
1787
1788                 /* The packet is supposed to come from the originator or its static relay
1789                    (i.e. with no dynamic relays in between).
1790                    If it did not, "help" the static relay by sending it UDP info.
1791                    Note that we only do this if we're the destination or the static relay;
1792                    otherwise every hop would initiate its own UDP info message, resulting in elevated chatter. */
1793
1794                 if(n != from->via && to->via == myself) {
1795                         send_udp_info(myself, from);
1796                 }
1797
1798                 /* If we're not the final recipient, relay the packet. */
1799
1800                 if(to != myself) {
1801                         send_sptps_data(to, from, 0, DATA(pkt), pkt->len);
1802                         try_tx(to, true);
1803                         return;
1804                 }
1805         } else {
1806                 direct = true;
1807                 from = n;
1808         }
1809
1810         if(!receive_udppacket(from, pkt)) {
1811                 return;
1812         }
1813
1814         n->sock = ls - listen_socket;
1815
1816         if(direct && sockaddrcmp(addr, &n->address)) {
1817                 update_node_udp(n, addr);
1818         }
1819
1820         /* If the packet went through a relay, help the sender find the appropriate MTU
1821            through the relay path. */
1822
1823         if(!direct) {
1824                 send_mtu_info(myself, n, MTU);
1825         }
1826 }
1827
1828 void handle_incoming_vpn_data(void *data, int flags) {
1829         (void)data;
1830         (void)flags;
1831         listen_socket_t *ls = data;
1832
1833 #ifdef HAVE_RECVMMSG
1834 #define MAX_MSG 64
1835         static int num = MAX_MSG;
1836         static vpn_packet_t pkt[MAX_MSG];
1837         static sockaddr_t addr[MAX_MSG];
1838         static struct mmsghdr msg[MAX_MSG];
1839         static struct iovec iov[MAX_MSG];
1840
1841         for(int i = 0; i < num; i++) {
1842                 pkt[i].offset = 0;
1843
1844                 iov[i] = (struct iovec) {
1845                         .iov_base = DATA(&pkt[i]),
1846                         .iov_len = MAXSIZE,
1847                 };
1848
1849                 msg[i].msg_hdr = (struct msghdr) {
1850                         .msg_name = &addr[i].sa,
1851                         .msg_namelen = sizeof(addr)[i],
1852                         .msg_iov = &iov[i],
1853                         .msg_iovlen = 1,
1854                 };
1855         }
1856
1857         num = recvmmsg(ls->udp.fd, msg, MAX_MSG, MSG_DONTWAIT, NULL);
1858
1859         if(num < 0) {
1860                 if(!sockwouldblock(sockerrno)) {
1861                         logger(DEBUG_ALWAYS, LOG_ERR, "Receiving packet failed: %s", sockstrerror(sockerrno));
1862                 }
1863
1864                 return;
1865         }
1866
1867         for(int i = 0; i < num; i++) {
1868                 pkt[i].len = msg[i].msg_len;
1869
1870                 if(pkt[i].len <= 0 || pkt[i].len > MAXSIZE) {
1871                         continue;
1872                 }
1873
1874                 handle_incoming_vpn_packet(ls, &pkt[i], &addr[i]);
1875         }
1876
1877 #else
1878         vpn_packet_t pkt;
1879         sockaddr_t addr = {0};
1880         socklen_t addrlen = sizeof(addr);
1881
1882         pkt.offset = 0;
1883         int len = recvfrom(ls->udp.fd, (void *)DATA(&pkt), MAXSIZE, 0, &addr.sa, &addrlen);
1884
1885         if(len <= 0 || (size_t)len > MAXSIZE) {
1886                 if(!sockwouldblock(sockerrno)) {
1887                         logger(DEBUG_ALWAYS, LOG_ERR, "Receiving packet failed: %s", sockstrerror(sockerrno));
1888                 }
1889
1890                 return;
1891         }
1892
1893         pkt.len = len;
1894
1895         handle_incoming_vpn_packet(ls, &pkt, &addr);
1896 #endif
1897 }
1898
1899 void handle_device_data(void *data, int flags) {
1900         (void)data;
1901         (void)flags;
1902         vpn_packet_t packet;
1903         packet.offset = DEFAULT_PACKET_OFFSET;
1904         packet.priority = 0;
1905         static int errors = 0;
1906
1907         if(devops.read(&packet)) {
1908                 errors = 0;
1909                 myself->in_packets++;
1910                 myself->in_bytes += packet.len;
1911                 route(myself, &packet);
1912         } else {
1913                 usleep(errors * 50000);
1914                 errors++;
1915
1916                 if(errors > 10) {
1917                         logger(DEBUG_ALWAYS, LOG_ERR, "Too many errors from %s, exiting!", device);
1918                         event_exit();
1919                 }
1920         }
1921 }