summaryrefslogtreecommitdiff
path: root/net/openbgpd/files/patch-bgpd_util.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/openbgpd/files/patch-bgpd_util.c')
-rw-r--r--net/openbgpd/files/patch-bgpd_util.c86
1 files changed, 79 insertions, 7 deletions
diff --git a/net/openbgpd/files/patch-bgpd_util.c b/net/openbgpd/files/patch-bgpd_util.c
index 88c95a8423d8..213c90a2276e 100644
--- a/net/openbgpd/files/patch-bgpd_util.c
+++ b/net/openbgpd/files/patch-bgpd_util.c
@@ -2,10 +2,10 @@ Index: bgpd/util.c
===================================================================
RCS file: /home/cvs/private/hrs/openbgpd/bgpd/util.c,v
retrieving revision 1.1.1.6
-retrieving revision 1.5
-diff -u -p -r1.1.1.6 -r1.5
+retrieving revision 1.6
+diff -u -p -r1.1.1.6 -r1.6
--- bgpd/util.c 14 Feb 2010 20:19:57 -0000 1.1.1.6
-+++ bgpd/util.c 10 Apr 2010 12:16:23 -0000 1.5
++++ bgpd/util.c 2 Jul 2011 16:06:38 -0000 1.6
@@ -1,4 +1,4 @@
-/* $OpenBSD: util.c,v 1.6 2009/06/12 16:42:53 claudio Exp $ */
+/* $OpenBSD: util.c,v 1.11 2010/03/29 09:04:43 claudio Exp $ */
@@ -22,7 +22,13 @@ diff -u -p -r1.1.1.6 -r1.5
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
-@@ -32,11 +35,24 @@ const char *
+@@ -28,15 +31,30 @@
+ #include "bgpd.h"
+ #include "rde.h"
+
++const char *aspath_delim(u_int8_t, int);
++
+ const char *
log_addr(const struct bgpd_addr *addr)
{
static char buf[48];
@@ -50,7 +56,7 @@ diff -u -p -r1.1.1.6 -r1.5
}
const char *
-@@ -90,6 +106,64 @@ log_as(u_int32_t as)
+@@ -90,6 +108,96 @@ log_as(u_int32_t as)
return (buf);
}
@@ -107,15 +113,81 @@ diff -u -p -r1.1.1.6 -r1.5
+ case EXT_COMMUNITY_BGP_COLLECT:
+ return ("bdc"); /* bgp data collection */
+ default:
-+ snprintf(etype, sizeof(etype), "[%i]", (int)subtype);
++ snprintf(etype, sizeof(etype), "[%u]", subtype);
+ return (etype);
+ }
+}
+
++const char *
++aspath_delim(u_int8_t seg_type, int closing)
++{
++ static char db[8];
++
++ switch (seg_type) {
++ case AS_SET:
++ if (!closing)
++ return ("{ ");
++ else
++ return (" }");
++ case AS_SEQUENCE:
++ return ("");
++ case AS_CONFED_SEQUENCE:
++ if (!closing)
++ return ("( ");
++ else
++ return (" )");
++ case AS_CONFED_SET:
++ if (!closing)
++ return ("[ ");
++ else
++ return (" ]");
++ default:
++ if (!closing)
++ snprintf(db, sizeof(db), "!%u ", seg_type);
++ else
++ snprintf(db, sizeof(db), " !%u", seg_type);
++ return (db);
++ }
++}
++
int
aspath_snprint(char *buf, size_t size, void *data, u_int16_t len)
{
-@@ -276,3 +350,115 @@ inet6applymask(struct in6_addr *dest, co
+@@ -118,16 +226,10 @@ aspath_snprint(char *buf, size_t size, v
+ seg_len = seg[1];
+ seg_size = 2 + sizeof(u_int32_t) * seg_len;
+
+- if (seg_type == AS_SET) {
+- if (total_size != 0)
+- r = snprintf(buf, size, " { ");
+- else
+- r = snprintf(buf, size, "{ ");
+- UPDATE();
+- } else if (total_size != 0) {
+- r = snprintf(buf, size, " ");
+- UPDATE();
+- }
++ r = snprintf(buf, size, "%s%s",
++ total_size != 0 ? " " : "",
++ aspath_delim(seg_type, 0));
++ UPDATE();
+
+ for (i = 0; i < seg_len; i++) {
+ r = snprintf(buf, size, "%s",
+@@ -138,10 +240,8 @@ aspath_snprint(char *buf, size_t size, v
+ UPDATE();
+ }
+ }
+- if (seg_type == AS_SET) {
+- r = snprintf(buf, size, " }");
+- UPDATE();
+- }
++ r = snprintf(buf, size, "%s", aspath_delim(seg_type, 1));
++ UPDATE();
+ }
+ /* ensure that we have a valid C-string especially for empty as path */
+ if (size > 0)
+@@ -276,3 +376,115 @@ inet6applymask(struct in6_addr *dest, co
for (i = 0; i < 16; i++)
dest->s6_addr[i] = src->s6_addr[i] & mask.s6_addr[i];
}