projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Also clamp MSS of TCP over IPv6 packets.
[tinc]
/
src
/
protocol_subnet.c
diff --git
a/src/protocol_subnet.c
b/src/protocol_subnet.c
index
cdfcb6d
..
ba75c89
100644
(file)
--- a/
src/protocol_subnet.c
+++ b/
src/protocol_subnet.c
@@
-45,10
+45,10
@@
bool add_subnet_h(connection_t *c) {
char subnetstr[MAX_STRING_SIZE];
char name[MAX_STRING_SIZE];
node_t *owner;
char subnetstr[MAX_STRING_SIZE];
char name[MAX_STRING_SIZE];
node_t *owner;
- subnet_t s = {0}, *new;
+ subnet_t s = {0}, *new
, *old
;
if(sscanf(c->buffer, "%*d %*x " MAX_STRING " " MAX_STRING, name, subnetstr) != 2) {
if(sscanf(c->buffer, "%*d %*x " MAX_STRING " " MAX_STRING, name, subnetstr) != 2) {
- logger(LOG_ERR,
_("Got bad %s from %s (%s)")
, "ADD_SUBNET", c->name,
+ logger(LOG_ERR,
"Got bad %s from %s (%s)"
, "ADD_SUBNET", c->name,
c->hostname);
return false;
}
c->hostname);
return false;
}
@@
-56,16
+56,16
@@
bool add_subnet_h(connection_t *c) {
/* Check if owner name is valid */
if(!check_id(name)) {
/* Check if owner name is valid */
if(!check_id(name)) {
- logger(LOG_ERR,
_("Got bad %s from %s (%s): %s")
, "ADD_SUBNET", c->name,
- c->hostname,
_("invalid name")
);
+ logger(LOG_ERR,
"Got bad %s from %s (%s): %s"
, "ADD_SUBNET", c->name,
+ c->hostname,
"invalid name"
);
return false;
}
/* Check if subnet string is valid */
if(!str2net(&s, subnetstr)) {
return false;
}
/* Check if subnet string is valid */
if(!str2net(&s, subnetstr)) {
- logger(LOG_ERR,
_("Got bad %s from %s (%s): %s")
, "ADD_SUBNET", c->name,
- c->hostname,
_("invalid subnet string")
);
+ logger(LOG_ERR,
"Got bad %s from %s (%s): %s"
, "ADD_SUBNET", c->name,
+ c->hostname,
"invalid subnet string"
);
return false;
}
return false;
}
@@
-78,7
+78,7
@@
bool add_subnet_h(connection_t *c) {
if(tunnelserver && owner != myself && owner != c->node) {
/* in case of tunnelserver, ignore indirect subnet registrations */
if(tunnelserver && owner != myself && owner != c->node) {
/* in case of tunnelserver, ignore indirect subnet registrations */
- ifdebug(PROTOCOL) logger(LOG_WARNING,
_("Ignoring indirect %s from %s (%s) for %s")
,
+ ifdebug(PROTOCOL) logger(LOG_WARNING,
"Ignoring indirect %s from %s (%s) for %s"
,
"ADD_SUBNET", c->name, c->hostname, subnetstr);
return true;
}
"ADD_SUBNET", c->name, c->hostname, subnetstr);
return true;
}
@@
-97,7
+97,7
@@
bool add_subnet_h(connection_t *c) {
/* If we don't know this subnet, but we are the owner, retaliate with a DEL_SUBNET */
if(owner == myself) {
/* If we don't know this subnet, but we are the owner, retaliate with a DEL_SUBNET */
if(owner == myself) {
- ifdebug(PROTOCOL) logger(LOG_WARNING,
_("Got %s from %s (%s) for ourself")
,
+ ifdebug(PROTOCOL) logger(LOG_WARNING,
"Got %s from %s (%s) for ourself"
,
"ADD_SUBNET", c->name, c->hostname);
s.owner = myself;
send_del_subnet(c, &s);
"ADD_SUBNET", c->name, c->hostname);
s.owner = myself;
send_del_subnet(c, &s);
@@
-112,7
+112,7
@@
bool add_subnet_h(connection_t *c) {
for(cfg = lookup_config(c->config_tree, "Subnet"); cfg; cfg = lookup_config_next(c->config_tree, cfg)) {
if(!get_config_subnet(cfg, &allowed))
for(cfg = lookup_config(c->config_tree, "Subnet"); cfg; cfg = lookup_config_next(c->config_tree, cfg)) {
if(!get_config_subnet(cfg, &allowed))
-
return fals
e;
+
continu
e;
if(!subnet_compare(&s, allowed))
break;
if(!subnet_compare(&s, allowed))
break;
@@
-121,9
+121,9
@@
bool add_subnet_h(connection_t *c) {
}
if(!cfg) {
}
if(!cfg) {
- logger(LOG_WARNING,
_("Unauthorized %s from %s (%s) for %s")
,
- "ADD_SUBNET", c->name, c->hostname, subnetstr);
- return
fals
e;
+ logger(LOG_WARNING,
"Ignoring unauthorized %s from %s (%s): %s"
,
+
"ADD_SUBNET", c->name, c->hostname, subnetstr);
+ return
tru
e;
}
free_subnet(allowed);
}
free_subnet(allowed);
@@
-142,6
+142,11
@@
bool add_subnet_h(connection_t *c) {
if(!tunnelserver)
forward_request(c);
if(!tunnelserver)
forward_request(c);
+ /* Fast handoff of roaming MAC addresses */
+
+ if(s.type == SUBNET_MAC && owner != myself && (old = lookup_subnet(myself, &s)) && old->expires)
+ old->expires = now;
+
return true;
}
return true;
}
@@
-161,7
+166,7
@@
bool del_subnet_h(connection_t *c) {
subnet_t s = {0}, *find;
if(sscanf(c->buffer, "%*d %*x " MAX_STRING " " MAX_STRING, name, subnetstr) != 2) {
subnet_t s = {0}, *find;
if(sscanf(c->buffer, "%*d %*x " MAX_STRING " " MAX_STRING, name, subnetstr) != 2) {
- logger(LOG_ERR,
_("Got bad %s from %s (%s)")
, "DEL_SUBNET", c->name,
+ logger(LOG_ERR,
"Got bad %s from %s (%s)"
, "DEL_SUBNET", c->name,
c->hostname);
return false;
}
c->hostname);
return false;
}
@@
-169,16
+174,16
@@
bool del_subnet_h(connection_t *c) {
/* Check if owner name is valid */
if(!check_id(name)) {
/* Check if owner name is valid */
if(!check_id(name)) {
- logger(LOG_ERR,
_("Got bad %s from %s (%s): %s")
, "DEL_SUBNET", c->name,
- c->hostname,
_("invalid name")
);
+ logger(LOG_ERR,
"Got bad %s from %s (%s): %s"
, "DEL_SUBNET", c->name,
+ c->hostname,
"invalid name"
);
return false;
}
/* Check if subnet string is valid */
if(!str2net(&s, subnetstr)) {
return false;
}
/* Check if subnet string is valid */
if(!str2net(&s, subnetstr)) {
- logger(LOG_ERR,
_("Got bad %s from %s (%s): %s")
, "DEL_SUBNET", c->name,
- c->hostname,
_("invalid subnet string")
);
+ logger(LOG_ERR,
"Got bad %s from %s (%s): %s"
, "DEL_SUBNET", c->name,
+ c->hostname,
"invalid subnet string"
);
return false;
}
return false;
}
@@
-191,13
+196,13
@@
bool del_subnet_h(connection_t *c) {
if(tunnelserver && owner != myself && owner != c->node) {
/* in case of tunnelserver, ignore indirect subnet deletion */
if(tunnelserver && owner != myself && owner != c->node) {
/* in case of tunnelserver, ignore indirect subnet deletion */
- ifdebug(PROTOCOL) logger(LOG_WARNING,
_("Ignoring indirect %s from %s (%s) for %s")
,
+ ifdebug(PROTOCOL) logger(LOG_WARNING,
"Ignoring indirect %s from %s (%s) for %s"
,
"DEL_SUBNET", c->name, c->hostname, subnetstr);
return true;
}
if(!owner) {
"DEL_SUBNET", c->name, c->hostname, subnetstr);
return true;
}
if(!owner) {
- ifdebug(PROTOCOL) logger(LOG_WARNING,
_("Got %s from %s (%s) for %s which is not in our node tree")
,
+ ifdebug(PROTOCOL) logger(LOG_WARNING,
"Got %s from %s (%s) for %s which is not in our node tree"
,
"DEL_SUBNET", c->name, c->hostname, name);
return true;
}
"DEL_SUBNET", c->name, c->hostname, name);
return true;
}
@@
-209,7
+214,7
@@
bool del_subnet_h(connection_t *c) {
find = lookup_subnet(owner, &s);
if(!find) {
find = lookup_subnet(owner, &s);
if(!find) {
- ifdebug(PROTOCOL) logger(LOG_WARNING,
_("Got %s from %s (%s) for %s which does not appear in his subnet tree")
,
+ ifdebug(PROTOCOL) logger(LOG_WARNING,
"Got %s from %s (%s) for %s which does not appear in his subnet tree"
,
"DEL_SUBNET", c->name, c->hostname, name);
return true;
}
"DEL_SUBNET", c->name, c->hostname, name);
return true;
}
@@
-217,7
+222,7
@@
bool del_subnet_h(connection_t *c) {
/* If we are the owner of this subnet, retaliate with an ADD_SUBNET */
if(owner == myself) {
/* If we are the owner of this subnet, retaliate with an ADD_SUBNET */
if(owner == myself) {
- ifdebug(PROTOCOL) logger(LOG_WARNING,
_("Got %s from %s (%s) for ourself")
,
+ ifdebug(PROTOCOL) logger(LOG_WARNING,
"Got %s from %s (%s) for ourself"
,
"DEL_SUBNET", c->name, c->hostname);
send_add_subnet(c, find);
return true;
"DEL_SUBNET", c->name, c->hostname);
send_add_subnet(c, find);
return true;