summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2016-03-10 18:24:42 +0100
committerThomas Haller <thaller@redhat.com>2016-03-10 18:24:42 +0100
commit8542149e80d5b72656b53a4e7dc4642dc7826a62 (patch)
treeab9eea9fd71aa2b562b86f80cfcee38efa7ea22f
parent68c84b01678a5689a18bd21f3d7ec8e721fb405e (diff)
downloadNetworkManager-th/systemd-lldp-bgo763384.tar.gz
fixup! systemd: merge branch master into th/systemd-integrationth/systemd-lldp-bgo763384
-rw-r--r--src/devices/nm-lldp-listener.c95
1 files changed, 52 insertions, 43 deletions
diff --git a/src/devices/nm-lldp-listener.c b/src/devices/nm-lldp-listener.c
index 349d778bb2..7774848e3d 100644
--- a/src/devices/nm-lldp-listener.c
+++ b/src/devices/nm-lldp-listener.c
@@ -21,6 +21,7 @@
#include "nm-default.h"
#include <net/ethernet.h>
+#include <errno.h>
#include "sd-lldp.h"
#include "lldp.h"
@@ -274,7 +275,7 @@ process_lldp_neighbors (NMLldpListener *self)
NMLldpListenerPrivate *priv = NM_LLDP_LISTENER_GET_PRIVATE (self);
nm_auto_free sd_lldp_neighbor **neighbors = NULL;
GHashTable *hash;
- int num, i;
+ int num, i, r;
g_return_if_fail (priv->lldp_handle);
@@ -296,7 +297,6 @@ process_lldp_neighbors (NMLldpListener *self)
gsize chassis_id_len, port_id_len, len;
GValue *value;
const char *str;
- int r;
if (i >= MAX_NEIGHBORS)
break;
@@ -304,16 +304,16 @@ process_lldp_neighbors (NMLldpListener *self)
r = sd_lldp_neighbor_get_chassis_id (neighbors[i], &chassis_id_type,
&chassis_id, &chassis_id_len);
if (r < 0)
- continue;
+ goto next;
if (chassis_id_len < 1)
- continue;
+ goto next;
r = sd_lldp_neighbor_get_port_id (neighbors[i], &port_id_type,
&port_id, &port_id_len);
if (r < 0)
- continue;
+ goto next;
if (port_id_len < 1)
- continue;
+ goto next;
neigh = g_slice_new0 (LLDPNeighbor);
neigh->tlvs = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, gvalue_destroy);
@@ -321,7 +321,7 @@ process_lldp_neighbors (NMLldpListener *self)
neigh->port_id_type = port_id_type;
if (sd_lldp_neighbor_get_destination_address (neighbors[i], &neigh->destination_address) < 0)
- continue;
+ goto next;
switch (chassis_id_type) {
case LLDP_CHASSIS_SUBTYPE_INTERFACE_ALIAS:
@@ -335,7 +335,7 @@ process_lldp_neighbors (NMLldpListener *self)
break;
default:
_LOGD ("process: unsupported chassis ID type %d", chassis_id_type);
- continue;
+ goto next;
}
switch (port_id_type) {
@@ -350,7 +350,7 @@ process_lldp_neighbors (NMLldpListener *self)
break;
default:
_LOGD ("process: unsupported port ID type %d", port_id_type);
- continue;
+ goto next;
}
if (sd_lldp_neighbor_get_port_description (neighbors[i], &str) == 0) {
@@ -374,52 +374,59 @@ process_lldp_neighbors (NMLldpListener *self)
}
if (sd_lldp_neighbor_tlv_rewind (neighbors[i]) < 0)
- continue;
+ goto next;
do {
guint8 oui[3];
guint8 subtype;
- if (sd_lldp_neighbor_tlv_get_oui (neighbors[i], oui, &subtype) > 0) {
- if ( memcmp (oui, LLDP_OUI_802_1, sizeof (oui)) == 0
- && NM_IN_SET (subtype,
- LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID,
- LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID,
- LLDP_OUI_802_1_SUBTYPE_VLAN_NAME)) {
- if (sd_lldp_neighbor_tlv_get_raw (neighbors[i], &data, &len) < 0)
- continue;
-
- switch (subtype) {
- case LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID:
+ r = sd_lldp_neighbor_tlv_get_oui (neighbors[i], oui, &subtype);
+ if (r < 0) {
+ if (r == -ENXIO)
+ continue;
+ goto next;
+ }
+
+ if (memcmp (oui, LLDP_OUI_802_1, sizeof (oui)) != 0)
+ continue;
+
+ if (NM_IN_SET (subtype,
+ LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID,
+ LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID,
+ LLDP_OUI_802_1_SUBTYPE_VLAN_NAME)) {
+ if (sd_lldp_neighbor_tlv_get_raw (neighbors[i], &data, &len) < 0)
+ continue;
+
+ switch (subtype) {
+ case LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID:
#if 0
- if (sd_lldp_packet_read_port_vlan_id (packets[i], &data16) == 0) {
- value = gvalue_new_uint (data16);
- g_hash_table_insert (neigh->tlvs, NM_LLDP_ATTR_IEEE_802_1_PVID, value);
- }
+ if (sd_lldp_packet_read_port_vlan_id (packets[i], &data16) == 0) {
+ value = gvalue_new_uint (data16);
+ g_hash_table_insert (neigh->tlvs, NM_LLDP_ATTR_IEEE_802_1_PVID, value);
+ }
#endif
- break;
- case LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID:
+ break;
+ case LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID:
#if 0
- if (sd_lldp_neighbor_get_port_protocol_vlan_id (neighbors[i], &data8, &data16) == 0) {
- value = gvalue_new_uint (data16);
- g_hash_table_insert (neigh->tlvs, NM_LLDP_ATTR_IEEE_802_1_PPVID, value);
+ if (sd_lldp_neighbor_get_port_protocol_vlan_id (neighbors[i], &data8, &data16) == 0) {
+ value = gvalue_new_uint (data16);
+ g_hash_table_insert (neigh->tlvs, NM_LLDP_ATTR_IEEE_802_1_PPVID, value);
- value = gvalue_new_uint (data8);
- g_hash_table_insert (neigh->tlvs, NM_LLDP_ATTR_IEEE_802_1_PPVID_FLAGS, value);
- }
+ value = gvalue_new_uint (data8);
+ g_hash_table_insert (neigh->tlvs, NM_LLDP_ATTR_IEEE_802_1_PPVID_FLAGS, value);
+ }
#endif
- break;
- case LLDP_OUI_802_1_SUBTYPE_VLAN_NAME:
+ break;
+ case LLDP_OUI_802_1_SUBTYPE_VLAN_NAME:
#if 0
- if (sd_lldp_neighbor_get_vlan_name (neighbors[i], &data16, &str, &len) == 0) {
- value = gvalue_new_uint (data16);
- g_hash_table_insert (neigh->tlvs, NM_LLDP_ATTR_IEEE_802_1_VID, value);
+ if (sd_lldp_neighbor_get_vlan_name (neighbors[i], &data16, &str, &len) == 0) {
+ value = gvalue_new_uint (data16);
+ g_hash_table_insert (neigh->tlvs, NM_LLDP_ATTR_IEEE_802_1_VID, value);
- value = gvalue_new_str (str);
- g_hash_table_insert (neigh->tlvs, NM_LLDP_ATTR_IEEE_802_1_VLAN_NAME, value);
- }
-#endif
- break;
+ value = gvalue_new_str (str);
+ g_hash_table_insert (neigh->tlvs, NM_LLDP_ATTR_IEEE_802_1_VLAN_NAME, value);
}
+#endif
+ break;
}
}
} while (sd_lldp_neighbor_tlv_next (neighbors[i]) > 0);
@@ -429,6 +436,8 @@ process_lldp_neighbors (NMLldpListener *self)
g_hash_table_add (hash, neigh);
neigh = NULL;
+next:
+ ;
}
for (i = 0; neighbors && i < num; i++)