table.h
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:2k
源码类别:

网络

开发平台:

Unix_Linux

  1. /*
  2.  * Routing Table
  3.  * Copyright (C) 1998 Kunihiro Ishiguro
  4.  *
  5.  * This file is part of GNU Zebra.
  6.  *
  7.  * GNU Zebra is free software; you can redistribute it and/or modify it
  8.  * under the terms of the GNU General Public License as published by the
  9.  * Free Software Foundation; either version 2, or (at your option) any
  10.  * later version.
  11.  *
  12.  * GNU Zebra is distributed in the hope that it will be useful, but
  13.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU General Public License
  18.  * along with GNU Zebra; see the file COPYING.  If not, write to the Free
  19.  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  20.  * 02111-1307, USA.  
  21.  */
  22. #ifndef _ZEBRA_TABLE_H
  23. #define _ZEBRA_TABLE_H
  24. /* Routing table top structure. */
  25. struct route_table
  26. {
  27.   struct route_node *top;
  28. };
  29. /* Each routing entry. */
  30. struct route_node
  31. {
  32.   /* Actual prefix of this radix. */
  33.   struct prefix p;
  34.   /* Tree link. */
  35.   struct route_table *table;
  36.   struct route_node *parent;
  37.   struct route_node *link[2];
  38. #define l_left   link[0]
  39. #define l_right  link[1]
  40.   /* Lock of this radix */
  41.   unsigned int lock;
  42.   /* Each node of route. */
  43.   void *info;
  44.   /* Aggregation. */
  45.   void *aggregate;
  46. };
  47. /* Prototypes. */
  48. struct route_table *route_table_init (void);
  49. void route_table_finish (struct route_table *);
  50. void route_unlock_node (struct route_node *node);
  51. void route_node_delete (struct route_node *node);
  52. struct route_node *route_top (struct route_table *);
  53. struct route_node *route_next (struct route_node *);
  54. struct route_node *route_next_until (struct route_node *, struct route_node *);
  55. struct route_node *route_node_get (struct route_table *, struct prefix *);
  56. struct route_node *route_node_lookup (struct route_table *, struct prefix *);
  57. struct route_node *route_lock_node (struct route_node *node);
  58. struct route_node *route_node_match (struct route_table *, struct prefix *);
  59. struct route_node *route_node_match_ipv4 (struct route_table *,
  60.   struct in_addr *);
  61. #ifdef HAVE_IPV6
  62. struct route_node *route_node_match_ipv6 (struct route_table *,
  63.   struct in6_addr *);
  64. #endif /* HAVE_IPV6 */
  65. #endif /* _ZEBRA_TABLE_H */