- if (ia_pd_entry_len > 0) {
- struct odhcp6c_entry *e = ia_pd_entries;
- size_t entries = ia_pd_entry_len / sizeof(*e);
- struct dhcpv6_ia_prefix p[entries];
- for (size_t i = 0; i < entries; ++i) {
- p[i].type = htons(DHCPV6_OPT_IA_PREFIX);
- p[i].len = htons(sizeof(p[i]) - 4U);
- p[i].preferred = htonl(e[i].preferred);
- p[i].valid = htonl(e[i].valid);
- p[i].prefix = e[i].length;
- p[i].addr = e[i].target;
- }
- ia_pd = p;
- ia_pd_len = sizeof(p);
- } else if (request_prefix > 0 &&
+
+ struct dhcpv6_ia_prefix p[ia_pd_entries];
+ for (size_t i = 0; i < ia_pd_entries; ++i) {
+ p[i].type = htons(DHCPV6_OPT_IA_PREFIX);
+ p[i].len = htons(sizeof(p[i]) - 4U);
+ p[i].preferred = 0;
+ p[i].valid = 0;
+ p[i].prefix = e[i].length;
+ p[i].addr = e[i].target;
+ }
+ ia_pd = p;
+ ia_pd_len = sizeof(p);
+ hdr_ia_pd.len = htons(ntohs(hdr_ia_pd.len) + ia_pd_len);
+
+ if (request_prefix > 0 &&