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