From d28f476b17afc9831d347cf481ac0bc9ba379b07 Mon Sep 17 00:00:00 2001 From: Logan007 Date: Wed, 29 Jul 2020 17:41:22 +0545 Subject: [PATCH] added MAC comparison for REGISTER_SUPER_ACK --- src/edge_utils.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/edge_utils.c b/src/edge_utils.c index 10f1746..dab8f40 100644 --- a/src/edge_utils.c +++ b/src/edge_utils.c @@ -999,7 +999,7 @@ static int handle_PACKET(n2n_edge_t * eee, if(from_supernode) { - if(!memcmp(pkt->dstMac, broadcast_mac, 6)) + if(!memcmp(pkt->dstMac, broadcast_mac, N2N_MAC_SIZE)) ++(eee->stats.rx_sup_broadcast); ++(eee->stats.rx_sup); @@ -1090,7 +1090,7 @@ static int handle_PACKET(n2n_edge_t * eee, uint8_t *dst_mac = (uint8_t*)eth_payload; /* Note: all elements of the_ip are in network order */ - if(!memcmp(dst_mac, broadcast_mac, 6)) + if(!memcmp(dst_mac, broadcast_mac, N2N_MAC_SIZE)) traceEvent(TRACE_DEBUG, "Broadcast packet [%s]", intoa(ntohl(*dst), ip_buf, sizeof(ip_buf))); else if((*dst != eee->device.ip_addr)) { @@ -1309,7 +1309,7 @@ static int find_peer_destination(n2n_edge_t * eee, int retval=0; time_t now = time(NULL); - if(!memcmp(mac_address, broadcast_mac, 6)) { + if(!memcmp(mac_address, broadcast_mac, N2N_MAC_SIZE)) { traceEvent(TRACE_DEBUG, "Broadcast destination peer, using supernode"); memcpy(destination, &(eee->supernode), sizeof(struct sockaddr_in)); return(0); @@ -1375,7 +1375,7 @@ static int send_packet(n2n_edge_t * eee, else { ++(eee->stats.tx_sup); - if(!memcmp(dstMac, broadcast_mac, 6)) + if(!memcmp(dstMac, broadcast_mac, N2N_MAC_SIZE)) ++(eee->stats.tx_sup_broadcast); } @@ -1732,14 +1732,14 @@ static void readFromIPSocket(n2n_edge_t * eee, int in_sock) { if(is_valid_peer_sock(®.sock)) orig_sender = &(reg.sock); - via_multicast = !memcmp(reg.dstMac, null_mac, 6); + via_multicast = !memcmp(reg.dstMac, null_mac, N2N_MAC_SIZE); - if(via_multicast && !memcmp(reg.srcMac, eee->device.mac_addr, 6)) { + if(via_multicast && !memcmp(reg.srcMac, eee->device.mac_addr, N2N_MAC_SIZE)) { traceEvent(TRACE_DEBUG, "Skipping REGISTER from self"); break; } - if(!via_multicast && memcmp(reg.dstMac, eee->device.mac_addr, 6)) { + if(!via_multicast && memcmp(reg.dstMac, eee->device.mac_addr, N2N_MAC_SIZE)) { traceEvent(TRACE_DEBUG, "Skipping REGISTER for other peer"); break; } @@ -1824,6 +1824,11 @@ static void readFromIPSocket(n2n_edge_t * eee, int in_sock) { sock_to_cstr(sockbuf2, orig_sender), (unsigned int)eee->sup_attempts); + 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->last_cookie, N2N_COOKIE_SIZE)) { if(ra.num_sn > 0)