From 783c8298610d5670f6e118f49bd3d1fdfa61ae1d Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Mon, 26 Jun 2000 19:39:34 +0000 Subject: [PATCH] - Indirectdata finally REALLY REALLY works now! - More precise debug messages --- src/net.c | 75 +++++++++++++++++++++++++------------------------- src/netutl.c | 8 +++--- src/protocol.c | 4 +-- 3 files changed, 43 insertions(+), 44 deletions(-) diff --git a/src/net.c b/src/net.c index 72d7bfbd..31acd389 100644 --- a/src/net.c +++ b/src/net.c @@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: net.c,v 1.35.4.6 2000/06/26 17:20:58 guus Exp $ + $Id: net.c,v 1.35.4.7 2000/06/26 19:39:34 guus Exp $ */ #include "config.h" @@ -103,11 +103,13 @@ cp rp.len = htons(rp.len); if(debug_lvl > 3) - syslog(LOG_ERR, _("Sent %d bytes to %lx"), ntohs(rp.len), cl->vpn_ip); + syslog(LOG_ERR, _("Sending packet of %d bytes to " IP_ADDR_S " (%s)"), + ntohs(rp.len), IP_ADDR_V(cl->vpn_ip), cl->hostname); if((r = send(cl->socket, (char*)&rp, ntohs(rp.len), 0)) < 0) { - syslog(LOG_ERR, _("Error sending data: %m")); + syslog(LOG_ERR, _("Error sending packet to " IP_ADDR_S " (%s): %m"), + IP_ADDR_V(cl->vpn_ip), cl->hostname); return -1; } @@ -126,6 +128,10 @@ cp do_decrypt((real_packet_t*)packet, &vp, cl->key); add_mac_addresses(&vp); + if(debug_lvl > 3) + syslog(LOG_ERR, _("Receiving packet of %d bytes from " IP_ADDR_S " (%s)"), + ((real_packet_t*)packet)->len, IP_ADDR_V(cl->vpn_ip), cl->hostname); + if((lenin = write(tap_fd, &vp, vp.len + sizeof(vp.len))) < 0) syslog(LOG_ERR, _("Can't write to tap device: %m")); else @@ -145,9 +151,6 @@ void add_queue(packet_queue_t **q, void *packet, size_t s) { queue_element_t *e; cp - if(debug_lvl > 3) - syslog(LOG_DEBUG, _("packet to queue: %d"), s); - e = xmalloc(sizeof(*e)); e->packet = xmalloc(s); memcpy(e->packet, packet, s); @@ -233,7 +236,7 @@ cp } if(debug_lvl > 3) - syslog(LOG_DEBUG, _("queue flushed")); + syslog(LOG_DEBUG, _("Queue flushed")); cp } @@ -290,7 +293,7 @@ cp return -1; } } - + /* If we ourselves have indirectdata flag set, we should send only to our uplink! */ if(myself->flags & EXPORTINDIRECTDATA) @@ -312,25 +315,26 @@ cp if(cl->flags & INDIRECTDATA) { - if((cl = lookup_conn(cl->vpn_ip)) == NULL) + if(debug_lvl > 3) + syslog(LOG_NOTICE, _("Indirect packet to " IP_ADDR_S " via " IP_ADDR_S), + IP_ADDR_V(cl->vpn_ip), IP_ADDR_V(cl->real_ip)); + if((cl = lookup_conn(cl->real_ip)) == NULL) { if(debug_lvl > 3) - { syslog(LOG_NOTICE, _("Indirect look up " IP_ADDR_S " in connection list failed!"), IP_ADDR_V(to)); - } /* Gateway tincd dead? Should we kill it? (GS) */ return -1; } if(cl->flags & INDIRECTDATA) /* This should not happen */ - if(debug_lvl > 3) - { - syslog(LOG_NOTICE, _("double indirection for " IP_ADDR_S), - IP_ADDR_V(to)); - } - return -1; + { + if(debug_lvl > 3) + syslog(LOG_NOTICE, _("Double indirection for " IP_ADDR_S), + IP_ADDR_V(to)); + return -1; + } } if(my_key_expiry <= time(NULL)) @@ -338,10 +342,15 @@ cp if(!cl->status.dataopen) if(setup_vpn_connection(cl) < 0) - return -1; - + { + syslog(LOG_ERR, _("Could not open UDP connection to " IP_ADDR_S " (%s)"), IP_ADDR_V(cl->vpn_ip), cl->hostname); + return -1; + } + if(!cl->status.validkey) { + if(debug_lvl > 3) + syslog(LOG_INFO, _(IP_ADDR_S " (%s) has no valid key, queueing packet"), IP_ADDR_V(cl->vpn_ip), cl->hostname); add_queue(&(cl->sq), packet, packet->len + 2); if(!cl->status.waitingforkey) send_key_request(cl->vpn_ip); /* Keys should be sent to the host running the tincd */ @@ -350,9 +359,9 @@ cp if(!cl->status.active) { - add_queue(&(cl->sq), packet, packet->len + 2); if(debug_lvl > 3) - syslog(LOG_INFO, _(IP_ADDR_S " is not ready, queueing packet"), IP_ADDR_V(cl->vpn_ip)); + syslog(LOG_INFO, _(IP_ADDR_S " (%s) is not ready, queueing packet"), IP_ADDR_V(cl->vpn_ip), cl->hostname); + add_queue(&(cl->sq), packet, packet->len + 2); return 0; /* We don't want to mess up, do we? */ } @@ -704,12 +713,12 @@ int setup_vpn_connection(conn_list_t *cl) struct sockaddr_in a; cp if(debug_lvl > 0) - syslog(LOG_DEBUG, _("Opening UDP socket to " IP_ADDR_S), IP_ADDR_V(cl->real_ip)); + syslog(LOG_DEBUG, _("Opening UDP socket to %s"), cl->hostname); nfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if(nfd == -1) { - syslog(LOG_ERR, _("Creating data socket failed: %m")); + syslog(LOG_ERR, _("Creating UDP socket failed: %m")); return -1; } @@ -719,8 +728,8 @@ cp if(connect(nfd, (struct sockaddr *)&a, sizeof(a)) == -1) { - syslog(LOG_ERR, _("Connecting to " IP_ADDR_S ":%d failed: %m"), - IP_ADDR_V(cl->real_ip), cl->port); + syslog(LOG_ERR, _("Connecting to %s port %d failed: %m"), + cl->hostname, cl->port); return -1; } @@ -825,7 +834,7 @@ cp lenin = recvfrom(cl->socket, &rp, MTU, 0, NULL, NULL); if(lenin <= 0) { - syslog(LOG_ERR, _("Receiving data failed: %m")); + syslog(LOG_ERR, _("Receiving packet from %s failed: %m"), cl->hostname); return -1; } total_socket_in += lenin; @@ -837,13 +846,10 @@ cp if(rp.len >= 0) { f = lookup_conn(rp.from); - if(debug_lvl > 3) - syslog(LOG_DEBUG, _("packet from " IP_ADDR_S " (len %d)"), - IP_ADDR_V(rp.from), rp.len); if(!f) { - syslog(LOG_ERR, _("Got packet from unknown source " IP_ADDR_S), - IP_ADDR_V(rp.from)); + syslog(LOG_ERR, _("Got packet from " IP_ADDR_S " (%s) with unknown origin " IP_ADDR_S "?"), + IP_ADDR_V(cl->vpn_ip), cl->hostname, IP_ADDR_V(rp.from)); return -1; } @@ -1175,13 +1181,6 @@ cp from = ntohl(*((unsigned long*)(&vp.data[26]))); to = ntohl(*((unsigned long*)(&vp.data[30]))); - if(debug_lvl > 3) - syslog(LOG_DEBUG, _("An IP packet (%04x) for " IP_ADDR_S " from " IP_ADDR_S), - ether_type, IP_ADDR_V(to), IP_ADDR_V(from)); - if(debug_lvl > 3) - syslog(LOG_DEBUG, _(MAC_ADDR_S " to " MAC_ADDR_S), - MAC_ADDR_V(vp.data[0]), MAC_ADDR_V(vp.data[6])); - vp.len = (length_t)lenin - 2; strip_mac_addresses(&vp); diff --git a/src/netutl.c b/src/netutl.c index ee8ca324..5beb4a18 100644 --- a/src/netutl.c +++ b/src/netutl.c @@ -16,7 +16,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: netutl.c,v 1.12.4.3 2000/06/25 16:39:16 guus Exp $ + $Id: netutl.c,v 1.12.4.4 2000/06/26 19:39:34 guus Exp $ */ #include "config.h" @@ -243,9 +243,9 @@ cp for(p = conn_list; p != NULL; p = p->next) { - syslog(LOG_DEBUG, " " IP_ADDR_S "/" IP_ADDR_S " at %s status %04x flags %04x sockets %d, %d", - IP_ADDR_V(p->vpn_ip), IP_ADDR_V(p->vpn_mask), p->hostname, p->status, p->flags, - p->socket, p->meta_socket); + syslog(LOG_DEBUG, _(" " IP_ADDR_S "/" IP_ADDR_S " at %s flags %d sockets %d, %d status %04x"), + IP_ADDR_V(p->vpn_ip), IP_ADDR_V(p->vpn_mask), p->hostname, p->flags, + p->socket, p->meta_socket, p->status); } cp } diff --git a/src/protocol.c b/src/protocol.c index 325177bd..b918d5b1 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: protocol.c,v 1.28.4.7 2000/06/26 17:20:58 guus Exp $ + $Id: protocol.c,v 1.28.4.8 2000/06/26 19:39:34 guus Exp $ */ #include "config.h" @@ -400,7 +400,7 @@ cp if(sscanf(cl->buffer, "%*d %d %lx/%lx:%hx %d", &cl->protocol_version, &cl->vpn_ip, &cl->vpn_mask, &cl->port, &cl->flags) != 5) { - syslog(LOG_ERR, _("Got bad BASIC_INFO from " IP_ADDR_S), + syslog(LOG_ERR, _("Got bad BASIC_INFO from %s"), cl->hostname); return -1; } -- 2.20.1