#include "netutl.h"
#include "protocol.h"
#include "route.h"
+#include "sptps.h"
#include "utils.h"
#include "xalloc.h"
static void send_udppacket(meshlink_handle_t *mesh, node_t *, vpn_packet_t *);
#define MAX_SEQNO 1073741824
+#define PROBE_OVERHEAD (SPTPS_DATAGRAM_OVERHEAD + 40)
/* mtuprobes == 1..30: initial discovery, send bursts with 1 second interval
mtuprobes == 31: sleep pinginterval seconds
logger(mesh, MESHLINK_DEBUG, "Sending MTU probe length %d to %s", len, n->name);
+ n->out_meta += packet.len + PROBE_OVERHEAD;
send_udppacket(mesh, n, &packet);
}
}
static void mtu_probe_h(meshlink_handle_t *mesh, node_t *n, vpn_packet_t *packet, uint16_t len) {
+ n->in_meta += len + PROBE_OVERHEAD;
+
if(len < 64) {
logger(mesh, MESHLINK_WARNING, "Got too short MTU probe length %d from %s", packet->len, n->name);
return;
bool udp_confirmed = n->status.udp_confirmed;
n->status.udp_confirmed = true;
+ logger(mesh, MESHLINK_DEBUG, "Sending MTU probe reply %d to %s", packet->len, n->name);
+ n->out_meta += packet->len + PROBE_OVERHEAD;
send_udppacket(mesh, n, packet);
n->status.udp_confirmed = udp_confirmed;
} else {
if(n->status.blacklisted) {
logger(mesh, MESHLINK_WARNING, "Dropping packet from blacklisted node %s", n->name);
} else {
- n->in_packets++;
- n->in_bytes += packet->len;
-
route(mesh, n, packet);
}
}
}
if(!n->status.validkey) {
+ if(n->connection && (n->connection->flags & PROTOCOL_TINY) & n->connection->status.active) {
+ send_raw_packet(mesh, n->connection, origpkt);
+ return;
+ }
+
logger(mesh, MESHLINK_INFO, "No valid key known yet for %s", n->name);
if(!n->status.waitingforkey) {
*port++ = 0;
*sa_buf = str2sockaddr_random(mesh, host, port);
*sa = sa_buf;
- free(host);
- goto check_socket;
+
+ if(sa_buf->sa.sa_family != AF_UNKNOWN) {
+ free(host);
+ goto check_socket;
+ }
}
free(host);
*/
void send_packet(meshlink_handle_t *mesh, node_t *n, vpn_packet_t *packet) {
if(n == mesh->self) {
- n->out_packets++;
- n->out_bytes += packet->len;
// TODO: send to application
return;
}
return;
}
- n->out_packets++;
- n->out_bytes += packet->len;
n->status.want_udp = true;
send_sptps_packet(mesh, n, packet);