This is not an api that seems to have caught on (especially the AF_INET6 variant), maybe we can get rid of it entirely.
(I also suspect that the AF_INET6 version is broken on FreeBSD and NetBSD as well as mac osx.) OK? diff --git parse.y parse.y index 8f32f11250d..36e5af8be76 100644 --- parse.y +++ parse.y @@ -260,17 +260,28 @@ ra_ifaceoptsl : NO AUTO PREFIX { | PREFIX STRING { struct in6_addr addr; int prefixlen; + char *p; + const char *errstr; memset(&addr, 0, sizeof(addr)); - prefixlen = inet_net_pton(AF_INET6, $2, &addr, - sizeof(addr)); - if (prefixlen == -1) { - yyerror("error parsing prefix"); + p = strchr($2, '/'); + if (p != NULL) { + *p++ = '\0'; + prefixlen = strtonum(p, 0, 128, &errstr); + if (errstr != NULL) { + yyerror("error parsing prefix " + "\"%s/%s\"", $2, p); + free($2); + YYERROR; + } + } else + prefixlen = 64; + if(inet_pton(AF_INET6, $2, &addr) == 0) { + yyerror("error parsing prefix \"%s/%d\"", $2, + prefixlen); free($2); YYERROR; } - if (prefixlen == 128 && strchr($2, '/') == NULL) - prefixlen = 64; mask_prefix(&addr, prefixlen); ra_prefix_conf = conf_get_ra_prefix(&addr, prefixlen); } ra_prefix_block { diff --git printconf.c printconf.c index d42890da518..feabd83de94 100644 --- printconf.c +++ printconf.c @@ -102,7 +102,7 @@ print_config(struct rad_conf *conf) { struct ra_iface_conf *iface; struct ra_prefix_conf *prefix; - char buf[INET6_ADDRSTRLEN], *bufp; + char buf[INET6_ADDRSTRLEN]; print_ra_options("", &conf->ra_options); printf("\n"); @@ -120,9 +120,9 @@ print_config(struct rad_conf *conf) printf("\tno auto prefix\n"); SIMPLEQ_FOREACH(prefix, &iface->ra_prefix_list, entry) { - bufp = inet_net_ntop(AF_INET6, &prefix->prefix, - prefix->prefixlen, buf, sizeof(buf)); - printf("\tprefix %s {\n", bufp); + printf("\tprefix %s/%d {\n", inet_ntop(AF_INET6, + &prefix->prefix, buf, sizeof(buf)), + prefix->prefixlen); print_prefix_options("\t\t", prefix); printf("\t}\n"); } -- I'm not entirely sure you are real.