diff options
| author | Donald Sharp <sharpd@nvidia.com> | 2022-06-29 07:43:50 -0400 |
|---|---|---|
| committer | Donald Sharp <sharpd@nvidia.com> | 2022-08-08 09:15:22 -0400 |
| commit | 39ffa8e8e8564e41020f5ecfa12441c013685e24 (patch) | |
| tree | 87e885926c2aa8fc269633090983d7a299a4e748 /zebra/interface.c | |
| parent | c87f5c23922a17738111fff767501717d7b1b933 (diff) | |
zebra: Add a `mpls enable` interface node command
Allow individual interfaces to turn on/off the mpls subsystem
for it in linux.
sharpd@eva:~/frr9$ sudo sysctl -a | grep enp39s0 | grep mpls
net.mpls.conf.enp39s0.input = 0
sharpd@eva:~/frr9$ vtysh -c "conf" -c "int enp39s0" -c "mpls enable"
sharpd@eva:~/frr9$ sudo sysctl -a | grep enp39s0 | grep mpls
net.mpls.conf.enp39s0.input = 1
sharpd@eva:~/frr9$ vtysh -c "conf" -c "int enp39s0" -c "no mpls enable"
sharpd@eva:~/frr9$ sudo sysctl -a | grep enp39s0 | grep mpls
net.mpls.conf.enp39s0.input = 0
sharpd@eva:~/frr9$
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Diffstat (limited to 'zebra/interface.c')
| -rw-r--r-- | zebra/interface.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/zebra/interface.c b/zebra/interface.c index b1f59a4e4f..b7a984e44d 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -2937,6 +2937,27 @@ DEFUN (multicast, return CMD_SUCCESS; } +DEFPY (mpls, + mpls_cmd, + "[no] mpls enable", + NO_STR + MPLS_STR + "Set mpls to be on for the interface\n") +{ + VTY_DECLVAR_CONTEXT(interface, ifp); + struct zebra_if *if_data = ifp->info; + + if (no) { + dplane_intf_mpls_modify_state(ifp, false); + if_data->mpls = IF_ZEBRA_DATA_UNSPEC; + } else { + dplane_intf_mpls_modify_state(ifp, true); + if_data->mpls = IF_ZEBRA_DATA_ON; + } + + return CMD_SUCCESS; +} + int if_multicast_unset(struct interface *ifp) { struct zebra_if *if_data; @@ -4581,6 +4602,8 @@ static int if_config_write(struct vty *vty) IF_ZEBRA_DATA_ON ? "" : "no "); + if (if_data->mpls == IF_ZEBRA_DATA_ON) + vty_out(vty, " mpls\n"); } hook_call(zebra_if_config_wr, vty, ifp); @@ -4617,6 +4640,7 @@ void zebra_if_init(void) install_element(ENABLE_NODE, &show_interface_desc_vrf_all_cmd); install_element(INTERFACE_NODE, &multicast_cmd); install_element(INTERFACE_NODE, &no_multicast_cmd); + install_element(INTERFACE_NODE, &mpls_cmd); install_element(INTERFACE_NODE, &linkdetect_cmd); install_element(INTERFACE_NODE, &no_linkdetect_cmd); install_element(INTERFACE_NODE, &shutdown_if_cmd); |
