1 /* BGP advertisement and adjacency
2 Copyright (C) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro
4 This file is part of GNU Zebra.
6 GNU Zebra is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 GNU Zebra is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Zebra; see the file COPYING. If not, write to the Free
18 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
21 #ifndef _QUAGGA_BGP_ADVERTISE_H
22 #define _QUAGGA_BGP_ADVERTISE_H
26 /* BGP advertise FIFO. */
27 struct bgp_advertise_fifo
29 struct bgp_advertise *next;
30 struct bgp_advertise *prev;
34 /* BGP advertise attribute. */
35 struct bgp_advertise_attr
37 /* Head of advertisement pointer. */
38 struct bgp_advertise *adv;
40 /* Reference counter. */
43 /* Attribute pointer to be announced. */
49 /* FIFO for advertisement. */
52 /* Link list for same attribute advertise. */
53 struct bgp_advertise *next;
54 struct bgp_advertise *prev;
56 /* Prefix information. */
59 /* Reference pointer. */
60 struct bgp_adj_out *adj;
62 /* Advertisement attribute. */
63 struct bgp_advertise_attr *baa;
66 struct bgp_info *binfo;
69 /* BGP adjacency out. */
72 /* Lined list pointer. */
73 struct bgp_adj_out *next;
74 struct bgp_adj_out *prev;
76 /* Advertised peer. */
79 /* Advertised attribute. */
82 /* Advertisement information. */
83 struct bgp_advertise *adv;
86 /* BGP adjacency in. */
89 /* Linked list pointer. */
90 struct bgp_adj_in *next;
91 struct bgp_adj_in *prev;
96 /* Received attribute. */
100 /* BGP advertisement list. */
101 struct bgp_synchronize
104 struct fifo withdraw;
105 struct fifo withdraw_low;
108 #define BGP_ADV_FIFO_HEAD(F) ((struct bgp_advertise *)FIFO_HEAD(F))
110 /* BGP adjacency linked list. */
111 #define BGP_INFO_ADD(N,A,TYPE) \
114 (A)->next = (N)->TYPE; \
116 (N)->TYPE->prev = (A); \
120 #define BGP_INFO_DEL(N,A,TYPE) \
123 (A)->next->prev = (A)->prev; \
125 (A)->prev->next = (A)->next; \
127 (N)->TYPE = (A)->next; \
130 #define BGP_ADJ_IN_ADD(N,A) BGP_INFO_ADD(N,A,adj_in)
131 #define BGP_ADJ_IN_DEL(N,A) BGP_INFO_DEL(N,A,adj_in)
132 #define BGP_ADJ_OUT_ADD(N,A) BGP_INFO_ADD(N,A,adj_out)
133 #define BGP_ADJ_OUT_DEL(N,A) BGP_INFO_DEL(N,A,adj_out)
135 #define BGP_ADV_FIFO_ADD(F, N) \
137 FIFO_ADD((F), (N)); \
141 #define BGP_ADV_FIFO_DEL(F, N) \
147 #define BGP_ADV_FIFO_INIT(F) \
154 extern void bgp_adj_out_set (struct bgp_node *, struct peer *, struct prefix *,
155 struct attr *, afi_t, safi_t, struct bgp_info *);
156 extern void bgp_adj_out_unset (struct bgp_node *, struct peer *, struct prefix *,
158 extern void bgp_adj_out_remove (struct bgp_node *, struct bgp_adj_out *,
159 struct peer *, afi_t, safi_t);
160 extern int bgp_adj_out_lookup (struct peer *, struct prefix *, afi_t, safi_t,
163 extern void bgp_adj_in_set (struct bgp_node *, struct peer *, struct attr *);
164 extern int bgp_adj_in_unset (struct bgp_node *, struct peer *);
165 extern void bgp_adj_in_remove (struct bgp_node *, struct bgp_adj_in *);
167 extern struct bgp_advertise *
168 bgp_advertise_clean (struct peer *, struct bgp_adj_out *, afi_t, safi_t);
170 extern void bgp_sync_init (struct peer *);
171 extern void bgp_sync_delete (struct peer *);
173 #endif /* _QUAGGA_BGP_ADVERTISE_H */