On Mon, Jan 18, 2021 at 06:41:26PM +0100, Florian Obser wrote: > > > 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?
ok tb > > 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. >