]> git.proxmox.com Git - mirror_frr.git/blame - bgpd/bgp_vty.h
Merge pull request #8887 from LabNConsulting/chopps/fix-test-retries
[mirror_frr.git] / bgpd / bgp_vty.h
CommitLineData
718e3744 1/* BGP VTY interface.
896014f4
DL
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 along
17 * with this program; see the file COPYING; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 */
718e3744 20
00d252cb 21#ifndef _QUAGGA_BGP_VTY_H
22#define _QUAGGA_BGP_VTY_H
23
5d5393b9 24#include "bgpd/bgpd.h"
b0965c44 25#include "stream.h"
896af92e 26struct bgp;
ffd0c037 27
8386ac43 28#define BGP_INSTANCE_HELP_STR "BGP view\nBGP VRF\nView/VRF name\n"
f186de26 29#define BGP_INSTANCE_ALL_HELP_STR "BGP view\nBGP VRF\nAll Views/VRFs\n"
0b2aa3a0 30
46f296b4
LB
31#define BGP_AFI_CMD_STR "<ipv4|ipv6>"
32#define BGP_AFI_HELP_STR "Address Family\nAddress Family\n"
9bedbb1e 33#define BGP_SAFI_CMD_STR "<unicast|multicast|vpn>"
d62a17ae 34#define BGP_SAFI_HELP_STR \
35 "Address Family modifier\n" \
36 "Address Family modifier\n" \
37 "Address Family modifier\n"
46f296b4
LB
38#define BGP_AFI_SAFI_CMD_STR BGP_AFI_CMD_STR" "BGP_SAFI_CMD_STR
39#define BGP_AFI_SAFI_HELP_STR BGP_AFI_HELP_STR BGP_SAFI_HELP_STR
ccbb332a 40
7c40bf39 41#define BGP_SAFI_WITH_LABEL_CMD_STR "<unicast|multicast|vpn|labeled-unicast|flowspec>"
d62a17ae 42#define BGP_SAFI_WITH_LABEL_HELP_STR \
43 "Address Family modifier\n" \
44 "Address Family modifier\n" \
45 "Address Family modifier\n" \
7c40bf39 46 "Address Family modifier\n" \
d62a17ae 47 "Address Family modifier\n"
9bedbb1e 48
b0965c44 49#define SHOW_GR_HEADER \
50 "Codes: GR - Graceful Restart," \
51 " * - Inheriting Global GR Config,\n" \
52 " Restart - GR Mode-Restarting," \
53 " Helper - GR Mode-Helper,\n" \
54 " Disable - GR Mode-Disable.\n\n"
55
85eeb029
DA
56#define BGP_SHOW_SUMMARY_HEADER_ALL \
57 "V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc\n"
58#define BGP_SHOW_SUMMARY_HEADER_ALL_WIDE \
59 "V AS LocalAS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc\n"
60#define BGP_SHOW_SUMMARY_HEADER_FAILED "EstdCnt DropCnt ResetTime Reason\n"
61
b0965c44 62#define BGP_SHOW_PEER_GR_CAPABILITY( \
63 vty, p, use_json, json) \
64 do { \
65 bgp_show_neighbor_graceful_restart_local_mode( \
66 vty, p, use_json, json); \
67 bgp_show_neighbor_graceful_restart_remote_mode( \
68 vty, p, use_json, json); \
69 bgp_show_neighnor_graceful_restart_rbit( \
70 vty, p, use_json, json); \
71 bgp_show_neighbor_graceful_restart_time( \
72 vty, p, use_json, json); \
73 bgp_show_neighbor_graceful_restart_capability_per_afi_safi(\
74 vty, p, use_json, json); \
75 } while (0)
76
36235319
QY
77#define VTY_BGP_GR_DEFINE_LOOP_VARIABLE \
78 struct peer *peer_loop = NULL; \
79 struct listnode *node = NULL; \
80 struct listnode *nnode = NULL; \
81 bool gr_router_detected = false
82
83#define VTY_BGP_GR_ROUTER_DETECT(_bgp, _peer, _peer_list) \
84 do { \
85 if (_peer->bgp->t_startup) \
86 bgp_peer_gr_flags_update(_peer); \
87 for (ALL_LIST_ELEMENTS(_peer_list, node, nnode, peer_loop)) { \
88 if (CHECK_FLAG(peer_loop->flags, \
89 PEER_FLAG_GRACEFUL_RESTART)) \
90 gr_router_detected = true; \
91 } \
2d3dd828 92 } while (0)
93
94
36235319
QY
95#define VTY_SEND_BGP_GR_CAPABILITY_TO_ZEBRA(_bgp, _ret) \
96 do { \
97 if (gr_router_detected \
98 && _bgp->present_zebra_gr_state == ZEBRA_GR_DISABLE) { \
99 if (bgp_zebra_send_capabilities(_bgp, false)) \
100 _ret = BGP_ERR_INVALID_VALUE; \
101 } else if (!gr_router_detected \
102 && _bgp->present_zebra_gr_state \
103 == ZEBRA_GR_ENABLE) { \
104 if (bgp_zebra_send_capabilities(_bgp, true)) \
105 _ret = BGP_ERR_INVALID_VALUE; \
106 } \
2d3dd828 107 } while (0)
108
36235319
QY
109#define VTY_BGP_GR_ROUTER_DETECT_AND_SEND_CAPABILITY_TO_ZEBRA( \
110 _bgp, _peer_list, _ret) \
111 do { \
112 struct peer *peer_loop; \
113 bool gr_router_detected = false; \
114 struct listnode *node = {0}; \
115 struct listnode *nnode = {0}; \
116 for (ALL_LIST_ELEMENTS(_peer_list, node, nnode, peer_loop)) { \
117 if (peer_loop->bgp->t_startup) \
118 bgp_peer_gr_flags_update(peer_loop); \
119 if (CHECK_FLAG(peer_loop->flags, \
120 PEER_FLAG_GRACEFUL_RESTART)) \
121 gr_router_detected = true; \
122 } \
123 if (gr_router_detected \
124 && _bgp->present_zebra_gr_state == ZEBRA_GR_DISABLE) { \
125 if (bgp_zebra_send_capabilities(_bgp, false)) \
126 _ret = BGP_ERR_INVALID_VALUE; \
127 } else if (!gr_router_detected \
128 && _bgp->present_zebra_gr_state \
129 == ZEBRA_GR_ENABLE) { \
130 if (bgp_zebra_send_capabilities(_bgp, true)) \
131 _ret = BGP_ERR_INVALID_VALUE; \
132 } \
2d3dd828 133 } while (0)
134
9e3b51a7 135
36235319
QY
136#define PRINT_EOR(_eor_flag) \
137 do { \
138 if (eor_flag) \
139 vty_out(vty, "Yes\n"); \
140 else \
141 vty_out(vty, "No\n"); \
9e3b51a7 142 } while (0)
143
36235319
QY
144#define PRINT_EOR_JSON(_eor_flag) \
145 do { \
146 if (eor_flag) \
147 json_object_boolean_true_add( \
148 json_endofrib_status, \
149 "endOfRibSentAfterUpdate"); \
150 else \
151 json_object_boolean_false_add( \
152 json_endofrib_status, \
153 "endOfRibSentAfterUpdate"); \
9e3b51a7 154 } while (0)
155
d62a17ae 156extern void bgp_vty_init(void);
ed0e57e3 157extern void community_alias_vty(void);
5cb5f4d0 158extern const char *get_afi_safi_str(afi_t afi, safi_t safi, bool for_json);
5d5393b9
DL
159extern int bgp_get_vty(struct bgp **bgp, as_t *as, const char *name,
160 enum bgp_instance_type inst_type);
8ef6371e 161extern void bgp_config_write_update_delay(struct vty *vty, struct bgp *bgp);
2b791107 162extern void bgp_config_write_wpkt_quanta(struct vty *vty, struct bgp *bgp);
555e09d4 163extern void bgp_config_write_rpkt_quanta(struct vty *vty, struct bgp *bgp);
2b791107
DL
164extern void bgp_config_write_listen(struct vty *vty, struct bgp *bgp);
165extern void bgp_config_write_coalesce_time(struct vty *vty, struct bgp *bgp);
d62a17ae 166extern int bgp_vty_return(struct vty *vty, int ret);
167extern struct peer *peer_and_group_lookup_vty(struct vty *vty,
168 const char *peer_str);
00d252cb 169
d62a17ae 170extern afi_t bgp_vty_afi_from_str(const char *afi_str);
46f296b4 171
d62a17ae 172extern safi_t bgp_vty_safi_from_str(const char *safi_str);
ccbb332a 173
d62a17ae 174extern int argv_find_and_parse_afi(struct cmd_token **argv, int argc,
175 int *index, afi_t *afi);
46f296b4 176
d62a17ae 177extern int argv_find_and_parse_safi(struct cmd_token **argv, int argc,
178 int *index, safi_t *safi);
46f296b4 179
d62a17ae 180extern int bgp_vty_find_and_parse_afi_safi_bgp(struct vty *vty,
181 struct cmd_token **argv,
182 int argc, int *idx, afi_t *afi,
9f049418
DS
183 safi_t *safi, struct bgp **bgp,
184 bool use_json);
9ab0cf58
PG
185int bgp_vty_find_and_parse_bgp(struct vty *vty, struct cmd_token **argv,
186 int argc, struct bgp **bgp, bool use_json);
d62a17ae 187extern int bgp_show_summary_vty(struct vty *vty, const char *name, afi_t afi,
8c1d4cd5 188 safi_t safi, const char *neighbor, int as_type,
96c81f66 189 as_t as, uint16_t show_flags);
ff8a8a7a
CS
190extern int bgp_clear_star_soft_in(const char *name, char *errmsg,
191 size_t errmsg_len);
192extern int bgp_clear_star_soft_out(const char *name, char *errmsg,
193 size_t errmsg_len);
194int bgp_wpkt_quanta_config_vty(struct bgp *bgp, uint32_t quanta, bool set);
195int bgp_rpkt_quanta_config_vty(struct bgp *bgp, uint32_t quanta, bool set);
37a87b8f
CS
196extern int bgp_maxpaths_config_vty(struct bgp *bgp, afi_t afi, safi_t safi,
197 int peer_type, uint16_t maxpaths,
198 uint16_t options, int set, char *errmsg,
199 size_t errmsg_len);
200extern const char *bgp_afi_safi_get_container_str(afi_t afi, safi_t safi);
201extern bool vpn_policy_check_import(struct bgp *bgp, afi_t afi, safi_t safi,
202 bool v2vimport, char *errmsg,
203 size_t errmsg_len);
f4b8ec07
CS
204extern int bgp_nb_errmsg_return(char *errmsg, size_t errmsg_len, int ret);
205extern bool peer_address_self_check(struct bgp *bgp, union sockunion *su);
206extern int peer_local_interface_cfg(struct bgp *bgp, const char *ip_str,
207 const char *str, char *errmsg,
208 size_t errmsg_len);
209extern int peer_conf_interface_create(struct bgp *bgp, const char *conf_if,
e84c59af
DA
210 bool v6only, const char *peer_group_name,
211 int as_type, as_t as, char *errmsg,
212 size_t errmsg_len);
f4b8ec07
CS
213extern int peer_flag_modify_nb(struct bgp *bgp, const char *ip_str,
214 struct peer *peer, uint32_t flag, bool set,
215 char *errmsg, size_t errmsg_len);
216extern int peer_af_flag_modify_nb(struct peer *peer, afi_t afi, safi_t safi,
217 uint32_t flag, int set, char *errmsg,
218 size_t errmsg_len);
dd65f45e 219
00d252cb 220#endif /* _QUAGGA_BGP_VTY_H */