void routing_policy_rule_free(RoutingPolicyRule *rule) { if (!rule) return; if (rule->network) { LIST_REMOVE(rules, rule->network->rules, rule); assert(rule->network->n_rules > 0); rule->network->n_rules--; if (rule->section) { hashmap_remove(rule->network->rules_by_section, rule->section); network_config_section_free(rule->section); } } if (rule->manager) { set_remove(rule->manager->rules, rule); set_remove(rule->manager->rules_foreign, rule); } free(rule->iif); free(rule->oif); free(rule); }
void route_free(Route *route) { if (!route) return; if (route->network) { LIST_REMOVE(routes, route->network->static_routes, route); assert(route->network->n_static_routes > 0); route->network->n_static_routes--; if (route->section) hashmap_remove(route->network->routes_by_section, route->section); } network_config_section_free(route->section); if (route->link) { set_remove(route->link->routes, route); set_remove(route->link->routes_foreign, route); } sd_event_source_unref(route->expire); free(route); }
void address_label_free(AddressLabel *label) { if (!label) return; if (label->network) { LIST_REMOVE(labels, label->network->address_labels, label); assert(label->network->n_address_labels > 0); label->network->n_address_labels--; if (label->section) { hashmap_remove(label->network->address_labels_by_section, label->section); network_config_section_free(label->section); } } free(label); }
void prefix_free(Prefix *prefix) { if (!prefix) return; if (prefix->network) { LIST_REMOVE(prefixes, prefix->network->static_prefixes, prefix); assert(prefix->network->n_static_prefixes > 0); prefix->network->n_static_prefixes--; if (prefix->section) hashmap_remove(prefix->network->prefixes_by_section, prefix->section); } network_config_section_free(prefix->section); prefix->radv_prefix = sd_radv_prefix_unref(prefix->radv_prefix); free(prefix); }