Add address to link variant 21/195521/2
authorYu <jiung.yu@samsung.com>
Fri, 14 Dec 2018 02:11:14 +0000 (11:11 +0900)
committerYu <jiung.yu@samsung.com>
Fri, 14 Dec 2018 09:08:40 +0000 (18:08 +0900)
Change-Id: I570517476bdb589655d52998233535ab3d2c9c73
Signed-off-by: Yu Jiung <jiung.yu@samsung.com>
src/inm-rtnl.c

index ce931ef086a2e82a1247a615f7649bfc2b730962..d7893d7d53d05d60fb5456d2da1b6af2852df50d 100644 (file)
@@ -1121,6 +1121,110 @@ static GVariant *__inm_rtnl_link_get_sent_bytes(inm_rtnl_link_s *p_link)
        return ret;
 }
 
+static GVariant *__inm_rtnl_addr_get_address(inm_rtnl_addr_s *p_addr)
+{
+       GVariant *ret = NULL;
+
+       ret = g_variant_new_string(p_addr->address);
+
+       return ret;
+}
+
+static GVariant *__inm_rtnl_addr_get_ifidx(inm_rtnl_addr_s *p_addr)
+{
+       GVariant *ret = NULL;
+
+       ret = g_variant_new_int32(p_addr->if_idx);
+
+       return ret;
+}
+
+static GVariant *__inm_rtnl_addr_get_family(inm_rtnl_addr_s *p_addr)
+{
+       GVariant *ret = NULL;
+
+       ret = g_variant_new_int32(p_addr->family);
+
+       return ret;
+}
+
+static GVariant *__inm_rtnl_addr_get_prefix_length(inm_rtnl_addr_s *p_addr)
+{
+       GVariant *ret = NULL;
+
+       ret = g_variant_new_int32(p_addr->prefix_length);
+
+       return ret;
+}
+
+static GVariant *__inm_rtnl_addr_get_scope(inm_rtnl_addr_s *p_addr)
+{
+       GVariant *ret = NULL;
+
+       ret = g_variant_new_int32(p_addr->scope);
+
+       return ret;
+}
+
+static void __inm_rtnl_get_address_variant(gpointer data, gpointer user_data)
+{
+       GVariantBuilder *outer = NULL;
+       GVariantBuilder *inner = NULL;
+       inm_rtnl_addr_s *p_addr = NULL;
+
+       outer = (GVariantBuilder *)user_data;
+       p_addr = (inm_rtnl_addr_s *)data;
+
+       inner = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+
+       if (p_addr->address)
+               g_variant_builder_add(inner,
+                                         "{sv}",
+                                         "Address",
+                                         __inm_rtnl_addr_get_address(p_addr));
+       g_variant_builder_add(inner,
+                             "{sv}",
+                             "IfIdx",
+                                 __inm_rtnl_addr_get_ifidx(p_addr));
+       g_variant_builder_add(inner,
+                             "{sv}",
+                             "Family",
+                                 __inm_rtnl_addr_get_family(p_addr));
+       g_variant_builder_add(inner,
+                             "{sv}",
+                             "PrefixLength",
+                                 __inm_rtnl_addr_get_prefix_length(p_addr));
+       g_variant_builder_add(inner,
+                             "{sv}",
+                             "Scope",
+                                 __inm_rtnl_addr_get_scope(p_addr));
+
+       g_variant_builder_add(outer,
+                             "(a{sv})",
+                             inner);
+
+       g_variant_builder_unref(inner);
+}
+
+static GVariant *__inm_rtnl_link_get_addresses(inm_rtnl_link_s *p_link)
+{
+       GVariantBuilder *builder = NULL;
+       GVariant *gvar_addresses = NULL;
+
+       __INM_FUNC_ENTER__;
+
+       builder = g_variant_builder_new(G_VARIANT_TYPE("a(a{sv})"));
+       g_list_foreach(p_link->list_addr,
+                       __inm_rtnl_get_address_variant,
+                       builder);
+
+       gvar_addresses = g_variant_new("(a(a{sv}))", builder);
+       g_variant_builder_unref(builder);
+
+       __INM_FUNC_EXIT__;
+       return gvar_addresses;
+}
+
 static void __inm_rtnl_link_build(inm_rtnl_link_s *p_link, GVariantBuilder *gb_link)
 {
        if (p_link->iface_name)
@@ -1148,6 +1252,10 @@ static void __inm_rtnl_link_build(inm_rtnl_link_s *p_link, GVariantBuilder *gb_l
                              "{sv}",
                              "SentBytes",
                                  __inm_rtnl_link_get_sent_bytes(p_link));
+       g_variant_builder_add(gb_link,
+                             "{sv}",
+                             "Addresses",
+                                 __inm_rtnl_link_get_addresses(p_link));
 }
 
 static void __inm_rtnl_get_link_variant(gpointer data, gpointer user_data)