summaryrefslogtreecommitdiff
path: root/zebra/interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/interface.c')
-rw-r--r--zebra/interface.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/zebra/interface.c b/zebra/interface.c
index 4006f9c574..10839e2106 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -200,6 +200,7 @@ static void if_nhg_dependents_release(const struct interface *ifp)
static int if_zebra_delete_hook(struct interface *ifp)
{
struct zebra_if *zebra_if;
+ struct zebra_l2info_bond *bond;
if (ifp->info) {
zebra_if = ifp->info;
@@ -217,6 +218,10 @@ static int if_zebra_delete_hook(struct interface *ifp)
rtadv_if_fini(zebra_if);
+ bond = &zebra_if->bond_info;
+ if (bond && bond->mbr_zifs)
+ list_delete(&bond->mbr_zifs);
+
zebra_l2_bridge_if_cleanup(ifp);
zebra_evpn_if_cleanup(zebra_if);
zebra_evpn_mac_ifp_del(ifp);
@@ -3777,23 +3782,20 @@ DEFUN (multicast,
DEFPY (mpls,
mpls_cmd,
- "[no] mpls enable",
+ "[no] mpls <enable$on|disable$off>",
NO_STR
MPLS_STR
- "Set mpls to be on for the interface\n")
+ "Set mpls to be on for the interface\n"
+ "Set mpls to be off 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_config = IF_ZEBRA_DATA_UNSPEC;
- } else {
- dplane_intf_mpls_modify_state(ifp, true);
- if_data->mpls_config = IF_ZEBRA_DATA_ON;
- }
+ if (!no)
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/mpls",
+ NB_OP_CREATE, on ? "true" : "false");
+ else
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/mpls",
+ NB_OP_DESTROY, NULL);
- return CMD_SUCCESS;
+ return nb_cli_apply_changes(vty, NULL);
}
int if_multicast_unset(struct interface *ifp)
@@ -5633,6 +5635,9 @@ static int if_config_write(struct vty *vty)
if (if_data->mpls_config == IF_ZEBRA_DATA_ON)
vty_out(vty, " mpls enable\n");
+ else if (if_data->mpls_config ==
+ IF_ZEBRA_DATA_OFF)
+ vty_out(vty, " mpls disable\n");
}
hook_call(zebra_if_config_wr, vty, ifp);