Don't set up an ongoing connection to myself.
[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         /* Help the sender reach us over UDP.
458            Note that we only do this if we're the destination or the static relay;
459            otherwise every hop would initiate its own UDP info message, resulting in elevated chatter. */
460         if(to->via == myself)
461                 send_udp_info(myself, from);
462
463         /* If we're not the final recipient, relay the packet. */
464
465         if(to != myself) {
466                 send_sptps_data(to, from, 0, data, len);
467                 try_tx(to, true);
468                 return true;
469         }
470
471         /* The packet is for us */
472
473         if(!sptps_receive_data(&from->sptps, data, len)) {
474                 /* Uh-oh. It might be that the tunnel is stuck in some corrupted state,
475                    so let's restart SPTPS in case that helps. But don't do that too often
476                    to prevent storms. */
477                 if(from->last_req_key < now.tv_sec - 10) {
478                         logger(DEBUG_PROTOCOL, LOG_ERR, "Failed to decode raw TCP packet from %s (%s), restarting SPTPS", from->name, from->hostname);
479                         send_req_key(from);
480                 }
481                 return true;
482         }
483
484         send_mtu_info(myself, from, MTU);
485         return true;
486 }
487
488 static void send_sptps_packet(node_t *n, vpn_packet_t *origpkt) {
489         if(!n->status.validkey && !n->connection)
490                 return;
491
492         uint8_t type = 0;
493         int offset = 0;
494
495         if(!(DATA(origpkt)[12] | DATA(origpkt)[13])) {
496                 sptps_send_record(&n->sptps, PKT_PROBE, (char *)DATA(origpkt), origpkt->len);
497                 return;
498         }
499
500         if(routing_mode == RMODE_ROUTER)
501                 offset = 14;
502         else
503                 type = PKT_MAC;
504
505         if(origpkt->len < offset)
506                 return;
507
508         vpn_packet_t outpkt;
509
510         if(n->outcompression) {
511                 outpkt.offset = 0;
512                 int len = compress_packet(DATA(&outpkt) + offset, DATA(origpkt) + offset, origpkt->len - offset, n->outcompression);
513                 if(len < 0) {
514                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while compressing packet to %s (%s)", n->name, n->hostname);
515                 } else if(len < origpkt->len - offset) {
516                         outpkt.len = len + offset;
517                         origpkt = &outpkt;
518                         type |= PKT_COMPRESSED;
519                 }
520         }
521
522         /* If we have a direct metaconnection to n, and we can't use UDP, then
523            don't bother with SPTPS and just use a "plaintext" PACKET message.
524            We don't really care about end-to-end security since we're not
525            sending the message through any intermediate nodes. */
526         if(n->connection && origpkt->len > n->minmtu)
527                 send_tcppacket(n->connection, origpkt);
528         else
529                 sptps_send_record(&n->sptps, type, DATA(origpkt) + offset, origpkt->len - offset);
530         return;
531 }
532
533 static void adapt_socket(const sockaddr_t *sa, int *sock) {
534         /* Make sure we have a suitable socket for the chosen address */
535         if(listen_socket[*sock].sa.sa.sa_family != sa->sa.sa_family) {
536                 for(int i = 0; i < listen_sockets; i++) {
537                         if(listen_socket[i].sa.sa.sa_family == sa->sa.sa_family) {
538                                 *sock = i;
539                                 break;
540                         }
541                 }
542         }
543 }
544
545 static void choose_udp_address(const node_t *n, const sockaddr_t **sa, int *sock) {
546         /* Latest guess */
547         *sa = &n->address;
548         *sock = n->sock;
549
550         /* If the UDP address is confirmed, use it. */
551         if(n->status.udp_confirmed)
552                 return;
553
554         /* Send every third packet to n->address; that could be set
555            to the node's reflexive UDP address discovered during key
556            exchange. */
557
558         static int x = 0;
559         if(++x >= 3) {
560                 x = 0;
561                 return;
562         }
563
564         /* Otherwise, address are found in edges to this node.
565            So we pick a random edge and a random socket. */
566
567         int i = 0;
568         int j = rand() % n->edge_tree->count;
569         edge_t *candidate = NULL;
570
571         for splay_each(edge_t, e, n->edge_tree) {
572                 if(i++ == j) {
573                         candidate = e->reverse;
574                         break;
575                 }
576         }
577
578         if(candidate) {
579                 *sa = &candidate->address;
580                 *sock = rand() % listen_sockets;
581         }
582
583         adapt_socket(*sa, sock);
584 }
585
586 static void choose_local_address(const node_t *n, const sockaddr_t **sa, int *sock) {
587         *sa = NULL;
588
589         /* Pick one of the edges from this node at random, then use its local address. */
590
591         int i = 0;
592         int j = rand() % n->edge_tree->count;
593         edge_t *candidate = NULL;
594
595         for splay_each(edge_t, e, n->edge_tree) {
596                 if(i++ == j) {
597                         candidate = e;
598                         break;
599                 }
600         }
601
602         if (candidate && candidate->local_address.sa.sa_family) {
603                 *sa = &candidate->local_address;
604                 *sock = rand() % listen_sockets;
605                 adapt_socket(*sa, sock);
606         }
607 }
608
609 static void send_udppacket(node_t *n, vpn_packet_t *origpkt) {
610         vpn_packet_t pkt1, pkt2;
611         vpn_packet_t *pkt[] = { &pkt1, &pkt2, &pkt1, &pkt2 };
612         vpn_packet_t *inpkt = origpkt;
613         int nextpkt = 0;
614         vpn_packet_t *outpkt;
615         int origlen = origpkt->len;
616         size_t outlen;
617 #if defined(SOL_IP) && defined(IP_TOS)
618         static int priority = 0;
619         int origpriority = origpkt->priority;
620 #endif
621
622         pkt1.offset = DEFAULT_PACKET_OFFSET;
623         pkt2.offset = DEFAULT_PACKET_OFFSET;
624
625         if(!n->status.reachable) {
626                 logger(DEBUG_TRAFFIC, LOG_INFO, "Trying to send UDP packet to unreachable node %s (%s)", n->name, n->hostname);
627                 return;
628         }
629
630         if(n->status.sptps)
631                 return send_sptps_packet(n, origpkt);
632
633 #ifdef DISABLE_LEGACY
634         return;
635 #else
636         /* Make sure we have a valid key */
637
638         if(!n->status.validkey) {
639                 logger(DEBUG_TRAFFIC, LOG_INFO,
640                                    "No valid key known yet for %s (%s), forwarding via TCP",
641                                    n->name, n->hostname);
642                 send_tcppacket(n->nexthop->connection, origpkt);
643                 return;
644         }
645
646         if(n->options & OPTION_PMTU_DISCOVERY && inpkt->len > n->minmtu && (DATA(inpkt)[12] | DATA(inpkt)[13])) {
647                 logger(DEBUG_TRAFFIC, LOG_INFO,
648                                 "Packet for %s (%s) larger than minimum MTU, forwarding via %s",
649                                 n->name, n->hostname, n != n->nexthop ? n->nexthop->name : "TCP");
650
651                 if(n != n->nexthop)
652                         send_packet(n->nexthop, origpkt);
653                 else
654                         send_tcppacket(n->nexthop->connection, origpkt);
655
656                 return;
657         }
658
659         /* Compress the packet */
660
661         if(n->outcompression) {
662                 outpkt = pkt[nextpkt++];
663
664                 if((outpkt->len = compress_packet(DATA(outpkt), DATA(inpkt), inpkt->len, n->outcompression)) < 0) {
665                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while compressing packet to %s (%s)",
666                                    n->name, n->hostname);
667                         return;
668                 }
669
670                 inpkt = outpkt;
671         }
672
673         /* Add sequence number */
674
675         seqno_t seqno = htonl(++(n->sent_seqno));
676         memcpy(SEQNO(inpkt), &seqno, sizeof seqno);
677         inpkt->len += sizeof seqno;
678
679         /* Encrypt the packet */
680
681         if(cipher_active(n->outcipher)) {
682                 outpkt = pkt[nextpkt++];
683                 outlen = MAXSIZE;
684
685                 if(!cipher_encrypt(n->outcipher, SEQNO(inpkt), inpkt->len, SEQNO(outpkt), &outlen, true)) {
686                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while encrypting packet to %s (%s)", n->name, n->hostname);
687                         goto end;
688                 }
689
690                 outpkt->len = outlen;
691                 inpkt = outpkt;
692         }
693
694         /* Add the message authentication code */
695
696         if(digest_active(n->outdigest)) {
697                 if(!digest_create(n->outdigest, SEQNO(inpkt), inpkt->len, SEQNO(inpkt) + inpkt->len)) {
698                         logger(DEBUG_TRAFFIC, LOG_ERR, "Error while encrypting packet to %s (%s)", n->name, n->hostname);
699                         goto end;
700                 }
701
702                 inpkt->len += digest_length(n->outdigest);
703         }
704
705         /* Send the packet */
706
707         const sockaddr_t *sa = NULL;
708         int sock;
709
710         if(n->status.send_locally)
711                 choose_local_address(n, &sa, &sock);
712         if(!sa)
713                 choose_udp_address(n, &sa, &sock);
714
715 #if defined(SOL_IP) && defined(IP_TOS)
716         if(priorityinheritance && origpriority != priority
717            && listen_socket[n->sock].sa.sa.sa_family == AF_INET) {
718                 priority = origpriority;
719                 logger(DEBUG_TRAFFIC, LOG_DEBUG, "Setting outgoing packet priority to %d", priority);
720                 if(setsockopt(listen_socket[n->sock].udp.fd, SOL_IP, IP_TOS, &priority, sizeof(priority))) /* SO_PRIORITY doesn't seem to work */
721                         logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s", "setsockopt", sockstrerror(sockerrno));
722         }
723 #endif
724
725         if(sendto(listen_socket[sock].udp.fd, SEQNO(inpkt), inpkt->len, 0, &sa->sa, SALEN(sa->sa)) < 0 && !sockwouldblock(sockerrno)) {
726                 if(sockmsgsize(sockerrno)) {
727                         if(n->maxmtu >= origlen)
728                                 n->maxmtu = origlen - 1;
729                         if(n->mtu >= origlen)
730                                 n->mtu = origlen - 1;
731                         try_fix_mtu(n);
732                 } else
733                         logger(DEBUG_TRAFFIC, LOG_WARNING, "Error sending packet to %s (%s): %s", n->name, n->hostname, sockstrerror(sockerrno));
734         }
735
736 end:
737         origpkt->len = origlen;
738 #endif
739 }
740
741 bool send_sptps_data(node_t *to, node_t *from, int type, const void *data, size_t len) {
742         node_t *relay = (to->via != myself && (type == PKT_PROBE || (len - SPTPS_DATAGRAM_OVERHEAD) <= to->via->minmtu)) ? to->via : to->nexthop;
743         bool direct = from == myself && to == relay;
744         bool relay_supported = (relay->options >> 24) >= 4;
745         bool tcponly = (myself->options | relay->options) & OPTION_TCPONLY;
746
747         /* 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. */
748
749         if(type == SPTPS_HANDSHAKE || tcponly || (!direct && !relay_supported) || (type != PKT_PROBE && (len - SPTPS_DATAGRAM_OVERHEAD) > relay->minmtu)) {
750                 if(type != SPTPS_HANDSHAKE && (to->nexthop->connection->options >> 24) >= 7) {
751                         char buf[len + sizeof to->id + sizeof from->id]; char* buf_ptr = buf;
752                         memcpy(buf_ptr, &to->id, sizeof to->id); buf_ptr += sizeof to->id;
753                         memcpy(buf_ptr, &from->id, sizeof from->id); buf_ptr += sizeof from->id;
754                         memcpy(buf_ptr, data, len); buf_ptr += len;
755                         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);
756                         return send_sptps_tcppacket(to->nexthop->connection, buf, sizeof buf);
757                 }
758
759                 char buf[len * 4 / 3 + 5];
760                 b64encode(data, buf, len);
761                 /* If this is a handshake packet, use ANS_KEY instead of REQ_KEY, for two reasons:
762                     - We don't want intermediate nodes to switch to UDP to relay these packets;
763                     - ANS_KEY allows us to learn the reflexive UDP address. */
764                 if(type == SPTPS_HANDSHAKE) {
765                         to->incompression = myself->incompression;
766                         return send_request(to->nexthop->connection, "%d %s %s %s -1 -1 -1 %d", ANS_KEY, from->name, to->name, buf, to->incompression);
767                 } else {
768                         return send_request(to->nexthop->connection, "%d %s %s %d %s", REQ_KEY, from->name, to->name, SPTPS_PACKET, buf);
769                 }
770         }
771
772         size_t overhead = 0;
773         if(relay_supported) overhead += sizeof to->id + sizeof from->id;
774         char buf[len + overhead]; char* buf_ptr = buf;
775         if(relay_supported) {
776                 if(direct) {
777                         /* Inform the recipient that this packet was sent directly. */
778                         node_id_t nullid = {};
779                         memcpy(buf_ptr, &nullid, sizeof nullid); buf_ptr += sizeof nullid;
780                 } else {
781                         memcpy(buf_ptr, &to->id, sizeof to->id); buf_ptr += sizeof to->id;
782                 }
783                 memcpy(buf_ptr, &from->id, sizeof from->id); buf_ptr += sizeof from->id;
784
785         }
786         /* 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 */
787         memcpy(buf_ptr, data, len); buf_ptr += len;
788
789         const sockaddr_t *sa = NULL;
790         int sock;
791         if(relay->status.send_locally)
792                 choose_local_address(relay, &sa, &sock);
793         if(!sa)
794                 choose_udp_address(relay, &sa, &sock);
795         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);
796         if(sendto(listen_socket[sock].udp.fd, buf, buf_ptr - buf, 0, &sa->sa, SALEN(sa->sa)) < 0 && !sockwouldblock(sockerrno)) {
797                 if(sockmsgsize(sockerrno)) {
798                         // Compensate for SPTPS overhead
799                         len -= SPTPS_DATAGRAM_OVERHEAD;
800                         if(relay->maxmtu >= len)
801                                 relay->maxmtu = len - 1;
802                         if(relay->mtu >= len)
803                                 relay->mtu = len - 1;
804                         try_fix_mtu(relay);
805                 } else {
806                         logger(DEBUG_TRAFFIC, LOG_WARNING, "Error sending UDP SPTPS packet to %s (%s): %s", relay->name, relay->hostname, sockstrerror(sockerrno));
807                         return false;
808                 }
809         }
810
811         return true;
812 }
813
814 bool receive_sptps_record(void *handle, uint8_t type, const void *data, uint16_t len) {
815         node_t *from = handle;
816
817         if(type == SPTPS_HANDSHAKE) {
818                 if(!from->status.validkey) {
819                         from->status.validkey = true;
820                         from->status.waitingforkey = false;
821                         logger(DEBUG_META, LOG_INFO, "SPTPS key exchange with %s (%s) succesful", from->name, from->hostname);
822                 }
823                 return true;
824         }
825
826         if(len > MTU) {
827                 logger(DEBUG_ALWAYS, LOG_ERR, "Packet from %s (%s) larger than maximum supported size (%d > %d)", from->name, from->hostname, len, MTU);
828                 return false;
829         }
830
831         vpn_packet_t inpkt;
832         inpkt.offset = DEFAULT_PACKET_OFFSET;
833
834         if(type == PKT_PROBE) {
835                 if(!from->status.udppacket) {
836                         logger(DEBUG_ALWAYS, LOG_ERR, "Got SPTPS PROBE packet from %s (%s) via TCP", from->name, from->hostname);
837                         return false;
838                 }
839                 inpkt.len = len;
840                 memcpy(DATA(&inpkt), data, len);
841                 if(inpkt.len > from->maxrecentlen)
842                         from->maxrecentlen = inpkt.len;
843                 udp_probe_h(from, &inpkt, len);
844                 return true;
845         }
846
847         if(type & ~(PKT_COMPRESSED | PKT_MAC)) {
848                 logger(DEBUG_ALWAYS, LOG_ERR, "Unexpected SPTPS record type %d len %d from %s (%s)", type, len, from->name, from->hostname);
849                 return false;
850         }
851
852         /* Check if we have the headers we need */
853         if(routing_mode != RMODE_ROUTER && !(type & PKT_MAC)) {
854                 logger(DEBUG_TRAFFIC, LOG_ERR, "Received packet from %s (%s) without MAC header (maybe Mode is not set correctly)", from->name, from->hostname);
855                 return false;
856         } else if(routing_mode == RMODE_ROUTER && (type & PKT_MAC)) {
857                 logger(DEBUG_TRAFFIC, LOG_WARNING, "Received packet from %s (%s) with MAC header (maybe Mode is not set correctly)", from->name, from->hostname);
858         }
859
860         int offset = (type & PKT_MAC) ? 0 : 14;
861         if(type & PKT_COMPRESSED) {
862                 length_t ulen = uncompress_packet(DATA(&inpkt) + offset, (const uint8_t *)data, len, from->incompression);
863                 if(ulen < 0) {
864                         return false;
865                 } else {
866                         inpkt.len = ulen + offset;
867                 }
868                 if(inpkt.len > MAXSIZE)
869                         abort();
870         } else {
871                 memcpy(DATA(&inpkt) + offset, data, len);
872                 inpkt.len = len + offset;
873         }
874
875         /* Generate the Ethernet packet type if necessary */
876         if(offset) {
877                 switch(DATA(&inpkt)[14] >> 4) {
878                         case 4:
879                                 DATA(&inpkt)[12] = 0x08;
880                                 DATA(&inpkt)[13] = 0x00;
881                                 break;
882                         case 6:
883                                 DATA(&inpkt)[12] = 0x86;
884                                 DATA(&inpkt)[13] = 0xDD;
885                                 break;
886                         default:
887                                 logger(DEBUG_TRAFFIC, LOG_ERR,
888                                                    "Unknown IP version %d while reading packet from %s (%s)",
889                                                    DATA(&inpkt)[14] >> 4, from->name, from->hostname);
890                                 return false;
891                 }
892         }
893
894         if(from->status.udppacket && inpkt.len > from->maxrecentlen)
895                 from->maxrecentlen = inpkt.len;
896
897         receive_packet(from, &inpkt);
898         return true;
899 }
900
901 // This function tries to get SPTPS keys, if they aren't already known.
902 // 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.
903 static void try_sptps(node_t *n) {
904         if(n->status.validkey)
905                 return;
906
907         logger(DEBUG_TRAFFIC, LOG_INFO, "No valid key known yet for %s (%s)", n->name, n->hostname);
908
909         if(!n->status.waitingforkey)
910                 send_req_key(n);
911         else if(n->last_req_key + 10 < now.tv_sec) {
912                 logger(DEBUG_ALWAYS, LOG_DEBUG, "No key from %s after 10 seconds, restarting SPTPS", n->name);
913                 sptps_stop(&n->sptps);
914                 n->status.waitingforkey = false;
915                 send_req_key(n);
916         }
917
918         return;
919 }
920
921 static void send_udp_probe_packet(node_t *n, int len) {
922         vpn_packet_t packet;
923         packet.offset = DEFAULT_PACKET_OFFSET;
924         memset(DATA(&packet), 0, 14);
925         randomize(DATA(&packet) + 14, len - 14);
926         packet.len = len;
927         packet.priority = 0;
928
929         logger(DEBUG_TRAFFIC, LOG_INFO, "Sending UDP probe length %d to %s (%s)", len, n->name, n->hostname);
930
931         send_udppacket(n, &packet);
932 }
933
934 // This function tries to establish a UDP tunnel to a node so that packets can be sent.
935 // If a tunnel is already established, it makes sure it stays up.
936 // This function makes no guarantees - it is up to the caller to check the node's state to figure out if UDP is usable.
937 static void try_udp(node_t* n) {
938         if(!udp_discovery)
939                 return;
940
941         /* Send gratuitous probe replies to 1.1 nodes. */
942
943         if((n->options >> 24) >= 3 && n->status.udp_confirmed) {
944                 struct timeval ping_tx_elapsed;
945                 timersub(&now, &n->udp_reply_sent, &ping_tx_elapsed);
946
947                 if(ping_tx_elapsed.tv_sec >= udp_discovery_keepalive_interval - 1) {
948                         n->udp_reply_sent = now;
949                         if(n->maxrecentlen) {
950                                 vpn_packet_t pkt;
951                                 pkt.len = n->maxrecentlen;
952                                 pkt.offset = DEFAULT_PACKET_OFFSET;
953                                 memset(DATA(&pkt), 0, 14);
954                                 randomize(DATA(&pkt) + 14, MIN_PROBE_SIZE - 14);
955                                 send_udp_probe_reply(n, &pkt, pkt.len);
956                                 n->maxrecentlen = 0;
957                         }
958                 }
959         }
960
961         /* Probe request */
962
963         struct timeval ping_tx_elapsed;
964         timersub(&now, &n->udp_ping_sent, &ping_tx_elapsed);
965
966         int interval = n->status.udp_confirmed ? udp_discovery_keepalive_interval : udp_discovery_interval;
967
968         if(ping_tx_elapsed.tv_sec >= interval) {
969                 send_udp_probe_packet(n, MIN_PROBE_SIZE);
970                 n->udp_ping_sent = now;
971
972                 if(localdiscovery && !n->status.udp_confirmed && n->prevedge) {
973                         n->status.send_locally = true;
974                         send_udp_probe_packet(n, MIN_PROBE_SIZE);
975                         n->status.send_locally = false;
976                 }
977         }
978 }
979
980 static length_t choose_initial_maxmtu(node_t *n) {
981 #ifdef IP_MTU
982
983         int sock = -1;
984
985         const sockaddr_t *sa = NULL;
986         int sockindex;
987         choose_udp_address(n, &sa, &sockindex);
988         if(!sa)
989                 return MTU;
990
991         sock = socket(sa->sa.sa_family, SOCK_DGRAM, IPPROTO_UDP);
992         if(sock < 0) {
993                 logger(DEBUG_TRAFFIC, LOG_ERR, "Creating MTU assessment socket for %s (%s) failed: %s", n->name, n->hostname, sockstrerror(sockerrno));
994                 return MTU;
995         }
996
997         if(connect(sock, &sa->sa, SALEN(sa->sa))) {
998                 logger(DEBUG_TRAFFIC, LOG_ERR, "Connecting MTU assessment socket for %s (%s) failed: %s", n->name, n->hostname, sockstrerror(sockerrno));
999                 close(sock);
1000                 return MTU;
1001         }
1002
1003         int ip_mtu;
1004         socklen_t ip_mtu_len = sizeof ip_mtu;
1005         if(getsockopt(sock, IPPROTO_IP, IP_MTU, &ip_mtu, &ip_mtu_len)) {
1006                 logger(DEBUG_TRAFFIC, LOG_ERR, "getsockopt(IP_MTU) on %s (%s) failed: %s", n->name, n->hostname, sockstrerror(sockerrno));
1007                 close(sock);
1008                 return MTU;
1009         }
1010
1011         close(sock);
1012
1013         /* getsockopt(IP_MTU) returns the MTU of the physical interface.
1014            We need to remove various overheads to get to the tinc MTU. */
1015         length_t mtu = ip_mtu;
1016         mtu -= (sa->sa.sa_family == AF_INET6) ? sizeof(struct ip6_hdr) : sizeof(struct ip);
1017         mtu -= 8; /* UDP */
1018         if(n->status.sptps) {
1019                 mtu -= SPTPS_DATAGRAM_OVERHEAD;
1020                 if((n->options >> 24) >= 4)
1021                         mtu -= sizeof(node_id_t) + sizeof(node_id_t);
1022 #ifndef DISABLE_LEGACY
1023         } else {
1024                 mtu -= digest_length(n->outdigest);
1025
1026                 /* Now it's tricky. We use CBC mode, so the length of the
1027                    encrypted payload must be a multiple of the blocksize. The
1028                    sequence number is also part of the encrypted payload, so we
1029                    must account for it after correcting for the blocksize.
1030                    Furthermore, the padding in the last block must be at least
1031                    1 byte. */
1032
1033                 length_t blocksize = cipher_blocksize(n->outcipher);
1034
1035                 if(blocksize > 1) {
1036                         mtu /= blocksize;
1037                         mtu *= blocksize;
1038                         mtu--;
1039                 }
1040
1041                 mtu -= 4; // seqno
1042 #endif
1043         }
1044
1045         if (mtu < 512) {
1046                 logger(DEBUG_TRAFFIC, LOG_ERR, "getsockopt(IP_MTU) on %s (%s) returned absurdly small value: %d", n->name, n->hostname, ip_mtu);
1047                 return MTU;
1048         }
1049         if (mtu > MTU)
1050                 return MTU;
1051
1052         logger(DEBUG_TRAFFIC, LOG_INFO, "Using system-provided maximum tinc MTU for %s (%s): %hd", n->name, n->hostname, mtu);
1053         return mtu;
1054
1055 #else
1056
1057         return MTU;
1058
1059 #endif
1060 }
1061
1062 /* This function tries to determines the MTU of a node.
1063    By calling this function repeatedly, n->minmtu will be progressively
1064    increased, and at some point, n->mtu will be fixed to n->minmtu.  If the MTU
1065    is already fixed, this function checks if it can be increased.
1066 */
1067
1068 static void try_mtu(node_t *n) {
1069         if(!(n->options & OPTION_PMTU_DISCOVERY))
1070                 return;
1071
1072         if(udp_discovery && !n->status.udp_confirmed) {
1073                 n->maxrecentlen = 0;
1074                 n->mtuprobes = 0;
1075                 n->minmtu = 0;
1076                 n->maxmtu = MTU;
1077                 return;
1078         }
1079
1080         /* mtuprobes == 0..19: initial discovery, send bursts with 1 second interval, mtuprobes++
1081            mtuprobes ==    20: fix MTU, and go to -1
1082            mtuprobes ==    -1: send one maxmtu and one maxmtu+1 probe every pinginterval
1083            mtuprobes ==-2..-3: send one maxmtu probe every second
1084            mtuprobes ==    -4: maxmtu no longer valid, reset minmtu and maxmtu and go to 0 */
1085
1086         struct timeval elapsed;
1087         timersub(&now, &n->mtu_ping_sent, &elapsed);
1088         if(n->mtuprobes >= 0) {
1089                 if(n->mtuprobes != 0 && elapsed.tv_sec == 0 && elapsed.tv_usec < 333333)
1090                         return;
1091         } else {
1092                 if(n->mtuprobes < -1) {
1093                         if(elapsed.tv_sec < 1)
1094                                 return;
1095                 } else {
1096                         if(elapsed.tv_sec < pinginterval)
1097                                 return;
1098                 }
1099         }
1100
1101         n->mtu_ping_sent = now;
1102
1103         try_fix_mtu(n);
1104
1105         if(n->mtuprobes < -3) {
1106                 /* We lost three MTU probes, restart discovery */
1107                 logger(DEBUG_TRAFFIC, LOG_INFO, "Decrease in PMTU to %s (%s) detected, restarting PMTU discovery", n->name, n->hostname);
1108                 n->mtuprobes = 0;
1109                 n->minmtu = 0;
1110         }
1111
1112         if(n->mtuprobes < 0) {
1113                 /* After the initial discovery, we only send one maxmtu and one
1114                    maxmtu+1 probe to detect PMTU increases. */
1115                 send_udp_probe_packet(n, n->maxmtu);
1116                 if(n->mtuprobes == -1 && n->maxmtu + 1 < MTU)
1117                         send_udp_probe_packet(n, n->maxmtu + 1);
1118                 n->mtuprobes--;
1119         } else {
1120                 /* Before initial discovery begins, set maxmtu to the most likely value.
1121                    If it's underestimated, we will correct it after initial discovery. */
1122                 if(n->mtuprobes == 0)
1123                         n->maxmtu = choose_initial_maxmtu(n);
1124
1125                 for (;;) {
1126                         /* Decreasing the number of probes per cycle might make the algorithm react faster to lost packets,
1127                            but it will typically increase convergence time in the no-loss case. */
1128                         const length_t probes_per_cycle = 8;
1129
1130                         /* This magic value was determined using math simulations.
1131                            It will result in a 1329-byte first probe, followed (if there was a reply) by a 1407-byte probe.
1132                            Since 1407 is just below the range of tinc MTUs over typical networks,
1133                            this fine-tuning allows tinc to cover a lot of ground very quickly.
1134                            This fine-tuning is only valid for maxmtu = MTU; if maxmtu is smaller,
1135                            then it's better to use a multiplier of 1. Indeed, this leads to an interesting scenario
1136                            if choose_initial_maxmtu() returns the actual MTU value - it will get confirmed with one single probe. */
1137                         const float multiplier = (n->maxmtu == MTU) ? 0.97 : 1;
1138
1139                         const float cycle_position = probes_per_cycle - (n->mtuprobes % probes_per_cycle) - 1;
1140                         const length_t minmtu = MAX(n->minmtu, 512);
1141                         const float interval = n->maxmtu - minmtu;
1142
1143                         /* The core of the discovery algorithm is this exponential.
1144                            It produces very large probes early in the cycle, and then it very quickly decreases the probe size.
1145                            This reflects the fact that in the most difficult cases, we don't get any feedback for probes that
1146                            are too large, and therefore we need to concentrate on small offsets so that we can quickly converge
1147                            on the precise MTU as we are approaching it.
1148                            The last probe of the cycle is always 1 byte in size - this is to make sure we'll get at least one
1149                            reply per cycle so that we can make progress. */
1150                         const length_t offset = powf(interval, multiplier * cycle_position / (probes_per_cycle - 1));
1151
1152                         length_t maxmtu = n->maxmtu;
1153                         send_udp_probe_packet(n, minmtu + offset);
1154                         /* If maxmtu changed, it means the probe was rejected by the system because it was too large.
1155                            In that case, we recalculate with the new maxmtu and try again. */
1156                         if(n->mtuprobes < 0 || maxmtu == n->maxmtu)
1157                                 break;
1158                 }
1159
1160                 if(n->mtuprobes >= 0)
1161                         n->mtuprobes++;
1162         }
1163 }
1164
1165 /* These functions try to establish a tunnel to a node (or its relay) so that
1166    packets can be sent (e.g. exchange keys).
1167    If a tunnel is already established, it tries to improve it (e.g. by trying
1168    to establish a UDP tunnel instead of TCP).  This function makes no
1169    guarantees - it is up to the caller to check the node's state to figure out
1170    if TCP and/or UDP is usable.  By calling this function repeatedly, the
1171    tunnel is gradually improved until we hit the wall imposed by the underlying
1172    network environment.  It is recommended to call this function every time a
1173    packet is sent (or intended to be sent) to a node, so that the tunnel keeps
1174    improving as packets flow, and then gracefully downgrades itself as it goes
1175    idle.
1176 */
1177
1178 static void try_tx_sptps(node_t *n, bool mtu) {
1179         /* If n is a TCP-only neighbor, we'll only use "cleartext" PACKET
1180            messages anyway, so there's no need for SPTPS at all. */
1181
1182         if(n->connection && ((myself->options | n->options) & OPTION_TCPONLY))
1183                 return;
1184
1185         /* Otherwise, try to do SPTPS authentication with n if necessary. */
1186
1187         try_sptps(n);
1188
1189         /* Do we need to statically relay packets? */
1190
1191         node_t *via = (n->via == myself) ? n->nexthop : n->via;
1192
1193         /* If we do have a static relay, try everything with that one instead, if it supports relaying. */
1194
1195         if(via != n) {
1196                 if((via->options >> 24) < 4)
1197                         return;
1198                 return try_tx(via, mtu);
1199         }
1200
1201         /* Otherwise, try to establish UDP connectivity. */
1202
1203         try_udp(n);
1204         if(mtu)
1205                 try_mtu(n);
1206
1207         /* If we don't have UDP connectivity (yet), we need to use a dynamic relay (nexthop)
1208            while we try to establish direct connectivity. */
1209
1210         if(!n->status.udp_confirmed && n != n->nexthop && (n->nexthop->options >> 24) >= 4)
1211                 try_tx(n->nexthop, mtu);
1212 }
1213
1214 static void try_tx_legacy(node_t *n, bool mtu) {
1215         /* Does he have our key? If not, send one. */
1216
1217         if(!n->status.validkey_in)
1218                 send_ans_key(n);
1219
1220         /* Check if we already have a key, or request one. */
1221
1222         if(!n->status.validkey) {
1223                 if(n->last_req_key + 10 <= now.tv_sec) {
1224                         send_req_key(n);
1225                         n->last_req_key = now.tv_sec;
1226                 }
1227                 return;
1228         }
1229
1230         try_udp(n);
1231         if(mtu)
1232                 try_mtu(n);
1233 }
1234
1235 void try_tx(node_t *n, bool mtu) {
1236         if(!n->status.reachable)
1237                 return;
1238         if(n->status.sptps)
1239                 try_tx_sptps(n, mtu);
1240         else
1241                 try_tx_legacy(n, mtu);
1242 }
1243
1244 void send_packet(node_t *n, vpn_packet_t *packet) {
1245         // If it's for myself, write it to the tun/tap device.
1246
1247         if(n == myself) {
1248                 if(overwrite_mac)
1249                          memcpy(DATA(packet), mymac.x, ETH_ALEN);
1250                 n->out_packets++;
1251                 n->out_bytes += packet->len;
1252                 devops.write(packet);
1253                 return;
1254         }
1255
1256         logger(DEBUG_TRAFFIC, LOG_ERR, "Sending packet of %d bytes to %s (%s)", packet->len, n->name, n->hostname);
1257
1258         // If the node is not reachable, drop it.
1259
1260         if(!n->status.reachable) {
1261                 logger(DEBUG_TRAFFIC, LOG_INFO, "Node %s (%s) is not reachable", n->name, n->hostname);
1262                 return;
1263         }
1264
1265         // Keep track of packet statistics.
1266
1267         n->out_packets++;
1268         n->out_bytes += packet->len;
1269
1270         // Check if it should be sent as an SPTPS packet.
1271
1272         if(n->status.sptps) {
1273                 send_sptps_packet(n, packet);
1274                 try_tx(n, true);
1275                 return;
1276         }
1277
1278         // Determine which node to actually send it to.
1279
1280         node_t *via = (packet->priority == -1 || n->via == myself) ? n->nexthop : n->via;
1281
1282         if(via != n)
1283                 logger(DEBUG_TRAFFIC, LOG_INFO, "Sending packet to %s via %s (%s)", n->name, via->name, n->via->hostname);
1284
1285         // Try to send via UDP, unless TCP is forced.
1286
1287         if(packet->priority == -1 || ((myself->options | via->options) & OPTION_TCPONLY)) {
1288                 if(!send_tcppacket(via->connection, packet))
1289                         terminate_connection(via->connection, true);
1290                 return;
1291         }
1292
1293         send_udppacket(via, packet);
1294         try_tx(via, true);
1295 }
1296
1297 void broadcast_packet(const node_t *from, vpn_packet_t *packet) {
1298         // Always give ourself a copy of the packet.
1299         if(from != myself)
1300                 send_packet(myself, packet);
1301
1302         // In TunnelServer mode, do not forward broadcast packets.
1303         // The MST might not be valid and create loops.
1304         if(tunnelserver || broadcast_mode == BMODE_NONE)
1305                 return;
1306
1307         logger(DEBUG_TRAFFIC, LOG_INFO, "Broadcasting packet of %d bytes from %s (%s)",
1308                            packet->len, from->name, from->hostname);
1309
1310         switch(broadcast_mode) {
1311                 // In MST mode, broadcast packets travel via the Minimum Spanning Tree.
1312                 // This guarantees all nodes receive the broadcast packet, and
1313                 // usually distributes the sending of broadcast packets over all nodes.
1314                 case BMODE_MST:
1315                         for list_each(connection_t, c, connection_list)
1316                                 if(c->edge && c->status.mst && c != from->nexthop->connection)
1317                                         send_packet(c->node, packet);
1318                         break;
1319
1320                 // In direct mode, we send copies to each node we know of.
1321                 // However, this only reaches nodes that can be reached in a single hop.
1322                 // We don't have enough information to forward broadcast packets in this case.
1323                 case BMODE_DIRECT:
1324                         if(from != myself)
1325                                 break;
1326
1327                         for splay_each(node_t, n, node_tree)
1328                                 if(n->status.reachable && n != myself && ((n->via == myself && n->nexthop == n) || n->via == n))
1329                                         send_packet(n, packet);
1330                         break;
1331
1332                 default:
1333                         break;
1334         }
1335 }
1336
1337 /* We got a packet from some IP address, but we don't know who sent it.  Try to
1338    verify the message authentication code against all active session keys.
1339    Since this is actually an expensive operation, we only do a full check once
1340    a minute, the rest of the time we only check against nodes for which we know
1341    an IP address that matches the one from the packet.  */
1342
1343 static node_t *try_harder(const sockaddr_t *from, const vpn_packet_t *pkt) {
1344         node_t *match = NULL;
1345         bool hard = false;
1346         static time_t last_hard_try = 0;
1347
1348         for splay_each(node_t, n, node_tree) {
1349                 if(!n->status.reachable || n == myself)
1350                         continue;
1351
1352                 if(!n->status.validkey_in && !(n->status.sptps && n->sptps.instate))
1353                         continue;
1354
1355                 bool soft = false;
1356
1357                 for splay_each(edge_t, e, n->edge_tree) {
1358                         if(!e->reverse)
1359                                 continue;
1360                         if(!sockaddrcmp_noport(from, &e->reverse->address)) {
1361                                 soft = true;
1362                                 break;
1363                         }
1364                 }
1365
1366                 if(!soft) {
1367                         if(last_hard_try == now.tv_sec)
1368                                 continue;
1369                         hard = true;
1370                 }
1371
1372                 if(!try_mac(n, pkt))
1373                         continue;
1374
1375                 match = n;
1376                 break;
1377         }
1378
1379         if(hard)
1380                 last_hard_try = now.tv_sec;
1381
1382         return match;
1383 }
1384
1385 void handle_incoming_vpn_data(void *data, int flags) {
1386         listen_socket_t *ls = data;
1387         vpn_packet_t pkt;
1388         char *hostname;
1389         node_id_t nullid = {};
1390         sockaddr_t addr = {};
1391         socklen_t addrlen = sizeof addr;
1392         node_t *from, *to;
1393         bool direct = false;
1394
1395         pkt.offset = 0;
1396         int len = recvfrom(ls->udp.fd, DATA(&pkt), MAXSIZE, 0, &addr.sa, &addrlen);
1397
1398         if(len <= 0 || len > MAXSIZE) {
1399                 if(!sockwouldblock(sockerrno))
1400                         logger(DEBUG_ALWAYS, LOG_ERR, "Receiving packet failed: %s", sockstrerror(sockerrno));
1401                 return;
1402         }
1403
1404         pkt.len = len;
1405
1406         sockaddrunmap(&addr); /* Some braindead IPv6 implementations do stupid things. */
1407
1408         // Try to figure out who sent this packet.
1409
1410         node_t *n = lookup_node_udp(&addr);
1411
1412         if(n && !n->status.udp_confirmed)
1413                 n = NULL; // Don't believe it if we don't have confirmation yet.
1414
1415         if(!n) {
1416                 // It might be from a 1.1 node, which might have a source ID in the packet.
1417                 pkt.offset = 2 * sizeof(node_id_t);
1418                 from = lookup_node_id(SRCID(&pkt));
1419                 if(from && !memcmp(DSTID(&pkt), &nullid, sizeof nullid) && from->status.sptps) {
1420                         if(sptps_verify_datagram(&from->sptps, DATA(&pkt), pkt.len - 2 * sizeof(node_id_t)))
1421                                 n = from;
1422                         else
1423                                 goto skip_harder;
1424                 }
1425         }
1426
1427         if(!n) {
1428                 pkt.offset = 0;
1429                 n = try_harder(&addr, &pkt);
1430         }
1431
1432 skip_harder:
1433         if(!n) {
1434                 if(debug_level >= DEBUG_PROTOCOL) {
1435                         hostname = sockaddr2hostname(&addr);
1436                         logger(DEBUG_PROTOCOL, LOG_WARNING, "Received UDP packet from unknown source %s", hostname);
1437                         free(hostname);
1438                 }
1439                 return;
1440         }
1441
1442         pkt.offset = 0;
1443
1444         if(n->status.sptps) {
1445                 bool relay_enabled = (n->options >> 24) >= 4;
1446                 if (relay_enabled) {
1447                         pkt.offset = 2 * sizeof(node_id_t);
1448                         pkt.len -= pkt.offset;
1449                 }
1450
1451                 if(!memcmp(DSTID(&pkt), &nullid, sizeof nullid) || !relay_enabled) {
1452                         direct = true;
1453                         from = n;
1454                         to = myself;
1455                 } else {
1456                         from = lookup_node_id(SRCID(&pkt));
1457                         to = lookup_node_id(DSTID(&pkt));
1458                 }
1459                 if(!from || !to) {
1460                         logger(DEBUG_PROTOCOL, LOG_WARNING, "Received UDP packet from %s (%s) with unknown source and/or destination ID", n->name, n->hostname);
1461                         return;
1462                 }
1463
1464                 /* The packet is supposed to come from the originator or its static relay
1465                    (i.e. with no dynamic relays in between).
1466                    If it did not, "help" the static relay by sending it UDP info.
1467                    Note that we only do this if we're the destination or the static relay;
1468                    otherwise every hop would initiate its own UDP info message, resulting in elevated chatter. */
1469
1470                 if(n != from->via && to->via == myself)
1471                         send_udp_info(myself, from);
1472
1473                 /* If we're not the final recipient, relay the packet. */
1474
1475                 if(to != myself) {
1476                         send_sptps_data(to, from, 0, DATA(&pkt), pkt.len);
1477                         try_tx(to, true);
1478                         return;
1479                 }
1480         } else {
1481                 direct = true;
1482                 from = n;
1483         }
1484
1485         if(!receive_udppacket(from, &pkt))
1486                 return;
1487
1488         n->sock = ls - listen_socket;
1489         if(direct && sockaddrcmp(&addr, &n->address))
1490                 update_node_udp(n, &addr);
1491
1492         /* If the packet went through a relay, help the sender find the appropriate MTU
1493            through the relay path. */
1494
1495         if(!direct)
1496                 send_mtu_info(myself, n, MTU);
1497 }
1498
1499 void handle_device_data(void *data, int flags) {
1500         vpn_packet_t packet;
1501         packet.offset = DEFAULT_PACKET_OFFSET;
1502         packet.priority = 0;
1503
1504         if(devops.read(&packet)) {
1505                 myself->in_packets++;
1506                 myself->in_bytes += packet.len;
1507                 route(myself, &packet);
1508         }
1509 }