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;
      }
    }

  }
}
void
build_tlv_attached_network_by_list(void *olsr, olsr_pktbuf_t *buf, OLSR_LIST *addr_list)
{
  OLSR_LIST tlv_block;
  OLSR_InitList(&tlv_block);

  OLSR_LIST_ENTRY* tmp = NULL, *tmp1 = NULL, * next = NULL;
  BLOCK_DATA* data = NULL, *tmpData = NULL;

  tmp = addr_list->head;

  while(tmp)
    {
      data = (BLOCK_DATA* )tmp->data;
      create_tlv_by_list(olsr, &tlv_block,
             addr_list,
             PREFIX_LENGTH,
             data->Prefix_Length);

      tmp1 = tmp->next;
      while(tmp1){
        tmpData = (BLOCK_DATA* )tmp1->data;
        next = tmp1->next;
        if(data->Prefix_Length == tmpData->Prefix_Length){
           OLSR_DeleteListEntry(addr_list, tmp1);
        }
        tmp1 = next;
      }

      //delete current entry also
      tmp1 = tmp->next;
      OLSR_DeleteListEntry(addr_list, tmp);
      tmp = tmp1;
    }

  build_tlv_msg(buf, &tlv_block);
  free_tlv_block(&tlv_block);
}
void delete_association_set_for_addr(struct olsrv2 *olsr,
                     OLSR_LIST *iface_list){
  OLSR_LOCAL_INTERFACE_BLOCK_ENTRY *local_iface_data = NULL;
  OLSR_ASSOCIATION_TUPLE *associ_data = NULL, *associ_list_data = NULL;
  OLSR_LIST *retList = NULL;
  OLSR_LIST_ENTRY *entry = NULL,*list_entry = NULL;
  int i, tmp_index;

  entry = iface_list->head;
  while(entry){
    local_iface_data = (OLSR_LOCAL_INTERFACE_BLOCK_ENTRY *)entry->data;
    retList = search_association_set_for_addr(olsr,
                          &local_iface_data->iface_addr);

    if(retList){
      if(retList->numEntry != 1){
    olsr_error("delete_association_set_for_addr");
      }

      associ_data = (OLSR_ASSOCIATION_TUPLE *)retList->head->data;
      OLSR_DeleteList_Search(retList);

      for(i = 0; i < associ_data->num_NAlist; i++) {
    list_entry = (OLSR_LIST_ENTRY *)associ_data->NA_list[i];
    associ_list_data = (OLSR_ASSOCIATION_TUPLE *)list_entry->data;
    tmp_index = olsr_hashing(olsr,&associ_list_data->NA_iface_addr);
    free(associ_list_data->NA_list);
    OLSR_DeleteListEntry(&olsr->associ_set[tmp_index].list, list_entry);
      }
      free(associ_data->NA_list);
      if(OLSR_DeleteListHandler((void* )olsr,
                &olsr->associ_set[olsr_hashing(olsr,&associ_data->NA_iface_addr)].list,
                (void* )&local_iface_data->iface_addr,
                &delete_association_set_for_addr_handler)){

    olsr->change_associ_set = OLSR_TRUE;
      }

    }//if
    entry = entry->next;
  }//while

}