X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=src%2Fdhcpv6.c;h=21f0b22256702243ed223b30fa098799fab65fc7;hb=2694232fb6fd00351dcd51609aac08b66fb2b1d8;hp=9b664ed473a4430f0ab81e01bab637fba1fb05f5;hpb=0b77e6065dc833da19ddff6e04e4f09c805c6883;p=odhcp6c.git diff --git a/src/dhcpv6.c b/src/dhcpv6.c index 9b664ed..21f0b22 100644 --- a/src/dhcpv6.c +++ b/src/dhcpv6.c @@ -476,21 +476,23 @@ static int dhcpv6_handle_advert(_unused enum dhcpv6_msg orig, if (otype == DHCPV6_OPT_SERVERID && olen <= 130) { memcpy(cand.duid, odata, olen); cand.duid_len = olen; - } else if (otype == DHCPV6_OPT_STATUS && olen >= 2 && - !odata[0] && odata[1] == DHCPV6_NoAddrsAvail) { + } else if (otype == DHCPV6_OPT_STATUS && olen >= 2 && !odata[0] + && odata[1] == DHCPV6_NoAddrsAvail) { if (na_mode == IA_MODE_FORCE) { return -1; } else { cand.has_noaddravail = true; cand.preference -= 1000; } + } else if (otype == DHCPV6_OPT_STATUS && olen >= 2 && !odata[0] + && odata[1] == DHCPV6_NoPrefixAvail) { + cand.preference -= 2000; } else if (otype == DHCPV6_OPT_PREF && olen >= 1 && cand.preference >= 0) { cand.preference = odata[1]; } else if (otype == DHCPV6_OPT_RECONF_ACCEPT) { cand.wants_reconfigure = true; - } - else if (otype == DHCPV6_OPT_IA_PD && request_prefix) { + } else if (otype == DHCPV6_OPT_IA_PD && request_prefix) { struct dhcpv6_ia_hdr *h = (void*)odata; uint8_t *oend = odata + olen, *d; dhcpv6_for_each_option(&h[1], oend, otype, olen, d) { @@ -499,7 +501,7 @@ static int dhcpv6_handle_advert(_unused enum dhcpv6_msg orig, else if (otype == DHCPV6_OPT_STATUS && olen >= 2 && d[0] == 0 && d[1] == DHCPV6_NoPrefixAvail) - return -1; + cand.preference -= 2000; } } }