Browse Source

Minor cleanup

pull/282/head
Luca Deri 4 years ago
parent
commit
c6b7b67a6a
  1. 48
      android/edge_android.c
  2. 60
      src/edge_utils.c

48
android/edge_android.c

@ -278,6 +278,54 @@ int stop_edge_v2(void)
return 0; return 0;
} }
/* ************************************** */
static char arp_packet[] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* Dest mac */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Src mac */
0x08, 0x06, /* ARP */
0x00, 0x01, /* Ethernet */
0x08, 0x00, /* IP */
0x06, /* Hw Size */
0x04, /* Protocol Size */
0x00, 0x01, /* ARP Request */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Src mac */
0x00, 0x00, 0x00, 0x00, /* Src IP */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Target mac */
0x00, 0x00, 0x00, 0x00 /* Target IP */
};
/* ************************************** */
static int build_unicast_arp(char *buffer, size_t buffer_len, uint32_t target, tuntap_dev *device) {
if(buffer_len < sizeof(arp_packet)) return(-1);
memcpy(buffer, arp_packet, sizeof(arp_packet));
memcpy(&buffer[6], device->mac_addr, 6);
memcpy(&buffer[22], device->mac_addr, 6);
memcpy(&buffer[28], &device->ip_addr, 4);
memcpy(&buffer[32], broadcast_mac, 6);
memcpy(&buffer[38], &target, 4);
return(sizeof(arp_packet));
}
/* ************************************** */
/** Called periodically to update the gateway MAC address. The ARP reply packet
is handled in handle_PACKET . */
static void update_gateway_mac(n2n_edge_t *eee) {
if(eee->gateway_ip != 0) {
size_t len;
char buffer[48];
len = build_unicast_arp(buffer, sizeof(buffer), eee->gateway_ip, &eee->device);
traceEvent(TRACE_DEBUG, "Updating gateway mac");
send_packet2net(eee, (uint8_t*)buffer, len);
}
}
#endif /* #ifdef __ANDROID_NDK__ */ #endif /* #ifdef __ANDROID_NDK__ */
/* ************************************** */ /* ************************************** */

60
src/edge_utils.c

@ -43,6 +43,12 @@ static void check_known_peer_sock_change(n2n_edge_t * eee,
/* ************************************** */ /* ************************************** */
#ifdef __ANDROID_NDK__
#include "../android/edge_android.c"
#endif
/* ************************************** */
int edge_verify_conf(const n2n_edge_conf_t *conf) { int edge_verify_conf(const n2n_edge_conf_t *conf) {
if(conf->community_name[0] == 0) if(conf->community_name[0] == 0)
return(-1); return(-1);
@ -1573,54 +1579,6 @@ static void readFromTAPSocket(n2n_edge_t * eee) {
/* ************************************** */ /* ************************************** */
#ifdef __ANDROID_NDK__
static char arp_packet[] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* Dest mac */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Src mac */
0x08, 0x06, /* ARP */
0x00, 0x01, /* Ethernet */
0x08, 0x00, /* IP */
0x06, /* Hw Size */
0x04, /* Protocol Size */
0x00, 0x01, /* ARP Request */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Src mac */
0x00, 0x00, 0x00, 0x00, /* Src IP */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Target mac */
0x00, 0x00, 0x00, 0x00 /* Target IP */
};
/* ************************************** */
static int build_unicast_arp(char *buffer, size_t buffer_len, uint32_t target, tuntap_dev *device) {
if(buffer_len < sizeof(arp_packet)) return(-1);
memcpy(buffer, arp_packet, sizeof(arp_packet));
memcpy(&buffer[6], device->mac_addr, 6);
memcpy(&buffer[22], device->mac_addr, 6);
memcpy(&buffer[28], &device->ip_addr, 4);
memcpy(&buffer[32], broadcast_mac, 6);
memcpy(&buffer[38], &target, 4);
return(sizeof(arp_packet));
}
/* ************************************** */
/** Called periodically to update the gateway MAC address. The ARP reply packet
is handled in handle_PACKET . */
static void update_gateway_mac(n2n_edge_t *eee) {
if(eee->gateway_ip != 0) {
size_t len;
char buffer[48];
len = build_unicast_arp(buffer, sizeof(buffer), eee->gateway_ip, &eee->device);
traceEvent(TRACE_DEBUG, "Updating gateway mac");
send_packet2net(eee, (uint8_t*)buffer, len);
}
}
#endif
/* ************************************** */ /* ************************************** */
@ -1824,10 +1782,12 @@ static void readFromIPSocket(n2n_edge_t * eee, int in_sock) {
#ifdef __ANDROID_NDK__ #ifdef __ANDROID_NDK__
int change = 0; int change = 0;
pthread_mutex_lock(&g_status->mutex); pthread_mutex_lock(&g_status->mutex);
change = g_status->running_status == EDGE_STAT_CONNECTED ? 0 : 1; change = g_status->running_status == EDGE_STAT_CONNECTED ? 0 : 1;
g_status->running_status = EDGE_STAT_CONNECTED; g_status->running_status = EDGE_STAT_CONNECTED;
pthread_mutex_unlock(&g_status->mutex); pthread_mutex_unlock(&g_status->mutex);
if (change) { if (change) {
g_status->report_edge_status(); g_status->report_edge_status();
} }
@ -2557,7 +2517,3 @@ int quick_edge_init(char *device_name, char *community_name,
} }
/* ************************************** */ /* ************************************** */
#ifdef __ANDROID_NDK__
#include "../android/edge_android.c"
#endif

Loading…
Cancel
Save