summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2016-03-11 12:40:10 +0100
committerThomas Haller <thaller@redhat.com>2016-03-17 15:00:48 +0100
commit2cf562f58e550da72710c6fec3ee79494f22e4c8 (patch)
tree3b09cf1cc05a1a1c84bdd552d782ba3bcef23f02
parenta16da9c6a8259d4a0b48a955988a83b3031498e6 (diff)
downloadNetworkManager-2cf562f58e550da72710c6fec3ee79494f22e4c8.tar.gz
lldp: factor out lldp_neighbor_to_variant()
-rw-r--r--src/devices/nm-lldp-listener.c110
1 files changed, 58 insertions, 52 deletions
diff --git a/src/devices/nm-lldp-listener.c b/src/devices/nm-lldp-listener.c
index 345b80d90f..896a1278d9 100644
--- a/src/devices/nm-lldp-listener.c
+++ b/src/devices/nm-lldp-listener.c
@@ -464,6 +464,61 @@ lldp_neighbor_new (sd_lldp_neighbor *neighbor_sd, GError **error)
return neigh_result;
}
+static GVariant *
+lldp_neighbor_to_variant (LldpNeighbor *neigh)
+{
+ GVariantBuilder builder;
+ GHashTableIter val_iter;
+ gpointer key, val;
+ const char *dest_str;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+
+ g_variant_builder_add (&builder, "{sv}",
+ NM_LLDP_ATTR_CHASSIS_ID_TYPE,
+ g_variant_new_uint32 (neigh->chassis_id_type));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_LLDP_ATTR_CHASSIS_ID,
+ g_variant_new_string (neigh->chassis_id));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_LLDP_ATTR_PORT_ID_TYPE,
+ g_variant_new_uint32 (neigh->port_id_type));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_LLDP_ATTR_PORT_ID,
+ g_variant_new_string (neigh->port_id));
+
+ if (ether_addr_equal (&neigh->destination_address, LLDP_MAC_NEAREST_BRIDGE))
+ dest_str = NM_LLDP_DEST_NEAREST_BRIDGE;
+ else if (ether_addr_equal (&neigh->destination_address, LLDP_MAC_NEAREST_NON_TPMR_BRIDGE))
+ dest_str = NM_LLDP_DEST_NEAREST_NON_TPMR_BRIDGE;
+ else if (ether_addr_equal (&neigh->destination_address, LLDP_MAC_NEAREST_CUSTOMER_BRIDGE))
+ dest_str = NM_LLDP_DEST_NEAREST_CUSTOMER_BRIDGE;
+ else
+ dest_str = NULL;
+ if (dest_str) {
+ g_variant_builder_add (&builder, "{sv}",
+ NM_LLDP_ATTR_DESTINATION,
+ g_variant_new_string (dest_str));
+ }
+
+ g_hash_table_iter_init (&val_iter, neigh->tlvs);
+ while (g_hash_table_iter_next (&val_iter, &key, &val)) {
+ GValue *item = val;
+
+ if (G_VALUE_HOLDS_STRING (item)) {
+ g_variant_builder_add (&builder, "{sv}",
+ key,
+ g_variant_new_string (g_value_get_string (item)));
+ } else if (G_VALUE_HOLDS_UINT (item)) {
+ g_variant_builder_add (&builder, "{sv}",
+ key,
+ g_variant_new_uint32 (g_value_get_uint (item)));
+ }
+ }
+
+ return g_variant_builder_end (&builder);
+}
+
/*****************************************************************************/
static gboolean
@@ -703,7 +758,7 @@ nm_lldp_listener_is_running (NMLldpListener *self)
GVariant *
nm_lldp_listener_get_neighbors (NMLldpListener *self)
{
- GVariantBuilder array_builder, neigh_builder;
+ GVariantBuilder array_builder;
GHashTableIter iter;
NMLldpListenerPrivate *priv;
LldpNeighbor *neigh;
@@ -718,57 +773,8 @@ nm_lldp_listener_get_neighbors (NMLldpListener *self)
g_variant_builder_init (&array_builder, G_VARIANT_TYPE ("aa{sv}"));
g_hash_table_iter_init (&iter, priv->lldp_neighbors);
- while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &neigh)) {
- GHashTableIter val_iter;
- gpointer key, val;
- const char *dest_str;
-
- g_variant_builder_init (&neigh_builder, G_VARIANT_TYPE ("a{sv}"));
-
- g_variant_builder_add (&neigh_builder, "{sv}",
- NM_LLDP_ATTR_CHASSIS_ID_TYPE,
- g_variant_new_uint32 (neigh->chassis_id_type));
- g_variant_builder_add (&neigh_builder, "{sv}",
- NM_LLDP_ATTR_CHASSIS_ID,
- g_variant_new_string (neigh->chassis_id));
- g_variant_builder_add (&neigh_builder, "{sv}",
- NM_LLDP_ATTR_PORT_ID_TYPE,
- g_variant_new_uint32 (neigh->port_id_type));
- g_variant_builder_add (&neigh_builder, "{sv}",
- NM_LLDP_ATTR_PORT_ID,
- g_variant_new_string (neigh->port_id));
-
- if (ether_addr_equal (&neigh->destination_address, LLDP_MAC_NEAREST_BRIDGE))
- dest_str = NM_LLDP_DEST_NEAREST_BRIDGE;
- else if (ether_addr_equal (&neigh->destination_address, LLDP_MAC_NEAREST_NON_TPMR_BRIDGE))
- dest_str = NM_LLDP_DEST_NEAREST_NON_TPMR_BRIDGE;
- else if (ether_addr_equal (&neigh->destination_address, LLDP_MAC_NEAREST_CUSTOMER_BRIDGE))
- dest_str = NM_LLDP_DEST_NEAREST_CUSTOMER_BRIDGE;
- else
- dest_str = NULL;
- if (dest_str) {
- g_variant_builder_add (&neigh_builder, "{sv}",
- NM_LLDP_ATTR_DESTINATION,
- g_variant_new_string (dest_str));
- }
-
- g_hash_table_iter_init (&val_iter, neigh->tlvs);
- while (g_hash_table_iter_next (&val_iter, &key, &val)) {
- GValue *item = val;
-
- if (G_VALUE_HOLDS_STRING (item)) {
- g_variant_builder_add (&neigh_builder, "{sv}",
- key,
- g_variant_new_string (g_value_get_string (item)));
- } else if (G_VALUE_HOLDS_UINT (item)) {
- g_variant_builder_add (&neigh_builder, "{sv}",
- key,
- g_variant_new_uint32 (g_value_get_uint (item)));
- }
- }
-
- g_variant_builder_add (&array_builder, "a{sv}", &neigh_builder);
- }
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &neigh))
+ g_variant_builder_add_value (&array_builder, lldp_neighbor_to_variant (neigh));
priv->variant = g_variant_ref_sink (g_variant_builder_end (&array_builder));