- tinc can now act as a switch or a hub too (as opposed to a router only)

- cleaner initialisation of "UNKNOWN" and "MYSELF" names
This commit is contained in:
Guus Sliepen 2001-06-05 16:09:55 +00:00
parent 428482d86f
commit 4f9dad0972
7 changed files with 52 additions and 46 deletions

View 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.
$Id: connection.c,v 1.1.2.10 2001/03/04 13:59:25 guus Exp $
$Id: connection.c,v 1.1.2.11 2001/06/05 16:09:55 guus Exp $
*/
#include "config.h"
@ -88,7 +88,7 @@ void free_connection(connection_t *p)
cp
if(p->queue)
list_delete_list(p->queue);
if(p->name && p->name!=unknown)
if(p->name)
free(p->name);
if(p->hostname)
free(p->hostname);

View 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.
$Id: net.c,v 1.35.4.110 2001/05/28 08:56:57 guus Exp $
$Id: net.c,v 1.35.4.111 2001/06/05 16:09:55 guus Exp $
*/
#include "config.h"
@ -104,8 +104,6 @@ static int seconds_till_retry;
int keylifetime = 0;
int keyexpires = 0;
char *unknown = NULL;
void send_udppacket(connection_t *cl, vpn_packet_t *inpkt)
{
vpn_packet_t outpkt;
@ -261,6 +259,26 @@ cp
send_udppacket(cl, packet);
}
/* Broadcast a packet to all active connections */
void broadcast_packet(connection_t *from, vpn_packet_t *packet)
{
avl_node_t *node;
connection_t *cl;
cp
if(debug_lvl >= DEBUG_TRAFFIC)
syslog(LOG_INFO, _("Broadcasting packet of %d bytes from %s (%s)"),
packet->len, from->name, from->hostname);
for(node = connection_tree->head; node; node = node->next)
{
cl = (connection_t *)node->data;
if(cl->status.meta && cl != from)
send_packet(cl, packet);
}
cp
}
void flush_queue(connection_t *cl)
{
list_node_t *node, *next;
@ -731,7 +749,7 @@ int setup_myself(void)
cp
myself = new_connection();
asprintf(&myself->hostname, "MYSELF");
asprintf(&myself->hostname, _("MYSELF"));
myself->options = 0;
myself->protocol_version = PROT_CURRENT;
@ -1011,7 +1029,7 @@ cp
return NULL;
}
p->name = unknown;
asprintf(&p->name, _("UNKNOWN"));
p->address = ntohl(ci.sin_addr.s_addr);
p->hostname = hostlookup(ci.sin_addr.s_addr);
p->port = htons(ci.sin_port); /* This one will be overwritten later */

View 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.
$Id: net.h,v 1.9.4.31 2001/05/25 11:54:28 guus Exp $
$Id: net.h,v 1.9.4.32 2001/06/05 16:09:55 guus Exp $
*/
#ifndef __TINC_NET_H__
@ -98,8 +98,6 @@ extern int total_tap_out;
extern int total_socket_in;
extern int total_socket_out;
extern char *unknown;
extern char *request_name[256];
extern char *status_text[10];
@ -111,6 +109,7 @@ extern void send_packet(connection_t *, vpn_packet_t *);
extern void receive_packet(connection_t *, vpn_packet_t *);
extern void receive_tcppacket(connection_t *, char *, int);
extern void accept_packet(vpn_packet_t *);
extern void broadcast_packet(connection_t *, vpn_packet_t *);
extern int setup_network_connections(void);
extern void close_network_connections(void);
extern void main_loop(void);

View 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.
$Id: protocol.c,v 1.28.4.91 2001/05/25 11:54:28 guus Exp $
$Id: protocol.c,v 1.28.4.92 2001/06/05 16:09:55 guus Exp $
*/
#include "config.h"
@ -214,6 +214,9 @@ cp
/* Copy string to cl */
if(cl->name)
free(cl->name);
cl->name = xstrdup(name);
/* Load information about peer */

View 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.
$Id: route.c,v 1.1.2.10 2001/06/04 11:14:35 guus Exp $
$Id: route.c,v 1.1.2.11 2001/06/05 16:09:55 guus Exp $
*/
#include "config.h"
@ -79,28 +79,16 @@ connection_t *route_mac(connection_t *source, vpn_packet_t *packet)
cp
/* Learn source address */
learn_mac(source, (mac_t *)(&packet->data[0]));
learn_mac(source, (mac_t *)(&packet->data[6]));
/* Lookup destination address */
subnet = lookup_subnet_mac((mac_t *)(&packet->data[6]));
subnet = lookup_subnet_mac((mac_t *)(&packet->data[0]));
if(!subnet)
{
if(debug_lvl >= DEBUG_TRAFFIC)
{
syslog(LOG_WARNING, _("Cannot route packet: unknown destination address %x:%x:%x:%x:%x:%x"),
packet->data[6],
packet->data[7],
packet->data[8],
packet->data[9],
packet->data[10],
packet->data[11]);
}
return NULL;
}
cp
return subnet->owner;
if(subnet)
return subnet->owner;
else
return NULL;
}
connection_t *route_ipv4(vpn_packet_t *packet)
@ -205,7 +193,6 @@ cp
void route_outgoing(vpn_packet_t *packet)
{
unsigned short int type;
avl_node_t *node;
connection_t *cl;
cp
/* FIXME: multicast? */
@ -240,15 +227,12 @@ cp
cl = route_mac(myself, packet);
if(cl)
send_packet(cl, packet);
else
broadcast_packet(myself, packet);
break;
case RMODE_HUB:
for(node = connection_tree->head; node; node = node->next)
{
cl = (connection_t *)node->data;
if(cl->status.active)
send_packet(cl, packet);
}
broadcast_packet(myself, packet);
break;
}
}
@ -258,10 +242,16 @@ void route_incoming(connection_t *source, vpn_packet_t *packet)
switch(routing_mode)
{
case RMODE_ROUTER:
memcpy(packet->data, mymac.net.mac.address.x, 6);
memcpy(packet->data, mymac.net.mac.address.x, 6); /* Override destination address to make the kernel accept it */
break;
case RMODE_SWITCH:
learn_mac(source, (mac_t *)(&packet->data[0]));
if((packet->data[0] & packet->data[1]) == 0xFF) /* Broadcast? */
broadcast_packet(source, packet); /* If yes, spread it on */
else
learn_mac(source, (mac_t *)(&packet->data[6]));
break;
case RMODE_HUB:
broadcast_packet(source,packet); /* Spread it on */
break;
}

View 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.
$Id: subnet.c,v 1.1.2.19 2001/06/01 08:02:09 guus Exp $
$Id: subnet.c,v 1.1.2.20 2001/06/05 16:09:55 guus Exp $
*/
#include "config.h"
@ -244,7 +244,7 @@ cp
subnet->net.ipv6.mask.x[7]);
break;
default:
asprintf(&netstr, _("unknown"));
asprintf(&netstr, _("unknown subnet type"));
}
cp
return netstr;

View 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.
$Id: tincd.c,v 1.10.4.46 2001/05/28 08:56:57 guus Exp $
$Id: tincd.c,v 1.10.4.47 2001/06/05 16:09:55 guus Exp $
*/
#include "config.h"
@ -305,10 +305,6 @@ main(int argc, char **argv, char **envp)
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
/* Do some intl stuff right now */
unknown = _("unknown");
environment = envp;
parse_options(argc, argv, envp);