gboolean gw_check;
} arping_data_s;
-static gboolean is_initialized;
-arping_callback arping_cb;
-gpointer cb_user_data;
-GSList *arping_data_list;
+typedef struct {
+ arping_callback arping_cb;
+ gpointer cb_user_data;
+ GSList *arping_data_list;
+
+} arping_mon_s;
+
+arping_mon_s *g_p_arping_mon = NULL;
static void __stop_arping(GQuark key_id,
gpointer value,
__INM_FUNC_ENTER__;
arping_data_s *arping_data;
- if (!data)
+ if (!data || !g_p_arping_mon)
return FALSE;
arping_data = (arping_data_s *)data;
__stop_arping(0, arping_data, NULL);
- if (arping_cb)
- arping_cb(arping_data->found,
+ if (g_p_arping_mon->arping_cb)
+ g_p_arping_mon->arping_cb(arping_data->found,
arping_data->if_name,
arping_data->target_ip,
arping_data->gw_check,
- cb_user_data);
+ g_p_arping_mon->cb_user_data);
arping_data->arp_user_timer_source_id = 0;
return G_SOURCE_REMOVE;
arping_data_s *arping_data;
inm_util_arp_data_s *arp_data;
- if (!data || !ah)
+ if (!data || !ah || !g_p_arping_mon)
return;
arping_data = (arping_data_s *)data;
INM_LOGI("arp found");
arping_data->found = TRUE;
- if (arping_cb)
- arping_cb(TRUE,
+ if (g_p_arping_mon->arping_cb)
+ g_p_arping_mon->arping_cb(TRUE,
arping_data->if_name,
arping_data->target_ip,
arping_data->gw_check,
- cb_user_data);
+ g_p_arping_mon->cb_user_data);
return;
}
GSList *node = NULL;
arping_data_s *cand = NULL;;
- node = arping_data_list;
+ node = g_p_arping_mon->arping_data_list;
while (node) {
cand = node->data;
arping_data->if_name = g_strdup(if_name);
arping_data->target_ip = g_strdup(target_ip);
- arping_data_list =
- g_slist_prepend(arping_data_list, arping_data);
+ g_p_arping_mon->arping_data_list =
+ g_slist_prepend(g_p_arping_mon->arping_data_list, arping_data);
arping_data->arp_data.sock = -1;
__INM_FUNC_ENTER__;
- if (!is_initialized) {
+ if (!g_p_arping_mon) {
__INM_FUNC_EXIT__;
return INM_ARPING_ERROR_NOT_INITIALIZED;
}
__INM_FUNC_ENTER__;
- if (!is_initialized) {
+ if (!g_p_arping_mon) {
__INM_FUNC_EXIT__;
return INM_ARPING_ERROR_NOT_INITIALIZED;
}
}
REMOVE_G_SOURCE(arping_data->arp_user_timer_source_id);
- arping_data_list =
- g_slist_remove(arping_data_list, arping_data);
+ g_p_arping_mon->arping_data_list =
+ g_slist_remove(g_p_arping_mon->arping_data_list, arping_data);
g_free(arping_data->if_name);
g_free(arping_data->target_ip);
gint ret = INM_ARPING_ERROR_NONE;
__INM_FUNC_ENTER__;
- if (!is_initialized) {
+ if (!g_p_arping_mon) {
__INM_FUNC_EXIT__;
return INM_ARPING_ERROR_NOT_INITIALIZED;
}
- arping_cb = cb;
- cb_user_data = user_data;
+ g_p_arping_mon->arping_cb = cb;
+ g_p_arping_mon->cb_user_data = user_data;
__INM_FUNC_EXIT__;
return ret;
gint ret = INM_ARPING_ERROR_NONE;
__INM_FUNC_ENTER__;
- if (!is_initialized) {
+ if (!g_p_arping_mon) {
__INM_FUNC_EXIT__;
return INM_ARPING_ERROR_NOT_INITIALIZED;
}
- arping_cb = NULL;
- cb_user_data = NULL;
+ g_p_arping_mon->arping_cb = NULL;
+ g_p_arping_mon->cb_user_data = NULL;
__INM_FUNC_EXIT__;
return ret;
__INM_FUNC_ENTER__;
- is_initialized = TRUE;
+ if (g_p_arping_mon)
+ return ret;
+
+ g_p_arping_mon = g_try_malloc0(sizeof(arping_mon_s));
+ if (!g_p_arping_mon) {
+ __INM_FUNC_EXIT__;
+ return INM_ARPING_ERROR_OPERATION_FAILED;
+ }
__INM_FUNC_EXIT__;
return ret;
__INM_FUNC_ENTER__;
- if (!is_initialized) {
+ if (!g_p_arping_mon) {
__INM_FUNC_EXIT__;
return INM_ARPING_ERROR_NOT_INITIALIZED;
}
- g_slist_free_full(arping_data_list, __destroy_arping_data);
- arping_data_list = NULL;
- arping_cb = NULL;
- cb_user_data = NULL;
+ g_slist_free_full(g_p_arping_mon->arping_data_list, __destroy_arping_data);
+ g_free(g_p_arping_mon);
+ g_p_arping_mon = NULL;
__INM_FUNC_EXIT__;
return ret;