Пример #1
0
olsr_bool delete_proc_set_for_timeout_handler(void* olsr, void *arg_a, void *arg_b)
{
  OLSR_PROC_TUPLE *data = NULL;
  olsr_time_t *todelete = NULL;

  data = (OLSR_PROC_TUPLE *)arg_a;
  todelete = (olsr_time_t *)arg_b;

  return (olsr_bool) (olsr_cmp_time(data->P_time, *todelete) < 0);
}
olsr_bool delete_topology_set_for_timeout_handler(void* olsr, void *arg_a, void *arg_b)
{
    OLSR_TOPOLOGY_TUPLE *data = NULL;
    olsr_time_t *todelete = NULL;

    data = (OLSR_TOPOLOGY_TUPLE *)arg_a;
    todelete = (olsr_time_t *)arg_b;

    return (olsr_bool)(olsr_cmp_time(data->T_time, *todelete) < 0);
}
void delete_association_set_for_timeout(struct olsrv2 *olsr){
  OLSR_LIST_ENTRY *entry = NULL, *list_entry = NULL, *del = NULL;
  OLSR_ASSOCIATION_TUPLE *data = NULL, *list_data = NULL;
  int hash_index, i;
  olsr_time_t time;

  //return;
  //  olsr_cnf->debug_level = 9;
  //print_association_set(olsr);
  //olsr_cnf->debug_level = 0;

  get_current_time(olsr, &time);
  for(hash_index = 0; hash_index < HASHSIZE; hash_index++) {
    entry = olsr->associ_set[hash_index].list.head;
      while(entry) {

      data = (OLSR_ASSOCIATION_TUPLE *)entry->data;
      del = entry;
      entry = entry->next;

      if(olsr_cmp_time(data->NA_time, time) < 0) {
    for(i = 0; i < data->num_NAlist; i++) {
      list_entry = data->NA_list[i];
      list_data = (OLSR_ASSOCIATION_TUPLE *)list_entry->data;

      if(list_entry == entry) {
        entry = entry->next;
      }
      free(list_data->NA_list);
      OLSR_DeleteListEntry(&olsr->associ_set[olsr_hashing(olsr, &list_data->NA_iface_addr)].list,
                   list_entry);

    }
    free(data->NA_list);
    OLSR_DeleteListEntry(&olsr->associ_set[olsr_hashing(olsr, &data->NA_iface_addr)].list,
                 del);

    olsr->change_associ_set = OLSR_TRUE;
      }
    }

  }
}