Introduction of EVPN address-family node that is reachable under
BGP node, like follow: address-family evpn. Under that node, only
some commands are available for configuring a neighbor or setting
some basic settings like attribute unchanged behaviour. Currently,
no vty command is available for setting NLRI entries for EVPN.

Signed-off-by: Philippe Guibert <philippe.guib...@6wind.com>
---
 bgpd/bgp_vty.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/command.c  |  3 +++
 lib/command.h  |  1 +
 lib/vty.c      |  1 +
 vtysh/vtysh.c  | 28 +++++++++++++++++++++++++++-
 5 files changed, 86 insertions(+), 1 deletion(-)

diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index 1720fafe9d0a..6b40bf41b663 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -64,6 +64,9 @@ bgp_node_afi (struct vty *vty)
     case BGP_ENCAPV6_NODE:
       afi = AFI_IP6;
       break;
+    case BGP_EVPN_NODE:
+      afi = AFI_INTERNAL_L2VPN;
+      break;
     default:
       afi = AFI_IP;
       break;
@@ -91,6 +94,9 @@ bgp_node_safi (struct vty *vty)
     case BGP_IPV6M_NODE:
       safi = SAFI_MULTICAST;
       break;
+    case BGP_EVPN_NODE:
+      safi = SAFI_INTERNAL_EVPN;
+      break;
     default:
       safi = SAFI_UNICAST;
       break;
@@ -4496,6 +4502,16 @@ DEFUN (address_family_encapv6,
   return CMD_SUCCESS;
 }
 
+DEFUN (address_family_evpn,
+       address_family_evpn_cmd,
+       "address-family evpn",
+       "Enter Address Family command mode\n"
+       "Address family\n")
+{
+  vty->node = BGP_EVPN_NODE;
+  return CMD_SUCCESS;
+}
+
 DEFUN (exit_address_family,
        exit_address_family_cmd,
        "exit-address-family",
@@ -4503,6 +4519,7 @@ DEFUN (exit_address_family,
 {
   /* should match list in command.c:config_exit */
   if (vty->node == BGP_IPV4_NODE
+      || vty->node == BGP_EVPN_NODE
       || vty->node == BGP_ENCAP_NODE
       || vty->node == BGP_ENCAPV6_NODE
       || vty->node == BGP_IPV4M_NODE
@@ -10203,6 +10220,13 @@ static struct cmd_node bgp_encapv6_node =
   1
 };
 
+static struct cmd_node bgp_evpn_node =
+{
+  BGP_EVPN_NODE,
+  "%s(config-router-evpn)# ",
+  1
+};
+
 static void community_list_vty (void);
 
 void
@@ -10218,6 +10242,7 @@ bgp_vty_init (void)
   install_node (&bgp_vpnv6_node, NULL);
   install_node (&bgp_encap_node, NULL);
   install_node (&bgp_encapv6_node, NULL);
+  install_node (&bgp_evpn_node, NULL);
 
   /* Install default VTY commands to new nodes.  */
   install_default (BGP_NODE);
@@ -10229,6 +10254,7 @@ bgp_vty_init (void)
   install_default (BGP_VPNV6_NODE);
   install_default (BGP_ENCAP_NODE);
   install_default (BGP_ENCAPV6_NODE);
+  install_default (BGP_EVPN_NODE);
   
   install_element (BGP_NODE, &bgp_vrf_cmd);
   install_element (BGP_NODE, &bgp_vrf_exports_cmd);
@@ -10410,6 +10436,7 @@ bgp_vty_init (void)
   install_element (BGP_VPNV6_NODE, &neighbor_activate_cmd);
   install_element (BGP_ENCAP_NODE, &neighbor_activate_cmd);
   install_element (BGP_ENCAPV6_NODE, &neighbor_activate_cmd);
+  install_element (BGP_EVPN_NODE, &neighbor_activate_cmd);
 
   /* "no neighbor activate" commands. */
   install_element (BGP_NODE, &no_neighbor_activate_cmd);
@@ -10421,6 +10448,7 @@ bgp_vty_init (void)
   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);
+  install_element (BGP_EVPN_NODE, &no_neighbor_activate_cmd);
 
   /* "neighbor peer-group set" commands. */
   install_element (BGP_NODE, &neighbor_set_peer_group_cmd);
@@ -10667,6 +10695,29 @@ bgp_vty_init (void)
   install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged9_cmd);
   install_element (BGP_ENCAPV6_NODE, &no_neighbor_attr_unchanged10_cmd);
 
+  install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged_cmd);
+  install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged1_cmd);
+  install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged2_cmd);
+  install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged3_cmd);
+  install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged4_cmd);
+  install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged5_cmd);
+  install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged6_cmd);
+  install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged7_cmd);
+  install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged8_cmd);
+  install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged9_cmd);
+  install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged10_cmd);
+  install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged_cmd);
+  install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged1_cmd);
+  install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged2_cmd);
+  install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged3_cmd);
+  install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged4_cmd);
+  install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged5_cmd);
+  install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged6_cmd);
+  install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged7_cmd);
+  install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged8_cmd);
+  install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged9_cmd);
+  install_element (BGP_EVPN_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);
@@ -11174,6 +11225,8 @@ bgp_vty_init (void)
   install_element (BGP_NODE, &address_family_encapv4_cmd);
   install_element (BGP_NODE, &address_family_encapv6_cmd);
 
+  install_element (BGP_NODE, &address_family_evpn_cmd);
+
   /* "exit-address-family" command. */
   install_element (BGP_IPV4_NODE, &exit_address_family_cmd);
   install_element (BGP_IPV4M_NODE, &exit_address_family_cmd);
@@ -11183,6 +11236,7 @@ bgp_vty_init (void)
   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_EVPN_NODE, &exit_address_family_cmd);
 
   /* "clear ip bgp commands" */
   install_element (ENABLE_NODE, &clear_ip_bgp_all_cmd);
diff --git a/lib/command.c b/lib/command.c
index ab46fc4a6d11..7ed99c5c2259 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -2623,6 +2623,7 @@ node_parent ( enum node_type node )
     case BGP_VPNV6_NODE:
     case BGP_ENCAP_NODE:
     case BGP_ENCAPV6_NODE:
+    case BGP_EVPN_NODE:
     case BGP_IPV4_NODE:
     case BGP_IPV4M_NODE:
     case BGP_IPV6_NODE:
@@ -3000,6 +3001,7 @@ DEFUN (config_exit,
     case BGP_VPNV6_NODE:
     case BGP_ENCAP_NODE:
     case BGP_ENCAPV6_NODE:
+    case BGP_EVPN_NODE:
     case BGP_IPV6_NODE:
     case BGP_IPV6M_NODE:
       vty->node = BGP_NODE;
@@ -3044,6 +3046,7 @@ DEFUN (config_end,
     case BGP_NODE:
     case BGP_ENCAP_NODE:
     case BGP_ENCAPV6_NODE:
+    case BGP_EVPN_NODE:
     case BGP_VPNV4_NODE:
     case BGP_VPNV6_NODE:
     case BGP_IPV4_NODE:
diff --git a/lib/command.h b/lib/command.h
index cc5dd0891630..84ef9a5825b7 100644
--- a/lib/command.h
+++ b/lib/command.h
@@ -90,6 +90,7 @@ enum node_type
   BGP_IPV6M_NODE,              /* BGP IPv6 multicast address family. */
   BGP_ENCAP_NODE,              /* BGP ENCAP SAFI */
   BGP_ENCAPV6_NODE,            /* BGP ENCAP SAFI */
+  BGP_EVPN_NODE,               /* BGP EVPN 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 7ba277fd8a88..766bdbc840f5 100644
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -742,6 +742,7 @@ vty_end_config (struct vty *vty)
     case BGP_VPNV6_NODE:
     case BGP_ENCAP_NODE:
     case BGP_ENCAPV6_NODE:
+    case BGP_EVPN_NODE:
     case BGP_IPV4_NODE:
     case BGP_IPV4M_NODE:
     case BGP_IPV6_NODE:
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
index 2e2203da61d7..ddd7c8476747 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -297,7 +297,8 @@ vtysh_execute_func (const char *line, int pager)
           || 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)
+          || saved_node == BGP_IPV6M_NODE
+           || saved_node == BGP_EVPN_NODE)
          && (tried == 1))
        {
          vtysh_execute("exit-address-family");
@@ -717,6 +718,12 @@ static struct cmd_node bgp_encapv6_node =
   "%s(config-router-af)# "
 };
 
+static struct cmd_node bgp_evpn_node =
+{
+  BGP_EVPN_NODE,
+  "%s(config-router-af)# "
+};
+
 static struct cmd_node bgp_ipv4_node =
 {
   BGP_IPV4_NODE,
@@ -914,6 +921,17 @@ DEFUNSH (VTYSH_BGPD,
 }
 
 DEFUNSH (VTYSH_BGPD,
+        address_family_evpn,
+        address_family_evpn_cmd,
+        "address-family evpn",
+        "Enter Address Family command mode\n"
+        "Address family\n")
+{
+  vty->node = BGP_EVPN_NODE;
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_BGPD,
         address_family_ipv4_unicast,
         address_family_ipv4_unicast_cmd,
         "address-family ipv4 unicast",
@@ -1141,6 +1159,7 @@ vtysh_exit (struct vty *vty)
     case BGP_VPNV6_NODE:
     case BGP_ENCAP_NODE:
     case BGP_ENCAPV6_NODE:
+    case BGP_EVPN_NODE:
     case BGP_IPV4_NODE:
     case BGP_IPV4M_NODE:
     case BGP_IPV6_NODE:
@@ -1185,6 +1204,7 @@ DEFUNSH (VTYSH_BGPD,
       || vty->node == BGP_VPNV6_NODE
       || vty->node == BGP_ENCAP_NODE
       || vty->node == BGP_ENCAPV6_NODE
+      || vty->node == BGP_EVPN_NODE
       || vty->node == BGP_IPV6_NODE
       || vty->node == BGP_IPV6M_NODE)
     vty->node = BGP_NODE;
@@ -2422,6 +2442,7 @@ vtysh_init_vty (void)
   install_node (&bgp_vpnv6_node, NULL);
   install_node (&bgp_encap_node, NULL);
   install_node (&bgp_encapv6_node, NULL);
+  install_node (&bgp_evpn_node, NULL);
   install_node (&bgp_ipv4_node, NULL);
   install_node (&bgp_ipv4m_node, NULL);
 /* #ifdef HAVE_IPV6 */
@@ -2452,6 +2473,7 @@ vtysh_init_vty (void)
   vtysh_install_default (BGP_VPNV6_NODE);
   vtysh_install_default (BGP_ENCAP_NODE);
   vtysh_install_default (BGP_ENCAPV6_NODE);
+  vtysh_install_default (BGP_EVPN_NODE);
   vtysh_install_default (BGP_IPV4_NODE);
   vtysh_install_default (BGP_IPV4M_NODE);
   vtysh_install_default (BGP_IPV6_NODE);
@@ -2494,6 +2516,7 @@ vtysh_init_vty (void)
   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_EVPN_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);
@@ -2528,6 +2551,7 @@ vtysh_init_vty (void)
   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_EVPN_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);
@@ -2560,6 +2584,7 @@ vtysh_init_vty (void)
   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_evpn_cmd);
   install_element (BGP_NODE, &address_family_ipv4_unicast_cmd);
   install_element (BGP_NODE, &address_family_ipv4_multicast_cmd);
 #ifdef HAVE_IPV6
@@ -2571,6 +2596,7 @@ vtysh_init_vty (void)
   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_EVPN_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);
-- 
2.1.4


_______________________________________________
Quagga-dev mailing list
Quagga-dev@lists.quagga.net
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to