From: Guus Sliepen Date: Mon, 16 Oct 2000 19:04:47 +0000 (+0000) Subject: - More fixing. Tinc daemons can now even create activated connections. X-Git-Tag: release-1.0pre3~81 X-Git-Url: https://tinc-vpn.org/git/browse?a=commitdiff_plain;h=20301888b7a0a206119d2cfc48ccf1a667bb4add;p=tinc - More fixing. Tinc daemons can now even create activated connections. --- diff --git a/src/connlist.c b/src/connlist.c index ed1467fa..38c7c8b3 100644 --- a/src/connlist.c +++ b/src/connlist.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: connlist.c,v 1.1.2.5 2000/10/16 16:33:29 guus Exp $ + $Id: connlist.c,v 1.1.2.6 2000/10/16 19:04:46 guus Exp $ */ #include @@ -146,8 +146,9 @@ conn_list_t *lookup_id(char *name) conn_list_t *p; cp for(p = conn_list; p != NULL; p = p->next) - if(strcmp(name, p->name) == 0) - break; + if(p->status.active) + if(strcmp(name, p->name) == 0) + break; cp return p; } diff --git a/src/net.c b/src/net.c index e9d6ecba..00254e05 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.39 2000/10/16 16:33:29 guus Exp $ + $Id: net.c,v 1.35.4.40 2000/10/16 19:04:46 guus Exp $ */ #include "config.h" @@ -55,7 +55,7 @@ #include "system.h" int tap_fd = -1; - +int taptype = 0; int total_tap_in = 0; int total_tap_out = 0; int total_socket_in = 0; @@ -355,17 +355,20 @@ cp cp tap_fd = nfd; + taptype = 0; + #ifdef HAVE_TUNTAP /* Ok now check if this is an old ethertap or a new tun/tap thingie */ memset(&ifr, 0, sizeof(ifr)); cp - ifr.ifr_flags = IFF_TAP; + ifr.ifr_flags = IFF_TAP | IFF_NO_PI; if (netname) strncpy(ifr.ifr_name, netname, IFNAMSIZ); cp if (!ioctl(tap_fd, TUNSETIFF, (void *) &ifr)) { syslog(LOG_INFO, _("%s is a new style tun/tap device"), tapfname); + taptype = 1; if((cfg = get_config_val(config, tapsubnet)) == NULL) syslog(LOG_INFO, _("tun/tap device will be left unconfigured")); else @@ -1111,10 +1114,24 @@ void handle_tap_input(void) int ether_type, lenin; cp memset(&vp, 0, sizeof(vp)); - if((lenin = read(tap_fd, &vp, MTU)) <= 0) + + if(taptype = 1) { - syslog(LOG_ERR, _("Error while reading from tapdevice: %m")); - return; + if((lenin = read(tap_fd, vp.data, MTU)) <= 0) + { + syslog(LOG_ERR, _("Error while reading from tapdevice: %m")); + return; + } + vp.len = lenin; + } + else + { + if((lenin = read(tap_fd, &vp, MTU)) <= 0) + { + syslog(LOG_ERR, _("Error while reading from tapdevice: %m")); + return; + } + vp.len = lenin - 2; } total_tap_in += lenin; @@ -1137,10 +1154,6 @@ cp from = ntohl(*((unsigned long*)(&vp.data[26]))); to = ntohl(*((unsigned long*)(&vp.data[30]))); - vp.len = (length_t)lenin - 2; - - strip_mac_addresses(&vp); - send_packet(to, &vp); cp } diff --git a/src/protocol.c b/src/protocol.c index cb5c92fc..20f66447 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.41 2000/10/16 16:33:30 guus Exp $ + $Id: protocol.c,v 1.28.4.42 2000/10/16 19:04:47 guus Exp $ */ #include "config.h" @@ -157,14 +157,14 @@ int send_id(conn_list_t *cl) cp cl->allow_request = CHALLENGE; cp - return send_request(cl, "%d %s %d %lx", ID, myself->name, myself->protocol_version, myself->options); + return send_request(cl, "%d %s %d %lx %hd", ID, myself->name, myself->protocol_version, myself->options, myself->port); } int id_h(conn_list_t *cl) { conn_list_t *old; cp - if(sscanf(cl->buffer, "%*d %as %d %lx", &cl->name, &cl->protocol_version, &cl->options) != 3) + if(sscanf(cl->buffer, "%*d %as %d %lx %hd", &cl->name, &cl->protocol_version, &cl->options, &cl->port) != 4) { syslog(LOG_ERR, _("Got bad ID from %s"), cl->hostname); return -1; @@ -204,7 +204,6 @@ cp if(cl->status.outgoing) { if((old = lookup_id(cl->name))) - if(old != cl) { if(debug_lvl > DEBUG_CONNECTIONS) syslog(LOG_NOTICE, _("Uplink %s (%s) is already in our connection list"), cl->name, cl->hostname);