- } else if (otype == DHCPV6_OPT_STATUS && olen >= 2 && !odata[0]
- && odata[1] == DHCPV6_NoPrefixAvail) {
- cand.preference -= 2000;
+ } else if (otype == DHCPV6_OPT_STATUS && olen >= 2) {
+ int error = ((int)odata[0] << 8 | (int)odata[1]);
+
+ switch (error) {
+ case DHCPV6_NoPrefixAvail:
+ // Status code on global level
+ if (pd_mode == IA_MODE_FORCE)
+ return -1;
+ cand.preference -= 2000;
+ break;
+
+ case DHCPV6_NoAddrsAvail:
+ // Status code on global level
+ if (na_mode == IA_MODE_FORCE)
+ return -1;
+ break;
+
+ default :
+ break;
+ }