Annotation of embedaddon/quagga/bgpd/bgp_advertise.h, revision 1.1
1.1 ! misho 1: /* BGP advertisement and adjacency
! 2: Copyright (C) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro
! 3:
! 4: This file is part of GNU Zebra.
! 5:
! 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
! 9: later version.
! 10:
! 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.
! 15:
! 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
! 19: 02111-1307, USA. */
! 20:
! 21: #ifndef _QUAGGA_BGP_ADVERTISE_H
! 22: #define _QUAGGA_BGP_ADVERTISE_H
! 23:
! 24: /* BGP advertise FIFO. */
! 25: struct bgp_advertise_fifo
! 26: {
! 27: struct bgp_advertise *next;
! 28: struct bgp_advertise *prev;
! 29: };
! 30:
! 31: /* BGP advertise attribute. */
! 32: struct bgp_advertise_attr
! 33: {
! 34: /* Head of advertisement pointer. */
! 35: struct bgp_advertise *adv;
! 36:
! 37: /* Reference counter. */
! 38: unsigned long refcnt;
! 39:
! 40: /* Attribute pointer to be announced. */
! 41: struct attr *attr;
! 42: };
! 43:
! 44: struct bgp_advertise
! 45: {
! 46: /* FIFO for advertisement. */
! 47: struct bgp_advertise_fifo fifo;
! 48:
! 49: /* Link list for same attribute advertise. */
! 50: struct bgp_advertise *next;
! 51: struct bgp_advertise *prev;
! 52:
! 53: /* Prefix information. */
! 54: struct bgp_node *rn;
! 55:
! 56: /* Reference pointer. */
! 57: struct bgp_adj_out *adj;
! 58:
! 59: /* Advertisement attribute. */
! 60: struct bgp_advertise_attr *baa;
! 61:
! 62: /* BGP info. */
! 63: struct bgp_info *binfo;
! 64: };
! 65:
! 66: /* BGP adjacency out. */
! 67: struct bgp_adj_out
! 68: {
! 69: /* Lined list pointer. */
! 70: struct bgp_adj_out *next;
! 71: struct bgp_adj_out *prev;
! 72:
! 73: /* Advertised peer. */
! 74: struct peer *peer;
! 75:
! 76: /* Advertised attribute. */
! 77: struct attr *attr;
! 78:
! 79: /* Advertisement information. */
! 80: struct bgp_advertise *adv;
! 81: };
! 82:
! 83: /* BGP adjacency in. */
! 84: struct bgp_adj_in
! 85: {
! 86: /* Linked list pointer. */
! 87: struct bgp_adj_in *next;
! 88: struct bgp_adj_in *prev;
! 89:
! 90: /* Received peer. */
! 91: struct peer *peer;
! 92:
! 93: /* Received attribute. */
! 94: struct attr *attr;
! 95: };
! 96:
! 97: /* BGP advertisement list. */
! 98: struct bgp_synchronize
! 99: {
! 100: struct bgp_advertise_fifo update;
! 101: struct bgp_advertise_fifo withdraw;
! 102: struct bgp_advertise_fifo withdraw_low;
! 103: };
! 104:
! 105: /* BGP adjacency linked list. */
! 106: #define BGP_INFO_ADD(N,A,TYPE) \
! 107: do { \
! 108: (A)->prev = NULL; \
! 109: (A)->next = (N)->TYPE; \
! 110: if ((N)->TYPE) \
! 111: (N)->TYPE->prev = (A); \
! 112: (N)->TYPE = (A); \
! 113: } while (0)
! 114:
! 115: #define BGP_INFO_DEL(N,A,TYPE) \
! 116: do { \
! 117: if ((A)->next) \
! 118: (A)->next->prev = (A)->prev; \
! 119: if ((A)->prev) \
! 120: (A)->prev->next = (A)->next; \
! 121: else \
! 122: (N)->TYPE = (A)->next; \
! 123: } while (0)
! 124:
! 125: #define BGP_ADJ_IN_ADD(N,A) BGP_INFO_ADD(N,A,adj_in)
! 126: #define BGP_ADJ_IN_DEL(N,A) BGP_INFO_DEL(N,A,adj_in)
! 127: #define BGP_ADJ_OUT_ADD(N,A) BGP_INFO_ADD(N,A,adj_out)
! 128: #define BGP_ADJ_OUT_DEL(N,A) BGP_INFO_DEL(N,A,adj_out)
! 129:
! 130: /* Prototypes. */
! 131: extern void bgp_adj_out_set (struct bgp_node *, struct peer *, struct prefix *,
! 132: struct attr *, afi_t, safi_t, struct bgp_info *);
! 133: extern void bgp_adj_out_unset (struct bgp_node *, struct peer *, struct prefix *,
! 134: afi_t, safi_t);
! 135: extern void bgp_adj_out_remove (struct bgp_node *, struct bgp_adj_out *,
! 136: struct peer *, afi_t, safi_t);
! 137: extern int bgp_adj_out_lookup (struct peer *, struct prefix *, afi_t, safi_t,
! 138: struct bgp_node *);
! 139:
! 140: extern void bgp_adj_in_set (struct bgp_node *, struct peer *, struct attr *);
! 141: extern void bgp_adj_in_unset (struct bgp_node *, struct peer *);
! 142: extern void bgp_adj_in_remove (struct bgp_node *, struct bgp_adj_in *);
! 143:
! 144: extern struct bgp_advertise *
! 145: bgp_advertise_clean (struct peer *, struct bgp_adj_out *, afi_t, safi_t);
! 146:
! 147: extern void bgp_sync_init (struct peer *);
! 148: extern void bgp_sync_delete (struct peer *);
! 149:
! 150: #endif /* _QUAGGA_BGP_ADVERTISE_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>