util_nl_data_destroy(&(nl_data_arr[type]));
}
+static GVariant *__inm_rtnl_link_get_ifname(inm_rtnl_link_s *p_link)
+{
+ GVariant *ret = NULL;
+
+ ret = g_variant_new_string(p_link->iface_name);
+
+ return ret;
+}
+
+static GVariant *__inm_rtnl_link_get_ifidx(inm_rtnl_link_s *p_link)
+{
+ GVariant *ret = NULL;
+
+ ret = g_variant_new_int32(p_link->if_idx);
+
+ return ret;
+}
+
+static GVariant *__inm_rtnl_link_get_flags(inm_rtnl_link_s *p_link)
+{
+ GVariant *ret = NULL;
+
+ ret = g_variant_new_int32(p_link->flags);
+
+ return ret;
+}
+
+static GVariant *__inm_rtnl_link_get_operation_state(inm_rtnl_link_s *p_link)
+{
+ GVariant *ret = NULL;
+
+ ret = g_variant_new_int32(p_link->operation_state);
+
+ return ret;
+}
+
+static GVariant *__inm_rtnl_link_get_received_bytes(inm_rtnl_link_s *p_link)
+{
+ GVariant *ret = NULL;
+
+ ret = g_variant_new_uint64(p_link->received_bytes);
+
+ return ret;
+}
+
+static GVariant *__inm_rtnl_link_get_sent_bytes(inm_rtnl_link_s *p_link)
+{
+ GVariant *ret = NULL;
+
+ ret = g_variant_new_uint64(p_link->sent_bytes);
+
+ return ret;
+}
+
+static void __inm_rtnl_link_build(inm_rtnl_link_s *p_link, GVariantBuilder *gb_link)
+{
+ if (p_link->iface_name)
+ g_variant_builder_add(gb_link,
+ "{sv}",
+ "IfaceName",
+ __inm_rtnl_link_get_ifname(p_link));
+ g_variant_builder_add(gb_link,
+ "{sv}",
+ "IfIdx",
+ __inm_rtnl_link_get_ifidx(p_link));
+ g_variant_builder_add(gb_link,
+ "{sv}",
+ "Flags",
+ __inm_rtnl_link_get_flags(p_link));
+ g_variant_builder_add(gb_link,
+ "{sv}",
+ "OperationState",
+ __inm_rtnl_link_get_operation_state(p_link));
+ g_variant_builder_add(gb_link,
+ "{sv}",
+ "ReceivedBytes",
+ __inm_rtnl_link_get_received_bytes(p_link));
+ g_variant_builder_add(gb_link,
+ "{sv}",
+ "SentBytes",
+ __inm_rtnl_link_get_sent_bytes(p_link));
+}
+
+static void __inm_rtnl_get_link_variant(gpointer data, gpointer user_data)
+{
+ GVariantBuilder *outer = NULL;
+ GVariantBuilder *inner = NULL;
+ inm_rtnl_link_s *p_link = NULL;
+
+ outer = (GVariantBuilder *)user_data;
+ p_link = (inm_rtnl_link_s *)data;
+
+ inner = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+
+ __inm_rtnl_link_build(p_link, inner);
+
+ g_variant_builder_add(outer,
+ "(ia{sv})",
+ p_link->if_idx,
+ inner);
+
+ g_variant_builder_unref(inner);
+}
+
+int inm_rtnl_get_links_variant(GVariant **gvar_links)
+{
+ GVariantBuilder *builder = NULL;
+ int ret = INM_RTNL_ERROR_NONE;
+
+ __INM_FUNC_ENTER__;
+
+ if (g_list_links == NULL || g_list_length(g_list_links) == 0) {
+ INM_LOGW("No links");
+ return INM_RTNL_ERROR_OPERATION_FAILED;
+ }
+
+ builder = g_variant_builder_new(G_VARIANT_TYPE("a(ia{sv})"));
+ g_list_foreach(g_list_links,
+ __inm_rtnl_get_link_variant,
+ builder);
+
+ *gvar_links = g_variant_new("(a(ia{sv}))", builder);
+ g_variant_builder_unref(builder);
+
+ __INM_FUNC_EXIT__;
+ return ret;
+}
+
int inm_rtnl_mon_init(void)
{
__INM_FUNC_ENTER__;