projects
/
tinc
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
c1703ea
)
Make LocalDiscovery work for SPTPS packets.
author
Guus Sliepen
<guus@sliepen.org>
Thu, 21 Nov 2013 21:13:14 +0000
(22:13 +0100)
committer
Guus Sliepen
<guus@sliepen.org>
Thu, 21 Nov 2013 21:13:14 +0000
(22:13 +0100)
src/net_packet.c
patch
|
blob
|
history
src/node.h
patch
|
blob
|
history
diff --git
a/src/net_packet.c
b/src/net_packet.c
index
1159231
..
012085e
100644
(file)
--- a/
src/net_packet.c
+++ b/
src/net_packet.c
@@
-143,16
+143,15
@@
static void send_mtu_probe_handler(void *data) {
memset(packet.data, 0, 14);
randomize(packet.data + 14, len - 14);
packet.len = len;
memset(packet.data, 0, 14);
randomize(packet.data + 14, len - 14);
packet.len = len;
- if(i >= 4 && n->mtuprobes <= 10)
- packet.priority = -1;
- else
- packet.priority = 0;
+ packet.priority = 0;
+ n->status.broadcast = i >= 4 && n->mtuprobes <= 10 && n->prevedge;
logger(DEBUG_TRAFFIC, LOG_INFO, "Sending MTU probe length %d to %s (%s)", len, n->name, n->hostname);
send_udppacket(n, &packet);
}
logger(DEBUG_TRAFFIC, LOG_INFO, "Sending MTU probe length %d to %s (%s)", len, n->name, n->hostname);
send_udppacket(n, &packet);
}
+ n->status.broadcast = false;
n->probe_counter = 0;
gettimeofday(&n->probe_time, NULL);
n->probe_counter = 0;
gettimeofday(&n->probe_time, NULL);
@@
-734,9
+733,7
@@
static void send_udppacket(node_t *n, vpn_packet_t *origpkt) {
const sockaddr_t *sa;
int sock;
const sockaddr_t *sa;
int sock;
- /* Overloaded use of priority field: -1 means local broadcast */
-
- if(origpriority == -1 && n->prevedge)
+ if(n->status.broadcast)
choose_broadcast_address(n, &sa, &sock);
else
choose_udp_address(n, &sa, &sock);
choose_broadcast_address(n, &sa, &sock);
else
choose_udp_address(n, &sa, &sock);
@@
-788,7
+785,10
@@
bool send_sptps_data(void *handle, uint8_t type, const char *data, size_t len) {
const sockaddr_t *sa;
int sock;
const sockaddr_t *sa;
int sock;
- choose_udp_address(to, &sa, &sock);
+ if(to->status.broadcast)
+ choose_broadcast_address(to, &sa, &sock);
+ else
+ choose_udp_address(to, &sa, &sock);
if(sendto(listen_socket[sock].udp.fd, data, len, 0, &sa->sa, SALEN(sa->sa)) < 0 && !sockwouldblock(sockerrno)) {
if(sockmsgsize(sockerrno)) {
if(sendto(listen_socket[sock].udp.fd, data, len, 0, &sa->sa, SALEN(sa->sa)) < 0 && !sockwouldblock(sockerrno)) {
if(sockmsgsize(sockerrno)) {
diff --git
a/src/node.h
b/src/node.h
index
e704ba8
..
1c9f230
100644
(file)
--- a/
src/node.h
+++ b/
src/node.h
@@
-37,7
+37,8
@@
typedef struct node_status_t {
unsigned int indirect:1; /* 1 if this node is not directly reachable by us */
unsigned int sptps:1; /* 1 if this node supports SPTPS */
unsigned int udp_confirmed:1; /* 1 if the address is one that we received UDP traffic on */
unsigned int indirect:1; /* 1 if this node is not directly reachable by us */
unsigned int sptps:1; /* 1 if this node supports SPTPS */
unsigned int udp_confirmed:1; /* 1 if the address is one that we received UDP traffic on */
- unsigned int unused:24;
+ unsigned int broadcast:1; /* 1 if the next UDP packet should be broadcast to the local network */
+ unsigned int unused:23;
} node_status_t;
typedef struct node_t {
} node_status_t;
typedef struct node_t {