Coverage Report

Created: 2026-07-23 06:46

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/frr/bgpd/rfapi/vnc_debug.c
Line
Count
Source
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
0
{
53
0
  size_t i;
54
55
0
  for (i = 0; i < (sizeof(vncdebug) / sizeof(struct vnc_debug)); ++i) {
56
0
    if (strmatch(argv[3]->text, vncdebug[i].name)) {
57
0
      if (vty->node == CONFIG_NODE) {
58
0
        conf_vnc_debug |= vncdebug[i].bit;
59
0
        term_vnc_debug |= vncdebug[i].bit;
60
0
      } else {
61
0
        term_vnc_debug |= vncdebug[i].bit;
62
0
        vty_out(vty, "BGP vnc %s debugging is on\n",
63
0
          vncdebug[i].name);
64
0
      }
65
0
      return CMD_SUCCESS;
66
0
    }
67
0
  }
68
0
  vty_out(vty, "Unknown debug flag: %s\n", argv[3]->arg);
69
0
  return CMD_WARNING_CONFIG_FAILED;
70
0
}
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
0
{
84
0
  size_t i;
85
86
0
  for (i = 0; i < (sizeof(vncdebug) / sizeof(struct vnc_debug)); ++i) {
87
0
    if (strmatch(argv[argc - 1]->text, vncdebug[i].name)) {
88
0
      if (vty->node == CONFIG_NODE) {
89
0
        conf_vnc_debug &= ~vncdebug[i].bit;
90
0
        term_vnc_debug &= ~vncdebug[i].bit;
91
0
      } else {
92
0
        term_vnc_debug &= ~vncdebug[i].bit;
93
0
        vty_out(vty, "BGP vnc %s debugging is off\n",
94
0
          vncdebug[i].name);
95
0
      }
96
0
      return CMD_SUCCESS;
97
0
    }
98
0
  }
99
0
  vty_out(vty, "Unknown debug flag: %s\n", argv[3]->arg);
100
0
  return CMD_WARNING_CONFIG_FAILED;
101
0
}
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
0
{
116
0
  term_vnc_debug = 0;
117
0
  vty_out(vty, "All possible VNC debugging has been turned off\n");
118
119
0
  return CMD_SUCCESS;
120
0
}
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
0
{
134
0
  size_t i;
135
136
0
  vty_out(vty, "BGP VNC debugging status:\n");
137
138
0
  for (i = 0; i < (sizeof(vncdebug) / sizeof(struct vnc_debug)); ++i) {
139
0
    if (term_vnc_debug & vncdebug[i].bit) {
140
0
      vty_out(vty, "  BGP VNC %s debugging is on\n",
141
0
        vncdebug[i].name);
142
0
    }
143
0
  }
144
0
  vty_out(vty, "\n");
145
0
  return CMD_SUCCESS;
146
0
}
147
148
static int bgp_vnc_config_write_debug(struct vty *vty)
149
0
{
150
0
  int write = 0;
151
0
  size_t i;
152
153
0
  for (i = 0; i < array_size(vncdebug); ++i) {
154
0
    if (conf_vnc_debug & vncdebug[i].bit) {
155
0
      vty_out(vty, "debug bgp vnc %s\n", vncdebug[i].name);
156
0
      write++;
157
0
    }
158
0
  }
159
0
  return write;
160
0
}
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
0
{
172
0
  install_node(&debug_node);
173
0
  install_element(ENABLE_NODE, &show_debugging_bgp_vnc_cmd);
174
175
0
  install_element(ENABLE_NODE, &debug_bgp_vnc_cmd);
176
0
  install_element(CONFIG_NODE, &debug_bgp_vnc_cmd);
177
0
  install_element(ENABLE_NODE, &no_debug_bgp_vnc_cmd);
178
0
  install_element(CONFIG_NODE, &no_debug_bgp_vnc_cmd);
179
180
0
  install_element(ENABLE_NODE, &no_debug_bgp_vnc_all_cmd);
181
0
  install_element(CONFIG_NODE, &no_debug_bgp_vnc_all_cmd);
182
0
}