⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 two_hop_neighbor_table.c

📁 wifi 无线网络路由协议OLSR linux下C代码
💻 C
字号:
/* * The olsr.org Optimized Link-State Routing daemon(olsrd) * Copyright (c) 2004, Andreas T鴑nesen(andreto@olsr.org) * All rights reserved. * * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met: * * * Redistributions of source code must retain the above copyright  *   notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright  *   notice, this list of conditions and the following disclaimer in  *   the documentation and/or other materials provided with the  *   distribution. * * Neither the name of olsr.org, olsrd nor the names of its  *   contributors may be used to endorse or promote products derived  *   from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE  * POSSIBILITY OF SUCH DAMAGE. * * Visit http://www.olsr.org for more information. * * If you find this software useful feel free to make a donation * to the project. For more information see the website or contact * the copyright holders. * * $Id: two_hop_neighbor_table.c,v 1.19 2007/08/02 22:07:19 bernd67 Exp $ */#include "defs.h"#include "two_hop_neighbor_table.h"#include "mid_set.h"#include "neighbor_table.h"struct neighbor_2_entry two_hop_neighbortable[HASHSIZE];/** *Initialize 2 hop neighbor table */intolsr_init_two_hop_table(void){  int idx;  for(idx=0;idx<HASHSIZE;idx++)    {      two_hop_neighbortable[idx].next = &two_hop_neighbortable[idx];      two_hop_neighbortable[idx].prev = &two_hop_neighbortable[idx];    }  return 1;}/** *Remove a one hop neighbor from a two hop neighbors *one hop list. * *@param two_hop_entry the two hop neighbor to remove the  *one hop neighbor from *@param address the address of the one hop neighbor to remove * *@return nada */voidolsr_delete_neighbor_pointer(struct neighbor_2_entry *two_hop_entry, union olsr_ip_addr *address){  struct neighbor_list_entry *entry;    entry = two_hop_entry->neighbor_2_nblist.next;      while(entry != &two_hop_entry->neighbor_2_nblist)    {      if(COMP_IP(&entry->neighbor->neighbor_main_addr, address))	{	  struct neighbor_list_entry *entry_to_delete = entry;	  entry = entry->next;	  	  /* dequeue */	  DEQUEUE_ELEM(entry_to_delete);	  	  free(entry_to_delete);	}      else	{	  entry = entry->next;	}    }}/** *Delete an entry from the two hop neighbor table. * *@param two_hop_neighbor the two hop neighbor to delete. * *@return nada */voidolsr_delete_two_hop_neighbor_table(struct neighbor_2_entry *two_hop_neighbor){  struct neighbor_list_entry *one_hop_list;    one_hop_list = two_hop_neighbor->neighbor_2_nblist.next;    /* Delete one hop links */  while(one_hop_list != &two_hop_neighbor->neighbor_2_nblist)    {      struct neighbor_entry *one_hop_entry = one_hop_list->neighbor;      struct neighbor_list_entry *entry_to_delete = one_hop_list;      olsr_delete_neighbor_2_pointer(one_hop_entry, &two_hop_neighbor->neighbor_2_addr);      one_hop_list = one_hop_list->next;      /* no need to dequeue */      free(entry_to_delete);    }    /* dequeue */  DEQUEUE_ELEM(two_hop_neighbor);  free(two_hop_neighbor);}/** *Insert a new entry to the two hop neighbor table. * *@param two_hop_neighbor the entry to insert * *@return nada */voidolsr_insert_two_hop_neighbor_table(struct neighbor_2_entry *two_hop_neighbor){  olsr_u32_t              hash;   //printf("Adding 2 hop neighbor %s\n", olsr_ip_to_string(&two_hop_neighbor->neighbor_2_addr));  hash = olsr_hashing(&two_hop_neighbor->neighbor_2_addr);  /* Queue */    QUEUE_ELEM(two_hop_neighbortable[hash], two_hop_neighbor);}/** *Look up an entry in the two hop neighbor table. * *@param dest the IP address of the entry to find * *@return a pointer to a neighbor_2_entry struct *representing the two hop neighbor */struct neighbor_2_entry *olsr_lookup_two_hop_neighbor_table(union olsr_ip_addr *dest){  struct neighbor_2_entry  *neighbor_2;  olsr_u32_t               hash;  //printf("LOOKING FOR %s\n", olsr_ip_to_string(dest));  hash = olsr_hashing(dest);    for(neighbor_2 = two_hop_neighbortable[hash].next;      neighbor_2 != &two_hop_neighbortable[hash];      neighbor_2 = neighbor_2->next)    {      struct mid_address *adr;      //printf("Checking %s\n", olsr_ip_to_string(dest));      if (COMP_IP(&neighbor_2->neighbor_2_addr, dest))	return neighbor_2;      adr = mid_lookup_aliases(&neighbor_2->neighbor_2_addr);      while(adr)	{	  if(COMP_IP(&adr->alias, dest))	    return neighbor_2;	  adr = adr->next_alias;	}     }  return NULL;}/** *Look up an entry in the two hop neighbor table. *NO CHECK FOR MAIN ADDRESS OR ALIASES! * *@param dest the IP address of the entry to find * *@return a pointer to a neighbor_2_entry struct *representing the two hop neighbor */struct neighbor_2_entry *olsr_lookup_two_hop_neighbor_table_mid(union olsr_ip_addr *dest){  struct neighbor_2_entry  *neighbor_2;  olsr_u32_t               hash;  //printf("LOOKING FOR %s\n", olsr_ip_to_string(dest));  hash = olsr_hashing(dest);    for(neighbor_2 = two_hop_neighbortable[hash].next;      neighbor_2 != &two_hop_neighbortable[hash];      neighbor_2 = neighbor_2->next)    {      if (COMP_IP(&neighbor_2->neighbor_2_addr, dest))	return neighbor_2;    }  return NULL;}/** *Print the two hop neighbor table to STDOUT. * *@return nada */voidolsr_print_two_hop_neighbor_table(void){  int i;  OLSR_PRINTF(1, "\n--- %02d:%02d:%02d.02%d ----------------------- TWO-HOP NEIGHBORS\n\n",              nowtm->tm_hour,              nowtm->tm_min,              nowtm->tm_sec,              (int)now.tv_usec);  OLSR_PRINTF(1, "IP addr (2-hop)  IP addr (1-hop)  TLQ\n");  for (i = 0; i < HASHSIZE; i++)    {      struct neighbor_2_entry *neigh2;      for (neigh2 = two_hop_neighbortable[i].next;           neigh2 != &two_hop_neighbortable[i]; neigh2 = neigh2->next)	{	  struct neighbor_list_entry *entry;	  olsr_bool first = OLSR_TRUE;	  for (entry = neigh2->neighbor_2_nblist.next;               entry != &neigh2->neighbor_2_nblist; entry = entry->next)	    {	      double total_lq;	      struct neighbor_entry *neigh = entry->neighbor;              if (first)                {                  OLSR_PRINTF(1, "%-15s  ",                              olsr_ip_to_string(&neigh2->neighbor_2_addr));                  first = OLSR_FALSE;                }              else                OLSR_PRINTF(1, "                 ");              total_lq = entry->path_link_quality;              OLSR_PRINTF(1, "%-15s  %5.3f\n",                          olsr_ip_to_string(&neigh->neighbor_main_addr),                          total_lq);            }	}    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -