From 7c0d73d94a2824ef2cddedb100f2c1d47bbd5751 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 5 Jun 2020 19:55:21 +0200 Subject: [PATCH] lldp: fix lldp_neighbor_equal() to compare lists of variants Fixes: 6c52d946fc8c ('lldp: add support for management address TLV') --- src/devices/nm-lldp-listener.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/devices/nm-lldp-listener.c b/src/devices/nm-lldp-listener.c index 34250f82fe..e1ca6b8d23 100644 --- a/src/devices/nm-lldp-listener.c +++ b/src/devices/nm-lldp-listener.c @@ -388,6 +388,19 @@ lldp_neighbor_equal (LldpNeighbor *a, LldpNeighbor *b) if (!nm_streq (a->attrs[attr_id].v_string, b->attrs[attr_id].v_string)) return FALSE; break; + case LLDP_ATTR_TYPE_ARRAY_OF_VARDICTS: { + NMCListElem *itr_a, *itr_b; + + if (c_list_length (&a->attrs[attr_id].v_variant_list) != c_list_length (&b->attrs[attr_id].v_variant_list)) + return FALSE; + itr_b = c_list_first_entry (&b->attrs[attr_id].v_variant_list, NMCListElem, lst); + c_list_for_each_entry (itr_a, &a->attrs[attr_id].v_variant_list, lst) { + if (!g_variant_equal (itr_a->data, itr_b->data)) + return FALSE; + itr_b = c_list_entry (&itr_b->lst, NMCListElem, lst); + } + break; + } default: nm_assert (a->attrs[attr_id].attr_type == LLDP_ATTR_TYPE_NONE); break;