static bool olsr_delete_hna_net_entry(struct hna_net *net_to_delete) { #ifdef DEBUG struct ipaddr_str buf1, buf2; #endif /* DEBUG */ struct hna_entry *hna_gw; bool removed_entry = false; #ifdef __linux__ if (is_prefix_inetgw(&net_to_delete->hna_prefix)) { /* modify smart gateway entry if necessary */ olsr_delete_gateway_entry(&net_to_delete->hna_gw->A_gateway_addr, net_to_delete->hna_prefix.prefix_len, false); } #endif /* __linux__ */ olsr_stop_timer(net_to_delete->hna_net_timer); net_to_delete->hna_net_timer = NULL; /* be pedandic */ hna_gw = net_to_delete->hna_gw; #ifdef DEBUG OLSR_PRINTF(5, "HNA: timeout %s via hna-gw %s\n", olsr_ip_prefix_to_string(&net_to_delete->hna_prefix), olsr_ip_to_string(&buf2, &hna_gw->A_gateway_addr)); #endif /* DEBUG */ /* * Delete the rt_path for the entry. */ olsr_delete_routing_table(&net_to_delete->hna_prefix.prefix, net_to_delete->hna_prefix.prefix_len, &hna_gw->A_gateway_addr); DEQUEUE_ELEM(net_to_delete); /* Delete hna_gw if empty */ if (hna_gw->networks.next == &hna_gw->networks) { DEQUEUE_ELEM(hna_gw); olsr_cookie_free(hna_entry_mem_cookie, hna_gw); removed_entry = true; } olsr_cookie_free(hna_net_mem_cookie, net_to_delete); return removed_entry; }
/** * Delete a TC entry. * * @param tc the TC entry to delete */ void olsr_delete_tc_entry(struct tc_entry *tc) { struct tc_edge_entry *tc_edge; struct rt_path *rtp; /* delete gateway if available */ #ifdef __linux__ olsr_delete_gateway_entry(&tc->addr, FORCE_DELETE_GW_ENTRY, false); #endif /* __linux__ */ /* * Delete the rt_path for ourselves. */ olsr_delete_routing_table(&tc->addr, olsr_cnf->maxplen, &tc->addr); /* The edgetree and prefix tree must be empty before */ OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge) { olsr_delete_tc_edge_entry(tc_edge); } OLSR_FOR_ALL_TC_EDGE_ENTRIES_END(tc, tc_edge);
/** * Delete a TC entry. * * @param entry the TC entry to delete * */ void olsr_delete_tc_entry(struct tc_entry *tc) { struct tc_edge_entry *tc_edge; struct rt_path *rtp; #if 0 struct ipaddr_str buf; OLSR_PRINTF(1, "TC: del entry %s\n", olsr_ip_to_string(&buf, &tc->addr)); #endif /* delete gateway if available */ #ifdef linux olsr_delete_gateway_entry(&tc->addr, FORCE_DELETE_GW_ENTRY); #endif /* * Delete the rt_path for ourselves. */ olsr_delete_routing_table(&tc->addr, olsr_cnf->maxplen, &tc->addr); /* The edgetree and prefix tree must be empty before */ OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge) { olsr_delete_tc_edge_entry(tc_edge); } OLSR_FOR_ALL_TC_EDGE_ENTRIES_END(tc, tc_edge);