Annotation of embedaddon/quagga/bgpd/bgp_mpath.h, revision 1.1.1.1
1.1 misho 1: /* $QuaggaId: Format:%an, %ai, %h$ $
2: *
3: * BGP Multipath
4: * Copyright (C) 2010 Google Inc.
5: *
6: * This file is part of Quagga
7: *
8: * Quagga is free software; you can redistribute it and/or modify it
9: * under the terms of the GNU General Public License as published by the
10: * Free Software Foundation; either version 2, or (at your option) any
11: * later version.
12: *
13: * Quagga is distributed in the hope that it will be useful, but
14: * WITHOUT ANY WARRANTY; without even the implied warranty of
15: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16: * General Public License for more details.
17: *
18: * You should have received a copy of the GNU General Public License
19: * along with Quagga; see the file COPYING. If not, write to the Free
20: * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
21: * 02111-1307, USA.
22: */
23:
24: #ifndef _QUAGGA_BGP_MPATH_H
25: #define _QUAGGA_BGP_MPATH_H
26:
27: /* BGP default maximum-paths */
28: #define BGP_DEFAULT_MAXPATHS 1
29:
30: /* Supplemental information linked to bgp_info for keeping track of
31: * multipath selections, lazily allocated to save memory
32: */
33: struct bgp_info_mpath
34: {
35: /* Points to the first multipath (on bestpath) or the next multipath */
36: struct bgp_info_mpath *mp_next;
37:
38: /* Points to the previous multipath or NULL on bestpath */
39: struct bgp_info_mpath *mp_prev;
40:
41: /* Points to bgp_info associated with this multipath info */
42: struct bgp_info *mp_info;
43:
44: /* When attached to best path, the number of selected multipaths */
45: u_int32_t mp_count;
46:
47: /* Aggregated attribute for advertising multipath route */
48: struct attr *mp_attr;
49: };
50:
51: /* Functions to support maximum-paths configuration */
52: extern int bgp_maximum_paths_set (struct bgp *, afi_t, safi_t, int, u_int16_t);
53: extern int bgp_maximum_paths_unset (struct bgp *, afi_t, safi_t, int);
54:
55: /* Functions used by bgp_best_selection to record current
56: * multipath selections
57: */
58: extern void bgp_mp_list_init (struct list *);
59: extern void bgp_mp_list_clear (struct list *);
60: extern void bgp_mp_list_add (struct list *, struct bgp_info *);
61: extern void bgp_mp_dmed_deselect (struct bgp_info *);
62: extern void bgp_info_mpath_update (struct bgp_node *, struct bgp_info *,
63: struct bgp_info *, struct list *,
64: struct bgp_maxpaths_cfg *);
65: extern void bgp_info_mpath_aggregate_update (struct bgp_info *,
66: struct bgp_info *);
67:
68: /* Unlink and free multipath information associated with a bgp_info */
69: extern void bgp_info_mpath_dequeue (struct bgp_info *);
70: extern void bgp_info_mpath_free (struct bgp_info_mpath **);
71:
72: /* Walk list of multipaths associated with a best path */
73: extern struct bgp_info *bgp_info_mpath_first (struct bgp_info *);
74: extern struct bgp_info *bgp_info_mpath_next (struct bgp_info *);
75:
76: /* Accessors for multipath information */
77: extern u_int32_t bgp_info_mpath_count (struct bgp_info *);
78: extern struct attr *bgp_info_mpath_attr (struct bgp_info *);
79:
80: #endif /* _QUAGGA_BGP_MPATH_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>