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>
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;
}
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 "system.h"
int tap_fd = -1;
-
+int taptype = 0;
int total_tap_in = 0;
int total_tap_out = 0;
int total_socket_in = 0;
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
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;
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
}
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"
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;
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);