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

网络

开发平台:

Unix_Linux

  1. /* BGP routing information base
  2.    Copyright (C) 1996, 97, 98, 2000 Kunihiro Ishiguro
  3. This file is part of GNU Zebra.
  4. GNU Zebra is free software; you can redistribute it and/or modify it
  5. under the terms of the GNU General Public License as published by the
  6. Free Software Foundation; either version 2, or (at your option) any
  7. later version.
  8. GNU Zebra is distributed in the hope that it will be useful, but
  9. WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11. General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with GNU Zebra; see the file COPYING.  If not, write to the Free
  14. Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  15. 02111-1307, USA.  */
  16. struct bgp_info
  17. {
  18.   /* For linked list. */
  19.   struct bgp_info *next;
  20.   struct bgp_info *prev;
  21.   /* BGP route type.  This can be static, RIP, OSPF, BGP etc.  */
  22.   u_char type;
  23.   /* When above type is BGP.  This sub type specify BGP sub type
  24.      information.  */
  25.   u_char sub_type;
  26. #define BGP_ROUTE_NORMAL       0
  27. #define BGP_ROUTE_STATIC       1
  28. #define BGP_ROUTE_AGGREGATE    2
  29. #define BGP_ROUTE_REDISTRIBUTE 3 
  30.   /* BGP information status.  */
  31.   u_int16_t flags;
  32. #define BGP_INFO_IGP_CHANGED    (1 << 0)
  33. #define BGP_INFO_DAMPED         (1 << 1)
  34. #define BGP_INFO_HISTORY        (1 << 2)
  35. #define BGP_INFO_SELECTED       (1 << 3)
  36. #define BGP_INFO_VALID          (1 << 4)
  37. #define BGP_INFO_ATTR_CHANGED   (1 << 5)
  38. #define BGP_INFO_DMED_CHECK     (1 << 6)
  39. #define BGP_INFO_DMED_SELECTED  (1 << 7)
  40. #define BGP_INFO_STALE          (1 << 8)
  41.   /* Peer structure.  */
  42.   struct peer *peer;
  43.   /* Attribute structure.  */
  44.   struct attr *attr;
  45.   /* This route is suppressed with aggregation.  */
  46.   int suppress;
  47.   
  48.   /* Nexthop reachability check.  */
  49.   u_int32_t igpmetric;
  50.   /* Uptime.  */
  51.   time_t uptime;
  52.   /* Pointer to dampening structure.  */
  53.   struct bgp_damp_info *damp_info;
  54.   /* MPLS label.  */
  55.   u_char tag[3];
  56. };
  57. /* BGP static route configuration. */
  58. struct bgp_static
  59. {
  60.   /* Backdoor configuration.  */
  61.   int backdoor;
  62.   /* Import check status.  */
  63.   u_char valid;
  64.   /* IGP metric. */
  65.   u_int32_t igpmetric;
  66.   /* IGP nexthop. */
  67.   struct in_addr igpnexthop;
  68.   /* BGP redistribute route-map.  */
  69.   struct
  70.   {
  71.     char *name;
  72.     struct route_map *map;
  73.   } rmap;
  74.   /* MPLS label.  */
  75.   u_char tag[3];
  76. };
  77. #define DISTRIBUTE_IN_NAME(F)   ((F)->dlist[FILTER_IN].name)
  78. #define DISTRIBUTE_IN(F)        ((F)->dlist[FILTER_IN].alist)
  79. #define DISTRIBUTE_OUT_NAME(F)  ((F)->dlist[FILTER_OUT].name)
  80. #define DISTRIBUTE_OUT(F)       ((F)->dlist[FILTER_OUT].alist)
  81. #define PREFIX_LIST_IN_NAME(F)  ((F)->plist[FILTER_IN].name)
  82. #define PREFIX_LIST_IN(F)       ((F)->plist[FILTER_IN].plist)
  83. #define PREFIX_LIST_OUT_NAME(F) ((F)->plist[FILTER_OUT].name)
  84. #define PREFIX_LIST_OUT(F)      ((F)->plist[FILTER_OUT].plist)
  85. #define FILTER_LIST_IN_NAME(F)  ((F)->aslist[FILTER_IN].name)
  86. #define FILTER_LIST_IN(F)       ((F)->aslist[FILTER_IN].aslist)
  87. #define FILTER_LIST_OUT_NAME(F) ((F)->aslist[FILTER_OUT].name)
  88. #define FILTER_LIST_OUT(F)      ((F)->aslist[FILTER_OUT].aslist)
  89. #define ROUTE_MAP_IN_NAME(F)    ((F)->map[FILTER_IN].name)
  90. #define ROUTE_MAP_IN(F)         ((F)->map[FILTER_IN].map)
  91. #define ROUTE_MAP_OUT_NAME(F)   ((F)->map[FILTER_OUT].name)
  92. #define ROUTE_MAP_OUT(F)        ((F)->map[FILTER_OUT].map)
  93. #define UNSUPPRESS_MAP_NAME(F)  ((F)->usmap.name)
  94. #define UNSUPPRESS_MAP(F)       ((F)->usmap.map)
  95. /* Prototypes. */
  96. void bgp_route_init ();
  97. void bgp_announce_route (struct peer *, afi_t, safi_t);
  98. void bgp_announce_route_all (struct peer *);
  99. void bgp_default_originate (struct peer *, afi_t, safi_t, int);
  100. void bgp_soft_reconfig_in (struct peer *, afi_t, safi_t);
  101. void bgp_clear_route (struct peer *, afi_t, safi_t);
  102. void bgp_clear_route_all (struct peer *);
  103. void bgp_clear_adj_in (struct peer *, afi_t, safi_t);
  104. void bgp_clear_stale_route (struct peer *, afi_t, safi_t);
  105. int bgp_nlri_sanity_check (struct peer *, int, u_char *, bgp_size_t);
  106. int bgp_nlri_parse (struct peer *, struct attr *, struct bgp_nlri *);
  107. int bgp_maximum_prefix_overflow (struct peer *, afi_t, safi_t, int);
  108. void bgp_redistribute_add (struct prefix *, struct in_addr *, u_int32_t, u_char);
  109. void bgp_redistribute_delete (struct prefix *, u_char);
  110. void bgp_redistribute_withdraw (struct bgp *, afi_t, int);
  111. void bgp_static_delete (struct bgp *);
  112. void bgp_static_update (struct bgp *, struct prefix *, struct bgp_static *,
  113. afi_t, safi_t);
  114. void bgp_static_withdraw (struct bgp *, struct prefix *, afi_t, safi_t);
  115.                      
  116. int bgp_static_set_vpnv4 (struct vty *vty, char *, char *, char *);
  117. int bgp_static_unset_vpnv4 (struct vty *, char *, char *, char *);
  118. int bgp_config_write_network (struct vty *, struct bgp *, afi_t, safi_t, int *);
  119. int bgp_config_write_distance (struct vty *, struct bgp *);
  120. void bgp_aggregate_increment (struct bgp *, struct prefix *, struct bgp_info *,
  121.       afi_t, safi_t);
  122. void bgp_aggregate_decrement (struct bgp *, struct prefix *, struct bgp_info *,
  123.       afi_t, safi_t);
  124. u_char bgp_distance_apply (struct prefix *, struct bgp_info *, struct bgp *);
  125. afi_t bgp_node_afi (struct vty *);
  126. safi_t bgp_node_safi (struct vty *);