|
@ -2233,7 +2233,7 @@ void process_udp (n2n_edge_t *eee, const struct sockaddr_in *sender_sock, const |
|
|
decode_PACKET(&pkt, &cmn, udp_buf, &rem, &idx); |
|
|
decode_PACKET(&pkt, &cmn, udp_buf, &rem, &idx); |
|
|
|
|
|
|
|
|
if(eee->conf.header_encryption == HEADER_ENCRYPTION_ENABLED) { |
|
|
if(eee->conf.header_encryption == HEADER_ENCRYPTION_ENABLED) { |
|
|
if(!find_peer_time_stamp_and_verify (eee, sn, pkt.srcMac, stamp, TIME_STAMP_ALLOW_JITTER)) { |
|
|
if(!find_peer_time_stamp_and_verify(eee, sn, pkt.srcMac, stamp, TIME_STAMP_ALLOW_JITTER)) { |
|
|
traceEvent(TRACE_DEBUG, "readFromIPSocket dropped PACKET due to time stamp error."); |
|
|
traceEvent(TRACE_DEBUG, "readFromIPSocket dropped PACKET due to time stamp error."); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
@ -2280,7 +2280,7 @@ void process_udp (n2n_edge_t *eee, const struct sockaddr_in *sender_sock, const |
|
|
via_multicast &= is_null_mac(reg.dstMac); |
|
|
via_multicast &= is_null_mac(reg.dstMac); |
|
|
|
|
|
|
|
|
if(eee->conf.header_encryption == HEADER_ENCRYPTION_ENABLED) { |
|
|
if(eee->conf.header_encryption == HEADER_ENCRYPTION_ENABLED) { |
|
|
if(!find_peer_time_stamp_and_verify (eee, sn, reg.srcMac, stamp, |
|
|
if(!find_peer_time_stamp_and_verify(eee, sn, reg.srcMac, stamp, |
|
|
via_multicast ? TIME_STAMP_ALLOW_JITTER : TIME_STAMP_NO_JITTER)) { |
|
|
via_multicast ? TIME_STAMP_ALLOW_JITTER : TIME_STAMP_NO_JITTER)) { |
|
|
traceEvent(TRACE_DEBUG, "readFromIPSocket dropped REGISTER due to time stamp error."); |
|
|
traceEvent(TRACE_DEBUG, "readFromIPSocket dropped REGISTER due to time stamp error."); |
|
|
return; |
|
|
return; |
|
@ -2330,7 +2330,7 @@ void process_udp (n2n_edge_t *eee, const struct sockaddr_in *sender_sock, const |
|
|
decode_REGISTER_ACK(&ra, &cmn, udp_buf, &rem, &idx); |
|
|
decode_REGISTER_ACK(&ra, &cmn, udp_buf, &rem, &idx); |
|
|
|
|
|
|
|
|
if(eee->conf.header_encryption == HEADER_ENCRYPTION_ENABLED) { |
|
|
if(eee->conf.header_encryption == HEADER_ENCRYPTION_ENABLED) { |
|
|
if(!find_peer_time_stamp_and_verify (eee, sn, ra.srcMac, stamp, TIME_STAMP_NO_JITTER)) { |
|
|
if(!find_peer_time_stamp_and_verify(eee, sn, ra.srcMac, stamp, TIME_STAMP_NO_JITTER)) { |
|
|
traceEvent(TRACE_DEBUG, "readFromIPSocket dropped REGISTER_ACK due to time stamp error."); |
|
|
traceEvent(TRACE_DEBUG, "readFromIPSocket dropped REGISTER_ACK due to time stamp error."); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
@ -2364,7 +2364,7 @@ void process_udp (n2n_edge_t *eee, const struct sockaddr_in *sender_sock, const |
|
|
decode_REGISTER_SUPER_ACK(&ra, &cmn, udp_buf, &rem, &idx, tmpbuf); |
|
|
decode_REGISTER_SUPER_ACK(&ra, &cmn, udp_buf, &rem, &idx, tmpbuf); |
|
|
|
|
|
|
|
|
if(eee->conf.header_encryption == HEADER_ENCRYPTION_ENABLED) { |
|
|
if(eee->conf.header_encryption == HEADER_ENCRYPTION_ENABLED) { |
|
|
if(!find_peer_time_stamp_and_verify (eee, sn, null_mac, stamp, TIME_STAMP_NO_JITTER)) { |
|
|
if(!find_peer_time_stamp_and_verify(eee, sn, ra.srcMac, stamp, TIME_STAMP_NO_JITTER)) { |
|
|
traceEvent(TRACE_DEBUG, "readFromIPSocket dropped REGISTER_SUPER_ACK due to time stamp error."); |
|
|
traceEvent(TRACE_DEBUG, "readFromIPSocket dropped REGISTER_SUPER_ACK due to time stamp error."); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
@ -2373,22 +2373,20 @@ void process_udp (n2n_edge_t *eee, const struct sockaddr_in *sender_sock, const |
|
|
if(is_valid_peer_sock(&ra.sock)) |
|
|
if(is_valid_peer_sock(&ra.sock)) |
|
|
orig_sender = &(ra.sock); |
|
|
orig_sender = &(ra.sock); |
|
|
|
|
|
|
|
|
traceEvent(TRACE_INFO, "Rx REGISTER_SUPER_ACK myMAC=%s [%s] (external %s). Attempts %u", |
|
|
traceEvent(TRACE_INFO, "Rx REGISTER_SUPER_ACK from MAC %s [%s] (external %s). Attempts %u", |
|
|
macaddr_str(mac_buf1, ra.edgeMac), |
|
|
macaddr_str(mac_buf1, ra.srcMac), |
|
|
sock_to_cstr(sockbuf1, &sender), |
|
|
sock_to_cstr(sockbuf1, &sender), |
|
|
sock_to_cstr(sockbuf2, orig_sender), |
|
|
sock_to_cstr(sockbuf2, orig_sender), |
|
|
(unsigned int)eee->sup_attempts); |
|
|
(unsigned int)eee->sup_attempts); |
|
|
|
|
|
|
|
|
// this even holds true for auto ip assignment as own mac is null_mac
|
|
|
|
|
|
if(memcmp(ra.edgeMac, eee->device.mac_addr, N2N_MAC_SIZE)) { |
|
|
|
|
|
traceEvent(TRACE_INFO, "readFromIPSocket dropped REGISTER_SUPER_ACK due to wrong addressing."); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if(0 == memcmp(ra.cookie, eee->curr_sn->last_cookie, N2N_COOKIE_SIZE)) { |
|
|
if(0 == memcmp(ra.cookie, eee->curr_sn->last_cookie, N2N_COOKIE_SIZE)) { |
|
|
|
|
|
|
|
|
handle_remote_auth(eee, sn, &(ra.auth)); |
|
|
handle_remote_auth(eee, sn, &(ra.auth)); |
|
|
|
|
|
|
|
|
|
|
|
HASH_DEL(eee->conf.supernodes, eee->curr_sn); |
|
|
|
|
|
memcpy(&eee->curr_sn->mac_addr, ra.srcMac, N2N_MAC_SIZE); |
|
|
|
|
|
HASH_ADD_PEER(eee->conf.supernodes, eee->curr_sn); |
|
|
|
|
|
|
|
|
payload = (n2n_REGISTER_SUPER_ACK_payload_t*)tmpbuf; |
|
|
payload = (n2n_REGISTER_SUPER_ACK_payload_t*)tmpbuf; |
|
|
|
|
|
|
|
|
// from here on, 'sn' gets used differently
|
|
|
// from here on, 'sn' gets used differently
|
|
@ -2427,9 +2425,9 @@ void process_udp (n2n_edge_t *eee, const struct sockaddr_in *sender_sock, const |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// update last_sup only on 'real' REGISTER_SUPER_ACKs, not on bootstrap ones (null_mac)
|
|
|
// update last_sup only on 'real' REGISTER_SUPER_ACKs, not on bootstrap ones (own MAC address
|
|
|
// this allows reliable in/out PACKET drop if not really registered with a supernode yet
|
|
|
// still null_mac) this allows reliable in/out PACKET drop if not really registered with a supernode yet
|
|
|
if(!is_null_mac(ra.edgeMac)) { |
|
|
if(!is_null_mac(eee->device.mac_addr)) { |
|
|
if(!eee->last_sup) { |
|
|
if(!eee->last_sup) { |
|
|
// indicates successful connection between the edge and a supernode
|
|
|
// indicates successful connection between the edge and a supernode
|
|
|
traceEvent(TRACE_NORMAL, "[OK] Edge Peer <<< ================ >>> Super Node"); |
|
|
traceEvent(TRACE_NORMAL, "[OK] Edge Peer <<< ================ >>> Super Node"); |
|
@ -2446,7 +2444,7 @@ void process_udp (n2n_edge_t *eee, const struct sockaddr_in *sender_sock, const |
|
|
* based on its NAT configuration. */ |
|
|
* based on its NAT configuration. */ |
|
|
//eee->conf.register_interval = ra.lifetime;
|
|
|
//eee->conf.register_interval = ra.lifetime;
|
|
|
|
|
|
|
|
|
if(eee->cb.sn_registration_updated && !is_null_mac(ra.edgeMac)) |
|
|
if(eee->cb.sn_registration_updated && !is_null_mac(eee->device.mac_addr)) |
|
|
eee->cb.sn_registration_updated(eee, now, &sender); |
|
|
eee->cb.sn_registration_updated(eee, now, &sender); |
|
|
|
|
|
|
|
|
} else { |
|
|
} else { |
|
@ -2495,7 +2493,7 @@ void process_udp (n2n_edge_t *eee, const struct sockaddr_in *sender_sock, const |
|
|
decode_PEER_INFO(&pi, &cmn, udp_buf, &rem, &idx); |
|
|
decode_PEER_INFO(&pi, &cmn, udp_buf, &rem, &idx); |
|
|
|
|
|
|
|
|
if(eee->conf.header_encryption == HEADER_ENCRYPTION_ENABLED) { |
|
|
if(eee->conf.header_encryption == HEADER_ENCRYPTION_ENABLED) { |
|
|
if(!find_peer_time_stamp_and_verify (eee, sn, null_mac, stamp, TIME_STAMP_ALLOW_JITTER)) { |
|
|
if(!find_peer_time_stamp_and_verify(eee, sn, null_mac, stamp, TIME_STAMP_ALLOW_JITTER)) { |
|
|
traceEvent(TRACE_DEBUG, "readFromIPSocket dropped PEER_INFO due to time stamp error."); |
|
|
traceEvent(TRACE_DEBUG, "readFromIPSocket dropped PEER_INFO due to time stamp error."); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
@ -2731,7 +2729,7 @@ int run_edge_loop (n2n_edge_t *eee, int *keep_running) { |
|
|
|
|
|
|
|
|
// external
|
|
|
// external
|
|
|
if(FD_ISSET(eee->sock, &socket_mask)) { |
|
|
if(FD_ISSET(eee->sock, &socket_mask)) { |
|
|
if (0 != fetch_and_eventually_process_data (eee, eee->sock, |
|
|
if (0 != fetch_and_eventually_process_data(eee, eee->sock, |
|
|
pktbuf, &expected, &position, |
|
|
pktbuf, &expected, &position, |
|
|
now)) { |
|
|
now)) { |
|
|
*keep_running = 0; |
|
|
*keep_running = 0; |
|
@ -2751,7 +2749,6 @@ int run_edge_loop (n2n_edge_t *eee, int *keep_running) { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#ifndef SKIP_MULTICAST_PEERS_DISCOVERY |
|
|
#ifndef SKIP_MULTICAST_PEERS_DISCOVERY |
|
|
|
|
|
|
|
|
if(FD_ISSET(eee->udp_multicast_sock, &socket_mask)) { |
|
|
if(FD_ISSET(eee->udp_multicast_sock, &socket_mask)) { |
|
|
if (0 != fetch_and_eventually_process_data (eee, eee->udp_multicast_sock, |
|
|
if (0 != fetch_and_eventually_process_data (eee, eee->udp_multicast_sock, |
|
|
pktbuf, &expected, &position, |
|
|
pktbuf, &expected, &position, |
|
|