mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 00:56:19 +00:00
lib, zebra, vtysh: configure an interface in non-default VRF
Introduce a new command "interface IFNAME vrf N" to configure an interface in the non-default VRF. Till now, only zebra uses this command. Other daemons will install the command when they support multiple VRFs. Signed-off-by: Feng Lu <lu.feng@6wind.com> Reviewed-by: Alain Ritoux <alain.ritoux@6wind.com> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Acked-by: Vincent JARDIN <vincent.jardin@6wind.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org> Conflicts: zebra/interface.c
This commit is contained in:
parent
8736158a2b
commit
cd2a8a42e1
21
lib/if.c
21
lib/if.c
@ -712,6 +712,9 @@ DEFUN (interface,
|
||||
return CMD_WARNING;
|
||||
}
|
||||
|
||||
if (argc > 1)
|
||||
VTY_GET_INTEGER ("VRF ID", vrf_id, argv[1]);
|
||||
|
||||
#ifdef SUNOS_5
|
||||
ifp = if_sunwzebra_get (argv[0], sl, vrf_id);
|
||||
#else
|
||||
@ -724,6 +727,13 @@ DEFUN (interface,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
ALIAS (interface,
|
||||
interface_vrf_cmd,
|
||||
"interface IFNAME " VRF_CMD_STR,
|
||||
"Select an interface to configure\n"
|
||||
"Interface's name\n"
|
||||
VRF_CMD_HELP_STR)
|
||||
|
||||
DEFUN_NOSH (no_interface,
|
||||
no_interface_cmd,
|
||||
"no interface IFNAME",
|
||||
@ -735,6 +745,9 @@ DEFUN_NOSH (no_interface,
|
||||
struct interface *ifp;
|
||||
vrf_id_t vrf_id = VRF_DEFAULT;
|
||||
|
||||
if (argc > 1)
|
||||
VTY_GET_INTEGER ("VRF ID", vrf_id, argv[1]);
|
||||
|
||||
ifp = if_lookup_by_name_vrf (argv[0], vrf_id);
|
||||
|
||||
if (ifp == NULL)
|
||||
@ -755,6 +768,14 @@ DEFUN_NOSH (no_interface,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
ALIAS (no_interface,
|
||||
no_interface_vrf_cmd,
|
||||
"no interface IFNAME " VRF_CMD_STR,
|
||||
NO_STR
|
||||
"Delete a pseudo interface's configuration\n"
|
||||
"Interface's name\n"
|
||||
VRF_CMD_HELP_STR)
|
||||
|
||||
/* For debug purpose. */
|
||||
DEFUN (show_address,
|
||||
show_address_cmd,
|
||||
|
2
lib/if.h
2
lib/if.h
@ -370,6 +370,8 @@ extern struct cmd_element interface_desc_cmd;
|
||||
extern struct cmd_element no_interface_desc_cmd;
|
||||
extern struct cmd_element interface_cmd;
|
||||
extern struct cmd_element no_interface_cmd;
|
||||
extern struct cmd_element interface_vrf_cmd;
|
||||
extern struct cmd_element no_interface_vrf_cmd;
|
||||
extern struct cmd_element interface_pseudo_cmd;
|
||||
extern struct cmd_element no_interface_pseudo_cmd;
|
||||
extern struct cmd_element show_address_cmd;
|
||||
|
@ -31,6 +31,7 @@ print <<EOF;
|
||||
EOF
|
||||
|
||||
$ignore{'"interface IFNAME"'} = "ignore";
|
||||
$ignore{'"interface IFNAME " "vrf <0-65535>"'} = "ignore";
|
||||
$ignore{'"ip vrf NAME"'} = "ignore";
|
||||
$ignore{'"router rip"'} = "ignore";
|
||||
$ignore{'"router ripng"'} = "ignore";
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "vtysh/vtysh.h"
|
||||
#include "log.h"
|
||||
#include "bgpd/bgp_vty.h"
|
||||
#include "vrf.h"
|
||||
|
||||
/* Struct VTY. */
|
||||
struct vty *vty;
|
||||
@ -1498,6 +1499,14 @@ DEFUNSH (VTYSH_INTERFACE,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
ALIAS_SH (VTYSH_ZEBRA,
|
||||
vtysh_interface,
|
||||
vtysh_interface_vrf_cmd,
|
||||
"interface IFNAME " VRF_CMD_STR,
|
||||
"Select an interface to configure\n"
|
||||
"Interface's name\n"
|
||||
VRF_CMD_HELP_STR)
|
||||
|
||||
/* TODO Implement "no interface command in isisd. */
|
||||
DEFSH (VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D,
|
||||
vtysh_no_interface_cmd,
|
||||
@ -1506,6 +1515,14 @@ DEFSH (VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D,
|
||||
"Delete a pseudo interface's configuration\n"
|
||||
"Interface's name\n")
|
||||
|
||||
DEFSH (VTYSH_ZEBRA,
|
||||
vtysh_no_interface_vrf_cmd,
|
||||
"no interface IFNAME " VRF_CMD_STR,
|
||||
NO_STR
|
||||
"Delete a pseudo interface's configuration\n"
|
||||
"Interface's name\n"
|
||||
VRF_CMD_HELP_STR)
|
||||
|
||||
/* TODO Implement interface description commands in ripngd, ospf6d
|
||||
* and isisd. */
|
||||
DEFSH (VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_OSPFD,
|
||||
@ -2823,6 +2840,8 @@ vtysh_init_vty (void)
|
||||
install_element (KEYCHAIN_KEY_NODE, &key_chain_cmd);
|
||||
install_element (CONFIG_NODE, &vtysh_interface_cmd);
|
||||
install_element (CONFIG_NODE, &vtysh_no_interface_cmd);
|
||||
install_element (CONFIG_NODE, &vtysh_interface_vrf_cmd);
|
||||
install_element (CONFIG_NODE, &vtysh_no_interface_vrf_cmd);
|
||||
install_element (ENABLE_NODE, &vtysh_show_running_config_cmd);
|
||||
install_element (ENABLE_NODE, &vtysh_show_running_config_daemon_cmd);
|
||||
install_element (ENABLE_NODE, &vtysh_copy_runningconfig_startupconfig_cmd);
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "connected.h"
|
||||
#include "log.h"
|
||||
#include "zclient.h"
|
||||
#include "vrf.h"
|
||||
|
||||
#include "zebra/interface.h"
|
||||
#include "zebra/rtadv.h"
|
||||
@ -1033,6 +1034,13 @@ DEFUN_NOSH (zebra_interface,
|
||||
return ret;
|
||||
}
|
||||
|
||||
ALIAS (zebra_interface,
|
||||
zebra_interface_vrf_cmd,
|
||||
"interface IFNAME " VRF_CMD_STR,
|
||||
"Select an interface to configure\n"
|
||||
"Interface's name\n"
|
||||
VRF_CMD_HELP_STR)
|
||||
|
||||
struct cmd_node interface_node =
|
||||
{
|
||||
INTERFACE_NODE,
|
||||
@ -1689,10 +1697,12 @@ if_config_write (struct vty *vty)
|
||||
{
|
||||
struct listnode *node;
|
||||
struct interface *ifp;
|
||||
vrf_iter_t iter;
|
||||
|
||||
zebra_ptm_write (vty);
|
||||
|
||||
for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
|
||||
for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
|
||||
for (ALL_LIST_ELEMENTS_RO (vrf_iter2iflist (iter), node, ifp))
|
||||
{
|
||||
struct zebra_if *if_data;
|
||||
struct listnode *addrnode;
|
||||
@ -1700,9 +1710,12 @@ if_config_write (struct vty *vty)
|
||||
struct prefix *p;
|
||||
|
||||
if_data = ifp->info;
|
||||
|
||||
vty_out (vty, "interface %s%s", ifp->name,
|
||||
VTY_NEWLINE);
|
||||
|
||||
if (ifp->vrf_id == VRF_DEFAULT)
|
||||
vty_out (vty, "interface %s%s", ifp->name, VTY_NEWLINE);
|
||||
else
|
||||
vty_out (vty, "interface %s vrf %u%s", ifp->name, ifp->vrf_id,
|
||||
VTY_NEWLINE);
|
||||
|
||||
if (if_data)
|
||||
{
|
||||
@ -1776,7 +1789,9 @@ zebra_if_init (void)
|
||||
install_element (ENABLE_NODE, &show_interface_cmd);
|
||||
install_element (ENABLE_NODE, &show_interface_desc_cmd);
|
||||
install_element (CONFIG_NODE, &zebra_interface_cmd);
|
||||
install_element (CONFIG_NODE, &zebra_interface_vrf_cmd);
|
||||
install_element (CONFIG_NODE, &no_interface_cmd);
|
||||
install_element (CONFIG_NODE, &no_interface_vrf_cmd);
|
||||
install_default (INTERFACE_NODE);
|
||||
install_element (INTERFACE_NODE, &interface_desc_cmd);
|
||||
install_element (INTERFACE_NODE, &no_interface_desc_cmd);
|
||||
|
Loading…
Reference in New Issue
Block a user