]> git.proxmox.com Git - mirror_frr.git/blame - vrrpd/vrrp_debug.c
Merge pull request #5793 from ton31337/fix/formatting_show_bgp_summary_failed
[mirror_frr.git] / vrrpd / vrrp_debug.c
CommitLineData
78fb3dbe
QY
1/*
2 * VRRP debugging.
3 * Copyright (C) 2019 Cumulus Networks, Inc.
4 * Quentin Young
5 *
6 * This program 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 Free
8 * Software Foundation; either version 2 of the License, or (at your option)
9 * any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * 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 */
20#include <zebra.h>
21
22#include "lib/command.h"
23#include "lib/debug.h"
24#include "lib/vector.h"
25
26#include "vrrp_debug.h"
27
28/* clang-format off */
29struct debug vrrp_dbg_arp = {0, "VRRP ARP"};
30struct debug vrrp_dbg_auto = {0, "VRRP autoconfiguration events"};
31struct debug vrrp_dbg_ndisc = {0, "VRRP Neighbor Discovery"};
32struct debug vrrp_dbg_pkt = {0, "VRRP packets"};
33struct debug vrrp_dbg_proto = {0, "VRRP protocol events"};
34struct debug vrrp_dbg_sock = {0, "VRRP sockets"};
35struct debug vrrp_dbg_zebra = {0, "VRRP Zebra events"};
36
37struct debug *vrrp_debugs[] = {
2fff50ec 38 &vrrp_dbg_arp,
78fb3dbe
QY
39 &vrrp_dbg_auto,
40 &vrrp_dbg_ndisc,
41 &vrrp_dbg_pkt,
42 &vrrp_dbg_proto,
43 &vrrp_dbg_sock,
44 &vrrp_dbg_zebra
45};
46
47const char *vrrp_debugs_conflines[] = {
48 "debug vrrp arp",
49 "debug vrrp autoconfigure",
50 "debug vrrp ndisc",
51 "debug vrrp packets",
52 "debug vrrp protocol",
53 "debug vrrp sockets",
54 "debug vrrp zebra",
55};
56/* clang-format on */
57
58/*
59 * Set or unset flags on all debugs for vrrpd.
60 *
61 * flags
62 * The flags to set
63 *
64 * set
65 * Whether to set or unset the specified flags
66 */
67static void vrrp_debug_set_all(uint32_t flags, bool set)
68{
69 for (unsigned int i = 0; i < array_size(vrrp_debugs); i++) {
70 DEBUG_FLAGS_SET(vrrp_debugs[i], flags, set);
71
72 /* if all modes have been turned off, don't preserve options */
73 if (!DEBUG_MODE_CHECK(vrrp_debugs[i], DEBUG_MODE_ALL))
74 DEBUG_CLEAR(vrrp_debugs[i]);
75 }
76}
77
78static int vrrp_debug_config_write_helper(struct vty *vty, bool config)
79{
80 uint32_t mode = DEBUG_MODE_ALL;
81
82 if (config)
83 mode = DEBUG_MODE_CONF;
84
85 for (unsigned int i = 0; i < array_size(vrrp_debugs); i++)
86 if (DEBUG_MODE_CHECK(vrrp_debugs[i], mode))
87 vty_out(vty, "%s\n", vrrp_debugs_conflines[i]);
88
89 return 0;
90}
91
f828842a 92int vrrp_config_write_debug(struct vty *vty)
78fb3dbe
QY
93{
94 return vrrp_debug_config_write_helper(vty, true);
95}
96
97int vrrp_debug_status_write(struct vty *vty)
98{
99 return vrrp_debug_config_write_helper(vty, false);
100}
101
102void vrrp_debug_set(struct interface *ifp, uint8_t vrid, int vtynode,
103 bool onoff, bool proto, bool autoconf, bool pkt, bool sock,
104 bool ndisc, bool arp, bool zebra)
105{
106 uint32_t mode = DEBUG_NODE2MODE(vtynode);
107
108 if (proto)
109 DEBUG_MODE_SET(&vrrp_dbg_proto, mode, onoff);
110 if (autoconf)
111 DEBUG_MODE_SET(&vrrp_dbg_auto, mode, onoff);
112 if (pkt)
113 DEBUG_MODE_SET(&vrrp_dbg_pkt, mode, onoff);
114 if (sock)
115 DEBUG_MODE_SET(&vrrp_dbg_sock, mode, onoff);
116 if (ndisc)
117 DEBUG_MODE_SET(&vrrp_dbg_ndisc, mode, onoff);
118 if (arp)
119 DEBUG_MODE_SET(&vrrp_dbg_arp, mode, onoff);
120 if (zebra)
121 DEBUG_MODE_SET(&vrrp_dbg_zebra, mode, onoff);
122}
123
124/* ------------------------------------------------------------------------- */
125
126struct debug_callbacks vrrp_dbg_cbs = {.debug_set_all = vrrp_debug_set_all};
127
128void vrrp_debug_init(void)
129{
130 debug_init(&vrrp_dbg_cbs);
131}