summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudio Jeker <claudio@cvs.openbsd.org>2012-03-06 07:52:33 +0000
committerClaudio Jeker <claudio@cvs.openbsd.org>2012-03-06 07:52:33 +0000
commit240ff89aedc6ba28fd95df1b623e386c564a33d5 (patch)
tree3ada8dc10c17e0d7d45bb9eb98125a57f5714c49
parentb027c50d938ba9d1532079c39ca6a91775b121b3 (diff)
Implement a better way to detect the encoding of the MP_REACH_NLRI attr.
Check the addr length value of the RFC 6396 encoding to decide if it is one or not. While there try to make the comment more clear.
-rw-r--r--usr.sbin/bgpctl/mrtparser.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/usr.sbin/bgpctl/mrtparser.c b/usr.sbin/bgpctl/mrtparser.c
index aba4ba94fe8..d1dcef51de1 100644
--- a/usr.sbin/bgpctl/mrtparser.c
+++ b/usr.sbin/bgpctl/mrtparser.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mrtparser.c,v 1.1 2011/09/21 10:37:51 claudio Exp $ */
+/* $OpenBSD: mrtparser.c,v 1.2 2012/03/06 07:52:32 claudio Exp $ */
/*
* Copyright (c) 2011 Claudio Jeker <claudio@openbsd.org>
*
@@ -826,13 +826,15 @@ mrt_extract_attr(struct mrt_rib_entry *re, u_char *a, int alen, sa_family_t af,
/*
* XXX horrible hack:
* Once again IETF and the real world differ in the
- * implementation. So the abbreviated MP_NLRI hack
- * in the standard is not used in real life.
+ * implementation. In short the abbreviated MP_NLRI
+ * hack in the standard is not used in real life.
* Detect the two cases by looking at the first byte
- * and if it is 0 it is assumed to be a AFI/SAFI
- * encoding.
+ * of the payload (either the nexthop addr length (RFC)
+ * or the high byte of the AFI (old form)). If the
+ * first byte matches the expected nexthop length it
+ * is expected to be the RFC 6396 encoding.
*/
- if (*a == 0) {
+ if (*a != attr_len - 1) {
a += 3;
alen -= 3;
attr_len -= 3;