Skip to content

Commit

Permalink
pbrd: debugging infra
Browse files Browse the repository at this point in the history
Signed-off-by: Quentin Young <[email protected]>
  • Loading branch information
qlyoung authored and donaldsharp committed Mar 13, 2018
1 parent 18ff5cd commit 6a2b372
Show file tree
Hide file tree
Showing 5 changed files with 136 additions and 0 deletions.
84 changes: 84 additions & 0 deletions pbrd/pbr_debug.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/*
* PBR - debugging
* Copyright (C) 2018 Cumulus Networks, Inc.
* Quentin Young
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; see the file COPYING; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <zebra.h>

#include "debug.h"
#include "command.h"
#include "vector.h"

#ifndef VTYSH_EXTRACT_PL
#include "pbrd/pbr_debug_clippy.c"
#endif
#include "pbrd/pbr_debug.h"

#define DEBUG_PBR_MAP 0x000001

/* PBR debugging records */
struct debug pbr_dbg_map = {0, "PBR map"};

struct debug *pbr_debugs[] = {&pbr_dbg_map};

static void pbr_debug_set_all(uint32_t flags, bool set)
{
for (unsigned int i = 0; i < array_size(pbr_debugs); i++) {
DEBUG_FLAGS_SET(pbr_debugs[i], flags, set);

/* if all modes have been turned off, don't preserve options */
if (!DEBUG_MODE_CHECK(pbr_debugs[i], DEBUG_MODE_ALL))
DEBUG_CLEAR(pbr_debugs[i]);
}
}

#if 0
static void
pbr_debug_config_write(struct vty *vty)
{
if (DEBUG_MODE_CHECK(&pbr_dbg_map, DEBUG_MODE_CONF))
vty_out(vty, "debug pbr map");
}
#endif

/* PBR debugging CLI ------------------------------------------------------- */

DEFPY(debug_pbr_map, debug_pbr_map_cmd, "[no] debug pbr map [MAP]",
NO_STR DEBUG_STR
"Policy Based Routing\n"
"PBR Map Name\n")
{
uint32_t mode = DEBUG_NODE2MODE(vty->node);
DEBUG_MODE_SET(&pbr_dbg_map, mode, !!no);
return CMD_SUCCESS;
}

/* ------------------------------------------------------------------------- */


struct debug_callbacks pbr_dbg_cbs = {.debug_set_all = pbr_debug_set_all};

void pbr_debug_init(void)
{
debug_init(&pbr_dbg_cbs);
}

void pbr_debug_init_vty(void)
{
install_element(VIEW_NODE, &debug_pbr_map_cmd);
install_element(CONFIG_NODE, &debug_pbr_map_cmd);
}
41 changes: 41 additions & 0 deletions pbrd/pbr_debug.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* PBR - debugging
* Copyright (C) 2018 Cumulus Networks, Inc.
* Quentin Young
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; see the file COPYING; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef __PBR_DEBUG_H__
#define __PBR_DEBUG_H__

#include <zebra.h>

#include "debug.h"

extern struct debug pbr_dbg_map;

/*
* Initialize PBR debugging.
*
* Installs VTY commands and registers callbacks.
*/
void pbr_debug_init(void);

/*
* Install PBR debugging VTY commands.
*/
void pbr_debug_init_vty(void);

#endif /* __PBR_DEBUG_H__ */
3 changes: 3 additions & 0 deletions pbrd/pbr_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
#include "pbr_zebra.h"
#include "pbr_event.h"
#include "pbr_vty.h"
#include "pbr_debug.h"

zebra_capabilities_t _caps_p[] = {
ZCAP_NET_RAW, ZCAP_BIND, ZCAP_NET_ADMIN,
Expand Down Expand Up @@ -147,6 +148,8 @@ int main(int argc, char **argv, char **envp)

master = frr_init();

pbr_debug_init();

vrf_init(NULL, NULL, NULL, NULL);
nexthop_group_init(pbr_nhgroup_add_cb,
pbr_nhgroup_add_nexthop_cb,
Expand Down
3 changes: 3 additions & 0 deletions pbrd/pbr_vty.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include "pbrd/pbr_zebra.h"
#include "pbrd/pbr_vty.h"
#include "pbrd/pbr_event.h"
#include "pbrd/pbr_debug.h"
#ifndef VTYSH_EXTRACT_PL
#include "pbrd/pbr_vty_clippy.c"
#endif
Expand Down Expand Up @@ -624,5 +625,7 @@ void pbr_vty_init(void)
install_element(VIEW_NODE, &show_pbr_interface_cmd);
install_element(VIEW_NODE, &show_pbr_nexthop_group_cmd);

pbr_debug_init_vty();

return;
}
5 changes: 5 additions & 0 deletions pbrd/subdir.am
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ pbrd_libpbr_a_SOURCES = \
pbrd/pbr_memory.c \
pbrd/pbr_nht.c \
pbrd/pbr_event.c \
pbrd/pbr_debug.c \
# end

noinst_HEADERS += \
Expand All @@ -24,11 +25,15 @@ noinst_HEADERS += \
pbrd/pbr_nht.h \
pbrd/pbr_vty.h \
pbrd/pbr_zebra.h \
pbrd/pbr_debug.h \
# end

pbrd/pbr_vty_clippy.c: $(CLIPPY_DEPS)
pbrd/pbr_vty.$(OBJEXT): pbrd/pbr_vty_clippy.c

pbrd/pbr_debug_clippy.c: $(CLIPPY_DEPS)
pbrd/pbr_debug.$(OBJEXT): pbrd/pbr_debug_clippy.c

pbrd_pbrd_SOURCES = pbrd/pbr_main.c
pbrd_pbrd_LDADD = pbrd/libpbr.a lib/libfrr.la @LIBCAP@

0 comments on commit 6a2b372

Please sign in to comment.