Make LocalDiscovery work for SPTPS packets.
This commit is contained in:
parent
c1703ea917
commit
3d41e7d712
2 changed files with 10 additions and 9 deletions
|
@ -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;
|
||||
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);
|
||||
}
|
||||
|
||||
n->status.broadcast = false;
|
||||
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;
|
||||
|
||||
/* 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);
|
||||
|
@ -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;
|
||||
|
||||
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)) {
|
||||
|
|
|
@ -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 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 {
|
||||
|
|
Loading…
Reference in a new issue