bgpd, lib, vtysh: hook up bgp ENCAP CLI node
Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
diff --git a/bgpd/bgp_encap.c b/bgpd/bgp_encap.c
index f936508..48e2312 100644
--- a/bgpd/bgp_encap.c
+++ b/bgpd/bgp_encap.c
@@ -943,9 +943,8 @@
void
bgp_encap_init (void)
{
- //install_element (BGP_ENCAP_NODE, &encap_network_cmd);
- //install_element (BGP_ENCAP_NODE, &no_encap_network_cmd);
-
+ install_element (BGP_ENCAP_NODE, &encap_network_cmd);
+ install_element (BGP_ENCAP_NODE, &no_encap_network_cmd);
install_element (VIEW_NODE, &show_bgp_ipv4_encap_cmd);
install_element (VIEW_NODE, &show_bgp_ipv4_encap_rd_cmd);
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index e0f1c2b..1a1a9b9 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -62,6 +62,7 @@
case BGP_IPV6_NODE:
case BGP_IPV6M_NODE:
case BGP_VPNV6_NODE:
+ case BGP_ENCAPV6_NODE:
return AFI_IP6;
break;
}
@@ -74,6 +75,10 @@
safi_t
bgp_node_safi (struct vty *vty)
{
+ if (vty->node == BGP_ENCAP_NODE)
+ return SAFI_ENCAP;
+ if (vty->node == BGP_ENCAPV6_NODE)
+ return SAFI_ENCAP;
if (vty->node == BGP_VPNV6_NODE)
return SAFI_MPLS_VPN;
if (vty->node == BGP_VPNV4_NODE)
@@ -83,6 +88,44 @@
return SAFI_UNICAST;
}
+int
+bgp_parse_afi(const char *str, afi_t *afi)
+{
+ if (!strcmp(str, "ipv4")) {
+ *afi = AFI_IP;
+ return 0;
+ }
+#ifdef HAVE_IPV6
+ if (!strcmp(str, "ipv6")) {
+ *afi = AFI_IP6;
+ return 0;
+ }
+#endif /* HAVE_IPV6 */
+ return -1;
+}
+
+int
+bgp_parse_safi(const char *str, safi_t *safi)
+{
+ if (!strcmp(str, "encap")) {
+ *safi = SAFI_ENCAP;
+ return 0;
+ }
+ if (!strcmp(str, "multicast")) {
+ *safi = SAFI_MULTICAST;
+ return 0;
+ }
+ if (!strcmp(str, "unicast")) {
+ *safi = SAFI_UNICAST;
+ return 0;
+ }
+ if (!strcmp(str, "vpn")) {
+ *safi = SAFI_MPLS_VPN;
+ return 0;
+ }
+ return -1;
+}
+
static int
peer_address_self_check (union sockunion *su)
{
@@ -4311,12 +4354,41 @@
"Address family\n"
"Address Family Modifier\n")
+DEFUN (address_family_encap,
+ address_family_encap_cmd,
+ "address-family encap",
+ "Enter Address Family command mode\n"
+ "Address family\n")
+{
+ vty->node = BGP_ENCAP_NODE;
+ return CMD_SUCCESS;
+}
+
+ALIAS (address_family_encap,
+ address_family_encapv4_cmd,
+ "address-family encapv4",
+ "Enter Address Family command mode\n"
+ "Address family\n")
+
+DEFUN (address_family_encapv6,
+ address_family_encapv6_cmd,
+ "address-family encapv6",
+ "Enter Address Family command mode\n"
+ "Address family\n")
+{
+ vty->node = BGP_ENCAPV6_NODE;
+ return CMD_SUCCESS;
+}
+
DEFUN (exit_address_family,
exit_address_family_cmd,
"exit-address-family",
"Exit from Address Family configuration mode\n")
{
+ /* should match list in command.c:config_exit */
if (vty->node == BGP_IPV4_NODE
+ || vty->node == BGP_ENCAP_NODE
+ || vty->node == BGP_ENCAPV6_NODE
|| vty->node == BGP_IPV4M_NODE
|| vty->node == BGP_VPNV4_NODE
|| vty->node == BGP_VPNV6_NODE
@@ -7538,12 +7610,16 @@
return "IPv4 Multicast";
else if (afi == AFI_IP && safi == SAFI_MPLS_VPN)
return "VPN-IPv4 Unicast";
+ else if (afi == AFI_IP && safi == SAFI_ENCAP)
+ return "ENCAP-IPv4 Unicast";
else if (afi == AFI_IP6 && safi == SAFI_UNICAST)
return "IPv6 Unicast";
else if (afi == AFI_IP6 && safi == SAFI_MULTICAST)
return "IPv6 Multicast";
else if (afi == AFI_IP6 && safi == SAFI_MPLS_VPN)
return "VPN-IPv6 Unicast";
+ else if (afi == AFI_IP6 && safi == SAFI_ENCAP)
+ return "ENCAP-IPv6 Unicast";
else
return "Unknown";
}
@@ -7888,7 +7964,11 @@
|| p->afc_recv[AFI_IP6][SAFI_MULTICAST]
|| p->afc_adv[AFI_IP6][SAFI_MPLS_VPN]
|| p->afc_recv[AFI_IP6][SAFI_MPLS_VPN]
+ || p->afc_adv[AFI_IP6][SAFI_ENCAP]
+ || p->afc_recv[AFI_IP6][SAFI_ENCAP]
#endif /* HAVE_IPV6 */
+ || p->afc_adv[AFI_IP][SAFI_ENCAP]
+ || p->afc_recv[AFI_IP][SAFI_ENCAP]
|| p->afc_adv[AFI_IP][SAFI_MPLS_VPN]
|| p->afc_recv[AFI_IP][SAFI_MPLS_VPN])
{
@@ -9357,6 +9437,20 @@
1
};
+static struct cmd_node bgp_encap_node =
+{
+ BGP_ENCAP_NODE,
+ "%s(config-router-af-encap)# ",
+ 1
+};
+
+static struct cmd_node bgp_encapv6_node =
+{
+ BGP_ENCAPV6_NODE,
+ "%s(config-router-af-encapv6)# ",
+ 1
+};
+
static void community_list_vty (void);
void
@@ -9370,6 +9464,8 @@
install_node (&bgp_ipv6_multicast_node, NULL);
install_node (&bgp_vpnv4_node, NULL);
install_node (&bgp_vpnv6_node, NULL);
+ install_node (&bgp_encap_node, NULL);
+ install_node (&bgp_encapv6_node, NULL);
/* Install default VTY commands to new nodes. */
install_default (BGP_NODE);
@@ -9379,6 +9475,8 @@
install_default (BGP_IPV6M_NODE);
install_default (BGP_VPNV4_NODE);
install_default (BGP_VPNV6_NODE);
+ install_default (BGP_ENCAP_NODE);
+ install_default (BGP_ENCAPV6_NODE);
/* "bgp multiple-instance" commands. */
install_element (CONFIG_NODE, &bgp_multiple_instance_cmd);
@@ -9538,6 +9636,8 @@
install_element (BGP_IPV6M_NODE, &neighbor_activate_cmd);
install_element (BGP_VPNV4_NODE, &neighbor_activate_cmd);
install_element (BGP_VPNV6_NODE, &neighbor_activate_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_activate_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_activate_cmd);
/* "no neighbor activate" commands. */
install_element (BGP_NODE, &no_neighbor_activate_cmd);
@@ -9547,6 +9647,8 @@
install_element (BGP_IPV6M_NODE, &no_neighbor_activate_cmd);
install_element (BGP_VPNV4_NODE, &no_neighbor_activate_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_activate_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_activate_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_activate_cmd);
/* "neighbor peer-group set" commands. */
install_element (BGP_NODE, &neighbor_set_peer_group_cmd);
@@ -9556,6 +9658,8 @@
install_element (BGP_IPV6M_NODE, &neighbor_set_peer_group_cmd);
install_element (BGP_VPNV4_NODE, &neighbor_set_peer_group_cmd);
install_element (BGP_VPNV6_NODE, &neighbor_set_peer_group_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_set_peer_group_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_set_peer_group_cmd);
/* "no neighbor peer-group unset" commands. */
install_element (BGP_NODE, &no_neighbor_set_peer_group_cmd);
@@ -9565,6 +9669,8 @@
install_element (BGP_IPV6M_NODE, &no_neighbor_set_peer_group_cmd);
install_element (BGP_VPNV4_NODE, &no_neighbor_set_peer_group_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_set_peer_group_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_set_peer_group_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_set_peer_group_cmd);
/* "neighbor softreconfiguration inbound" commands.*/
install_element (BGP_NODE, &neighbor_soft_reconfiguration_cmd);
@@ -9581,6 +9687,10 @@
install_element (BGP_VPNV4_NODE, &no_neighbor_soft_reconfiguration_cmd);
install_element (BGP_VPNV6_NODE, &neighbor_soft_reconfiguration_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_soft_reconfiguration_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_soft_reconfiguration_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_soft_reconfiguration_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_soft_reconfiguration_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_soft_reconfiguration_cmd);
/* "neighbor attribute-unchanged" commands. */
install_element (BGP_NODE, &neighbor_attr_unchanged_cmd);
@@ -9739,6 +9849,52 @@
install_element (BGP_VPNV6_NODE, &no_neighbor_attr_unchanged9_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_attr_unchanged10_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_attr_unchanged_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_attr_unchanged1_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_attr_unchanged2_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_attr_unchanged3_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_attr_unchanged4_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_attr_unchanged5_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_attr_unchanged6_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_attr_unchanged7_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_attr_unchanged8_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_attr_unchanged9_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_attr_unchanged10_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_attr_unchanged_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_attr_unchanged1_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_attr_unchanged2_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_attr_unchanged3_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_attr_unchanged4_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_attr_unchanged5_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_attr_unchanged6_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_attr_unchanged7_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_attr_unchanged8_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_attr_unchanged9_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_attr_unchanged10_cmd);
+
+ install_element (BGP_ENCAPV6_NODE, &neighbor_attr_unchanged_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_attr_unchanged1_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_attr_unchanged2_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_attr_unchanged3_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_attr_unchanged4_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_attr_unchanged5_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_attr_unchanged6_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_attr_unchanged7_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_attr_unchanged8_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_attr_unchanged9_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_attr_unchanged10_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged1_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged2_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged3_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged4_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged5_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged6_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged7_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged8_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged9_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged10_cmd);
+
/* "nexthop-local unchanged" commands */
install_element (BGP_IPV6_NODE, &neighbor_nexthop_local_unchanged_cmd);
install_element (BGP_IPV6_NODE, &no_neighbor_nexthop_local_unchanged_cmd);
@@ -9763,6 +9919,10 @@
install_element (BGP_VPNV4_NODE, &no_neighbor_nexthop_self_cmd);
install_element (BGP_VPNV6_NODE, &neighbor_nexthop_self_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_nexthop_self_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_nexthop_self_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_nexthop_self_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_nexthop_self_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_nexthop_self_cmd);
/* "neighbor remove-private-AS" commands. */
install_element (BGP_NODE, &neighbor_remove_private_as_cmd);
@@ -9779,6 +9939,10 @@
install_element (BGP_VPNV4_NODE, &no_neighbor_remove_private_as_cmd);
install_element (BGP_VPNV6_NODE, &neighbor_remove_private_as_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_remove_private_as_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_remove_private_as_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_remove_private_as_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_remove_private_as_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_remove_private_as_cmd);
/* "neighbor send-community" commands.*/
install_element (BGP_NODE, &neighbor_send_community_cmd);
@@ -9809,6 +9973,14 @@
install_element (BGP_VPNV6_NODE, &neighbor_send_community_type_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_send_community_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_send_community_type_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_send_community_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_send_community_type_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_send_community_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_send_community_type_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_send_community_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_send_community_type_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_send_community_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_send_community_type_cmd);
/* "neighbor route-reflector" commands.*/
install_element (BGP_NODE, &neighbor_route_reflector_client_cmd);
@@ -9825,6 +9997,10 @@
install_element (BGP_VPNV4_NODE, &no_neighbor_route_reflector_client_cmd);
install_element (BGP_VPNV6_NODE, &neighbor_route_reflector_client_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_route_reflector_client_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_route_reflector_client_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_route_reflector_client_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_route_reflector_client_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_route_reflector_client_cmd);
/* "neighbor route-server" commands.*/
install_element (BGP_NODE, &neighbor_route_server_client_cmd);
@@ -9841,6 +10017,10 @@
install_element (BGP_VPNV4_NODE, &no_neighbor_route_server_client_cmd);
install_element (BGP_VPNV6_NODE, &neighbor_route_server_client_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_route_server_client_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_route_server_client_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_route_server_client_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_route_server_client_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_route_server_client_cmd);
/* "neighbor passive" commands. */
install_element (BGP_NODE, &neighbor_passive_cmd);
@@ -9971,6 +10151,10 @@
install_element (BGP_VPNV4_NODE, &no_neighbor_distribute_list_cmd);
install_element (BGP_VPNV6_NODE, &neighbor_distribute_list_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_distribute_list_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_distribute_list_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_distribute_list_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_distribute_list_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_distribute_list_cmd);
/* "neighbor prefix-list" commands. */
install_element (BGP_NODE, &neighbor_prefix_list_cmd);
@@ -9987,6 +10171,10 @@
install_element (BGP_VPNV4_NODE, &no_neighbor_prefix_list_cmd);
install_element (BGP_VPNV6_NODE, &neighbor_prefix_list_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_prefix_list_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_prefix_list_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_prefix_list_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_prefix_list_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_prefix_list_cmd);
/* "neighbor filter-list" commands. */
install_element (BGP_NODE, &neighbor_filter_list_cmd);
@@ -10003,6 +10191,10 @@
install_element (BGP_VPNV4_NODE, &no_neighbor_filter_list_cmd);
install_element (BGP_VPNV6_NODE, &neighbor_filter_list_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_filter_list_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_filter_list_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_filter_list_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_filter_list_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_filter_list_cmd);
/* "neighbor route-map" commands. */
install_element (BGP_NODE, &neighbor_route_map_cmd);
@@ -10019,6 +10211,10 @@
install_element (BGP_VPNV4_NODE, &no_neighbor_route_map_cmd);
install_element (BGP_VPNV6_NODE, &neighbor_route_map_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_route_map_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_route_map_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_route_map_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_route_map_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_route_map_cmd);
/* "neighbor unsuppress-map" commands. */
install_element (BGP_NODE, &neighbor_unsuppress_map_cmd);
@@ -10035,6 +10231,10 @@
install_element (BGP_VPNV4_NODE, &no_neighbor_unsuppress_map_cmd);
install_element (BGP_VPNV6_NODE, &neighbor_unsuppress_map_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_unsuppress_map_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_unsuppress_map_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_unsuppress_map_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_unsuppress_map_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_unsuppress_map_cmd);
/* "neighbor maximum-prefix" commands. */
install_element (BGP_NODE, &neighbor_maximum_prefix_cmd);
@@ -10130,6 +10330,34 @@
install_element (BGP_VPNV6_NODE, &no_neighbor_maximum_prefix_restart_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_maximum_prefix_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_maximum_prefix_threshold_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_maximum_prefix_warning_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_maximum_prefix_restart_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_maximum_prefix_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_maximum_prefix_val_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_maximum_prefix_threshold_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_maximum_prefix_warning_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_maximum_prefix_threshold_warning_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_maximum_prefix_restart_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
+
+ install_element (BGP_ENCAPV6_NODE, &neighbor_maximum_prefix_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_maximum_prefix_threshold_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_maximum_prefix_warning_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_maximum_prefix_restart_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_maximum_prefix_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_maximum_prefix_val_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_maximum_prefix_threshold_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_maximum_prefix_warning_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_maximum_prefix_threshold_warning_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_maximum_prefix_restart_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_maximum_prefix_threshold_restart_cmd);
+
/* "neighbor allowas-in" */
install_element (BGP_NODE, &neighbor_allowas_in_cmd);
install_element (BGP_NODE, &neighbor_allowas_in_arg_cmd);
@@ -10152,6 +10380,12 @@
install_element (BGP_VPNV6_NODE, &neighbor_allowas_in_cmd);
install_element (BGP_VPNV6_NODE, &neighbor_allowas_in_arg_cmd);
install_element (BGP_VPNV6_NODE, &no_neighbor_allowas_in_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_allowas_in_cmd);
+ install_element (BGP_ENCAP_NODE, &neighbor_allowas_in_arg_cmd);
+ install_element (BGP_ENCAP_NODE, &no_neighbor_allowas_in_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_allowas_in_cmd);
+ install_element (BGP_ENCAPV6_NODE, &neighbor_allowas_in_arg_cmd);
+ install_element (BGP_ENCAPV6_NODE, &no_neighbor_allowas_in_cmd);
/* address-family commands. */
install_element (BGP_NODE, &address_family_ipv4_cmd);
@@ -10166,6 +10400,12 @@
install_element (BGP_NODE, &address_family_vpnv6_cmd);
install_element (BGP_NODE, &address_family_vpnv6_unicast_cmd);
+ install_element (BGP_NODE, &address_family_encap_cmd);
+ install_element (BGP_NODE, &address_family_encapv4_cmd);
+#ifdef HAVE_IPV6
+ install_element (BGP_NODE, &address_family_encapv6_cmd);
+#endif
+
/* "exit-address-family" command. */
install_element (BGP_IPV4_NODE, &exit_address_family_cmd);
install_element (BGP_IPV4M_NODE, &exit_address_family_cmd);
@@ -10173,6 +10413,8 @@
install_element (BGP_IPV6M_NODE, &exit_address_family_cmd);
install_element (BGP_VPNV4_NODE, &exit_address_family_cmd);
install_element (BGP_VPNV6_NODE, &exit_address_family_cmd);
+ install_element (BGP_ENCAP_NODE, &exit_address_family_cmd);
+ install_element (BGP_ENCAPV6_NODE, &exit_address_family_cmd);
/* "clear ip bgp commands" */
install_element (ENABLE_NODE, &clear_ip_bgp_all_cmd);
diff --git a/bgpd/bgp_vty.h b/bgpd/bgp_vty.h
index 2df8aaa..7329c5f 100644
--- a/bgpd/bgp_vty.h
+++ b/bgpd/bgp_vty.h
@@ -26,4 +26,10 @@
extern void bgp_vty_init (void);
extern const char *afi_safi_print (afi_t, safi_t);
+extern int
+bgp_parse_afi(const char *str, afi_t *afi);
+
+extern int
+bgp_parse_safi(const char *str, safi_t *safi);
+
#endif /* _QUAGGA_BGP_VTY_H */
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index 3caeeff..249d20f 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -5308,12 +5308,16 @@
if (safi == SAFI_MULTICAST)
vty_out (vty, "ipv4 multicast");
else if (safi == SAFI_MPLS_VPN)
- vty_out (vty, "vpnv4 unicast");
+ vty_out (vty, "vpnv4");
+ else if (safi == SAFI_ENCAP)
+ vty_out (vty, "encap");
}
else if (afi == AFI_IP6)
{
if (safi == SAFI_MPLS_VPN)
vty_out (vty, "vpnv6");
+ else if (safi == SAFI_ENCAP)
+ vty_out (vty, "encapv6");
else
{
vty_out (vty, "ipv6");
@@ -5555,6 +5559,9 @@
/* IPv4 VPN configuration. */
write += bgp_config_write_family (vty, bgp, AFI_IP, SAFI_MPLS_VPN);
+ /* ENCAPv4 configuration. */
+ write += bgp_config_write_family (vty, bgp, AFI_IP, SAFI_ENCAP);
+
/* IPv6 unicast configuration. */
write += bgp_config_write_family (vty, bgp, AFI_IP6, SAFI_UNICAST);
@@ -5564,6 +5571,11 @@
/* IPv6 VPN configuration. */
write += bgp_config_write_family (vty, bgp, AFI_IP6, SAFI_MPLS_VPN);
+ /* ENCAPv6 configuration. */
+ write += bgp_config_write_family (vty, bgp, AFI_IP6, SAFI_ENCAP);
+
+ vty_out (vty, " exit%s", VTY_NEWLINE);
+
write++;
}
return write;
diff --git a/lib/command.c b/lib/command.c
index dbcef5e..8089360 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -2591,6 +2591,8 @@
{
case BGP_VPNV4_NODE:
case BGP_VPNV6_NODE:
+ case BGP_ENCAP_NODE:
+ case BGP_ENCAPV6_NODE:
case BGP_IPV4_NODE:
case BGP_IPV4M_NODE:
case BGP_IPV6_NODE:
@@ -2962,6 +2964,8 @@
case BGP_IPV4M_NODE:
case BGP_VPNV4_NODE:
case BGP_VPNV6_NODE:
+ case BGP_ENCAP_NODE:
+ case BGP_ENCAPV6_NODE:
case BGP_IPV6_NODE:
case BGP_IPV6M_NODE:
vty->node = BGP_NODE;
@@ -3001,6 +3005,8 @@
case RIPNG_NODE:
case BABEL_NODE:
case BGP_NODE:
+ case BGP_ENCAP_NODE:
+ case BGP_ENCAPV6_NODE:
case BGP_VPNV4_NODE:
case BGP_VPNV6_NODE:
case BGP_IPV4_NODE:
diff --git a/lib/command.h b/lib/command.h
index b5c73ab..fd55f2d 100644
--- a/lib/command.h
+++ b/lib/command.h
@@ -87,6 +87,8 @@
BGP_IPV4M_NODE, /* BGP IPv4 multicast address family. */
BGP_IPV6_NODE, /* BGP IPv6 address family */
BGP_IPV6M_NODE, /* BGP IPv6 multicast address family. */
+ BGP_ENCAP_NODE, /* BGP ENCAP SAFI */
+ BGP_ENCAPV6_NODE, /* BGP ENCAP SAFI */
OSPF_NODE, /* OSPF protocol mode */
OSPF6_NODE, /* OSPF protocol for IPv6 mode */
ISIS_NODE, /* ISIS protocol mode */
diff --git a/lib/vty.c b/lib/vty.c
index f695b72..e4510f8 100644
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -738,6 +738,8 @@
case BGP_NODE:
case BGP_VPNV4_NODE:
case BGP_VPNV6_NODE:
+ case BGP_ENCAP_NODE:
+ case BGP_ENCAPV6_NODE:
case BGP_IPV4_NODE:
case BGP_IPV4M_NODE:
case BGP_IPV6_NODE:
diff --git a/vtysh/extract.pl.in b/vtysh/extract.pl.in
index 82532da..ca869b6 100755
--- a/vtysh/extract.pl.in
+++ b/vtysh/extract.pl.in
@@ -49,6 +49,9 @@
$ignore{'"address-family vpnv4"'} = "ignore";
$ignore{'"address-family vpnv4 unicast"'} = "ignore";
$ignore{'"address-family ipv4 vrf NAME"'} = "ignore";
+$ignore{'"address-family encap"'} = "ignore";
+$ignore{'"address-family encapv4"'} = "ignore";
+$ignore{'"address-family encapv6"'} = "ignore";
$ignore{'"exit-address-family"'} = "ignore";
$ignore{'"key chain WORD"'} = "ignore";
$ignore{'"key <0-2147483647>"'} = "ignore";
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
index a39889d..63b596a 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -281,6 +281,7 @@
if (ret == CMD_SUCCESS || ret == CMD_SUCCESS_DAEMON || ret == CMD_WARNING)
{
if ((saved_node == BGP_VPNV4_NODE || saved_node == BGP_VPNV6_NODE
+ || saved_node == BGP_ENCAP_NODE || saved_node == BGP_ENCAPV6_NODE
|| saved_node == BGP_IPV4_NODE
|| saved_node == BGP_IPV6_NODE || saved_node == BGP_IPV4M_NODE
|| saved_node == BGP_IPV6M_NODE)
@@ -691,6 +692,18 @@
"%s(config-router-af)# "
};
+static struct cmd_node bgp_encap_node =
+{
+ BGP_ENCAP_NODE,
+ "%s(config-router-af)# "
+};
+
+static struct cmd_node bgp_encapv6_node =
+{
+ BGP_ENCAPV6_NODE,
+ "%s(config-router-af)# "
+};
+
static struct cmd_node bgp_ipv4_node =
{
BGP_IPV4_NODE,
@@ -849,6 +862,39 @@
}
DEFUNSH (VTYSH_BGPD,
+ address_family_encap,
+ address_family_encap_cmd,
+ "address-family encap",
+ "Enter Address Family command mode\n"
+ "Address family\n")
+{
+ vty->node = BGP_ENCAP_NODE;
+ return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_BGPD,
+ address_family_encapv4,
+ address_family_encapv4_cmd,
+ "address-family encapv4",
+ "Enter Address Family command mode\n"
+ "Address family\n")
+{
+ vty->node = BGP_ENCAP_NODE;
+ return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_BGPD,
+ address_family_encapv6,
+ address_family_encapv6_cmd,
+ "address-family encapv6",
+ "Enter Address Family command mode\n"
+ "Address family\n")
+{
+ vty->node = BGP_ENCAPV6_NODE;
+ return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_BGPD,
address_family_ipv4_unicast,
address_family_ipv4_unicast_cmd,
"address-family ipv4 unicast",
@@ -1074,6 +1120,8 @@
break;
case BGP_VPNV4_NODE:
case BGP_VPNV6_NODE:
+ case BGP_ENCAP_NODE:
+ case BGP_ENCAPV6_NODE:
case BGP_IPV4_NODE:
case BGP_IPV4M_NODE:
case BGP_IPV6_NODE:
@@ -1113,6 +1161,8 @@
|| vty->node == BGP_IPV4M_NODE
|| vty->node == BGP_VPNV4_NODE
|| vty->node == BGP_VPNV6_NODE
+ || vty->node == BGP_ENCAP_NODE
+ || vty->node == BGP_ENCAPV6_NODE
|| vty->node == BGP_IPV6_NODE
|| vty->node == BGP_IPV6M_NODE)
vty->node = BGP_NODE;
@@ -2308,6 +2358,8 @@
install_node (&zebra_node, NULL);
install_node (&bgp_vpnv4_node, NULL);
install_node (&bgp_vpnv6_node, NULL);
+ install_node (&bgp_encap_node, NULL);
+ install_node (&bgp_encapv6_node, NULL);
install_node (&bgp_ipv4_node, NULL);
install_node (&bgp_ipv4m_node, NULL);
/* #ifdef HAVE_IPV6 */
@@ -2335,6 +2387,8 @@
vtysh_install_default (ZEBRA_NODE);
vtysh_install_default (BGP_VPNV4_NODE);
vtysh_install_default (BGP_VPNV6_NODE);
+ vtysh_install_default (BGP_ENCAP_NODE);
+ vtysh_install_default (BGP_ENCAPV6_NODE);
vtysh_install_default (BGP_IPV4_NODE);
vtysh_install_default (BGP_IPV4M_NODE);
vtysh_install_default (BGP_IPV6_NODE);
@@ -2373,6 +2427,10 @@
install_element (BGP_VPNV4_NODE, &vtysh_quit_bgpd_cmd);
install_element (BGP_VPNV6_NODE, &vtysh_exit_bgpd_cmd);
install_element (BGP_VPNV6_NODE, &vtysh_quit_bgpd_cmd);
+ install_element (BGP_ENCAP_NODE, &vtysh_exit_bgpd_cmd);
+ install_element (BGP_ENCAP_NODE, &vtysh_quit_bgpd_cmd);
+ install_element (BGP_ENCAPV6_NODE, &vtysh_exit_bgpd_cmd);
+ install_element (BGP_ENCAPV6_NODE, &vtysh_quit_bgpd_cmd);
install_element (BGP_IPV4_NODE, &vtysh_exit_bgpd_cmd);
install_element (BGP_IPV4_NODE, &vtysh_quit_bgpd_cmd);
install_element (BGP_IPV4M_NODE, &vtysh_exit_bgpd_cmd);
@@ -2405,6 +2463,8 @@
install_element (BGP_IPV4M_NODE, &vtysh_end_all_cmd);
install_element (BGP_VPNV4_NODE, &vtysh_end_all_cmd);
install_element (BGP_VPNV6_NODE, &vtysh_end_all_cmd);
+ install_element (BGP_ENCAP_NODE, &vtysh_end_all_cmd);
+ install_element (BGP_ENCAPV6_NODE, &vtysh_end_all_cmd);
install_element (BGP_IPV6_NODE, &vtysh_end_all_cmd);
install_element (BGP_IPV6M_NODE, &vtysh_end_all_cmd);
install_element (ISIS_NODE, &vtysh_end_all_cmd);
@@ -2433,6 +2493,8 @@
install_element (BGP_NODE, &address_family_vpnv4_unicast_cmd);
install_element (BGP_NODE, &address_family_vpnv6_cmd);
install_element (BGP_NODE, &address_family_vpnv6_unicast_cmd);
+ install_element (BGP_NODE, &address_family_encap_cmd);
+ install_element (BGP_NODE, &address_family_encapv6_cmd);
install_element (BGP_NODE, &address_family_ipv4_unicast_cmd);
install_element (BGP_NODE, &address_family_ipv4_multicast_cmd);
#ifdef HAVE_IPV6
@@ -2441,6 +2503,8 @@
#endif
install_element (BGP_VPNV4_NODE, &exit_address_family_cmd);
install_element (BGP_VPNV6_NODE, &exit_address_family_cmd);
+ install_element (BGP_ENCAP_NODE, &exit_address_family_cmd);
+ install_element (BGP_ENCAPV6_NODE, &exit_address_family_cmd);
install_element (BGP_IPV4_NODE, &exit_address_family_cmd);
install_element (BGP_IPV4M_NODE, &exit_address_family_cmd);
install_element (BGP_IPV6_NODE, &exit_address_family_cmd);
diff --git a/vtysh/vtysh_config.c b/vtysh/vtysh_config.c
index dcbb70f..a069164 100644
--- a/vtysh/vtysh_config.c
+++ b/vtysh/vtysh_config.c
@@ -172,6 +172,12 @@
else if (strncmp (line, " address-family vpn6",
strlen (" address-family vpn6")) == 0)
config = config_get (BGP_VPNV6_NODE, line);
+ else if (strncmp (line, " address-family encapv6",
+ strlen (" address-family encapv6")) == 0)
+ config = config_get (BGP_ENCAPV6_NODE, line);
+ else if (strncmp (line, " address-family encap",
+ strlen (" address-family encap")) == 0)
+ config = config_get (BGP_ENCAP_NODE, line);
else if (strncmp (line, " address-family ipv4 multicast",
strlen (" address-family ipv4 multicast")) == 0)
config = config_get (BGP_IPV4M_NODE, line);