Lines Matching +full:- +full:- +full:timeout +full:- +full:multiplier

4  * SPDX-License-Identifier: Apache-2.0
77 sys_rand_get(iface->config.dhcpv6.tid, sizeof(iface->config.dhcpv6.tid)); in dhcpv6_generate_tid()
136 if (iface->config.dhcpv6.t1 > t1_abs) { in dhcvp6_update_deadlines()
137 iface->config.dhcpv6.t1 = t1_abs; in dhcvp6_update_deadlines()
140 if (iface->config.dhcpv6.t2 > t2_abs) { in dhcvp6_update_deadlines()
141 iface->config.dhcpv6.t2 = t2_abs; in dhcvp6_update_deadlines()
144 if (iface->config.dhcpv6.expire < expire_abs) { in dhcvp6_update_deadlines()
145 iface->config.dhcpv6.expire = expire_abs; in dhcvp6_update_deadlines()
149 static void dhcpv6_set_timeout(struct net_if *iface, uint64_t timeout) in dhcpv6_set_timeout() argument
153 NET_DBG("sched dhcpv6 timeout iface=%p timeout=%llums", iface, timeout); in dhcpv6_set_timeout()
155 if (u64_add_overflow(now, timeout, &iface->config.dhcpv6.timeout)) { in dhcpv6_set_timeout()
156 iface->config.dhcpv6.timeout = UINT64_MAX; in dhcpv6_set_timeout()
165 static int randomize_timeout(int multiplier, int timeout) in randomize_timeout() argument
170 * number between -0.1 nand +0.1. As we operate on integers here, we in randomize_timeout()
171 * scale it to -100 and +100, and divide the result by 1000. in randomize_timeout()
173 factor = (int)(sys_rand32_get() % 201) - 100; in randomize_timeout()
175 return (multiplier * timeout) + ((factor * timeout) / 1000); in randomize_timeout()
242 clientid->length); in dhcpv6_add_option_clientid()
247 ret = net_pkt_write(pkt, &clientid->duid, clientid->length); in dhcpv6_add_option_clientid()
258 serverid->length); in dhcpv6_add_option_serverid()
263 ret = net_pkt_write(pkt, &serverid->duid, serverid->length); in dhcpv6_add_option_serverid()
281 elapsed = (k_uptime_get() - since) / 10ULL; in dhcpv6_add_option_elapsed_time()
310 ret = net_pkt_write_be32(pkt, ia_na->iaid); in dhcpv6_add_option_ia_na()
315 ret = net_pkt_write_be32(pkt, ia_na->t1); in dhcpv6_add_option_ia_na()
320 ret = net_pkt_write_be32(pkt, ia_na->t2); in dhcpv6_add_option_ia_na()
335 ret = net_pkt_write(pkt, &ia_na->iaaddr.addr, sizeof(ia_na->iaaddr.addr)); in dhcpv6_add_option_ia_na()
340 ret = net_pkt_write_be32(pkt, ia_na->iaaddr.preferred_lifetime); in dhcpv6_add_option_ia_na()
345 ret = net_pkt_write_be32(pkt, ia_na->iaaddr.valid_lifetime); in dhcpv6_add_option_ia_na()
370 ret = net_pkt_write_be32(pkt, ia_pd->iaid); in dhcpv6_add_option_ia_pd()
375 ret = net_pkt_write_be32(pkt, ia_pd->t1); in dhcpv6_add_option_ia_pd()
380 ret = net_pkt_write_be32(pkt, ia_pd->t2); in dhcpv6_add_option_ia_pd()
395 ret = net_pkt_write_be32(pkt, ia_pd->iaprefix.preferred_lifetime); in dhcpv6_add_option_ia_pd()
400 ret = net_pkt_write_be32(pkt, ia_pd->iaprefix.valid_lifetime); in dhcpv6_add_option_ia_pd()
405 ret = net_pkt_write_u8(pkt, ia_pd->iaprefix.prefix_len); in dhcpv6_add_option_ia_pd()
410 ret = net_pkt_write(pkt, &ia_pd->iaprefix.prefix, in dhcpv6_add_option_ia_pd()
411 sizeof(ia_pd->iaprefix.prefix)); in dhcpv6_add_option_ia_pd()
442 if (options->clientid) { in dhcpv6_calculate_message_size()
447 if (options->serverid) { in dhcpv6_calculate_message_size()
452 if (options->elapsed_time) { in dhcpv6_calculate_message_size()
457 if (options->ia_na) { in dhcpv6_calculate_message_size()
462 if (options->iaaddr) { in dhcpv6_calculate_message_size()
467 if (options->ia_pd) { in dhcpv6_calculate_message_size()
472 if (options->iaprefix) { in dhcpv6_calculate_message_size()
477 for (uint8_t i = 0; i < ARRAY_SIZE(options->oro); i++) { in dhcpv6_calculate_message_size()
478 if (options->oro[i] == 0) { in dhcpv6_calculate_message_size()
499 if (options->clientid) { in dhcpv6_add_options()
501 pkt, &iface->config.dhcpv6.clientid); in dhcpv6_add_options()
507 if (options->serverid) { in dhcpv6_add_options()
509 pkt, &iface->config.dhcpv6.serverid); in dhcpv6_add_options()
515 if (options->elapsed_time) { in dhcpv6_add_options()
517 pkt, iface->config.dhcpv6.exchange_start); in dhcpv6_add_options()
523 if (options->ia_na) { in dhcpv6_add_options()
525 .iaid = iface->config.dhcpv6.addr_iaid, in dhcpv6_add_options()
528 if (options->iaaddr) { in dhcpv6_add_options()
529 memcpy(&ia_na.iaaddr.addr, &iface->config.dhcpv6.addr, in dhcpv6_add_options()
533 ret = dhcpv6_add_option_ia_na(pkt, &ia_na, options->iaaddr); in dhcpv6_add_options()
539 if (options->ia_pd) { in dhcpv6_add_options()
541 .iaid = iface->config.dhcpv6.prefix_iaid, in dhcpv6_add_options()
544 if (options->iaprefix) { in dhcpv6_add_options()
545 memcpy(&ia_pd.iaprefix.prefix, &iface->config.dhcpv6.prefix, in dhcpv6_add_options()
547 ia_pd.iaprefix.prefix_len = iface->config.dhcpv6.prefix_len; in dhcpv6_add_options()
550 ret = dhcpv6_add_option_ia_pd(pkt, &ia_pd, options->iaprefix); in dhcpv6_add_options()
556 for (uint8_t i = 0; i < ARRAY_SIZE(options->oro); i++) { in dhcpv6_add_options()
557 if (options->oro[i] == 0) { in dhcpv6_add_options()
565 ret = dhcpv6_add_option_oro(pkt, options->oro, oro_cnt); in dhcpv6_add_options()
607 if (dhcpv6_add_header(pkt, msg_type, iface->config.dhcpv6.tid) < 0) { in dhcpv6_create_message()
633 .ia_na = iface->config.dhcpv6.params.request_addr, in dhcpv6_send_solicit()
634 .ia_pd = iface->config.dhcpv6.params.request_prefix, in dhcpv6_send_solicit()
645 return -ENOMEM; in dhcpv6_send_solicit()
664 .ia_na = iface->config.dhcpv6.params.request_addr, in dhcpv6_send_request()
665 .ia_pd = iface->config.dhcpv6.params.request_prefix, in dhcpv6_send_request()
676 return -ENOMEM; in dhcpv6_send_request()
695 .ia_na = iface->config.dhcpv6.params.request_addr, in dhcpv6_send_renew()
696 .iaaddr = iface->config.dhcpv6.params.request_addr, in dhcpv6_send_renew()
697 .ia_pd = iface->config.dhcpv6.params.request_prefix, in dhcpv6_send_renew()
698 .iaprefix = iface->config.dhcpv6.params.request_prefix, in dhcpv6_send_renew()
704 return -ENOMEM; in dhcpv6_send_renew()
722 .ia_na = iface->config.dhcpv6.params.request_addr, in dhcpv6_send_rebind()
723 .iaaddr = iface->config.dhcpv6.params.request_addr, in dhcpv6_send_rebind()
724 .ia_pd = iface->config.dhcpv6.params.request_prefix, in dhcpv6_send_rebind()
725 .iaprefix = iface->config.dhcpv6.params.request_prefix, in dhcpv6_send_rebind()
731 return -ENOMEM; in dhcpv6_send_rebind()
755 return -ENOMEM; in dhcpv6_send_confirm()
776 return -EMSGSIZE; in dhcpv6_parse_option_clientid()
784 clientid->length = length; in dhcpv6_parse_option_clientid()
785 memcpy(&clientid->duid, &duid, length); in dhcpv6_parse_option_clientid()
798 return -EMSGSIZE; in dhcpv6_parse_option_serverid()
806 serverid->length = length; in dhcpv6_parse_option_serverid()
807 memcpy(&serverid->duid, &duid, length); in dhcpv6_parse_option_serverid()
816 return -EBADMSG; in dhcpv6_parse_option_preference()
820 return -EBADMSG; in dhcpv6_parse_option_preference()
833 return -EMSGSIZE; in dhcpv6_parse_option_status_code()
843 length -= DHCPV6_OPTION_STATUS_CODE_HEADER_SIZE; in dhcpv6_parse_option_status_code()
859 return -EMSGSIZE; in dhcpv6_parse_option_iaaddr()
862 ret = net_pkt_read(pkt, &iaaddr->addr, sizeof(iaaddr->addr)); in dhcpv6_parse_option_iaaddr()
867 ret = net_pkt_read_be32(pkt, &iaaddr->preferred_lifetime); in dhcpv6_parse_option_iaaddr()
872 ret = net_pkt_read_be32(pkt, &iaaddr->valid_lifetime); in dhcpv6_parse_option_iaaddr()
880 if (iaaddr->preferred_lifetime > iaaddr->valid_lifetime) { in dhcpv6_parse_option_iaaddr()
881 return -EBADMSG; in dhcpv6_parse_option_iaaddr()
885 net_sprint_ipv6_addr(&iaaddr->addr), iaaddr->preferred_lifetime, in dhcpv6_parse_option_iaaddr()
886 iaaddr->valid_lifetime); in dhcpv6_parse_option_iaaddr()
888 iaaddr->status = DHCPV6_STATUS_SUCCESS; in dhcpv6_parse_option_iaaddr()
890 length -= DHCPV6_OPTION_IAADDR_HEADER_SIZE; in dhcpv6_parse_option_iaaddr()
907 &iaaddr->status); in dhcpv6_parse_option_iaaddr()
924 length -= (sublen + 4); in dhcpv6_parse_option_iaaddr()
937 return -EMSGSIZE; in dhcpv6_parse_option_ia_na()
940 ret = net_pkt_read_be32(pkt, &ia_na->iaid); in dhcpv6_parse_option_ia_na()
945 ret = net_pkt_read_be32(pkt, &ia_na->t1); in dhcpv6_parse_option_ia_na()
950 ret = net_pkt_read_be32(pkt, &ia_na->t2); in dhcpv6_parse_option_ia_na()
960 if (ia_na->t1 != 0 && ia_na->t2 != 0 && ia_na->t1 > ia_na->t2) { in dhcpv6_parse_option_ia_na()
961 return -ENOENT; in dhcpv6_parse_option_ia_na()
964 NET_DBG("iaid %d t1 %d t2 %d", ia_na->iaid, ia_na->t1, ia_na->t2); in dhcpv6_parse_option_ia_na()
970 ia_na->iaaddr.status = DHCPV6_STATUS_NO_ADDR_AVAIL; in dhcpv6_parse_option_ia_na()
971 ia_na->status = DHCPV6_STATUS_SUCCESS; in dhcpv6_parse_option_ia_na()
973 length -= DHCPV6_OPTION_IA_NA_HEADER_SIZE; in dhcpv6_parse_option_ia_na()
990 &ia_na->iaaddr); in dhcpv6_parse_option_ia_na()
999 &ia_na->status); in dhcpv6_parse_option_ia_na()
1017 length -= (sublen + 4); in dhcpv6_parse_option_ia_na()
1030 return -EMSGSIZE; in dhcpv6_parse_option_iaprefix()
1033 ret = net_pkt_read_be32(pkt, &iaprefix->preferred_lifetime); in dhcpv6_parse_option_iaprefix()
1038 ret = net_pkt_read_be32(pkt, &iaprefix->valid_lifetime); in dhcpv6_parse_option_iaprefix()
1043 ret = net_pkt_read_u8(pkt, &iaprefix->prefix_len); in dhcpv6_parse_option_iaprefix()
1048 ret = net_pkt_read(pkt, &iaprefix->prefix, sizeof(iaprefix->prefix)); in dhcpv6_parse_option_iaprefix()
1056 if (iaprefix->preferred_lifetime > iaprefix->valid_lifetime) { in dhcpv6_parse_option_iaprefix()
1057 return -EBADMSG; in dhcpv6_parse_option_iaprefix()
1061 net_sprint_ipv6_addr(&iaprefix->prefix), iaprefix->prefix_len, in dhcpv6_parse_option_iaprefix()
1062 iaprefix->preferred_lifetime, iaprefix->valid_lifetime); in dhcpv6_parse_option_iaprefix()
1064 iaprefix->status = DHCPV6_STATUS_SUCCESS; in dhcpv6_parse_option_iaprefix()
1066 length -= DHCPV6_OPTION_IAPREFIX_HEADER_SIZE; in dhcpv6_parse_option_iaprefix()
1083 &iaprefix->status); in dhcpv6_parse_option_iaprefix()
1100 length -= (sublen + 4); in dhcpv6_parse_option_iaprefix()
1113 return -EMSGSIZE; in dhcpv6_parse_option_ia_pd()
1116 ret = net_pkt_read_be32(pkt, &ia_pd->iaid); in dhcpv6_parse_option_ia_pd()
1121 ret = net_pkt_read_be32(pkt, &ia_pd->t1); in dhcpv6_parse_option_ia_pd()
1126 ret = net_pkt_read_be32(pkt, &ia_pd->t2); in dhcpv6_parse_option_ia_pd()
1136 if (ia_pd->t1 != 0 && ia_pd->t2 != 0 && ia_pd->t1 > ia_pd->t2) { in dhcpv6_parse_option_ia_pd()
1137 return -ENOENT; in dhcpv6_parse_option_ia_pd()
1140 NET_DBG("iaid %d t1 %d t2 %d", ia_pd->iaid, ia_pd->t1, ia_pd->t2); in dhcpv6_parse_option_ia_pd()
1146 ia_pd->iaprefix.status = DHCPV6_STATUS_NO_PREFIX_AVAIL; in dhcpv6_parse_option_ia_pd()
1147 ia_pd->status = DHCPV6_STATUS_SUCCESS; in dhcpv6_parse_option_ia_pd()
1149 length -= DHCPV6_OPTION_IA_PD_HEADER_SIZE; in dhcpv6_parse_option_ia_pd()
1166 &ia_pd->iaprefix); in dhcpv6_parse_option_ia_pd()
1175 &ia_pd->status); in dhcpv6_parse_option_ia_pd()
1192 length -= (sublen + 4); in dhcpv6_parse_option_ia_pd()
1209 return -EMSGSIZE; in dhcpv6_parse_option_dns_servers()
1222 length -= addr_size; in dhcpv6_parse_option_dns_servers()
1243 return -EBADMSG; in dhcpv6_find_option()
1257 return -ENOENT; in dhcpv6_find_option()
1310 } else if (ret == -ENOENT) { in dhcpv6_find_server_preference()
1370 } else if (ret == -ENOENT) { in dhcpv6_find_status_code()
1431 uint32_t timeout; in dhcpv6_enter_init() local
1436 timeout = sys_rand32_get() % DHCPV6_SOL_MAX_DELAY; in dhcpv6_enter_init()
1438 dhcpv6_set_timeout(iface, timeout); in dhcpv6_enter_init()
1443 iface->config.dhcpv6.retransmit_timeout = in dhcpv6_enter_soliciting()
1445 iface->config.dhcpv6.retransmissions = 0; in dhcpv6_enter_soliciting()
1446 iface->config.dhcpv6.server_preference = -1; in dhcpv6_enter_soliciting()
1447 iface->config.dhcpv6.exchange_start = k_uptime_get(); in dhcpv6_enter_soliciting()
1450 dhcpv6_set_timeout(iface, iface->config.dhcpv6.retransmit_timeout); in dhcpv6_enter_soliciting()
1455 iface->config.dhcpv6.retransmit_timeout = in dhcpv6_enter_requesting()
1457 iface->config.dhcpv6.retransmissions = 0; in dhcpv6_enter_requesting()
1458 iface->config.dhcpv6.exchange_start = k_uptime_get(); in dhcpv6_enter_requesting()
1461 dhcpv6_set_timeout(iface, iface->config.dhcpv6.retransmit_timeout); in dhcpv6_enter_requesting()
1466 iface->config.dhcpv6.retransmit_timeout = in dhcpv6_enter_renewing()
1468 iface->config.dhcpv6.retransmissions = 0; in dhcpv6_enter_renewing()
1469 iface->config.dhcpv6.exchange_start = k_uptime_get(); in dhcpv6_enter_renewing()
1472 dhcpv6_set_timeout(iface, iface->config.dhcpv6.retransmit_timeout); in dhcpv6_enter_renewing()
1477 iface->config.dhcpv6.retransmit_timeout = in dhcpv6_enter_rebinding()
1479 iface->config.dhcpv6.retransmissions = 0; in dhcpv6_enter_rebinding()
1480 iface->config.dhcpv6.exchange_start = k_uptime_get(); in dhcpv6_enter_rebinding()
1483 dhcpv6_set_timeout(iface, iface->config.dhcpv6.retransmit_timeout); in dhcpv6_enter_rebinding()
1488 iface->config.dhcpv6.retransmit_timeout = in dhcpv6_enter_confirming()
1490 iface->config.dhcpv6.retransmissions = 0; in dhcpv6_enter_confirming()
1491 iface->config.dhcpv6.exchange_start = k_uptime_get(); in dhcpv6_enter_confirming()
1494 dhcpv6_set_timeout(iface, iface->config.dhcpv6.retransmit_timeout); in dhcpv6_enter_confirming()
1499 iface->config.dhcpv6.timeout = iface->config.dhcpv6.t1; in dhcpv6_enter_bound()
1502 &iface->config.dhcpv6, in dhcpv6_enter_bound()
1503 sizeof(iface->config.dhcpv6)); in dhcpv6_enter_bound()
1508 iface->config.dhcpv6.state = state; in dhcpv6_enter_state()
1511 net_dhcpv6_state_name(iface->config.dhcpv6.state)); in dhcpv6_enter_state()
1513 switch (iface->config.dhcpv6.state) { in dhcpv6_enter_state()
1554 if (iface->config.dhcpv6.state != NET_DHCPV6_SOLICITING) { in dhcpv6_handle_advertise()
1555 return -EINVAL; in dhcpv6_handle_advertise()
1565 if (iface->config.dhcpv6.clientid.length != duid.length || in dhcpv6_handle_advertise()
1566 memcmp(&iface->config.dhcpv6.clientid.duid, &duid.duid, in dhcpv6_handle_advertise()
1567 iface->config.dhcpv6.clientid.length) != 0) { in dhcpv6_handle_advertise()
1569 return -EBADMSG; in dhcpv6_handle_advertise()
1581 if (memcmp(iface->config.dhcpv6.tid, tid, in dhcpv6_handle_advertise()
1582 sizeof(iface->config.dhcpv6.tid)) != 0) { in dhcpv6_handle_advertise()
1584 return -EBADMSG; in dhcpv6_handle_advertise()
1606 if ((int16_t)server_preference < iface->config.dhcpv6.server_preference) { in dhcpv6_handle_advertise()
1612 if (iface->config.dhcpv6.params.request_addr) { in dhcpv6_handle_advertise()
1627 if (iface->config.dhcpv6.params.request_prefix) { in dhcpv6_handle_advertise()
1642 memcpy(&iface->config.dhcpv6.serverid, &duid, in dhcpv6_handle_advertise()
1643 sizeof(iface->config.dhcpv6.serverid)); in dhcpv6_handle_advertise()
1644 iface->config.dhcpv6.server_preference = server_preference; in dhcpv6_handle_advertise()
1652 iface->config.dhcpv6.retransmissions > 0) { in dhcpv6_handle_advertise()
1672 if (iface->config.dhcpv6.state != NET_DHCPV6_REQUESTING && in dhcpv6_handle_reply()
1673 iface->config.dhcpv6.state != NET_DHCPV6_CONFIRMING && in dhcpv6_handle_reply()
1674 iface->config.dhcpv6.state != NET_DHCPV6_RENEWING && in dhcpv6_handle_reply()
1675 iface->config.dhcpv6.state != NET_DHCPV6_REBINDING) { in dhcpv6_handle_reply()
1676 return -EINVAL; in dhcpv6_handle_reply()
1686 if (iface->config.dhcpv6.clientid.length != duid.length || in dhcpv6_handle_reply()
1687 memcmp(&iface->config.dhcpv6.clientid.duid, &duid.duid, in dhcpv6_handle_reply()
1688 iface->config.dhcpv6.clientid.length) != 0) { in dhcpv6_handle_reply()
1690 return -EBADMSG; in dhcpv6_handle_reply()
1702 if (memcmp(iface->config.dhcpv6.tid, tid, in dhcpv6_handle_reply()
1703 sizeof(iface->config.dhcpv6.tid)) != 0) { in dhcpv6_handle_reply()
1705 return -EBADMSG; in dhcpv6_handle_reply()
1728 if (iface->config.dhcpv6.state == NET_DHCPV6_REQUESTING && in dhcpv6_handle_reply()
1737 if (iface->config.dhcpv6.state == NET_DHCPV6_CONFIRMING) { in dhcpv6_handle_reply()
1746 if (iface->config.dhcpv6.params.request_addr) { in dhcpv6_handle_reply()
1753 if (iface->config.dhcpv6.addr_iaid != ia_na.iaid) { in dhcpv6_handle_reply()
1754 return -EBADMSG; in dhcpv6_handle_reply()
1759 if (iface->config.dhcpv6.params.request_prefix) { in dhcpv6_handle_reply()
1766 if (iface->config.dhcpv6.prefix_iaid != ia_pd.iaid) { in dhcpv6_handle_reply()
1767 return -EBADMSG; in dhcpv6_handle_reply()
1772 iface->config.dhcpv6.t1 = UINT64_MAX; in dhcpv6_handle_reply()
1773 iface->config.dhcpv6.t2 = UINT64_MAX; in dhcpv6_handle_reply()
1774 iface->config.dhcpv6.expire = now; in dhcpv6_handle_reply()
1776 if (iface->config.dhcpv6.params.request_addr) { in dhcpv6_handle_reply()
1783 net_if_ipv6_addr_rm(iface, &iface->config.dhcpv6.addr); in dhcpv6_handle_reply()
1784 memset(&iface->config.dhcpv6.addr, 0, sizeof(struct in6_addr)); in dhcpv6_handle_reply()
1791 if (!net_ipv6_addr_cmp(&iface->config.dhcpv6.addr, in dhcpv6_handle_reply()
1793 !net_ipv6_addr_cmp(&iface->config.dhcpv6.addr, in dhcpv6_handle_reply()
1796 net_if_ipv6_addr_rm(iface, &iface->config.dhcpv6.addr); in dhcpv6_handle_reply()
1799 memcpy(&iface->config.dhcpv6.addr, &ia_na.iaaddr.addr, in dhcpv6_handle_reply()
1800 sizeof(iface->config.dhcpv6.addr)); in dhcpv6_handle_reply()
1814 return -EFAULT; in dhcpv6_handle_reply()
1819 if (iface->config.dhcpv6.params.request_prefix) { in dhcpv6_handle_reply()
1826 net_if_ipv6_prefix_rm(iface, &iface->config.dhcpv6.prefix, in dhcpv6_handle_reply()
1827 iface->config.dhcpv6.prefix_len); in dhcpv6_handle_reply()
1828 memset(&iface->config.dhcpv6.prefix, 0, sizeof(struct in6_addr)); in dhcpv6_handle_reply()
1829 iface->config.dhcpv6.prefix_len = 0; in dhcpv6_handle_reply()
1834 if (!net_ipv6_addr_cmp(&iface->config.dhcpv6.prefix, in dhcpv6_handle_reply()
1836 (!net_ipv6_addr_cmp(&iface->config.dhcpv6.prefix, in dhcpv6_handle_reply()
1838 iface->config.dhcpv6.prefix_len != ia_pd.iaprefix.prefix_len)) { in dhcpv6_handle_reply()
1840 net_if_ipv6_prefix_rm(iface, &iface->config.dhcpv6.prefix, in dhcpv6_handle_reply()
1841 iface->config.dhcpv6.prefix_len); in dhcpv6_handle_reply()
1844 iface->config.dhcpv6.prefix_len = ia_pd.iaprefix.prefix_len; in dhcpv6_handle_reply()
1846 memcpy(&iface->config.dhcpv6.prefix, &ia_pd.iaprefix.prefix, in dhcpv6_handle_reply()
1847 sizeof(iface->config.dhcpv6.prefix)); in dhcpv6_handle_reply()
1862 return -EFAULT; in dhcpv6_handle_reply()
1889 return -ENOTSUP; in dhcpv6_handle_reconfigure()
1979 uint64_t timeout = iface->config.dhcpv6.timeout; in dhcpv6_timeleft() local
1981 if (timeout > now) { in dhcpv6_timeleft()
1982 return timeout - now; in dhcpv6_timeleft()
1993 net_dhcpv6_state_name(iface->config.dhcpv6.state), timeleft); in dhcpv6_manage_timers()
1996 return iface->config.dhcpv6.timeout; in dhcpv6_manage_timers()
2006 switch (iface->config.dhcpv6.state) { in dhcpv6_manage_timers()
2013 if (iface->config.dhcpv6.params.request_addr && in dhcpv6_manage_timers()
2014 !net_ipv6_addr_cmp(&iface->config.dhcpv6.addr, in dhcpv6_manage_timers()
2019 if (iface->config.dhcpv6.params.request_prefix && in dhcpv6_manage_timers()
2020 !net_ipv6_addr_cmp(&iface->config.dhcpv6.prefix, in dhcpv6_manage_timers()
2025 if ((have_addr || have_prefix) && now < iface->config.dhcpv6.expire) { in dhcpv6_manage_timers()
2030 iface->config.dhcpv6.expire = now + DHCPV6_CNF_MAX_RD; in dhcpv6_manage_timers()
2032 if (!iface->config.dhcpv6.params.request_prefix) { in dhcpv6_manage_timers()
2041 return iface->config.dhcpv6.timeout; in dhcpv6_manage_timers()
2044 if (iface->config.dhcpv6.server_preference >= 0) { in dhcpv6_manage_timers()
2046 return iface->config.dhcpv6.timeout; in dhcpv6_manage_timers()
2049 iface->config.dhcpv6.retransmissions++; in dhcpv6_manage_timers()
2050 iface->config.dhcpv6.retransmit_timeout = in dhcpv6_manage_timers()
2052 iface->config.dhcpv6.retransmit_timeout, in dhcpv6_manage_timers()
2056 dhcpv6_set_timeout(iface, iface->config.dhcpv6.retransmit_timeout); in dhcpv6_manage_timers()
2058 return iface->config.dhcpv6.timeout; in dhcpv6_manage_timers()
2060 if (iface->config.dhcpv6.retransmissions >= DHCPV6_REQ_MAX_RC) { in dhcpv6_manage_timers()
2063 return iface->config.dhcpv6.timeout; in dhcpv6_manage_timers()
2066 iface->config.dhcpv6.retransmissions++; in dhcpv6_manage_timers()
2067 iface->config.dhcpv6.retransmit_timeout = in dhcpv6_manage_timers()
2069 iface->config.dhcpv6.retransmit_timeout, in dhcpv6_manage_timers()
2073 dhcpv6_set_timeout(iface, iface->config.dhcpv6.retransmit_timeout); in dhcpv6_manage_timers()
2075 return iface->config.dhcpv6.timeout; in dhcpv6_manage_timers()
2077 if (now >= iface->config.dhcpv6.expire) { in dhcpv6_manage_timers()
2079 return iface->config.dhcpv6.timeout; in dhcpv6_manage_timers()
2082 iface->config.dhcpv6.retransmissions++; in dhcpv6_manage_timers()
2083 iface->config.dhcpv6.retransmit_timeout = in dhcpv6_manage_timers()
2085 iface->config.dhcpv6.retransmit_timeout, in dhcpv6_manage_timers()
2089 dhcpv6_set_timeout(iface, iface->config.dhcpv6.retransmit_timeout); in dhcpv6_manage_timers()
2091 if (iface->config.dhcpv6.timeout > iface->config.dhcpv6.expire) { in dhcpv6_manage_timers()
2092 iface->config.dhcpv6.timeout = iface->config.dhcpv6.expire; in dhcpv6_manage_timers()
2095 return iface->config.dhcpv6.timeout; in dhcpv6_manage_timers()
2097 if (now >= iface->config.dhcpv6.t2) { in dhcpv6_manage_timers()
2099 return iface->config.dhcpv6.timeout; in dhcpv6_manage_timers()
2102 iface->config.dhcpv6.retransmissions++; in dhcpv6_manage_timers()
2103 iface->config.dhcpv6.retransmit_timeout = in dhcpv6_manage_timers()
2105 iface->config.dhcpv6.retransmit_timeout, in dhcpv6_manage_timers()
2109 dhcpv6_set_timeout(iface, iface->config.dhcpv6.retransmit_timeout); in dhcpv6_manage_timers()
2111 if (iface->config.dhcpv6.timeout > iface->config.dhcpv6.t2) { in dhcpv6_manage_timers()
2112 iface->config.dhcpv6.timeout = iface->config.dhcpv6.t2; in dhcpv6_manage_timers()
2115 return iface->config.dhcpv6.timeout; in dhcpv6_manage_timers()
2117 if (now >= iface->config.dhcpv6.expire) { in dhcpv6_manage_timers()
2119 return iface->config.dhcpv6.timeout; in dhcpv6_manage_timers()
2122 iface->config.dhcpv6.retransmissions++; in dhcpv6_manage_timers()
2123 iface->config.dhcpv6.retransmit_timeout = in dhcpv6_manage_timers()
2125 iface->config.dhcpv6.retransmit_timeout, in dhcpv6_manage_timers()
2129 dhcpv6_set_timeout(iface, iface->config.dhcpv6.retransmit_timeout); in dhcpv6_manage_timers()
2131 if (iface->config.dhcpv6.timeout > iface->config.dhcpv6.expire) { in dhcpv6_manage_timers()
2132 iface->config.dhcpv6.timeout = iface->config.dhcpv6.expire; in dhcpv6_manage_timers()
2135 return iface->config.dhcpv6.timeout; in dhcpv6_manage_timers()
2140 return iface->config.dhcpv6.timeout; in dhcpv6_manage_timers()
2174 timeout_update -= now; in dhcpv6_timeout()
2190 if (node == &iface->config.dhcpv6.node) { in dhcpv6_iface_event_handler()
2216 struct net_dhcpv6_duid_storage *clientid = &iface->config.dhcpv6.clientid; in dhcpv6_generate_client_duid()
2218 (struct dhcpv6_duid_ll *)&clientid->duid.buf; in dhcpv6_generate_client_duid()
2222 UNALIGNED_PUT(htons(DHCPV6_DUID_TYPE_LL), &clientid->duid.type); in dhcpv6_generate_client_duid()
2223 UNALIGNED_PUT(htons(DHCPV6_HARDWARE_ETHERNET_TYPE), &duid_ll->hw_type); in dhcpv6_generate_client_duid()
2224 memcpy(duid_ll->ll_addr, lladdr->addr, lladdr->len); in dhcpv6_generate_client_duid()
2226 clientid->length = DHCPV6_DUID_LL_HEADER_SIZE + lladdr->len; in dhcpv6_generate_client_duid()
2235 if (iface->config.dhcpv6.state != NET_DHCPV6_DISABLED) { in net_dhcpv6_start()
2237 net_dhcpv6_state_name(iface->config.dhcpv6.state)); in net_dhcpv6_start()
2241 if (!params->request_addr && !params->request_prefix) { in net_dhcpv6_start()
2250 iface->config.dhcpv6.params = *params; in net_dhcpv6_start()
2256 sys_slist_append(&dhcpv6_ifaces, &iface->config.dhcpv6.node); in net_dhcpv6_start()
2258 if (params->request_addr) { in net_dhcpv6_start()
2259 iface->config.dhcpv6.addr_iaid = net_if_get_by_iface(iface); in net_dhcpv6_start()
2262 if (params->request_prefix) { in net_dhcpv6_start()
2263 iface->config.dhcpv6.prefix_iaid = net_if_get_by_iface(iface); in net_dhcpv6_start()
2278 switch (iface->config.dhcpv6.state) { in net_dhcpv6_stop()
2292 net_dhcpv6_state_name(iface->config.dhcpv6.state)); in net_dhcpv6_stop()
2297 &iface->config.dhcpv6.node); in net_dhcpv6_stop()
2314 struct net_dhcpv6_params params = iface->config.dhcpv6.params; in net_dhcpv6_restart()
2325 net_ipaddr_copy(&net_sin6(&unspec_addr)->sin6_addr, in net_dhcpv6_init()