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);
|
memset(packet.data, 0, 14);
|
||||||
randomize(packet.data + 14, len - 14);
|
randomize(packet.data + 14, len - 14);
|
||||||
packet.len = len;
|
packet.len = len;
|
||||||
if(i >= 4 && n->mtuprobes <= 10)
|
packet.priority = 0;
|
||||||
packet.priority = -1;
|
n->status.broadcast = i >= 4 && n->mtuprobes <= 10 && n->prevedge;
|
||||||
else
|
|
||||||
packet.priority = 0;
|
|
||||||
|
|
||||||
logger(DEBUG_TRAFFIC, LOG_INFO, "Sending MTU probe length %d to %s (%s)", len, n->name, n->hostname);
|
logger(DEBUG_TRAFFIC, LOG_INFO, "Sending MTU probe length %d to %s (%s)", len, n->name, n->hostname);
|
||||||
|
|
||||||
send_udppacket(n, &packet);
|
send_udppacket(n, &packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n->status.broadcast = false;
|
||||||
n->probe_counter = 0;
|
n->probe_counter = 0;
|
||||||
gettimeofday(&n->probe_time, NULL);
|
gettimeofday(&n->probe_time, NULL);
|
||||||
|
|
||||||
|
@ -734,9 +733,7 @@ static void send_udppacket(node_t *n, vpn_packet_t *origpkt) {
|
||||||
const sockaddr_t *sa;
|
const sockaddr_t *sa;
|
||||||
int sock;
|
int sock;
|
||||||
|
|
||||||
/* Overloaded use of priority field: -1 means local broadcast */
|
if(n->status.broadcast)
|
||||||
|
|
||||||
if(origpriority == -1 && n->prevedge)
|
|
||||||
choose_broadcast_address(n, &sa, &sock);
|
choose_broadcast_address(n, &sa, &sock);
|
||||||
else
|
else
|
||||||
choose_udp_address(n, &sa, &sock);
|
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;
|
const sockaddr_t *sa;
|
||||||
int sock;
|
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(sendto(listen_socket[sock].udp.fd, data, len, 0, &sa->sa, SALEN(sa->sa)) < 0 && !sockwouldblock(sockerrno)) {
|
||||||
if(sockmsgsize(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 indirect:1; /* 1 if this node is not directly reachable by us */
|
||||||
unsigned int sptps:1; /* 1 if this node supports SPTPS */
|
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 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;
|
} node_status_t;
|
||||||
|
|
||||||
typedef struct node_t {
|
typedef struct node_t {
|
||||||
|
|
Loading…
Reference in a new issue