#include "system.h"
-#include "splay_tree.h"
#include "connection.h"
#include "control_common.h"
#include "ethernet.h"
rmode_t routing_mode = RMODE_ROUTER;
fmode_t forwarding_mode = FMODE_INTERNAL;
+bmode_t broadcast_mode = BMODE_MST;
bool decrement_ttl = false;
bool directonly = false;
bool priorityinheritance = false;
int macexpire = 600;
bool overwrite_mac = false;
-bool broadcast = true;
mac_t mymac = {{0xFE, 0xFD, 0, 0, 0, 0}};
bool pcap = false;
}
static void age_subnets(int fd, short events, void *data) {
- subnet_t *s;
- connection_t *c;
- splay_node_t *node, *next, *node2;
bool left = false;
time_t now = time(NULL);
- for(node = myself->subnet_tree->head; node; node = next) {
+ for(splay_node_t *node = myself->subnet_tree->head, *next; node; node = next) {
next = node->next;
- s = node->data;
+ subnet_t *s = node->data;
if(s->expires && s->expires < now) {
if(debug_level >= DEBUG_TRAFFIC) {
char netstr[MAXNETSTR];
logger(DEBUG_TRAFFIC, LOG_INFO, "Subnet %s expired", netstr);
}
- for(node2 = connection_tree->head; node2; node2 = node2->next) {
- c = node2->data;
+ for(list_node_t *node = connection_list->head, *next; node; node = next) {
+ next = node->next;
+ connection_t *c = node->data;
if(c->status.active)
send_del_subnet(c, s);
}
}
static void learn_mac(mac_t *address) {
- subnet_t *subnet;
- splay_node_t *node;
- connection_t *c;
-
- subnet = lookup_subnet_mac(myself, address);
+ subnet_t *subnet = lookup_subnet_mac(myself, address);
/* If we don't know this MAC address yet, store it */
/* And tell all other tinc daemons it's our MAC */
- for(node = connection_tree->head; node; node = node->next) {
- c = node->data;
+ for(list_node_t *node = connection_list->head, *next; node; node = next) {
+ next = node->next;
+ connection_t *c = node->data;
if(c->status.active)
send_add_subnet(c, subnet);
}
if(!checklength(source, packet, ether_size + ip_size))
return;
- if(broadcast && (((packet->data[30] & 0xf0) == 0xe0) || (
+ if(broadcast_mode && (((packet->data[30] & 0xf0) == 0xe0) || (
packet->data[30] == 255 &&
packet->data[31] == 255 &&
packet->data[32] == 255 &&
return;
}
- if(broadcast && packet->data[38] == 255)
+ if(broadcast_mode && packet->data[38] == 255)
broadcast_packet(source, packet);
else
route_ipv6_unicast(source, packet);
subnet = lookup_subnet_mac(NULL, &dest);
if(!subnet) {
- if(broadcast)
- broadcast_packet(source, packet);
+ broadcast_packet(source, packet);
return;
}
static void send_pcap(vpn_packet_t *packet) {
pcap = false;
- for(splay_node_t *node = connection_tree->head; node; node = node->next) {
+ for(list_node_t *node = connection_list->head, *next; node; node = next) {
+ next = node->next;
connection_t *c = node->data;
if(!c->status.pcap)
continue;