예제 #1
0
파일: hna_set.c 프로젝트: hecekgl/qaul.net
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;
}
예제 #2
0
/**
 * 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);
예제 #3
0
파일: tc_set.c 프로젝트: Dany3R9/Proj
/**
 * 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);