From: Dennis Flynn <drfl...@avaya.com>

This commit fixes a bug where the i-sid/vlan mapping structures associated with
an lldp-enabled port were not being freed during general port cleanup.

Signed-off-by: Dennis Flynn <drfl...@avaya.com>

diff --git a/lib/lldp/lldpd-structs.c b/lib/lldp/lldpd-structs.c
index b78c2e1..71c4f5e 100644
--- a/lib/lldp/lldpd-structs.c
+++ b/lib/lldp/lldpd-structs.c
@@ -93,17 +93,41 @@ lldpd_remote_cleanup(struct lldpd_hardware *hw,
     }
 }
 
+/* Cleanup the auto-attach mappings attached to port.
+ */
+static void
+lldpd_aa_maps_cleanup(struct lldpd_port *port)
+{
+    struct lldpd_aa_isid_vlan_maps_tlv *isid_vlan_map = NULL;
+    struct lldpd_aa_isid_vlan_maps_tlv *isid_vlan_map_next = NULL;
+
+    if (!list_is_empty(&port->p_isid_vlan_maps)) {
+
+        LIST_FOR_EACH_SAFE (isid_vlan_map, isid_vlan_map_next, m_entries,
+                            &port->p_isid_vlan_maps) {
+
+            list_remove(&isid_vlan_map->m_entries);
+            free(isid_vlan_map);
+        }
+
+        list_init(&port->p_isid_vlan_maps);
+    }
+}
+
 /* If `all' is true, clear all information, including information that
    are not refreshed periodically. Port should be freed manually. */
 void
 lldpd_port_cleanup(struct lldpd_port *port, bool all)
 {
     /* We set these to NULL so we don't free wrong memory */
-
     free(port->p_id);
     port->p_id = NULL;
     free(port->p_descr);
     port->p_descr = NULL;
+
+    /* Cleanup auto-attach mappings */
+    lldpd_aa_maps_cleanup(port);
+
     if (all) {
         free(port->p_lastframe);
         /* Chassis may not have been attributed, yet.*/
-- 
1.8.3.1

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to