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"
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);
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"
int keylifetime = 0;
int keyexpires = 0;
-char *unknown = NULL;
-
void send_udppacket(connection_t *cl, vpn_packet_t *inpkt)
{
vpn_packet_t outpkt;
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;
cp
myself = new_connection();
- asprintf(&myself->hostname, "MYSELF");
+ asprintf(&myself->hostname, _("MYSELF"));
myself->options = 0;
myself->protocol_version = PROT_CURRENT;
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 */
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__
extern int total_socket_in;
extern int total_socket_out;
-extern char *unknown;
-
extern char *request_name[256];
extern char *status_text[10];
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);
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"
/* Copy string to cl */
+ if(cl->name)
+ free(cl->name);
+
cl->name = xstrdup(name);
/* Load information about peer */
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"
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)
void route_outgoing(vpn_packet_t *packet)
{
unsigned short int type;
- avl_node_t *node;
connection_t *cl;
cp
/* FIXME: multicast? */
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;
}
}
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;
}
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"
subnet->net.ipv6.mask.x[7]);
break;
default:
- asprintf(&netstr, _("unknown"));
+ asprintf(&netstr, _("unknown subnet type"));
}
cp
return netstr;
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"
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
- /* Do some intl stuff right now */
-
- unknown = _("unknown");
-
environment = envp;
parse_options(argc, argv, envp);