projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Don't warn about empty lines in invitation files.
[tinc]
/
src
/
subnet.c
diff --git
a/src/subnet.c
b/src/subnet.c
index
3d055b6
..
4fefda6
100644
(file)
--- a/
src/subnet.c
+++ b/
src/subnet.c
@@
-92,15
+92,19
@@
void subnet_add(node_t *n, subnet_t *subnet) {
subnet->owner = n;
splay_insert(subnet_tree, subnet);
subnet->owner = n;
splay_insert(subnet_tree, subnet);
- if (n)
+
+ if(n) {
splay_insert(n->subnet_tree, subnet);
splay_insert(n->subnet_tree, subnet);
+ }
subnet_cache_flush();
}
void subnet_del(node_t *n, subnet_t *subnet) {
subnet_cache_flush();
}
void subnet_del(node_t *n, subnet_t *subnet) {
- if
(n)
+ if
(n) {
splay_delete(n->subnet_tree, subnet);
splay_delete(n->subnet_tree, subnet);
+ }
+
splay_delete(subnet_tree, subnet);
subnet_cache_flush();
splay_delete(subnet_tree, subnet);
subnet_cache_flush();
@@
-117,26
+121,31
@@
subnet_t *lookup_subnet_mac(const node_t *owner, const mac_t *address) {
// Check if this address is cached
// Check if this address is cached
- if((r = hash_search(mac_cache, address)))
+ if((r = hash_search(mac_cache, address)))
{
return r;
return r;
+ }
// Search all subnets for a matching one
for splay_each(subnet_t, p, owner ? owner->subnet_tree : subnet_tree) {
// Search all subnets for a matching one
for splay_each(subnet_t, p, owner ? owner->subnet_tree : subnet_tree) {
- if(!p || p->type != SUBNET_MAC)
+ if(!p || p->type != SUBNET_MAC)
{
continue;
continue;
+ }
- if(!memcmp(address, &p->net.mac.address, sizeof
*address
)) {
+ if(!memcmp(address, &p->net.mac.address, sizeof
(*address)
)) {
r = p;
r = p;
- if(!p->owner || p->owner->status.reachable)
+
+ if(!p->owner || p->owner->status.reachable) {
break;
break;
+ }
}
}
// Cache the result
}
}
// Cache the result
- if(r)
+ if(r)
{
hash_insert(mac_cache, address, r);
hash_insert(mac_cache, address, r);
+ }
return r;
}
return r;
}
@@
-146,26
+155,31
@@
subnet_t *lookup_subnet_ipv4(const ipv4_t *address) {
// Check if this address is cached
// Check if this address is cached
- if((r = hash_search(ipv4_cache, address)))
+ if((r = hash_search(ipv4_cache, address)))
{
return r;
return r;
+ }
// Search all subnets for a matching one
for splay_each(subnet_t, p, subnet_tree) {
// Search all subnets for a matching one
for splay_each(subnet_t, p, subnet_tree) {
- if(!p || p->type != SUBNET_IPV4)
+ if(!p || p->type != SUBNET_IPV4)
{
continue;
continue;
+ }
if(!maskcmp(address, &p->net.ipv4.address, p->net.ipv4.prefixlength)) {
r = p;
if(!maskcmp(address, &p->net.ipv4.address, p->net.ipv4.prefixlength)) {
r = p;
- if(!p->owner || p->owner->status.reachable)
+
+ if(!p->owner || p->owner->status.reachable) {
break;
break;
+ }
}
}
// Cache the result
}
}
// Cache the result
- if(r)
+ if(r)
{
hash_insert(ipv4_cache, address, r);
hash_insert(ipv4_cache, address, r);
+ }
return r;
}
return r;
}
@@
-175,26
+189,31
@@
subnet_t *lookup_subnet_ipv6(const ipv6_t *address) {
// Check if this address is cached
// Check if this address is cached
- if((r = hash_search(ipv6_cache, address)))
+ if((r = hash_search(ipv6_cache, address)))
{
return r;
return r;
+ }
// Search all subnets for a matching one
for splay_each(subnet_t, p, subnet_tree) {
// Search all subnets for a matching one
for splay_each(subnet_t, p, subnet_tree) {
- if(!p || p->type != SUBNET_IPV6)
+ if(!p || p->type != SUBNET_IPV6)
{
continue;
continue;
+ }
if(!maskcmp(address, &p->net.ipv6.address, p->net.ipv6.prefixlength)) {
r = p;
if(!maskcmp(address, &p->net.ipv6.address, p->net.ipv6.prefixlength)) {
r = p;
- if(!p->owner || p->owner->status.reachable)
+
+ if(!p->owner || p->owner->status.reachable) {
break;
break;
+ }
}
}
// Cache the result
}
}
// Cache the result
- if(r)
+ if(r)
{
hash_insert(ipv6_cache, address, r);
hash_insert(ipv6_cache, address, r);
+ }
return r;
}
return r;
}
@@
-225,15
+244,18
@@
void subnet_update(node_t *owner, subnet_t *subnet, bool up) {
if(!subnet) {
for splay_each(subnet_t, subnet, owner->subnet_tree) {
if(!subnet) {
for splay_each(subnet_t, subnet, owner->subnet_tree) {
- if(!net2str(netstr, sizeof
netstr, subnet))
+ if(!net2str(netstr, sizeof
(netstr), subnet)) {
continue;
continue;
+ }
// Strip the weight from the subnet, and put it in its own environment variable
char *weight = strchr(netstr, '#');
// Strip the weight from the subnet, and put it in its own environment variable
char *weight = strchr(netstr, '#');
- if(weight)
+
+ if(weight) {
*weight++ = 0;
*weight++ = 0;
- else
+ } else {
weight = empty;
weight = empty;
+ }
// Prepare the SUBNET and WEIGHT variables
environment_update(&env, env_subnet, "SUBNET=%s", netstr);
// Prepare the SUBNET and WEIGHT variables
environment_update(&env, env_subnet, "SUBNET=%s", netstr);
@@
-242,13
+264,15
@@
void subnet_update(node_t *owner, subnet_t *subnet, bool up) {
execute_script(name, &env);
}
} else {
execute_script(name, &env);
}
} else {
- if(net2str(netstr, sizeof
netstr
, subnet)) {
+ if(net2str(netstr, sizeof
(netstr)
, subnet)) {
// Strip the weight from the subnet, and put it in its own environment variable
char *weight = strchr(netstr, '#');
// Strip the weight from the subnet, and put it in its own environment variable
char *weight = strchr(netstr, '#');
- if(weight)
+
+ if(weight) {
*weight++ = 0;
*weight++ = 0;
- else
+ } else {
weight = empty;
weight = empty;
+ }
// Prepare the SUBNET and WEIGHT variables
environment_update(&env, env_subnet, "SUBNET=%s", netstr);
// Prepare the SUBNET and WEIGHT variables
environment_update(&env, env_subnet, "SUBNET=%s", netstr);
@@
-265,12
+289,13
@@
bool dump_subnets(connection_t *c) {
for splay_each(subnet_t, subnet, subnet_tree) {
char netstr[MAXNETSTR];
for splay_each(subnet_t, subnet, subnet_tree) {
char netstr[MAXNETSTR];
- if(!net2str(netstr, sizeof
netstr, subnet))
+ if(!net2str(netstr, sizeof
(netstr), subnet)) {
continue;
continue;
+ }
send_request(c, "%d %d %s %s",
send_request(c, "%d %d %s %s",
-
CONTROL, REQ_DUMP_SUBNETS,
-
netstr, subnet->owner ? subnet->owner->name : "(broadcast)");
+ CONTROL, REQ_DUMP_SUBNETS,
+ netstr, subnet->owner ? subnet->owner->name : "(broadcast)");
}
return send_request(c, "%d %d", CONTROL, REQ_DUMP_SUBNETS);
}
return send_request(c, "%d %d", CONTROL, REQ_DUMP_SUBNETS);