- More fixing. Tinc daemons can now even create activated connections.
This commit is contained in:
parent
bb3d18d56f
commit
20301888b7
3 changed files with 30 additions and 17 deletions
|
|
@ -17,7 +17,7 @@
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
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;
|
conn_list_t *p;
|
||||||
cp
|
cp
|
||||||
for(p = conn_list; p != NULL; p = p->next)
|
for(p = conn_list; p != NULL; p = p->next)
|
||||||
if(strcmp(name, p->name) == 0)
|
if(p->status.active)
|
||||||
break;
|
if(strcmp(name, p->name) == 0)
|
||||||
|
break;
|
||||||
cp
|
cp
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
33
src/net.c
33
src/net.c
|
|
@ -17,7 +17,7 @@
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
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"
|
#include "system.h"
|
||||||
|
|
||||||
int tap_fd = -1;
|
int tap_fd = -1;
|
||||||
|
int taptype = 0;
|
||||||
int total_tap_in = 0;
|
int total_tap_in = 0;
|
||||||
int total_tap_out = 0;
|
int total_tap_out = 0;
|
||||||
int total_socket_in = 0;
|
int total_socket_in = 0;
|
||||||
|
|
@ -355,17 +355,20 @@ cp
|
||||||
cp
|
cp
|
||||||
tap_fd = nfd;
|
tap_fd = nfd;
|
||||||
|
|
||||||
|
taptype = 0;
|
||||||
|
|
||||||
#ifdef HAVE_TUNTAP
|
#ifdef HAVE_TUNTAP
|
||||||
/* Ok now check if this is an old ethertap or a new tun/tap thingie */
|
/* Ok now check if this is an old ethertap or a new tun/tap thingie */
|
||||||
memset(&ifr, 0, sizeof(ifr));
|
memset(&ifr, 0, sizeof(ifr));
|
||||||
cp
|
cp
|
||||||
ifr.ifr_flags = IFF_TAP;
|
ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
|
||||||
if (netname)
|
if (netname)
|
||||||
strncpy(ifr.ifr_name, netname, IFNAMSIZ);
|
strncpy(ifr.ifr_name, netname, IFNAMSIZ);
|
||||||
cp
|
cp
|
||||||
if (!ioctl(tap_fd, TUNSETIFF, (void *) &ifr))
|
if (!ioctl(tap_fd, TUNSETIFF, (void *) &ifr))
|
||||||
{
|
{
|
||||||
syslog(LOG_INFO, _("%s is a new style tun/tap device"), tapfname);
|
syslog(LOG_INFO, _("%s is a new style tun/tap device"), tapfname);
|
||||||
|
taptype = 1;
|
||||||
if((cfg = get_config_val(config, tapsubnet)) == NULL)
|
if((cfg = get_config_val(config, tapsubnet)) == NULL)
|
||||||
syslog(LOG_INFO, _("tun/tap device will be left unconfigured"));
|
syslog(LOG_INFO, _("tun/tap device will be left unconfigured"));
|
||||||
else
|
else
|
||||||
|
|
@ -1111,10 +1114,24 @@ void handle_tap_input(void)
|
||||||
int ether_type, lenin;
|
int ether_type, lenin;
|
||||||
cp
|
cp
|
||||||
memset(&vp, 0, sizeof(vp));
|
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"));
|
if((lenin = read(tap_fd, vp.data, MTU)) <= 0)
|
||||||
return;
|
{
|
||||||
|
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])));
|
from = ntohl(*((unsigned long*)(&vp.data[26])));
|
||||||
to = ntohl(*((unsigned long*)(&vp.data[30])));
|
to = ntohl(*((unsigned long*)(&vp.data[30])));
|
||||||
|
|
||||||
vp.len = (length_t)lenin - 2;
|
|
||||||
|
|
||||||
strip_mac_addresses(&vp);
|
|
||||||
|
|
||||||
send_packet(to, &vp);
|
send_packet(to, &vp);
|
||||||
cp
|
cp
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
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
|
cp
|
||||||
cl->allow_request = CHALLENGE;
|
cl->allow_request = CHALLENGE;
|
||||||
cp
|
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)
|
int id_h(conn_list_t *cl)
|
||||||
{
|
{
|
||||||
conn_list_t *old;
|
conn_list_t *old;
|
||||||
cp
|
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);
|
syslog(LOG_ERR, _("Got bad ID from %s"), cl->hostname);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -204,7 +204,6 @@ cp
|
||||||
if(cl->status.outgoing)
|
if(cl->status.outgoing)
|
||||||
{
|
{
|
||||||
if((old = lookup_id(cl->name)))
|
if((old = lookup_id(cl->name)))
|
||||||
if(old != cl)
|
|
||||||
{
|
{
|
||||||
if(debug_lvl > DEBUG_CONNECTIONS)
|
if(debug_lvl > DEBUG_CONNECTIONS)
|
||||||
syslog(LOG_NOTICE, _("Uplink %s (%s) is already in our connection list"), cl->name, cl->hostname);
|
syslog(LOG_NOTICE, _("Uplink %s (%s) is already in our connection list"), cl->name, cl->hostname);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue