summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_vty.c37
-rw-r--r--bgpd/bgpd.h2
2 files changed, 39 insertions, 0 deletions
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index 6d7b745713..6a4c7c4e98 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -18997,6 +18997,12 @@ static int config_write_interface_one(struct vty *vty, struct vrf *vrf)
vty_out(vty, " mpls bgp forwarding\n");
write++;
}
+ if (CHECK_FLAG(iifp->flags,
+ BGP_INTERFACE_MPLS_L3VPN_SWITCHING)) {
+ vty_out(vty,
+ " mpls bgp l3vpn-multi-domain-switching\n");
+ write++;
+ }
if_vty_config_end(vty);
}
@@ -19047,6 +19053,35 @@ DEFPY(mpls_bgp_forwarding, mpls_bgp_forwarding_cmd,
return CMD_SUCCESS;
}
+DEFPY(mpls_bgp_l3vpn_multi_domain_switching,
+ mpls_bgp_l3vpn_multi_domain_switching_cmd,
+ "[no$no] mpls bgp l3vpn-multi-domain-switching",
+ NO_STR MPLS_STR BGP_STR
+ "Bind a local MPLS label to incoming L3VPN updates\n")
+{
+ bool check;
+ struct bgp_interface *iifp;
+
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ iifp = ifp->info;
+ if (!iifp) {
+ vty_out(vty, "Interface %s not available\n", ifp->name);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ check = CHECK_FLAG(iifp->flags, BGP_INTERFACE_MPLS_L3VPN_SWITCHING);
+ if (check == !no)
+ return CMD_SUCCESS;
+ if (no)
+ UNSET_FLAG(iifp->flags, BGP_INTERFACE_MPLS_L3VPN_SWITCHING);
+ else
+ SET_FLAG(iifp->flags, BGP_INTERFACE_MPLS_L3VPN_SWITCHING);
+ /* trigger a nht update on eBGP sessions */
+ if (if_is_operative(ifp))
+ bgp_nht_ifp_up(ifp);
+
+ return CMD_SUCCESS;
+}
+
DEFPY (bgp_inq_limit,
bgp_inq_limit_cmd,
"bgp input-queue-limit (1-4294967295)$limit",
@@ -19106,6 +19141,8 @@ static void bgp_vty_if_init(void)
/* "mpls bgp forwarding" commands. */
install_element(INTERFACE_NODE, &mpls_bgp_forwarding_cmd);
+ install_element(INTERFACE_NODE,
+ &mpls_bgp_l3vpn_multi_domain_switching_cmd);
}
void bgp_vty_init(void)
diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h
index ecd122fee2..0eb58773d0 100644
--- a/bgpd/bgpd.h
+++ b/bgpd/bgpd.h
@@ -811,6 +811,8 @@ DECLARE_QOBJ_TYPE(bgp);
struct bgp_interface {
#define BGP_INTERFACE_MPLS_BGP_FORWARDING (1 << 0)
+/* L3VPN multi domain switching */
+#define BGP_INTERFACE_MPLS_L3VPN_SWITCHING (1 << 1)
uint32_t flags;
};