X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Froute.c;h=23bf38fd7cd4211403a5a23adabfa88af1b4c6a2;hb=2d4203fefa52a41f7987b1ace254da77df6e2dbf;hp=f18bd268305a520cc3ba7c1d22e6aacf7fa2c15b;hpb=103543aa2c15d9f1e2aa313a2e593a7524cce484;p=tinc diff --git a/src/route.c b/src/route.c index f18bd268..23bf38fd 100644 --- a/src/route.c +++ b/src/route.c @@ -50,7 +50,10 @@ static const size_t ip6_size = sizeof(struct ip6_hdr); static const size_t icmp6_size = sizeof(struct icmp6_hdr); static const size_t ns_size = sizeof(struct nd_neighbor_solicit); static const size_t opt_size = sizeof(struct nd_opt_hdr); -#define max(a, b) ((a) > (b) ? (a) : (b)) + +#ifndef MAX +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif static struct event age_subnets_event; @@ -177,7 +180,7 @@ static void swap_mac_addresses(vpn_packet_t *packet) { memcpy(&packet->data[6], &tmp, sizeof tmp); } -static void age_subnets(int fd, short events, void *data) { +static void age_subnets(void *data) { subnet_t *s; connection_t *c; splay_node_t *node, *next, *node2; @@ -207,8 +210,10 @@ static void age_subnets(int fd, short events, void *data) { } } - if(left) - event_add(&age_subnets_event, &(struct timeval){10, 0}); + if(left) { + age_subnets_event.time = time(NULL) + 10; + event_add(&age_subnets_event); + } } static void learn_mac(mac_t *address) { @@ -241,9 +246,9 @@ static void learn_mac(mac_t *address) { send_add_subnet(c, subnet); } - if(!timeout_initialized(&age_subnets_event)) - timeout_set(&age_subnets_event, age_subnets, NULL); - event_add(&age_subnets_event, &(struct timeval){10, 0}); + age_subnets_event.handler = age_subnets; + age_subnets_event.time = time(NULL) + 10; + event_add(&age_subnets_event); } else { if(subnet->expires) subnet->expires = time(NULL) + macexpire; @@ -412,10 +417,10 @@ static void route_ipv4_unicast(node_t *source, vpn_packet_t *packet) { if(directonly && subnet->owner != via) return route_ipv4_unreachable(source, packet, ICMP_DEST_UNREACH, ICMP_NET_ANO); - if(via && packet->len > max(via->mtu, 590) && via != myself) { + if(via && packet->len > MAX(via->mtu, 590) && via != myself) { ifdebug(TRAFFIC) logger(LOG_INFO, "Packet for %s (%s) length %d larger than MTU %d", subnet->owner->name, subnet->owner->hostname, packet->len, via->mtu); if(packet->data[20] & 0x40) { - packet->len = max(via->mtu, 590); + packet->len = MAX(via->mtu, 590); route_ipv4_unreachable(source, packet, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED); } else { fragment_ipv4_packet(via, packet); @@ -563,9 +568,9 @@ static void route_ipv6_unicast(node_t *source, vpn_packet_t *packet) { if(directonly && subnet->owner != via) return route_ipv6_unreachable(source, packet, ICMP6_DST_UNREACH, ICMP6_DST_UNREACH_ADMIN); - if(via && packet->len > max(via->mtu, 1294) && via != myself) { + if(via && packet->len > MAX(via->mtu, 1294) && via != myself) { ifdebug(TRAFFIC) logger(LOG_INFO, "Packet for %s (%s) length %d larger than MTU %d", subnet->owner->name, subnet->owner->hostname, packet->len, via->mtu); - packet->len = max(via->mtu, 1294); + packet->len = MAX(via->mtu, 1294); route_ipv6_unreachable(source, packet, ICMP6_PACKET_TOO_BIG, 0); return; }