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: bool bgp_mpath_is_configured_sort (struct bgp *, bgp_peer_sort_t, afi_t, safi_t);
55: bool bgp_mpath_is_configured (struct bgp *, afi_t, safi_t);
56:
57: /* Functions used by bgp_best_selection to record current
58: * multipath selections
59: */
60: extern void bgp_mp_list_init (struct list *);
61: extern void bgp_mp_list_clear (struct list *);
62: extern void bgp_mp_list_add (struct list *, struct bgp_info *);
63: extern void bgp_mp_dmed_deselect (struct bgp_info *);
64: extern void bgp_info_mpath_update (struct bgp_node *, struct bgp_info *,
65: struct bgp_info *, struct list *,
66: afi_t, safi_t);
67: extern void bgp_info_mpath_aggregate_update (struct bgp_info *,
68: struct bgp_info *);
69:
70: /* Unlink and free multipath information associated with a bgp_info */
71: extern void bgp_info_mpath_dequeue (struct bgp_info *);
72: extern void bgp_info_mpath_free (struct bgp_info_mpath **);
73:
74: /* Walk list of multipaths associated with a best path */
75: extern struct bgp_info *bgp_info_mpath_first (struct bgp_info *);
76: extern struct bgp_info *bgp_info_mpath_next (struct bgp_info *);
77:
78: /* Accessors for multipath information */
79: extern u_int32_t bgp_info_mpath_count (struct bgp_info *);
80: extern struct attr *bgp_info_mpath_attr (struct bgp_info *);
81:
82: #endif /* _QUAGGA_BGP_MPATH_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>