This is part of the core VPN and Encap SAFI changes. 

Add code to print ENCAP communities.

Signed-off-by: Lou Berger <[email protected]>
Signed-off-by: David Lamparter <[email protected]>
---
 bgpd/bgp_ecommunity.c | 37 ++++++++++++++++++++++++++++---------
 bgpd/bgp_ecommunity.h |  6 +++++-
 2 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/bgpd/bgp_ecommunity.c b/bgpd/bgp_ecommunity.c
index 04957d4..5386b6f 100644
--- a/bgpd/bgp_ecommunity.c
+++ b/bgpd/bgp_ecommunity.c
@@ -642,15 +642,34 @@ ecommunity_ecom2str (struct ecommunity *ecom, int format)
 
       /* High-order octet of type. */
       encode = *pnt++;
-      if (encode != ECOMMUNITY_ENCODE_AS && encode != ECOMMUNITY_ENCODE_IP
-                     && encode != ECOMMUNITY_ENCODE_AS4)
-       {
-         len = sprintf (str_buf + str_pnt, "?");
-         str_pnt += len;
-         first = 0;
-         continue;
-       }
-      
+
+      switch (encode)
+        {
+        case ECOMMUNITY_ENCODE_AS:
+        case ECOMMUNITY_ENCODE_IP:
+        case ECOMMUNITY_ENCODE_AS4:
+          break;
+
+        case ECOMMUNITY_ENCODE_OPAQUE:
+          if (*pnt == ECOMMUNITY_OPAQUE_SUBTYPE_ENCAP)
+            {
+              uint16_t tunneltype;
+              memcpy (&tunneltype, pnt + 5, 2);
+              tunneltype = ntohs(tunneltype);
+              len = sprintf (str_buf + str_pnt, "ET:%d", tunneltype);
+              str_pnt += len;
+              first = 0;
+              continue;
+            }
+            /* fall through */
+
+        default:
+          len = sprintf (str_buf + str_pnt, "?");
+          str_pnt += len;
+          first = 0;
+          continue;
+        }
+
       /* Low-order octet of type. */
       type = *pnt++;
       if (type !=  ECOMMUNITY_ROUTE_TARGET && type != ECOMMUNITY_SITE_ORIGIN)
diff --git a/bgpd/bgp_ecommunity.h b/bgpd/bgp_ecommunity.h
index 92affcc..993fd5a 100644
--- a/bgpd/bgp_ecommunity.h
+++ b/bgpd/bgp_ecommunity.h
@@ -25,11 +25,15 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, 
Boston, MA
 #define ECOMMUNITY_ENCODE_AS                0x00
 #define ECOMMUNITY_ENCODE_IP                0x01
 #define ECOMMUNITY_ENCODE_AS4               0x02
+#define ECOMMUNITY_ENCODE_OPAQUE            0x03
 
-/* Low-order octet of the Extended Communityes type field.  */
+/* Low-order octet of the Extended Communities type field.  */
 #define ECOMMUNITY_ROUTE_TARGET             0x02
 #define ECOMMUNITY_SITE_ORIGIN              0x03
 
+/* Low-order octet of the Extended Communities type field for OPAQUE types */
+#define ECOMMUNITY_OPAQUE_SUBTYPE_ENCAP     0x0c
+
 /* Extended communities attribute string format.  */
 #define ECOMMUNITY_FORMAT_ROUTE_MAP            0
 #define ECOMMUNITY_FORMAT_COMMUNITY_LIST       1
-- 
2.1.3


_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to