bgpd: Add support for BGP Large Communities

As described by Michael Lambert <lambert@psc.edu>  to the list:

  Traditional communities are four-octet entities to support two-octet ASNs
  and are usually represented as <asn>:<data>.  Large communities are an
  enhancement to support four-octet ASNs and are 12 octets long, represented
  as <asn>:<data-1>:<data-2>.

  This issue has been tracked in quagga bugzilla ticket #875, which documents
  some of the usage and indicates that some testing has been done.

TODO: Documentation - update doc/bgpd.texi.

* bgp_attr.{c,h}: Add BGP_ATTR_LARGE_COMMUNITIES codepoint. Add
  (struct lcommunity *) to (struct bgp_attr_extra).
* bgp_clist.{c,h}: Large community codepoints and routines.
* bgp_route.c: Display support.
* bgp_routemap.c: 'match lcommunity', 'set large-community' and
  'set large-comm-list'
* bgp_vty.c: Peer configuration, add 'large' to 'neighbor send-community ..'.
  Add "show ip bgp large-community", ""ip large-community-list ...".

Authors: Keyur Patel <keyur@arrcus.com>
         Job Snijders <job@instituut.net>
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 9137143..13596fb 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -1,5 +1,6 @@
 /* BGP routing information
    Copyright (C) 1996, 97, 98, 99 Kunihiro Ishiguro
+   Copyright (C) 2016 Job Snijders <job@instituut.net>
 
 This file is part of GNU Zebra.
 
@@ -44,6 +45,7 @@
 #include "bgpd/bgp_regex.h"
 #include "bgpd/bgp_community.h"
 #include "bgpd/bgp_ecommunity.h"
+#include "bgpd/bgp_lcommunity.h"
 #include "bgpd/bgp_clist.h"
 #include "bgpd/bgp_packet.h"
 #include "bgpd/bgp_filter.h"
@@ -6428,8 +6430,13 @@
       if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_EXT_COMMUNITIES))
 	vty_out (vty, "      Extended Community: %s%s", 
 	         attr->extra->ecommunity->str, VTY_NEWLINE);
-	  
-      /* Line 6 display Originator, Cluster-id */
+
+      /* Line 6 display Large community */
+      if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_LARGE_COMMUNITIES))
+	vty_out (vty, "      Large Community: %s%s",
+	         attr->extra->lcommunity->str, VTY_NEWLINE);
+
+      /* Line 7 display Originator, Cluster-id */
       if ((attr->flag & ATTR_FLAG_BIT(BGP_ATTR_ORIGINATOR_ID)) ||
 	  (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_CLUSTER_LIST)))
 	{
@@ -6452,7 +6459,7 @@
       if (binfo->extra && binfo->extra->damp_info)
 	bgp_damp_info_vty (vty, binfo);
 
-      /* Line 7 display Uptime */
+      /* Line 8 display Uptime */
 #ifdef HAVE_CLOCK_MONOTONIC
       tbuf = time(NULL) - (bgp_clock() - binfo->uptime);
       vty_out (vty, "      Last update: %s", ctime(&tbuf));
@@ -6486,6 +6493,9 @@
   bgp_show_type_community_exact,
   bgp_show_type_community_list,
   bgp_show_type_community_list_exact,
+  bgp_show_type_lcommunity_all,
+  bgp_show_type_lcommunity,
+  bgp_show_type_lcommunity_list,
   bgp_show_type_flap_statistics,
   bgp_show_type_flap_address,
   bgp_show_type_flap_prefix,
@@ -6648,6 +6658,32 @@
 		if (! community_list_exact_match (ri->attr->community, list))
 		  continue;
 	      }
+	    if (type == bgp_show_type_community_all)
+	      {
+		if (! ri->attr->community)
+		  continue;
+	      }
+	    if (type == bgp_show_type_lcommunity)
+	      {
+		struct lcommunity *lcom = output_arg;
+
+		if (! ri->attr->extra || ! ri->attr->extra->lcommunity ||
+		    ! lcommunity_match (ri->attr->extra->lcommunity, lcom))
+		  continue;
+	      }
+	    if (type == bgp_show_type_lcommunity_list)
+	      {
+		struct community_list *list = output_arg;
+
+		if (! ri->attr->extra ||
+		    ! lcommunity_list_match (ri->attr->extra->lcommunity, list))
+		  continue;
+	      }
+	    if (type == bgp_show_type_lcommunity_all)
+	      {
+		if (! ri->attr->extra || ! ri->attr->extra->lcommunity)
+		  continue;
+	      }
 	    if (type == bgp_show_type_flap_address
 		|| type == bgp_show_type_flap_prefix)
 	      {
@@ -9163,6 +9199,84 @@
 		   bgp_show_type_community_all, NULL);
 }
 
+/* large-community */
+DEFUN (show_ip_bgp_lcommunity_all,
+       show_ip_bgp_lcommunity_all_cmd,
+       "show ip bgp large-community",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "Display routes matching the large-communities\n")
+{
+  return bgp_show (vty, NULL, AFI_IP, SAFI_UNICAST,
+		     bgp_show_type_lcommunity_all, NULL);
+}
+
+DEFUN (show_ip_bgp_ipv4_lcommunity_all,
+       show_ip_bgp_ipv4_lcommunity_all_cmd,
+       "show ip bgp ipv4 (unicast|multicast) large-community",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "Display routes matching the large-communities\n")
+{
+  if (strncmp (argv[0], "m", 1) == 0)
+    return bgp_show (vty, NULL, AFI_IP, SAFI_MULTICAST,
+		     bgp_show_type_lcommunity_all, NULL);
+
+  return bgp_show (vty, NULL, AFI_IP, SAFI_UNICAST,
+		   bgp_show_type_lcommunity_all, NULL);
+}
+
+DEFUN (show_bgp_lcommunity_all,
+       show_bgp_lcommunity_all_cmd,
+       "show bgp large-community",
+       SHOW_STR
+       BGP_STR
+       "Display routes matching the large-communities\n")
+{
+  return bgp_show (vty, NULL, AFI_IP6, SAFI_UNICAST,
+		   bgp_show_type_lcommunity_all, NULL);
+}
+
+ALIAS (show_bgp_lcommunity_all,
+       show_bgp_ipv6_lcommunity_all_cmd,
+       "show bgp ipv6 large-community",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Display routes matching the large-communities\n")
+
+/* old command */
+DEFUN (show_ipv6_bgp_lcommunity_all,
+       show_ipv6_bgp_lcommunity_all_cmd,
+       "show ipv6 bgp large-community",
+       SHOW_STR
+       IPV6_STR
+       BGP_STR
+       "Display routes matching the large-communities\n")
+{
+  return bgp_show (vty, NULL, AFI_IP6, SAFI_UNICAST,
+		   bgp_show_type_lcommunity_all, NULL);
+}
+
+/* old command */
+DEFUN (show_ipv6_mbgp_lcommunity_all,
+       show_ipv6_mbgp_lcommunity_all_cmd,
+       "show ipv6 mbgp large-community",
+       SHOW_STR
+       IPV6_STR
+       MBGP_STR
+       "Display routes matching the large-communities\n")
+{
+  return bgp_show (vty, NULL, AFI_IP6, SAFI_MULTICAST,
+		   bgp_show_type_lcommunity_all, NULL);
+}
+
+
 DEFUN (show_bgp_ipv4_route_map, 
        show_bgp_ipv4_route_map_cmd,
        "show bgp ipv4 route-map WORD",
@@ -11398,6 +11512,795 @@
   return bgp_show_community_list (vty, argv[1], 1, AFI_IP6, safi);
 }
 
+/*
+ * Large Community show commands.
+ */
+
+DEFUN (show_bgp_afi_lcommunity_all,
+       show_bgp_afi_lcommunity_all_cmd,
+       "show bgp (ipv4|ipv6) large-community",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address family\n"
+       "Display routes matching the large-communities\n")
+{
+  afi_t		afi;
+  safi_t	safi = SAFI_UNICAST;
+
+  if (bgp_parse_afi(argv[0], &afi)) {
+    vty_out (vty, "Error: Bad AFI: %s%s", argv[0], VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+  return bgp_show (vty, NULL, afi, safi, bgp_show_type_lcommunity_all, NULL);
+}
+
+static int
+bgp_show_lcommunity (struct vty *vty, const char *view_name, int argc,
+		     const char **argv, afi_t afi, safi_t safi)
+{
+  struct lcommunity *lcom;
+  struct buffer *b;
+  struct bgp *bgp;
+  int i;
+  char *str;
+  int first = 0;
+
+  /* BGP structure lookup */
+  if (view_name)
+    {
+      bgp = bgp_lookup_by_name (view_name);
+      if (bgp == NULL)
+	{
+	  vty_out (vty, "Can't find BGP view %s%s", view_name, VTY_NEWLINE);
+	  return CMD_WARNING;
+	}
+    }
+  else
+    {
+      bgp = bgp_get_default ();
+      if (bgp == NULL)
+	{
+	  vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
+	  return CMD_WARNING;
+	}
+    }
+
+  b = buffer_new (1024);
+  for (i = 0; i < argc; i++)
+    {
+      if (first)
+        buffer_putc (b, ' ');
+      else
+	{
+	  if ((strcmp (argv[i], "unicast") == 0) || (strcmp (argv[i], "multicast") == 0))
+	    continue;
+	  first = 1;
+	}
+
+      buffer_putstr (b, argv[i]);
+    }
+  buffer_putc (b, '\0');
+
+  str = buffer_getstr (b);
+  buffer_free (b);
+
+  lcom = lcommunity_str2com (str);
+  XFREE (MTYPE_TMP, str);
+  if (! lcom)
+    {
+      vty_out (vty, "%% Large-community malformed: %s", VTY_NEWLINE);
+      return CMD_WARNING;
+    }
+
+  return bgp_show (vty, bgp, afi, safi, bgp_show_type_lcommunity, lcom);
+}
+
+DEFUN (show_ip_bgp_lcommunity,
+       show_ip_bgp_lcommunity_cmd,
+       "show ip bgp large-community (AA:BB:CC)",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n")
+{
+  return bgp_show_lcommunity (vty, NULL, argc, argv, AFI_IP, SAFI_UNICAST);
+}
+
+ALIAS (show_ip_bgp_lcommunity,
+       show_ip_bgp_lcommunity2_cmd,
+       "show ip bgp large-community (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_ip_bgp_lcommunity,
+       show_ip_bgp_lcommunity3_cmd,
+       "show ip bgp large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "Display routes matching the large-communities\n"
+       "largecommunity number\n"
+       "largecommunity number\n"
+       "largecommunity number\n")
+
+ALIAS (show_ip_bgp_lcommunity,
+       show_ip_bgp_lcommunity4_cmd,
+       "show ip bgp large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+DEFUN (show_ip_bgp_ipv4_lcommunity,
+       show_ip_bgp_ipv4_lcommunity_cmd,
+       "show ip bgp ipv4 (unicast|multicast) large-community (AA:BB:CC)",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n")
+{
+  if (strncmp (argv[0], "m", 1) == 0)
+    return bgp_show_lcommunity (vty, NULL, argc, argv, AFI_IP, SAFI_MULTICAST);
+
+  return bgp_show_lcommunity (vty, NULL, argc, argv, AFI_IP, SAFI_UNICAST);
+}
+
+ALIAS (show_ip_bgp_ipv4_lcommunity,
+       show_ip_bgp_ipv4_lcommunity2_cmd,
+       "show ip bgp ipv4 (unicast|multicast) large-community (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_ip_bgp_ipv4_lcommunity,
+       show_ip_bgp_ipv4_lcommunity3_cmd,
+       "show ip bgp ipv4 (unicast|multicast) large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_ip_bgp_ipv4_lcommunity,
+       show_ip_bgp_ipv4_lcommunity4_cmd,
+       "show ip bgp ipv4 (unicast|multicast) large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+DEFUN (show_bgp_lcommunity,
+       show_bgp_lcommunity_cmd,
+       "show bgp large-community (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n")
+{
+  return bgp_show_lcommunity (vty, NULL, argc, argv, AFI_IP6, SAFI_UNICAST);
+}
+
+ALIAS (show_bgp_lcommunity,
+       show_bgp_ipv6_lcommunity_cmd,
+       "show bgp ipv6 large-community (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_lcommunity,
+       show_bgp_lcommunity2_cmd,
+       "show bgp large-community (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_lcommunity,
+       show_bgp_ipv6_lcommunity2_cmd,
+       "show bgp ipv6 large-community (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_lcommunity,
+       show_bgp_lcommunity3_cmd,
+       "show bgp large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_lcommunity,
+       show_bgp_ipv6_lcommunity3_cmd,
+       "show bgp ipv6 large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_lcommunity,
+       show_bgp_lcommunity4_cmd,
+       "show bgp large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_lcommunity,
+       show_bgp_ipv6_lcommunity4_cmd,
+       "show bgp ipv6 large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+/* old command */
+DEFUN (show_ipv6_bgp_lcommunity,
+       show_ipv6_bgp_lcommunity_cmd,
+       "show ipv6 bgp large-community (AA:BB:CC)",
+       SHOW_STR
+       IPV6_STR
+       BGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n")
+{
+  return bgp_show_lcommunity (vty, NULL, argc, argv, AFI_IP6, SAFI_UNICAST);
+}
+
+/* old command */
+ALIAS (show_ipv6_bgp_lcommunity,
+       show_ipv6_bgp_lcommunity2_cmd,
+       "show ipv6 bgp large-community (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       IPV6_STR
+       BGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n")
+
+/* old command */
+ALIAS (show_ipv6_bgp_lcommunity,
+       show_ipv6_bgp_lcommunity3_cmd,
+       "show ipv6 bgp large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       IPV6_STR
+       BGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+/* old command */
+ALIAS (show_ipv6_bgp_lcommunity,
+       show_ipv6_bgp_lcommunity4_cmd,
+       "show ipv6 bgp large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       IPV6_STR
+       BGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+/* old command */
+DEFUN (show_ipv6_mbgp_lcommunity,
+       show_ipv6_mbgp_lcommunity_cmd,
+       "show ipv6 mbgp large-community (AA:BB:CC)",
+       SHOW_STR
+       IPV6_STR
+       MBGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n")
+{
+  return bgp_show_lcommunity (vty, NULL, argc, argv, AFI_IP6, SAFI_MULTICAST);
+}
+
+/* old command */
+ALIAS (show_ipv6_mbgp_lcommunity,
+       show_ipv6_mbgp_lcommunity2_cmd,
+       "show ipv6 mbgp large-community (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       IPV6_STR
+       MBGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n")
+
+/* old command */
+ALIAS (show_ipv6_mbgp_lcommunity,
+       show_ipv6_mbgp_lcommunity3_cmd,
+       "show ipv6 mbgp large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       IPV6_STR
+       MBGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+/* old command */
+ALIAS (show_ipv6_mbgp_lcommunity,
+       show_ipv6_mbgp_lcommunity4_cmd,
+       "show ipv6 mbgp laarge-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       IPV6_STR
+       MBGP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+DEFUN (show_bgp_ipv4_lcommunity,
+       show_bgp_ipv4_lcommunity_cmd,
+       "show bgp ipv4 large-community (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       IP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n")
+{
+  return bgp_show_lcommunity (vty, NULL, argc, argv, AFI_IP, SAFI_UNICAST);
+}
+
+ALIAS (show_bgp_ipv4_lcommunity,
+       show_bgp_ipv4_lcommunity2_cmd,
+       "show bgp ipv4 large-community (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       IP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_ipv4_lcommunity,
+       show_bgp_ipv4_lcommunity3_cmd,
+       "show bgp ipv4 large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       IP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_ipv4_lcommunity,
+       show_bgp_ipv4_lcommunity4_cmd,
+       "show bgp ipv4 large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       IP_STR
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+DEFUN (show_bgp_ipv4_safi_lcommunity,
+       show_bgp_ipv4_safi_lcommunity_cmd,
+       "show bgp ipv4 (unicast|multicast) large-community (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n")
+{
+  if (strncmp (argv[0], "m", 1) == 0)
+    return bgp_show_lcommunity (vty, NULL, argc, argv, AFI_IP, SAFI_MULTICAST);
+
+  return bgp_show_lcommunity (vty, NULL, argc, argv, AFI_IP, SAFI_UNICAST);
+}
+
+ALIAS (show_bgp_ipv4_safi_lcommunity,
+       show_bgp_ipv4_safi_lcommunity2_cmd,
+       "show bgp ipv4 (unicast|multicast) large-community (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_ipv4_safi_lcommunity,
+       show_bgp_ipv4_safi_lcommunity3_cmd,
+       "show bgp ipv4 (unicast|multicast) large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_ipv4_safi_lcommunity,
+       show_bgp_ipv4_safi_lcommunity4_cmd,
+       "show bgp ipv4 (unicast|multicast) large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+DEFUN (show_bgp_view_afi_safi_lcommunity_all,
+       show_bgp_view_afi_safi_lcommunity_all_cmd,
+       "show bgp view WORD (ipv4|ipv6) (unicast|multicast) large-community",
+       SHOW_STR
+       BGP_STR
+       "BGP view\n"
+       "View name\n"
+       "Address family\n"
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "Display routes matching the large-communities\n")
+{
+  int afi;
+  int safi;
+  struct bgp *bgp;
+
+  /* BGP structure lookup. */
+  bgp = bgp_lookup_by_name (argv[0]);
+  if (bgp == NULL)
+    {
+      vty_out (vty, "Can't find BGP view %s%s", argv[0], VTY_NEWLINE);
+      return CMD_WARNING;
+    }
+
+  afi = (strncmp (argv[1], "ipv6", 4) == 0) ? AFI_IP6 : AFI_IP;
+  safi = (strncmp (argv[2], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
+  return bgp_show (vty, bgp, afi, safi, bgp_show_type_lcommunity_all, NULL);
+}
+
+DEFUN (show_bgp_view_afi_safi_lcommunity,
+       show_bgp_view_afi_safi_lcommunity_cmd,
+       "show bgp view WORD (ipv4|ipv6) (unicast|multicast) large-community (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "BGP view\n"
+       "View name\n"
+       "Address family\n"
+       "Address family\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n")
+{
+  int afi;
+  int safi;
+
+  afi = (strncmp (argv[1], "ipv6", 4) == 0) ? AFI_IP6 : AFI_IP;
+  safi = (strncmp (argv[2], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
+  return bgp_show_lcommunity (vty, argv[0], argc-3, &argv[3], afi, safi);
+}
+
+ALIAS (show_bgp_view_afi_safi_lcommunity,
+       show_bgp_view_afi_safi_lcommunity2_cmd,
+       "show bgp view WORD (ipv4|ipv6) (unicast|multicast) large-community (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "BGP view\n"
+       "View name\n"
+       "Address family\n"
+       "Address family\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_view_afi_safi_lcommunity,
+       show_bgp_view_afi_safi_lcommunity3_cmd,
+       "show bgp view WORD (ipv4|ipv6) (unicast|multicast) large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "BGP view\n"
+       "View name\n"
+       "Address family\n"
+       "Address family\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_view_afi_safi_lcommunity,
+       show_bgp_view_afi_safi_lcommunity4_cmd,
+       "show bgp view WORD (ipv4|ipv6) (unicast|multicast) large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "BGP view\n"
+       "View name\n"
+       "Address family\n"
+       "Address family\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+DEFUN (show_bgp_ipv6_safi_lcommunity,
+       show_bgp_ipv6_safi_lcommunity_cmd,
+       "show bgp ipv6 (encap|multicast|unicast|vpn) large-community AA:BB:CC",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n")
+{
+  safi_t	safi;
+
+  if (bgp_parse_safi(argv[0], &safi)) {
+    vty_out (vty, "Error: Bad SAFI: %s%s", argv[0], VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+  return bgp_show_lcommunity (vty, NULL, argc-1, argv+1, AFI_IP6, safi);
+}
+
+ALIAS (show_bgp_ipv6_safi_lcommunity,
+       show_bgp_ipv6_safi_lcommunity2_cmd,
+       "show bgp ipv6 (encap|multicast|unicast|vpn) large-community (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_ipv6_safi_lcommunity,
+       show_bgp_ipv6_safi_lcommunity3_cmd,
+       "show bgp ipv6 (encap|multicast|unicast|vpn) large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+ALIAS (show_bgp_ipv6_safi_lcommunity,
+       show_bgp_ipv6_safi_lcommunity4_cmd,
+       "show bgp ipv6 (encap|multicast|unicast|vpn) large-community (AA:BB:CC) (AA:BB:CC) (AA:BB:CC) (AA:BB:CC)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Display routes matching the large-communities\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n"
+       "large-community number\n")
+
+static int
+bgp_show_lcommunity_list (struct vty *vty, const char *lcom,
+			  afi_t afi, safi_t safi)
+{
+  struct community_list *list;
+
+  list = community_list_lookup (bgp_clist, lcom, LARGE_COMMUNITY_LIST_MASTER);
+  if (list == NULL)
+    {
+      vty_out (vty, "%% %s is not a valid large-community-list name%s", lcom,
+	       VTY_NEWLINE);
+      return CMD_WARNING;
+    }
+
+  return bgp_show (vty, NULL, afi, safi, bgp_show_type_lcommunity_list, list);
+}
+
+DEFUN (show_ip_bgp_lcommunity_list,
+       show_ip_bgp_lcommunity_list_cmd,
+       "show ip bgp large-community-list (<1-500>|WORD)",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "Display routes matching the large-community-list\n"
+       "large-community-list number\n"
+       "large-community-list name\n")
+{
+  return bgp_show_lcommunity_list (vty, argv[0], AFI_IP, SAFI_UNICAST);
+}
+
+DEFUN (show_ip_bgp_ipv4_lcommunity_list,
+       show_ip_bgp_ipv4_lcommunity_list_cmd,
+       "show ip bgp ipv4 (unicast|multicast) large-community-list (<1-500>|WORD)",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "Display routes matching the large-community-list\n"
+       "large-community-list number\n"
+       "large-community-list name\n")
+{
+  if (strncmp (argv[0], "m", 1) == 0)
+    return bgp_show_lcommunity_list (vty, argv[1], AFI_IP, SAFI_MULTICAST);
+
+  return bgp_show_lcommunity_list (vty, argv[1], AFI_IP, SAFI_UNICAST);
+}
+
+DEFUN (show_bgp_lcommunity_list,
+       show_bgp_lcommunity_list_cmd,
+       "show bgp large-community-list (<1-500>|WORD)",
+       SHOW_STR
+       BGP_STR
+       "Display routes matching the large-community-list\n"
+       "large-community-list number\n"
+       "large-community-list name\n")
+{
+  return bgp_show_lcommunity_list (vty, argv[0], AFI_IP6, SAFI_UNICAST);
+}
+
+ALIAS (show_bgp_lcommunity_list,
+       show_bgp_ipv6_lcommunity_list_cmd,
+       "show bgp ipv6 large-community-list (<1-500>|WORD)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Display routes matching the large-community-list\n"
+       "large-community-list number\n"
+       "large-community-list name\n")
+
+/* old command */
+DEFUN (show_ipv6_bgp_lcommunity_list,
+       show_ipv6_bgp_lcommunity_list_cmd,
+       "show ipv6 bgp large-community-list WORD",
+       SHOW_STR
+       IPV6_STR
+       BGP_STR
+       "Display routes matching the large-community-list\n"
+       "large-community-list name\n")
+{
+  return bgp_show_lcommunity_list (vty, argv[0], AFI_IP6, SAFI_UNICAST);
+}
+
+/* old command */
+DEFUN (show_ipv6_mbgp_lcommunity_list,
+       show_ipv6_mbgp_lcommunity_list_cmd,
+       "show ipv6 mbgp large-community-list WORD",
+       SHOW_STR
+       IPV6_STR
+       MBGP_STR
+       "Display routes matching the large-community-list\n"
+       "large-community-list name\n")
+{
+  return bgp_show_lcommunity_list (vty, argv[0], AFI_IP6, SAFI_MULTICAST);
+}
+
+DEFUN (show_bgp_ipv4_lcommunity_list,
+       show_bgp_ipv4_lcommunity_list_cmd,
+       "show bgp ipv4 large-community-list (<1-500>|WORD)",
+       SHOW_STR
+       BGP_STR
+       IP_STR
+       "Display routes matching the large-community-list\n"
+       "large-community-list number\n"
+       "large-community-list name\n")
+{
+  return bgp_show_lcommunity_list (vty, argv[0], AFI_IP, SAFI_UNICAST);
+}
+
+DEFUN (show_bgp_ipv4_safi_lcommunity_list,
+       show_bgp_ipv4_safi_lcommunity_list_cmd,
+       "show bgp ipv4 (unicast|multicast) large-community-list (<1-500>|WORD)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "Display routes matching the large-community-list\n"
+       "large-community-list number\n"
+       "large-community-list name\n")
+{
+  if (strncmp (argv[0], "m", 1) == 0)
+    return bgp_show_lcommunity_list (vty, argv[1], AFI_IP, SAFI_MULTICAST);
+
+  return bgp_show_lcommunity_list (vty, argv[1], AFI_IP, SAFI_UNICAST);
+}
+
+DEFUN (show_bgp_ipv6_safi_lcommunity_list,
+       show_bgp_ipv6_safi_lcommunity_list_cmd,
+       "show bgp ipv6 (encap|multicast|unicast|vpn) large-community-list (<1-500>|WORD)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Address family modifier\n"
+       "Display routes matching the large-community-list\n"
+       "large-community-list number\n"
+       "large-community-list name\n")
+{
+  safi_t	safi;
+
+  if (bgp_parse_safi(argv[0], &safi)) {
+    vty_out (vty, "Error: Bad SAFI: %s%s", argv[0], VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+  return bgp_show_lcommunity_list (vty, argv[1], AFI_IP6, safi);
+}
+
 static int
 bgp_show_prefix_longer (struct vty *vty, const char *prefix, afi_t afi,
 			safi_t safi, enum bgp_show_type type)
@@ -16409,6 +17312,24 @@
   install_element (VIEW_NODE, &show_bgp_ipv4_safi_community_list_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv4_community_list_exact_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv4_safi_community_list_exact_cmd);
+
+  /* large-communities */
+  install_element (VIEW_NODE, &show_bgp_ipv4_lcommunity_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv4_lcommunity2_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv4_lcommunity3_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv4_lcommunity4_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv4_safi_lcommunity_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv4_safi_lcommunity2_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv4_safi_lcommunity3_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv4_safi_lcommunity4_cmd);
+  install_element (VIEW_NODE, &show_bgp_view_afi_safi_lcommunity_all_cmd);
+  install_element (VIEW_NODE, &show_bgp_view_afi_safi_lcommunity_cmd);
+  install_element (VIEW_NODE, &show_bgp_view_afi_safi_lcommunity2_cmd);
+  install_element (VIEW_NODE, &show_bgp_view_afi_safi_lcommunity3_cmd);
+  install_element (VIEW_NODE, &show_bgp_view_afi_safi_lcommunity4_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv4_lcommunity_list_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv4_safi_lcommunity_list_cmd);
+
   install_element (VIEW_NODE, &show_bgp_ipv4_prefix_longer_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv4_safi_prefix_longer_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv6_safi_prefix_longer_cmd);
@@ -16506,6 +17427,22 @@
   install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_community2_exact_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_community3_exact_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_community4_exact_cmd);
+
+  /* large-community */
+  install_element (RESTRICTED_NODE, &show_bgp_ipv4_lcommunity_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv4_lcommunity2_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv4_lcommunity3_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv4_lcommunity4_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_lcommunity_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_lcommunity2_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_lcommunity3_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_lcommunity4_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_view_afi_safi_lcommunity_all_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_view_afi_safi_lcommunity_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_view_afi_safi_lcommunity2_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_view_afi_safi_lcommunity3_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_view_afi_safi_lcommunity4_cmd);
+
   install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_rsclient_route_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_rsclient_prefix_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_view_ipv4_safi_rsclient_route_cmd);
@@ -16514,6 +17451,7 @@
   /* BGP dampening clear commands */
   install_element (ENABLE_NODE, &clear_ip_bgp_dampening_cmd);
   install_element (ENABLE_NODE, &clear_ip_bgp_dampening_prefix_cmd);
+
   install_element (ENABLE_NODE, &clear_ip_bgp_dampening_address_cmd);
   install_element (ENABLE_NODE, &clear_ip_bgp_dampening_address_mask_cmd);
 
@@ -16558,6 +17496,14 @@
   install_element (VIEW_NODE, &show_bgp_ipv6_safi_community3_exact_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv6_safi_community4_exact_cmd);
   install_element (VIEW_NODE, &show_bgp_community_list_cmd);
+
+  /* large-community */
+  install_element (VIEW_NODE, &show_bgp_ipv6_safi_lcommunity_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_safi_lcommunity2_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_safi_lcommunity3_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_safi_lcommunity4_cmd);
+  install_element (VIEW_NODE, &show_bgp_lcommunity_list_cmd);
+
   install_element (VIEW_NODE, &show_bgp_ipv6_prefix_longer_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv6_neighbor_advertised_route_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv6_neighbor_received_routes_cmd);
@@ -16604,6 +17550,10 @@
   install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_community2_exact_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_community3_exact_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_community4_exact_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_lcommunity_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_lcommunity2_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_lcommunity3_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_lcommunity4_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv6_rsclient_route_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_rsclient_route_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv6_rsclient_prefix_cmd);
@@ -16753,6 +17703,18 @@
   install_element (VIEW_NODE, &show_ip_bgp_ipv4_community_list_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_community_list_exact_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_ipv4_community_list_exact_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_lcommunity_all_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_ipv4_lcommunity_all_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_lcommunity_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_lcommunity2_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_lcommunity3_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_lcommunity4_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_ipv4_lcommunity_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_ipv4_lcommunity2_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_ipv4_lcommunity3_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_ipv4_lcommunity4_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_lcommunity_list_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_ipv4_lcommunity_list_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_prefix_longer_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_ipv4_prefix_longer_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_neighbor_advertised_route_cmd);
@@ -16826,6 +17788,14 @@
   install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_community2_exact_cmd);
   install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_community3_exact_cmd);
   install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_community4_exact_cmd);
+  install_element (RESTRICTED_NODE, &show_ip_bgp_lcommunity_cmd);
+  install_element (RESTRICTED_NODE, &show_ip_bgp_lcommunity2_cmd);
+  install_element (RESTRICTED_NODE, &show_ip_bgp_lcommunity3_cmd);
+  install_element (RESTRICTED_NODE, &show_ip_bgp_lcommunity4_cmd);
+  install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_lcommunity_cmd);
+  install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_lcommunity2_cmd);
+  install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_lcommunity3_cmd);
+  install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_lcommunity4_cmd);
   install_element (RESTRICTED_NODE, &show_ip_bgp_rsclient_route_cmd);
   install_element (RESTRICTED_NODE, &show_ip_bgp_rsclient_prefix_cmd);
   install_element (RESTRICTED_NODE, &show_ip_bgp_view_rsclient_route_cmd);
@@ -16862,6 +17832,13 @@
   install_element (VIEW_NODE, &show_bgp_ipv6_safi_community_list_cmd);
   install_element (VIEW_NODE, &show_bgp_community_list_exact_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv6_safi_community_list_exact_cmd);
+  install_element (VIEW_NODE, &show_bgp_lcommunity_all_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_lcommunity_all_cmd);
+  install_element (VIEW_NODE, &show_bgp_lcommunity_cmd);
+  install_element (VIEW_NODE, &show_bgp_lcommunity2_cmd);
+  install_element (VIEW_NODE, &show_bgp_lcommunity3_cmd);
+  install_element (VIEW_NODE, &show_bgp_lcommunity4_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_safi_lcommunity_list_cmd);
   install_element (VIEW_NODE, &show_bgp_prefix_longer_cmd);
   install_element (VIEW_NODE, &show_bgp_neighbor_advertised_route_cmd);
   install_element (VIEW_NODE, &show_bgp_neighbor_received_routes_cmd);
@@ -16897,6 +17874,10 @@
   install_element (RESTRICTED_NODE, &show_bgp_community2_exact_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_community3_exact_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_community4_exact_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_lcommunity_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_lcommunity2_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_lcommunity3_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_lcommunity4_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_view_route_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_view_prefix_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_view_neighbor_received_prefix_filter_cmd);
@@ -16921,6 +17902,12 @@
   install_element (VIEW_NODE, &show_ipv6_bgp_community4_exact_cmd);
   install_element (VIEW_NODE, &show_ipv6_bgp_community_list_cmd);
   install_element (VIEW_NODE, &show_ipv6_bgp_community_list_exact_cmd);
+  install_element (VIEW_NODE, &show_ipv6_bgp_lcommunity_all_cmd);
+  install_element (VIEW_NODE, &show_ipv6_bgp_lcommunity_cmd);
+  install_element (VIEW_NODE, &show_ipv6_bgp_lcommunity2_cmd);
+  install_element (VIEW_NODE, &show_ipv6_bgp_lcommunity3_cmd);
+  install_element (VIEW_NODE, &show_ipv6_bgp_lcommunity4_cmd);
+  install_element (VIEW_NODE, &show_ipv6_bgp_lcommunity_list_cmd);
   install_element (VIEW_NODE, &show_ipv6_bgp_prefix_longer_cmd);
   install_element (VIEW_NODE, &show_ipv6_mbgp_cmd);
   install_element (VIEW_NODE, &show_ipv6_mbgp_route_cmd);
@@ -16939,6 +17926,12 @@
   install_element (VIEW_NODE, &show_ipv6_mbgp_community4_exact_cmd);
   install_element (VIEW_NODE, &show_ipv6_mbgp_community_list_cmd);
   install_element (VIEW_NODE, &show_ipv6_mbgp_community_list_exact_cmd);
+  install_element (VIEW_NODE, &show_ipv6_mbgp_lcommunity_all_cmd);
+  install_element (VIEW_NODE, &show_ipv6_mbgp_lcommunity_cmd);
+  install_element (VIEW_NODE, &show_ipv6_mbgp_lcommunity2_cmd);
+  install_element (VIEW_NODE, &show_ipv6_mbgp_lcommunity3_cmd);
+  install_element (VIEW_NODE, &show_ipv6_mbgp_lcommunity4_cmd);
+  install_element (VIEW_NODE, &show_ipv6_mbgp_lcommunity_list_cmd);
   install_element (VIEW_NODE, &show_ipv6_mbgp_prefix_longer_cmd);
   install_element (VIEW_NODE, &ipv6_bgp_neighbor_advertised_route_cmd);
   install_element (VIEW_NODE, &ipv6_mbgp_neighbor_advertised_route_cmd);
@@ -16967,6 +17960,16 @@
   install_element (VIEW_NODE, &show_bgp_ipv6_community_list_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv6_community_list_exact_cmd);
 
+  install_element (VIEW_NODE, &show_bgp_ipv6_lcommunity_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_lcommunity2_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_lcommunity3_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_lcommunity4_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv6_lcommunity_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv6_lcommunity2_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv6_lcommunity3_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv6_lcommunity4_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_lcommunity_list_cmd);
+
   install_element (VIEW_NODE, &show_bgp_rsclient_route_cmd);
   install_element (VIEW_NODE, &show_bgp_rsclient_prefix_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_rsclient_route_cmd);