frr/zebra/zebra_srv6_vty.c
Hiroki Shirokura 6c0a7c0941 *: new cli-nodes for SRv6 manager (step2)
This commit is a part of #5853 that add new cmd-node for SRv6 configuration.
This commit just add cmd-node and moving node cli only, acutual SRv6 config
command isn't added. (that is added later commit. of this branch)

new cli nodes:
* SRv6
* SRv6-locators
* SRv6-locator

Signed-off-by: Hiroki Shirokura <slank.dev@gmail.com>
2021-06-02 10:24:47 -04:00

133 lines
3.3 KiB
C

/*
* Zebra SRv6 VTY functions
* Copyright (C) 2020 Hiroki Shirokura, LINE Corporation
*
* 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 "memory.h"
#include "if.h"
#include "prefix.h"
#include "command.h"
#include "table.h"
#include "rib.h"
#include "nexthop.h"
#include "vrf.h"
#include "srv6.h"
#include "lib/json.h"
#include "zebra/zserv.h"
#include "zebra/zebra_vrf.h"
#include "zebra/zebra_srv6_vty.h"
#include "zebra/zebra_rnh.h"
#include "zebra/redistribute.h"
#include "zebra/zebra_routemap.h"
#include "zebra/zebra_dplane.h"
static int zebra_sr_config(struct vty *vty);
static struct cmd_node sr_node = {
.name = "sr",
.node = SEGMENT_ROUTING_NODE,
.parent_node = CONFIG_NODE,
.prompt = "%s(config-sr)# ",
.config_write = zebra_sr_config,
};
static struct cmd_node srv6_node = {
.name = "srv6",
.node = SRV6_NODE,
.parent_node = SEGMENT_ROUTING_NODE,
.prompt = "%s(config-srv6)# ",
};
static struct cmd_node srv6_locs_node = {
.name = "srv6-locators",
.node = SRV6_LOCS_NODE,
.parent_node = SRV6_NODE,
.prompt = "%s(config-srv6-locators)# ",
};
static struct cmd_node srv6_loc_node = {
.name = "srv6-locator",
.node = SRV6_LOC_NODE,
.parent_node = SRV6_LOCS_NODE,
.prompt = "%s(config-srv6-locator)# "
};
DEFUN_NOSH (segment_routing,
segment_routing_cmd,
"segment-routing",
"Segment Routing\n")
{
vty->node = SEGMENT_ROUTING_NODE;
return CMD_SUCCESS;
}
DEFUN_NOSH (srv6,
srv6_cmd,
"srv6",
"Segment Routing SRv6\n")
{
vty->node = SRV6_NODE;
return CMD_SUCCESS;
}
DEFUN_NOSH (srv6_locators,
srv6_locators_cmd,
"locators",
"Segment Routing SRv6 locators\n")
{
vty->node = SRV6_LOCS_NODE;
return CMD_SUCCESS;
}
DEFUN_NOSH (srv6_locator,
srv6_locator_cmd,
"locator WORD",
"Segment Routing SRv6 locator\n"
"Specify locator-name\n")
{
vty->node = SRV6_LOC_NODE;
return CMD_SUCCESS;
}
static int zebra_sr_config(struct vty *vty)
{
return 0;
}
void zebra_srv6_vty_init(void)
{
/* Install nodes and its default commands */
install_node(&sr_node);
install_node(&srv6_node);
install_node(&srv6_locs_node);
install_node(&srv6_loc_node);
install_default(SEGMENT_ROUTING_NODE);
install_default(SRV6_NODE);
install_default(SRV6_LOCS_NODE);
install_default(SRV6_LOC_NODE);
/* Command for change node */
install_element(CONFIG_NODE, &segment_routing_cmd);
install_element(SEGMENT_ROUTING_NODE, &srv6_cmd);
install_element(SRV6_NODE, &srv6_locators_cmd);
install_element(SRV6_LOCS_NODE, &srv6_locator_cmd);
}