blob: a239ca06115043a7b924fcd01371434ca09b7a28 [file] [log] [blame]
paul718e3742002-12-13 20:15:29 +00001/* BGP nexthop scan
2 Copyright (C) 2000 Kunihiro Ishiguro
3
4This file is part of GNU Zebra.
5
6GNU Zebra is free software; you can redistribute it and/or modify it
7under the terms of the GNU General Public License as published by the
8Free Software Foundation; either version 2, or (at your option) any
9later version.
10
11GNU Zebra is distributed in the hope that it will be useful, but
12WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GNU Zebra; see the file COPYING. If not, write to the Free
18Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
1902111-1307, USA. */
20
paul00d252c2005-05-23 14:19:54 +000021#ifndef _QUAGGA_BGP_NEXTHOP_H
22#define _QUAGGA_BGP_NEXTHOP_H
23
Paul Jakma5304cb52006-03-30 14:01:14 +000024#include "if.h"
Pradosh Mohapatra60cc9592015-11-09 20:21:41 -050025#include "queue.h"
26#include "prefix.h"
Paul Jakma5304cb52006-03-30 14:01:14 +000027
paul718e3742002-12-13 20:15:29 +000028#define BGP_SCAN_INTERVAL_DEFAULT 60
29#define BGP_IMPORT_INTERVAL_DEFAULT 15
30
Lou Berger3e841d32016-01-12 13:41:51 -050031#define NEXTHOP_FAMILY(nexthop_len) ( \
32 ((nexthop_len) == 4 || \
33 (nexthop_len) == 12 ? AF_INET : \
34 ((nexthop_len) == 16 || \
35 (nexthop_len) == 24 || \
36 (nexthop_len) == 48 ? AF_INET6 : \
37 AF_UNSPEC)) \
38)
39
paul718e3742002-12-13 20:15:29 +000040/* BGP nexthop cache value structure. */
41struct bgp_nexthop_cache
42{
43 /* This nexthop exists in IGP. */
44 u_char valid;
45
46 /* Nexthop is changed. */
47 u_char changed;
48
49 /* Nexthop is changed. */
50 u_char metricchanged;
51
52 /* IGP route's metric. */
53 u_int32_t metric;
54
55 /* Nexthop number and nexthop linked list.*/
56 u_char nexthop_num;
57 struct nexthop *nexthop;
Pradosh Mohapatra60cc9592015-11-09 20:21:41 -050058 time_t last_update;
59 u_int16_t flags;
60
61#define BGP_NEXTHOP_VALID (1 << 0)
62#define BGP_NEXTHOP_REGISTERED (1 << 1)
63
64 u_int16_t change_flags;
65
66#define BGP_NEXTHOP_CHANGED (1 << 0)
67#define BGP_NEXTHOP_METRIC_CHANGED (1 << 1)
68
69 struct bgp_node *node;
70 LIST_HEAD(path_list, bgp_info) paths;
71 unsigned int path_count;
paul718e3742002-12-13 20:15:29 +000072};
73
paul94f2b392005-06-28 12:44:16 +000074extern void bgp_scan_init (void);
Chris Caputo228da422009-07-18 05:44:03 +000075extern void bgp_scan_finish (void);
paul94f2b392005-06-28 12:44:16 +000076extern int bgp_nexthop_lookup (afi_t, struct peer *peer, struct bgp_info *,
paul718e3742002-12-13 20:15:29 +000077 int *, int *);
paul94f2b392005-06-28 12:44:16 +000078extern void bgp_connected_add (struct connected *c);
79extern void bgp_connected_delete (struct connected *c);
80extern int bgp_multiaccess_check_v4 (struct in_addr, char *);
81extern int bgp_config_write_scan_time (struct vty *);
Denis Ovsienko8e80bdf2011-08-05 18:52:52 +040082extern int bgp_nexthop_onlink (afi_t, struct attr *);
Jorge Boncompte [DTI2]10f9bf32012-05-07 16:52:52 +000083extern int bgp_nexthop_self (struct attr *);
84extern void bgp_address_init (void);
Lou Berger82dd7072016-01-12 13:41:57 -050085extern void bgp_address_destroy (void);
86extern void bgp_scan_destroy (void);
Pradosh Mohapatra60cc9592015-11-09 20:21:41 -050087extern struct bgp_nexthop_cache *bnc_new(void);
88extern void bnc_free(struct bgp_nexthop_cache *bnc);
89extern void bnc_nexthop_free(struct bgp_nexthop_cache *bnc);
90extern char *bnc_str(struct bgp_nexthop_cache *bnc, char *buf, int size);
paul00d252c2005-05-23 14:19:54 +000091
92#endif /* _QUAGGA_BGP_NEXTHOP_H */