{
struct ifaddrs *ifa;
char addrstrbuf[INET6_ADDRSTRLEN];
- struct lldpd_mgmt *mgmt, *mgmt_next;
+ struct lldpd_mgmt *mgmt;
void *sin_addr_ptr;
size_t sin_addr_size;
char *mgmt_pattern_ptr;
int af;
- for (mgmt = TAILQ_FIRST(&LOCAL_CHASSIS(cfg)->c_mgmt); mgmt;
- mgmt = mgmt_next) {
- mgmt_next = TAILQ_NEXT(mgmt, m_entries);
- TAILQ_REMOVE(&LOCAL_CHASSIS(cfg)->c_mgmt, mgmt, m_entries);
- free(mgmt);
- }
+ lldpd_chassis_mgmt_cleanup(LOCAL_CHASSIS(cfg));
/* Find management addresses */
for (af = LLDPD_AF_UNSPEC + 1; af != LLDPD_AF_LAST; af++) {
return mgmt;
}
+void
+lldpd_chassis_mgmt_cleanup(struct lldpd_chassis *chassis)
+{
+ struct lldpd_mgmt *mgmt, *mgmt_next;
+ for (mgmt = TAILQ_FIRST(&chassis->c_mgmt);
+ mgmt != NULL;
+ mgmt = mgmt_next) {
+ mgmt_next = TAILQ_NEXT(mgmt, m_entries);
+ TAILQ_REMOVE(&chassis->c_mgmt, mgmt, m_entries);
+ free(mgmt);
+ }
+}
+
void
lldpd_chassis_cleanup(struct lldpd_chassis *chassis, int all)
{
free(chassis->c_id);
free(chassis->c_name);
free(chassis->c_descr);
+ lldpd_chassis_mgmt_cleanup(chassis);
if (all)
free(chassis);
}
void lldpd_remote_cleanup(struct lldpd *, struct lldpd_hardware *, int);
void lldpd_port_cleanup(struct lldpd*, struct lldpd_port *, int);
struct lldpd_mgmt *lldpd_alloc_mgmt(int family, void *addr, size_t addrsize, u_int32_t iface);
+void lldpd_chassis_mgmt_cleanup(struct lldpd_chassis *);
void lldpd_chassis_cleanup(struct lldpd_chassis *, int);
int lldpd_callback_add(struct lldpd *, int, void(*fn)(CALLBACK_SIG), void *);
void lldpd_callback_del(struct lldpd *, int, void(*fn)(CALLBACK_SIG));