X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=src%2Fdhcpv6.c;h=597d239b5daa3451d4d00b3ce57407b779a21afd;hb=0aff911e92043891dcb5ccd83b721ee748195175;hp=e857823608b79a315843c0b094907aee1a8205f3;hpb=2e955b5ab5560302ab4f7a8372e4132d5a14a001;p=project%2Fodhcp6c.git diff --git a/src/dhcpv6.c b/src/dhcpv6.c index e857823..597d239 100644 --- a/src/dhcpv6.c +++ b/src/dhcpv6.c @@ -328,6 +328,11 @@ static void dhcpv6_send(enum dhcpv6_msg type, uint8_t trid[3], uint32_t ecs) .addr = e[j].target }; + if (type == DHCPV6_MSG_REQUEST) { + p.preferred = htonl(e[j].preferred); + p.valid = htonl(e[j].valid); + } + memcpy(ia_pd + ia_pd_len, &p, sizeof(p)); ia_pd_len += sizeof(p); @@ -372,8 +377,14 @@ static void dhcpv6_send(enum dhcpv6_msg type, uint8_t trid[3], uint32_t ecs) pa[i].type = htons(DHCPV6_OPT_IA_ADDR); pa[i].len = htons(sizeof(pa[i]) - 4U); pa[i].addr = e[i].target; - pa[i].preferred = 0; - pa[i].valid = 0; + + if (type == DHCPV6_MSG_REQUEST) { + pa[i].preferred = htonl(e[i].preferred); + pa[i].valid = htonl(e[i].valid); + } else { + pa[i].preferred = 0; + pa[i].valid = 0; + } } ia_na = pa; @@ -1356,23 +1367,8 @@ static void dhcpv6_handle_ia_status_code(const enum dhcpv6_msg orig, } break; - case DHCPV6_NoAddrsAvail: - case DHCPV6_NoPrefixAvail: - switch (orig) { - case DHCPV6_MSG_REQUEST: - if (*ret != 0) - *ret = 0; - break; - default: - break; - } - break; - - case DHCPV6_NotOnLink: - // TODO handle not onlink in case of confirm - break; - default: + *ret = 0; break; } }