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

网络

开发平台:

Unix_Linux

  1. /* BGP advertisement and adjacency
  2.    Copyright (C) 1996, 97, 98, 99, 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. /* BGP advertise FIFO.  */
  17. struct bgp_advertise_fifo
  18. {
  19.   struct bgp_advertise *next;
  20.   struct bgp_advertise *prev;
  21. };
  22. /* BGP advertise attribute.  */
  23. struct bgp_advertise_attr
  24. {
  25.   /* Head of advertisement pointer. */
  26.   struct bgp_advertise *adv;
  27.   /* Reference counter.  */
  28.   unsigned long refcnt;
  29.   /* Attribute pointer to be announced.  */
  30.   struct attr *attr;
  31. };
  32. struct bgp_advertise
  33. {
  34.   /* FIFO for advertisement.  */
  35.   struct bgp_advertise_fifo fifo;
  36.   /* Link list for same attribute advertise.  */
  37.   struct bgp_advertise *next;
  38.   struct bgp_advertise *prev;
  39.   /* Prefix information.  */
  40.   struct bgp_node *rn;
  41.   /* Reference pointer.  */
  42.   struct bgp_adj_out *adj;
  43.   /* Advertisement attribute.  */
  44.   struct bgp_advertise_attr *baa;
  45.   /* BGP info.  */
  46.   struct bgp_info *binfo;
  47. };
  48. /* BGP adjacency out.  */
  49. struct bgp_adj_out
  50. {
  51.   /* Lined list pointer.  */
  52.   struct bgp_adj_out *next;
  53.   struct bgp_adj_out *prev;
  54.   /* Advertised peer.  */
  55.   struct peer *peer;
  56.   /* Advertised attribute.  */
  57.   struct attr *attr;
  58.   /* Advertisement information.  */
  59.   struct bgp_advertise *adv;
  60. };
  61. /* BGP adjacency in. */
  62. struct bgp_adj_in
  63. {
  64.   /* Linked list pointer.  */
  65.   struct bgp_adj_in *next;
  66.   struct bgp_adj_in *prev;
  67.   /* Received peer.  */
  68.   struct peer *peer;
  69.   /* Received attribute.  */
  70.   struct attr *attr;
  71. };
  72. /* BGP advertisement list.  */
  73. struct bgp_synchronize
  74. {
  75.   struct bgp_advertise_fifo update;
  76.   struct bgp_advertise_fifo withdraw;
  77.   struct bgp_advertise_fifo withdraw_low;
  78. };
  79. /* BGP adjacency linked list.  */
  80. #define BGP_INFO_ADD(N,A,TYPE)                        
  81.   do {                                                
  82.     (A)->prev = NULL;                                 
  83.     (A)->next = (N)->TYPE;                            
  84.     if ((N)->TYPE)                                    
  85.       (N)->TYPE->prev = (A);                          
  86.     (N)->TYPE = (A);                                  
  87.   } while (0)
  88. #define BGP_INFO_DEL(N,A,TYPE)                        
  89.   do {                                                
  90.     if ((A)->next)                                    
  91.       (A)->next->prev = (A)->prev;                    
  92.     if ((A)->prev)                                    
  93.       (A)->prev->next = (A)->next;                    
  94.     else                                              
  95.       (N)->TYPE = (A)->next;                          
  96.   } while (0)
  97. #define BGP_ADJ_IN_ADD(N,A)    BGP_INFO_ADD(N,A,adj_in)
  98. #define BGP_ADJ_IN_DEL(N,A)    BGP_INFO_DEL(N,A,adj_in)
  99. #define BGP_ADJ_OUT_ADD(N,A)   BGP_INFO_ADD(N,A,adj_out)
  100. #define BGP_ADJ_OUT_DEL(N,A)   BGP_INFO_DEL(N,A,adj_out)
  101. /* Prototypes.  */
  102. void bgp_adj_out_set (struct bgp_node *, struct peer *, struct prefix *,
  103.       struct attr *, afi_t, safi_t, struct bgp_info *);
  104. void bgp_adj_out_unset (struct bgp_node *, struct peer *, struct prefix *,
  105. afi_t, safi_t);
  106. void bgp_adj_out_remove (struct bgp_node *, struct bgp_adj_out *, 
  107.  struct peer *, afi_t, safi_t);
  108. int bgp_adj_out_lookup (struct peer *, struct prefix *, afi_t, safi_t,
  109. struct bgp_node *);
  110. void bgp_adj_in_set (struct bgp_node *, struct peer *, struct attr *);
  111. void bgp_adj_in_unset (struct bgp_node *, struct peer *);
  112. void bgp_adj_in_remove (struct bgp_node *, struct bgp_adj_in *);
  113. struct bgp_advertise *
  114. bgp_advertise_clean (struct peer *, struct bgp_adj_out *, afi_t, safi_t);
  115. void bgp_sync_init (struct peer *);
  116. void bgp_sync_delete (struct peer *);