From e06614b276963810c496da273358133c5e287829 Mon Sep 17 00:00:00 2001 From: Hiroki Sato Date: Sun, 19 Jul 2009 07:31:04 +0000 Subject: Update to 4.5.20090709 (from snapshot as of 2009/7/9). Add support for nexthop with an IPv6 link-local address. To enable this, specify "interface" in bgpd.conf (see bgpd.conf(5)). --- net/openbgpd/files/patch-bgpctl_parser.c | 135 ++++++++++++++++++++++++++++++- 1 file changed, 132 insertions(+), 3 deletions(-) (limited to 'net/openbgpd/files/patch-bgpctl_parser.c') diff --git a/net/openbgpd/files/patch-bgpctl_parser.c b/net/openbgpd/files/patch-bgpctl_parser.c index da0571bd66ef..bb3e6ef03a57 100644 --- a/net/openbgpd/files/patch-bgpctl_parser.c +++ b/net/openbgpd/files/patch-bgpctl_parser.c @@ -2,10 +2,16 @@ Index: bgpctl/parser.c =================================================================== RCS file: /home/cvs/private/hrs/openbgpd/bgpctl/parser.c,v retrieving revision 1.1.1.1 -retrieving revision 1.2 -diff -u -p -r1.1.1.1 -r1.2 +retrieving revision 1.3 +diff -u -p -r1.1.1.1 -r1.3 --- bgpctl/parser.c 30 Jun 2009 05:46:15 -0000 1.1.1.1 -+++ bgpctl/parser.c 30 Jun 2009 06:40:06 -0000 1.2 ++++ bgpctl/parser.c 9 Jul 2009 17:22:12 -0000 1.3 +@@ -1,4 +1,4 @@ +-/* $OpenBSD: parser.c,v 1.50 2008/06/15 09:58:43 claudio Exp $ */ ++/* $OpenBSD: parser.c,v 1.54 2009/06/12 16:44:02 claudio Exp $ */ + + /* + * Copyright (c) 2003, 2004 Henning Brauer @@ -16,6 +16,10 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ @@ -17,3 +23,126 @@ diff -u -p -r1.1.1.1 -r1.2 #include #include +@@ -42,6 +46,7 @@ enum token_type { + ASTYPE, + PREFIX, + PEERDESC, ++ RIBNAME, + COMMUNITY, + LOCALPREF, + MED, +@@ -72,6 +77,7 @@ static const struct token t_show_summary + static const struct token t_show_fib[]; + static const struct token t_show_rib[]; + static const struct token t_show_rib_neigh[]; ++static const struct token t_show_rib_rib[]; + static const struct token t_show_neighbor[]; + static const struct token t_show_neighbor_modifiers[]; + static const struct token t_fib[]; +@@ -148,6 +154,7 @@ static const struct token t_show_rib[] = + { FLAG, "in", F_CTL_ADJ_IN, t_show_rib}, + { FLAG, "out", F_CTL_ADJ_OUT, t_show_rib}, + { KEYWORD, "neighbor", NONE, t_show_rib_neigh}, ++ { KEYWORD, "table", NONE, t_show_rib_rib}, + { KEYWORD, "summary", SHOW_SUMMARY, t_show_summary}, + { KEYWORD, "memory", SHOW_RIB_MEM, NULL}, + { FAMILY, "", NONE, t_show_rib}, +@@ -161,6 +168,11 @@ static const struct token t_show_rib_nei + { ENDTOKEN, "", NONE, NULL} + }; + ++static const struct token t_show_rib_rib[] = { ++ { RIBNAME, "", NONE, t_show_rib}, ++ { ENDTOKEN, "", NONE, NULL} ++}; ++ + static const struct token t_show_neighbor[] = { + { NOTOKEN, "", NONE, NULL}, + { PEERADDRESS, "", NONE, t_show_neighbor_modifiers}, +@@ -456,6 +468,15 @@ match_token(int *argc, char **argv[], co + t = &table[i]; + } + break; ++ case RIBNAME: ++ if (!match && word != NULL && strlen(word) > 0) { ++ if (strlcpy(res.rib, word, sizeof(res.rib)) >= ++ sizeof(res.rib)) ++ errx(1, "rib name too long"); ++ match++; ++ t = &table[i]; ++ } ++ break; + case COMMUNITY: + if (word != NULL && strlen(word) > 0 && + parse_community(word, &res)) { +@@ -547,6 +568,9 @@ show_valid_args(const struct token table + case PEERDESC: + fprintf(stderr, " \n"); + break; ++ case RIBNAME: ++ fprintf(stderr, " \n"); ++ break; + case COMMUNITY: + fprintf(stderr, " \n"); + break; +@@ -686,7 +710,7 @@ parse_asnum(const char *word, u_int32_t + if (errstr) + errx(1, "AS number is %s: %s", errstr, word); + } else { +- uval = strtonum(word, 0, USHRT_MAX - 1, &errstr); ++ uval = strtonum(word, 0, ASNUM_MAX - 1, &errstr); + if (errstr) + errx(1, "AS number is %s: %s", errstr, word); + } +@@ -801,7 +825,7 @@ parse_community(const char *word, struct + type = getcommunity(p); + + done: +- if (as == 0 || as == USHRT_MAX) { ++ if (as == 0) { + fprintf(stderr, "Invalid community\n"); + return (0); + } +@@ -814,7 +838,7 @@ done: + break; + default: + /* unknown */ +- fprintf(stderr, "Invalid well-known community\n"); ++ fprintf(stderr, "Unknown well-known community\n"); + return (0); + } + +@@ -856,33 +880,6 @@ parse_nexthop(const char *word, struct p + return (1); + } + +-/* XXX local copies from kroute.c, should go to a shared file */ +-in_addr_t +-prefixlen2mask(u_int8_t prefixlen) +-{ +- if (prefixlen == 0) +- return (0); +- +- return (0xffffffff << (32 - prefixlen)); +-} +- +-void +-inet6applymask(struct in6_addr *dest, const struct in6_addr *src, int prefixlen) +-{ +- struct in6_addr mask; +- int i; +- +- bzero(&mask, sizeof(mask)); +- for (i = 0; i < prefixlen / 8; i++) +- mask.s6_addr[i] = 0xff; +- i = prefixlen % 8; +- if (i) +- mask.s6_addr[prefixlen / 8] = 0xff00 >> i; +- +- for (i = 0; i < 16; i++) +- dest->s6_addr[i] = src->s6_addr[i] & mask.s6_addr[i]; +-} +- + int + bgpctl_getopt(int *argc, char **argv[], int type) + { -- cgit v1.2.3