else {
asla.prefix_len = (uint8_t)(prefix->prefix_len + bits);
- /* Make a 64 prefix by default, as this maks SLAAC
+ /* Make a 64 prefix by default, as this makes SLAAC
* possible.
* Otherwise round up to the nearest 4 bits. */
if (asla.prefix_len <= 64)
prefix->prefix_len);
}
- if (ipv6_userprefix(&prefix->prefix, prefix->prefix_len,
+ if (sla->sla == 0) {
+ *addr = prefix->prefix;
+ } else if (ipv6_userprefix(&prefix->prefix, prefix->prefix_len,
sla->sla, addr, sla->prefix_len) == -1)
{
sa = inet_ntop(AF_INET6, &prefix->prefix,
a->prefix = addr;
a->prefix_len = (uint8_t)pfxlen;
+ /* If sla is zero and the prefix length hasn't changed,
+ * don't install a blackhole route. */
+ if (sla->sla_set && sla->sla == 0 && prefix->prefix_len == pfxlen)
+ prefix->flags |= IPV6_AF_DELEGATEDZERO;
+
/* Add our suffix */
if (sla->suffix) {
a->addr = addr;
}
for (j = 0; j < ia->sla_len; j++) {
sla = &ia->sla[j];
- if (sla->sla_set && sla->sla == 0)
- ap->flags |=
- IPV6_AF_DELEGATEDZERO;
if (strcmp(ifd->name, sla->ifname))
continue;
if (ifd->carrier != LINK_UP) {