Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Zserv.h modifications #1527

Merged
merged 3 commits into from
Dec 14, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions zebra/interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,8 @@ static inline void zebra_if_set_ziftype(struct interface *ifp,
#define IS_ZEBRA_IF_VRF_SLAVE(ifp) \
(((struct zebra_if *)(ifp->info))->zif_slave_type == ZEBRA_IF_SLAVE_VRF)

extern void zebra_if_init(void);

extern struct interface *if_lookup_by_index_per_ns(struct zebra_ns *,
u_int32_t);
extern struct interface *if_lookup_by_name_per_ns(struct zebra_ns *,
Expand Down
1 change: 1 addition & 0 deletions zebra/kernel_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
#include "zebra/zserv.h"
#include "zebra/zebra_ns.h"
#include "zebra/zebra_vrf.h"
#include "zebra/rt.h"
#include "zebra/debug.h"
#include "zebra/kernel_netlink.h"
#include "zebra/rt_netlink.h"
Expand Down
2 changes: 1 addition & 1 deletion zebra/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ int main(int argc, char **argv)
zebrad.master = frr_init();

/* Zebra related initialize. */
zebra_init();
zserv_init();
rib_init();
zebra_if_init();
zebra_debug_init();
Expand Down
4 changes: 4 additions & 0 deletions zebra/rib.h
Original file line number Diff line number Diff line change
Expand Up @@ -435,4 +435,8 @@ static inline void rib_tables_iter_cleanup(rib_tables_iter_t *iter)
DECLARE_HOOK(rib_update, (struct route_node * rn, const char *reason),
(rn, reason))


extern void zebra_vty_init(void);
extern pid_t pid;

#endif /*_ZEBRA_RIB_H */
14 changes: 14 additions & 0 deletions zebra/rt.h
Original file line number Diff line number Diff line change
Expand Up @@ -112,4 +112,18 @@ extern int kernel_add_neigh(struct interface *ifp, struct ipaddr *ip,
struct ethaddr *mac);
extern int kernel_del_neigh(struct interface *ifp, struct ipaddr *ip);

/*
* Southbound Initialization routines to get initial starting
* state.
*/
extern void interface_list(struct zebra_ns *zns);
extern void kernel_init(struct zebra_ns *zns);
extern void kernel_terminate(struct zebra_ns *zns);
extern void macfdb_read(struct zebra_ns *zns);
extern void macfdb_read_for_bridge(struct zebra_ns *zns, struct interface *ifp,
struct interface *br_if);
extern void neigh_read(struct zebra_ns *zns);
extern void neigh_read_for_vlan(struct zebra_ns *zns, struct interface *ifp);
extern void route_read(struct zebra_ns *zns);

#endif /* _ZEBRA_RT_H */
2 changes: 1 addition & 1 deletion zebra/rtread_getmsg.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#include "vty.h"

#include "zebra/rib.h"
#include "zebra/zserv.h"
#include "zebra/rt.h"

/* Thank you, Solaris, for polluting application symbol namespace. */
#undef hook_register
Expand Down
2 changes: 1 addition & 1 deletion zebra/rtread_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#ifdef GNU_LINUX

#include "vty.h"
#include "zebra/zserv.h"
#include "zebra/rt.h"
#include "zebra/rt_netlink.h"

void route_read(struct zebra_ns *zns)
Expand Down
1 change: 0 additions & 1 deletion zebra/rtread_sysctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
#include "log.h"
#include "vrf.h"

#include "zebra/zserv.h"
#include "zebra/rt.h"
#include "zebra/kernel_socket.h"

Expand Down
1 change: 1 addition & 0 deletions zebra/zebra_ns.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "zebra_ns.h"
#include "zebra_vrf.h"
#include "zebra_memory.h"
#include "rt.h"

DEFINE_MTYPE(ZEBRA, ZEBRA_NS, "Zebra Name Space")

Expand Down
1 change: 1 addition & 0 deletions zebra/zebra_routemap.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#ifndef __ZEBRA_ROUTEMAP_H__
#define __ZEBRA_ROUTEMAP_H__

extern void zebra_route_map_init(void);
extern void zebra_routemap_config_write_protocol(struct vty *vty);
extern char *zebra_get_import_table_route_map(afi_t afi, uint32_t table);
extern void zebra_add_import_table_route_map(afi_t afi, const char *rmap_name,
Expand Down
243 changes: 243 additions & 0 deletions zebra/zebra_vty.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@
#include "zebra/zebra_vty_clippy.c"
#endif
#include "zebra/zserv.h"
#include "zebra/router-id.h"
#include "zebra/ipforward.h"

extern int allow_delete;

Expand Down Expand Up @@ -2325,13 +2327,254 @@ static int config_write_protocol(struct vty *vty)
return 1;
}

#ifdef HAVE_NETLINK
/* Display default rtm_table for all clients. */
DEFUN (show_table,
show_table_cmd,
"show table",
SHOW_STR
"default routing table to use for all clients\n")
{
vty_out(vty, "table %d\n", zebrad.rtm_table_default);
return CMD_SUCCESS;
}

DEFUN (config_table,
config_table_cmd,
"table TABLENO",
"Configure target kernel routing table\n"
"TABLE integer\n")
{
zebrad.rtm_table_default = strtol(argv[1]->arg, (char **)0, 10);
return CMD_SUCCESS;
}

DEFUN (no_config_table,
no_config_table_cmd,
"no table [TABLENO]",
NO_STR
"Configure target kernel routing table\n"
"TABLE integer\n")
{
zebrad.rtm_table_default = 0;
return CMD_SUCCESS;
}
#endif

DEFUN (show_zebra,
show_zebra_cmd,
"show zebra",
SHOW_STR
ZEBRA_STR)
{
struct vrf *vrf;

vty_out(vty,
" Route Route Neighbor LSP LSP\n");
vty_out(vty,
"VRF Installs Removals Updates Installs Removals\n");

RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name) {
struct zebra_vrf *zvrf = vrf->info;

vty_out(vty, "%-25s %10" PRIu64 " %10" PRIu64 " %10" PRIu64
" %10" PRIu64 " %10" PRIu64 "\n",
vrf->name, zvrf->installs, zvrf->removals,
zvrf->neigh_updates, zvrf->lsp_installs,
zvrf->lsp_removals);
}

return CMD_SUCCESS;
}

DEFUN (ip_forwarding,
ip_forwarding_cmd,
"ip forwarding",
IP_STR
"Turn on IP forwarding\n")
{
int ret;

ret = ipforward();
if (ret == 0)
ret = ipforward_on();

if (ret == 0) {
vty_out(vty, "Can't turn on IP forwarding\n");
return CMD_WARNING_CONFIG_FAILED;
}

return CMD_SUCCESS;
}

DEFUN (no_ip_forwarding,
no_ip_forwarding_cmd,
"no ip forwarding",
NO_STR
IP_STR
"Turn off IP forwarding\n")
{
int ret;

ret = ipforward();
if (ret != 0)
ret = ipforward_off();

if (ret != 0) {
vty_out(vty, "Can't turn off IP forwarding\n");
return CMD_WARNING_CONFIG_FAILED;
}

return CMD_SUCCESS;
}

/* Only display ip forwarding is enabled or not. */
DEFUN (show_ip_forwarding,
show_ip_forwarding_cmd,
"show ip forwarding",
SHOW_STR
IP_STR
"IP forwarding status\n")
{
int ret;

ret = ipforward();

if (ret == 0)
vty_out(vty, "IP forwarding is off\n");
else
vty_out(vty, "IP forwarding is on\n");
return CMD_SUCCESS;
}

/* Only display ipv6 forwarding is enabled or not. */
DEFUN (show_ipv6_forwarding,
show_ipv6_forwarding_cmd,
"show ipv6 forwarding",
SHOW_STR
"IPv6 information\n"
"Forwarding status\n")
{
int ret;

ret = ipforward_ipv6();

switch (ret) {
case -1:
vty_out(vty, "ipv6 forwarding is unknown\n");
break;
case 0:
vty_out(vty, "ipv6 forwarding is %s\n", "off");
break;
case 1:
vty_out(vty, "ipv6 forwarding is %s\n", "on");
break;
default:
vty_out(vty, "ipv6 forwarding is %s\n", "off");
break;
}
return CMD_SUCCESS;
}

DEFUN (ipv6_forwarding,
ipv6_forwarding_cmd,
"ipv6 forwarding",
IPV6_STR
"Turn on IPv6 forwarding\n")
{
int ret;

ret = ipforward_ipv6();
if (ret == 0)
ret = ipforward_ipv6_on();

if (ret == 0) {
vty_out(vty, "Can't turn on IPv6 forwarding\n");
return CMD_WARNING_CONFIG_FAILED;
}

return CMD_SUCCESS;
}

DEFUN (no_ipv6_forwarding,
no_ipv6_forwarding_cmd,
"no ipv6 forwarding",
NO_STR
IPV6_STR
"Turn off IPv6 forwarding\n")
{
int ret;

ret = ipforward_ipv6();
if (ret != 0)
ret = ipforward_ipv6_off();

if (ret != 0) {
vty_out(vty, "Can't turn off IPv6 forwarding\n");
return CMD_WARNING_CONFIG_FAILED;
}

return CMD_SUCCESS;
}

/* Table configuration write function. */
static int config_write_table(struct vty *vty)
{
if (zebrad.rtm_table_default)
vty_out(vty, "table %d\n", zebrad.rtm_table_default);
return 0;
}

/* IPForwarding configuration write function. */
static int config_write_forwarding(struct vty *vty)
{
/* FIXME: Find better place for that. */
router_id_write(vty);

if (!ipforward())
vty_out(vty, "no ip forwarding\n");
if (!ipforward_ipv6())
vty_out(vty, "no ipv6 forwarding\n");
vty_out(vty, "!\n");
return 0;
}

/* IP node for static routes. */
static struct cmd_node ip_node = {IP_NODE, "", 1};
static struct cmd_node protocol_node = {PROTOCOL_NODE, "", 1};
/* table node for routing tables. */
static struct cmd_node table_node = {TABLE_NODE,
"", /* This node has no interface. */
1};
static struct cmd_node forwarding_node = {FORWARDING_NODE,
"", /* This node has no interface. */
1};

/* Route VTY. */
void zebra_vty_init(void)
{
/* Install configuration write function. */
install_node(&table_node, config_write_table);
install_node(&forwarding_node, config_write_forwarding);

install_element(VIEW_NODE, &show_ip_forwarding_cmd);
install_element(CONFIG_NODE, &ip_forwarding_cmd);
install_element(CONFIG_NODE, &no_ip_forwarding_cmd);
install_element(ENABLE_NODE, &show_zebra_cmd);

#ifdef HAVE_NETLINK
install_element(VIEW_NODE, &show_table_cmd);
install_element(CONFIG_NODE, &config_table_cmd);
install_element(CONFIG_NODE, &no_config_table_cmd);
#endif /* HAVE_NETLINK */

install_element(VIEW_NODE, &show_ipv6_forwarding_cmd);
install_element(CONFIG_NODE, &ipv6_forwarding_cmd);
install_element(CONFIG_NODE, &no_ipv6_forwarding_cmd);

/* Route-map */
zebra_route_map_init();

install_node(&ip_node, zebra_ip_config);
install_node(&protocol_node, config_write_protocol);

Expand Down
Loading