int ioctl_sock;
static bool initial_bursts = true;
-bool is_ip_conflict_detect_enabled = true;
+bool is_ip_conflict_detect_enabled = false;
static gboolean send_arp(gpointer data);
static void __netconfig_wifi_notify_ip_conflict(char *state, char *mac);
ip_conflict_state_e conflict_state = NETCONFIG_IP_CONFLICT_STATE_CONFLICT_NOT_DETECTED;
initial_bursts = true;
}
+ if (sd->timer_id > 0)
+ g_source_remove(sd->timer_id);
sd->timer_id = g_timeout_add(sd->timeout, send_arp, sd);
return G_SOURCE_REMOVE;
}
int ifindex = 0;
errno = 0;
const char *default_ip = NULL;
+ const char *if_name = NULL;
static int initial_send_arp_count = 0;
if (initial_bursts && initial_send_arp_count >= INITIAL_BURST_ARP_COUNT) {
memset(&net_ifr, 0, sizeof(net_ifr));
/* ifreq structure creation */
- size_t if_name_len = strlen(netconfig_get_default_ifname());
+ if_name = netconfig_get_default_ifname();
+ size_t if_name_len = strlen(if_name);
+
+ if (if_name_len == 0) {
+ INFO("Error : Unable to get interface name ");
+ goto err;
+ }
+
if (if_name_len < sizeof(net_ifr.ifr_name)) {
memcpy(net_ifr.ifr_name, netconfig_get_default_ifname(), if_name_len);
net_ifr.ifr_name[if_name_len] = 0;
}
if (ioctl(sd->chk_conflict_sd, SIOCGIFINDEX, &net_ifr) == -1) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- INFO("ioctl Failed. Error..... = %s\n", error_buf);
+ INFO("ioctl Failed. Error..... = %s\n",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
goto err;
}
memcpy(addr.sll_addr, broadcast_addr, ETHER_ADDR_LEN);
if (sendto(sd->chk_conflict_sd, &arp, sizeof(arp), 0, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- INFO("Sending ARP Packet Failed. Error. = %s\n", error_buf);
+ INFO("Sending ARP Packet Failed. Error. = %s\n",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
/* close socket */
if (-1 < sd->chk_conflict_sd) {
close(sd->chk_conflict_sd);
/* reopen socket */
if ((sd->chk_conflict_sd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ARP))) == -1) {
INFO("socket %d", sd->chk_conflict_sd);
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- INFO("socket Failed. Error = %s\n", error_buf);
+ INFO("socket Failed. Error = %s\n",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
}
goto err;
} else {
}
g_source_remove(sd->timer_id);
+ sd->timer_id = 0;
if (conflict_state == NETCONFIG_IP_CONFLICT_STATE_CONFLICT_DETECTED || initial_bursts)
sd->timeout = BURST_ARP_SEND_TIME;
struct sock_data * start_ip_conflict_mon(void)
{
- if (is_ip_conflict_detect_enabled == false) {
- INFO("detection mode is set to false");
+ if (is_ip_conflict_detect_enabled == true) {
+ INFO("detection mode is set to true");
return NULL;
}
sd->iteration = 0;
if ((sd->chk_conflict_sd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ARP))) == -1) {
- strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
- INFO("socket Failed. Error = %s\n", error_buf);
+ INFO("socket Failed. Error = %s\n",
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
g_free(sd);
return NULL;
} else {
sd->timeout = td.initial_time;
send_arp(sd);
+ is_ip_conflict_detect_enabled = true;
+ conflict_state = NETCONFIG_IP_CONFLICT_STATE_CONFLICT_NOT_DETECTED;
return sd;
}
}
}
g_free(sd);
sd = NULL;
+ is_ip_conflict_detect_enabled = false;
+ conflict_state = NETCONFIG_IP_CONFLICT_STATE_UNKNOWN;
INFO("Monitoring stopped");
}
if (detect == false) {
- is_ip_conflict_detect_enabled = false;
- conflict_state = NETCONFIG_IP_CONFLICT_STATE_UNKNOWN;
if (sd != NULL)
stop_ip_conflict_mon();
else {
return TRUE;
}
} else {
- is_ip_conflict_detect_enabled = true;
- conflict_state = NETCONFIG_IP_CONFLICT_STATE_CONFLICT_NOT_DETECTED;
if (sd == NULL) {
if (start_ip_conflict_mon() == NULL) {
INFO("Failed to start IP conflict monitoring");