- More fixing. Tinc daemons can now even create activated connections.
authorGuus Sliepen <guus@tinc-vpn.org>
Mon, 16 Oct 2000 19:04:47 +0000 (19:04 +0000)
committerGuus Sliepen <guus@tinc-vpn.org>
Mon, 16 Oct 2000 19:04:47 +0000 (19:04 +0000)
src/connlist.c
src/net.c
src/protocol.c

index ed1467fa102aa3f8769ea9d57b18e8aba765937b..38c7c8b3529e90cc113bbe83b7f343740374a4f9 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
     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 <syslog.h>
 */
 
 #include <syslog.h>
@@ -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)
   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;
 }
 cp
   return p;
 }
index e9d6ecbac4281020b769d1107474403921e481ee..00254e059fac37f7ef7fe035aeb13c983e26bb7b 100644 (file)
--- 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.
 
     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"
 */
 
 #include "config.h"
@@ -55,7 +55,7 @@
 #include "system.h"
 
 int tap_fd = -1;
 #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;
 int total_tap_in = 0;
 int total_tap_out = 0;
 int total_socket_in = 0;
@@ -355,17 +355,20 @@ cp
 cp
   tap_fd = nfd;
 
 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
 #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);
   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
     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));
   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;
     }
 
   total_tap_in += lenin;
@@ -1137,10 +1154,6 @@ cp
   from = ntohl(*((unsigned long*)(&vp.data[26])));
   to = ntohl(*((unsigned long*)(&vp.data[30])));
 
   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
 }
   send_packet(to, &vp);
 cp
 }
index cb5c92fc75a0da49ab790fece8955d6ba3426673..20f66447c2a8ddc79f9a284b5522aa8513b1615f 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
     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"
 */
 
 #include "config.h"
@@ -157,14 +157,14 @@ int send_id(conn_list_t *cl)
 cp
   cl->allow_request = CHALLENGE;
 cp
 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
 }
 
 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;
     {
        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(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);
         {
           if(debug_lvl > DEBUG_CONNECTIONS)
             syslog(LOG_NOTICE, _("Uplink %s (%s) is already in our connection list"), cl->name, cl->hostname);