summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLou Berger <lberger@labn.net>2016-01-12 13:42:00 -0500
committerPaul Jakma <paul.jakma@hpe.com>2016-02-26 14:11:43 +0000
commit5a81fc9ae610ff343902ebabc12237d6e40d91cb (patch)
tree734cdcaca446bf42934bb2fce98c1799c88c1bfb
parent050defe816e4bd4cac7b028f69e45cb1974ca96d (diff)
downloadquagga-5a81fc9ae610ff343902ebabc12237d6e40d91cb.tar.bz2
quagga-5a81fc9ae610ff343902ebabc12237d6e40d91cb.tar.xz
bgpd: encap: extend extcommunity handling
Add code to print ENCAP communities. Signed-off-by: Lou Berger <lberger@labn.net> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
-rw-r--r--bgpd/bgp_ecommunity.c37
-rw-r--r--bgpd/bgp_ecommunity.h6
2 files changed, 33 insertions, 10 deletions
diff --git a/bgpd/bgp_ecommunity.c b/bgpd/bgp_ecommunity.c
index c76f01e3..5d69b42c 100644
--- a/bgpd/bgp_ecommunity.c
+++ b/bgpd/bgp_ecommunity.c
@@ -643,15 +643,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 92affccc..993fd5ac 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