From 6c0a7c094111b11b7f8c298b71c60e08b82d8e15 Mon Sep 17 00:00:00 2001 From: Hiroki Shirokura Date: Wed, 30 Sep 2020 12:59:19 +0900 Subject: *: 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 --- zebra/main.c | 2 + zebra/subdir.am | 3 ++ zebra/zebra_srv6_vty.c | 132 +++++++++++++++++++++++++++++++++++++++++++++++++ zebra/zebra_srv6_vty.h | 25 ++++++++++ 4 files changed, 162 insertions(+) create mode 100644 zebra/zebra_srv6_vty.c create mode 100644 zebra/zebra_srv6_vty.h (limited to 'zebra') diff --git a/zebra/main.c b/zebra/main.c index 3f75b222ba..259c70d0df 100644 --- a/zebra/main.c +++ b/zebra/main.c @@ -57,6 +57,7 @@ #include "zebra/zebra_nb.h" #include "zebra/zebra_opaque.h" #include "zebra/zebra_srte.h" +#include "zebra/zebra_srv6_vty.h" #define ZEBRA_PTM_SUPPORT @@ -418,6 +419,7 @@ int main(int argc, char **argv) zebra_pbr_init(); zebra_opaque_init(); zebra_srte_init(); + zebra_srv6_vty_init(); /* For debug purpose. */ /* SET_FLAG (zebra_debug_event, ZEBRA_DEBUG_EVENT); */ diff --git a/zebra/subdir.am b/zebra/subdir.am index 6fc8ef0df5..ca77502ba3 100644 --- a/zebra/subdir.am +++ b/zebra/subdir.am @@ -13,6 +13,7 @@ vtysh_scan += \ zebra/zebra_mlag_vty.c \ zebra/zebra_evpn_mh.c \ zebra/zebra_mpls_vty.c \ + zebra/zebra_srv6_vty.c \ zebra/zebra_ptm.c \ zebra/zebra_pw.c \ zebra/zebra_routemap.c \ @@ -92,6 +93,7 @@ zebra_zebra_SOURCES = \ zebra/zebra_mpls_openbsd.c \ zebra/zebra_mpls_null.c \ zebra/zebra_mpls_vty.c \ + zebra/zebra_srv6_vty.c \ zebra/zebra_mroute.c \ zebra/zebra_nb.c \ zebra/zebra_nb_config.c \ @@ -161,6 +163,7 @@ noinst_HEADERS += \ zebra/zebra_mlag.h \ zebra/zebra_mlag_vty.h \ zebra/zebra_mpls.h \ + zebra/zebra_srv6_vty.h \ zebra/zebra_mroute.h \ zebra/zebra_nb.h \ zebra/zebra_netns_id.h \ diff --git a/zebra/zebra_srv6_vty.c b/zebra/zebra_srv6_vty.c new file mode 100644 index 0000000000..f8eff70c2d --- /dev/null +++ b/zebra/zebra_srv6_vty.c @@ -0,0 +1,132 @@ +/* + * 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 + +#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); +} diff --git a/zebra/zebra_srv6_vty.h b/zebra/zebra_srv6_vty.h new file mode 100644 index 0000000000..42d6aefa9a --- /dev/null +++ b/zebra/zebra_srv6_vty.h @@ -0,0 +1,25 @@ +/* + * 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 + */ + +#ifndef _ZEBRA_SRV6_VTY_H +#define _ZEBRA_SRV6_VTY_H + +extern void zebra_srv6_vty_init(void); + +#endif /* _ZEBRA_SRV6_VTY_H */ -- cgit v1.2.3