]> git.proxmox.com Git - mirror_frr.git/blame - bgpd/bgp_vty.h
Merge pull request #12837 from donaldsharp/unlikely_routemap
[mirror_frr.git] / bgpd / bgp_vty.h
CommitLineData
acddc0ed 1// SPDX-License-Identifier: GPL-2.0-or-later
718e3744 2/* BGP VTY interface.
896014f4 3 * Copyright (C) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro
896014f4 4 */
718e3744 5
00d252cb 6#ifndef _QUAGGA_BGP_VTY_H
7#define _QUAGGA_BGP_VTY_H
8
5d5393b9 9#include "bgpd/bgpd.h"
b0965c44 10#include "stream.h"
896af92e 11struct bgp;
ffd0c037 12
8386ac43 13#define BGP_INSTANCE_HELP_STR "BGP view\nBGP VRF\nView/VRF name\n"
f186de26 14#define BGP_INSTANCE_ALL_HELP_STR "BGP view\nBGP VRF\nAll Views/VRFs\n"
0b2aa3a0 15
00e6edb9
DA
16#define BGP_AF_STR "Address Family\n"
17#define BGP_AF_MODIFIER_STR "Address Family modifier\n"
46f296b4 18#define BGP_AFI_CMD_STR "<ipv4|ipv6>"
00e6edb9 19#define BGP_AFI_HELP_STR BGP_AF_STR BGP_AF_STR
9bedbb1e 20#define BGP_SAFI_CMD_STR "<unicast|multicast|vpn>"
d62a17ae 21#define BGP_SAFI_HELP_STR \
00e6edb9 22 BGP_AF_MODIFIER_STR BGP_AF_MODIFIER_STR BGP_AF_MODIFIER_STR
46f296b4
LB
23#define BGP_AFI_SAFI_CMD_STR BGP_AFI_CMD_STR" "BGP_SAFI_CMD_STR
24#define BGP_AFI_SAFI_HELP_STR BGP_AFI_HELP_STR BGP_SAFI_HELP_STR
ccbb332a 25
7c40bf39 26#define BGP_SAFI_WITH_LABEL_CMD_STR "<unicast|multicast|vpn|labeled-unicast|flowspec>"
d62a17ae 27#define BGP_SAFI_WITH_LABEL_HELP_STR \
00e6edb9
DA
28 BGP_AF_MODIFIER_STR BGP_AF_MODIFIER_STR BGP_AF_MODIFIER_STR \
29 BGP_AF_MODIFIER_STR BGP_AF_MODIFIER_STR
9bedbb1e 30
83856649
KQ
31#define BGP_SELF_ORIG_CMD_STR "self-originate"
32#define BGP_SELF_ORIG_HELP_STR "Display only self-originated routes\n"
33
b0965c44 34#define SHOW_GR_HEADER \
35 "Codes: GR - Graceful Restart," \
36 " * - Inheriting Global GR Config,\n" \
37 " Restart - GR Mode-Restarting," \
38 " Helper - GR Mode-Helper,\n" \
39 " Disable - GR Mode-Disable.\n\n"
40
85eeb029
DA
41#define BGP_SHOW_SUMMARY_HEADER_ALL \
42 "V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc\n"
43#define BGP_SHOW_SUMMARY_HEADER_ALL_WIDE \
44 "V AS LocalAS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc\n"
45#define BGP_SHOW_SUMMARY_HEADER_FAILED "EstdCnt DropCnt ResetTime Reason\n"
46
403e64f8 47#define BGP_SHOW_PEER_GR_CAPABILITY(vty, p, json) \
eea685b6 48 do { \
403e64f8
DA
49 bgp_show_neighbor_graceful_restart_local_mode(vty, p, json); \
50 bgp_show_neighbor_graceful_restart_remote_mode(vty, p, json); \
51 bgp_show_neighnor_graceful_restart_flags(vty, p, json); \
52 bgp_show_neighbor_graceful_restart_time(vty, p, json); \
eea685b6 53 bgp_show_neighbor_graceful_restart_capability_per_afi_safi( \
403e64f8 54 vty, p, json); \
b0965c44 55 } while (0)
56
36235319
QY
57#define VTY_BGP_GR_DEFINE_LOOP_VARIABLE \
58 struct peer *peer_loop = NULL; \
59 struct listnode *node = NULL; \
60 struct listnode *nnode = NULL; \
61 bool gr_router_detected = false
62
63#define VTY_BGP_GR_ROUTER_DETECT(_bgp, _peer, _peer_list) \
64 do { \
65 if (_peer->bgp->t_startup) \
66 bgp_peer_gr_flags_update(_peer); \
67 for (ALL_LIST_ELEMENTS(_peer_list, node, nnode, peer_loop)) { \
68 if (CHECK_FLAG(peer_loop->flags, \
69 PEER_FLAG_GRACEFUL_RESTART)) \
70 gr_router_detected = true; \
71 } \
2d3dd828 72 } while (0)
73
74
36235319
QY
75#define VTY_SEND_BGP_GR_CAPABILITY_TO_ZEBRA(_bgp, _ret) \
76 do { \
77 if (gr_router_detected \
78 && _bgp->present_zebra_gr_state == ZEBRA_GR_DISABLE) { \
79 if (bgp_zebra_send_capabilities(_bgp, false)) \
80 _ret = BGP_ERR_INVALID_VALUE; \
81 } else if (!gr_router_detected \
82 && _bgp->present_zebra_gr_state \
83 == ZEBRA_GR_ENABLE) { \
84 if (bgp_zebra_send_capabilities(_bgp, true)) \
85 _ret = BGP_ERR_INVALID_VALUE; \
86 } \
2d3dd828 87 } while (0)
88
36235319
QY
89#define VTY_BGP_GR_ROUTER_DETECT_AND_SEND_CAPABILITY_TO_ZEBRA( \
90 _bgp, _peer_list, _ret) \
91 do { \
92 struct peer *peer_loop; \
93 bool gr_router_detected = false; \
94 struct listnode *node = {0}; \
95 struct listnode *nnode = {0}; \
96 for (ALL_LIST_ELEMENTS(_peer_list, node, nnode, peer_loop)) { \
97 if (peer_loop->bgp->t_startup) \
98 bgp_peer_gr_flags_update(peer_loop); \
99 if (CHECK_FLAG(peer_loop->flags, \
100 PEER_FLAG_GRACEFUL_RESTART)) \
101 gr_router_detected = true; \
102 } \
103 if (gr_router_detected \
104 && _bgp->present_zebra_gr_state == ZEBRA_GR_DISABLE) { \
105 if (bgp_zebra_send_capabilities(_bgp, false)) \
106 _ret = BGP_ERR_INVALID_VALUE; \
107 } else if (!gr_router_detected \
108 && _bgp->present_zebra_gr_state \
109 == ZEBRA_GR_ENABLE) { \
110 if (bgp_zebra_send_capabilities(_bgp, true)) \
111 _ret = BGP_ERR_INVALID_VALUE; \
112 } \
2d3dd828 113 } while (0)
114
9e3b51a7 115
36235319
QY
116#define PRINT_EOR(_eor_flag) \
117 do { \
118 if (eor_flag) \
119 vty_out(vty, "Yes\n"); \
120 else \
121 vty_out(vty, "No\n"); \
9e3b51a7 122 } while (0)
123
36235319
QY
124#define PRINT_EOR_JSON(_eor_flag) \
125 do { \
126 if (eor_flag) \
127 json_object_boolean_true_add( \
128 json_endofrib_status, \
129 "endOfRibSentAfterUpdate"); \
130 else \
131 json_object_boolean_false_add( \
132 json_endofrib_status, \
133 "endOfRibSentAfterUpdate"); \
9e3b51a7 134 } while (0)
135
a486300b 136extern void bgp_clear_soft_in(struct bgp *bgp, afi_t afi, safi_t safi);
d62a17ae 137extern void bgp_vty_init(void);
ed0e57e3 138extern void community_alias_vty(void);
5cb5f4d0 139extern const char *get_afi_safi_str(afi_t afi, safi_t safi, bool for_json);
5d5393b9 140extern int bgp_get_vty(struct bgp **bgp, as_t *as, const char *name,
e55b0883
PG
141 enum bgp_instance_type inst_type, const char *as_pretty,
142 enum asnotation_mode asnotation);
8ef6371e 143extern void bgp_config_write_update_delay(struct vty *vty, struct bgp *bgp);
2b791107 144extern void bgp_config_write_wpkt_quanta(struct vty *vty, struct bgp *bgp);
555e09d4 145extern void bgp_config_write_rpkt_quanta(struct vty *vty, struct bgp *bgp);
2b791107
DL
146extern void bgp_config_write_listen(struct vty *vty, struct bgp *bgp);
147extern void bgp_config_write_coalesce_time(struct vty *vty, struct bgp *bgp);
d62a17ae 148extern int bgp_vty_return(struct vty *vty, int ret);
aa24a36a 149extern bool bgp_config_inprocess(void);
d62a17ae 150extern struct peer *peer_and_group_lookup_vty(struct vty *vty,
151 const char *peer_str);
00d252cb 152
d62a17ae 153extern afi_t bgp_vty_afi_from_str(const char *afi_str);
46f296b4 154
d62a17ae 155extern safi_t bgp_vty_safi_from_str(const char *safi_str);
ccbb332a 156
d62a17ae 157extern int argv_find_and_parse_afi(struct cmd_token **argv, int argc,
158 int *index, afi_t *afi);
46f296b4 159
d62a17ae 160extern int argv_find_and_parse_safi(struct cmd_token **argv, int argc,
161 int *index, safi_t *safi);
46f296b4 162
d62a17ae 163extern int bgp_vty_find_and_parse_afi_safi_bgp(struct vty *vty,
164 struct cmd_token **argv,
165 int argc, int *idx, afi_t *afi,
9f049418
DS
166 safi_t *safi, struct bgp **bgp,
167 bool use_json);
9ab0cf58
PG
168int bgp_vty_find_and_parse_bgp(struct vty *vty, struct cmd_token **argv,
169 int argc, struct bgp **bgp, bool use_json);
d62a17ae 170extern int bgp_show_summary_vty(struct vty *vty, const char *name, afi_t afi,
8c1d4cd5 171 safi_t safi, const char *neighbor, int as_type,
96c81f66 172 as_t as, uint16_t show_flags);
234f6fd4 173extern bool peergroup_flag_check(struct peer *peer, uint64_t flag);
dd65f45e 174
00d252cb 175#endif /* _QUAGGA_BGP_VTY_H */