]> git.proxmox.com Git - mirror_frr.git/blob - bgpd/rfapi/vnc_debug.c
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / bgpd / rfapi / vnc_debug.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 *
4 * Copyright 2016, LabN Consulting, L.L.C.
5 */
6
7 #include "lib/zebra.h"
8
9 #include "lib/prefix.h"
10 #include "lib/linklist.h"
11 #include "lib/stream.h"
12 #include "lib/command.h"
13 #include "lib/log.h"
14 #include "bgpd/rfapi/vnc_debug.h"
15
16 /*
17 * debug state storage
18 */
19 unsigned long conf_vnc_debug;
20 unsigned long term_vnc_debug;
21
22 struct vnc_debug {
23 unsigned long bit;
24 const char *name;
25 };
26
27 static const struct vnc_debug vncdebug[] = {
28 {VNC_DEBUG_RFAPI_QUERY, "rfapi-query"},
29 {VNC_DEBUG_IMPORT_BI_ATTACH, "import-bi-attach"},
30 {VNC_DEBUG_IMPORT_DEL_REMOTE, "import-del-remote"},
31 {VNC_DEBUG_EXPORT_BGP_GETCE, "export-bgp-getce"},
32 {VNC_DEBUG_EXPORT_BGP_DIRECT_ADD, "export-bgp-direct-add"},
33 {VNC_DEBUG_IMPORT_BGP_ADD_ROUTE, "import-bgp-add-route"},
34 {VNC_DEBUG_VERBOSE, "verbose"},
35 };
36
37 #define VNC_STR "VNC information\n"
38
39 /***********************************************************************
40 * debug bgp vnc <foo>
41 ***********************************************************************/
42 DEFUN (debug_bgp_vnc,
43 debug_bgp_vnc_cmd,
44 "debug bgp vnc <rfapi-query|import-bi-attach|import-del-remote|verbose>",
45 DEBUG_STR
46 BGP_STR
47 VNC_STR
48 "rfapi query handling\n"
49 "import BI atachment\n"
50 "import delete remote routes\n"
51 "verbose logging\n")
52 {
53 size_t i;
54
55 for (i = 0; i < (sizeof(vncdebug) / sizeof(struct vnc_debug)); ++i) {
56 if (strmatch(argv[3]->text, vncdebug[i].name)) {
57 if (vty->node == CONFIG_NODE) {
58 conf_vnc_debug |= vncdebug[i].bit;
59 term_vnc_debug |= vncdebug[i].bit;
60 } else {
61 term_vnc_debug |= vncdebug[i].bit;
62 vty_out(vty, "BGP vnc %s debugging is on\n",
63 vncdebug[i].name);
64 }
65 return CMD_SUCCESS;
66 }
67 }
68 vty_out(vty, "Unknown debug flag: %s\n", argv[3]->arg);
69 return CMD_WARNING_CONFIG_FAILED;
70 }
71
72 DEFUN (no_debug_bgp_vnc,
73 no_debug_bgp_vnc_cmd,
74 "no debug bgp vnc <rfapi-query|import-bi-attach|import-del-remote|verbose>",
75 NO_STR
76 DEBUG_STR
77 BGP_STR
78 VNC_STR
79 "rfapi query handling\n"
80 "import BI atachment\n"
81 "import delete remote routes\n"
82 "verbose logging\n")
83 {
84 size_t i;
85
86 for (i = 0; i < (sizeof(vncdebug) / sizeof(struct vnc_debug)); ++i) {
87 if (strmatch(argv[argc - 1]->text, vncdebug[i].name)) {
88 if (vty->node == CONFIG_NODE) {
89 conf_vnc_debug &= ~vncdebug[i].bit;
90 term_vnc_debug &= ~vncdebug[i].bit;
91 } else {
92 term_vnc_debug &= ~vncdebug[i].bit;
93 vty_out(vty, "BGP vnc %s debugging is off\n",
94 vncdebug[i].name);
95 }
96 return CMD_SUCCESS;
97 }
98 }
99 vty_out(vty, "Unknown debug flag: %s\n", argv[3]->arg);
100 return CMD_WARNING_CONFIG_FAILED;
101 }
102
103 /***********************************************************************
104 * no debug bgp vnc all
105 ***********************************************************************/
106
107 DEFUN (no_debug_bgp_vnc_all,
108 no_debug_bgp_vnc_all_cmd,
109 "no debug all bgp vnc",
110 NO_STR
111 DEBUG_STR
112 "Disable all VNC debugging\n"
113 BGP_STR
114 VNC_STR)
115 {
116 term_vnc_debug = 0;
117 vty_out(vty, "All possible VNC debugging has been turned off\n");
118
119 return CMD_SUCCESS;
120 }
121
122 /***********************************************************************
123 * show/save
124 ***********************************************************************/
125
126 DEFUN_NOSH (show_debugging_bgp_vnc,
127 show_debugging_bgp_vnc_cmd,
128 "show debugging bgp vnc",
129 SHOW_STR
130 DEBUG_STR
131 BGP_STR
132 VNC_STR)
133 {
134 size_t i;
135
136 vty_out(vty, "BGP VNC debugging status:\n");
137
138 for (i = 0; i < (sizeof(vncdebug) / sizeof(struct vnc_debug)); ++i) {
139 if (term_vnc_debug & vncdebug[i].bit) {
140 vty_out(vty, " BGP VNC %s debugging is on\n",
141 vncdebug[i].name);
142 }
143 }
144 vty_out(vty, "\n");
145 return CMD_SUCCESS;
146 }
147
148 static int bgp_vnc_config_write_debug(struct vty *vty)
149 {
150 int write = 0;
151 size_t i;
152
153 for (i = 0; i < array_size(vncdebug); ++i) {
154 if (conf_vnc_debug & vncdebug[i].bit) {
155 vty_out(vty, "debug bgp vnc %s\n", vncdebug[i].name);
156 write++;
157 }
158 }
159 return write;
160 }
161
162 static int bgp_vnc_config_write_debug(struct vty *vty);
163 static struct cmd_node debug_node = {
164 .name = "vnc debug",
165 .node = DEBUG_VNC_NODE,
166 .prompt = "",
167 .config_write = bgp_vnc_config_write_debug,
168 };
169
170 void vnc_debug_init(void)
171 {
172 install_node(&debug_node);
173 install_element(ENABLE_NODE, &show_debugging_bgp_vnc_cmd);
174
175 install_element(ENABLE_NODE, &debug_bgp_vnc_cmd);
176 install_element(CONFIG_NODE, &debug_bgp_vnc_cmd);
177 install_element(ENABLE_NODE, &no_debug_bgp_vnc_cmd);
178 install_element(CONFIG_NODE, &no_debug_bgp_vnc_cmd);
179
180 install_element(ENABLE_NODE, &no_debug_bgp_vnc_all_cmd);
181 install_element(CONFIG_NODE, &no_debug_bgp_vnc_all_cmd);
182 }