| /* |
| * Copyright (c) 2023 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** @file |
| * @brief DHCPv6 client |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_NET_DHCPV6_H_ |
| #define ZEPHYR_INCLUDE_NET_DHCPV6_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /** |
| * @brief DHCPv6 |
| * @defgroup dhcpv6 DHCPv6 |
| * @ingroup networking |
| * @{ |
| */ |
| |
| /** @cond INTERNAL_HIDDEN */ |
| |
| /** Current state of DHCPv6 client address/prefix negotiation. */ |
| enum net_dhcpv6_state { |
| NET_DHCPV6_DISABLED, |
| NET_DHCPV6_INIT, |
| NET_DHCPV6_SOLICITING, |
| NET_DHCPV6_REQUESTING, |
| NET_DHCPV6_CONFIRMING, |
| NET_DHCPV6_RENEWING, |
| NET_DHCPV6_REBINDING, |
| NET_DHCPV6_INFO_REQUESTING, |
| NET_DHCPV6_BOUND, |
| } __packed; |
| |
| #define DHCPV6_TID_SIZE 3 |
| #define DHCPV6_DUID_MAX_SIZE 20 |
| |
| struct net_dhcpv6_duid_raw { |
| uint16_t type; |
| uint8_t buf[DHCPV6_DUID_MAX_SIZE]; |
| } __packed; |
| |
| struct net_dhcpv6_duid_storage { |
| struct net_dhcpv6_duid_raw duid; |
| uint8_t length; |
| }; |
| |
| struct net_if; |
| |
| /** @endcond */ |
| |
| /** @brief DHCPv6 client configuration parameters. */ |
| struct net_dhcpv6_params { |
| bool request_addr : 1; /**< Request IPv6 address. */ |
| bool request_prefix : 1; /**< Request IPv6 prefix. */ |
| }; |
| |
| /** |
| * @brief Start DHCPv6 client on an iface |
| * |
| * @details Start DHCPv6 client on a given interface. DHCPv6 client will start |
| * negotiation for IPv6 address and/or prefix, depending on the configuration. |
| * Once the negotiation is complete, IPv6 address/prefix details will be added |
| * to the interface. |
| * |
| * @param iface A valid pointer to a network interface |
| * @param params DHCPv6 client configuration parameters. |
| */ |
| void net_dhcpv6_start(struct net_if *iface, struct net_dhcpv6_params *params); |
| |
| /** |
| * @brief Stop DHCPv6 client on an iface |
| * |
| * @details Stop DHCPv6 client on a given interface. DHCPv6 client |
| * will remove all configuration obtained from a DHCP server from the |
| * interface and stop any further negotiation with the server. |
| * |
| * @param iface A valid pointer to a network interface |
| */ |
| void net_dhcpv6_stop(struct net_if *iface); |
| |
| /** |
| * @brief Restart DHCPv6 client on an iface |
| * |
| * @details Restart DHCPv6 client on a given interface. DHCPv6 client |
| * will restart the state machine without any of the initial delays. |
| * |
| * @param iface A valid pointer to a network interface |
| */ |
| void net_dhcpv6_restart(struct net_if *iface); |
| |
| /** @cond INTERNAL_HIDDEN */ |
| |
| /** |
| * @brief DHCPv6 state name |
| * |
| * @internal |
| */ |
| const char *net_dhcpv6_state_name(enum net_dhcpv6_state state); |
| |
| /** @endcond */ |
| |
| /** |
| * @} |
| */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* ZEPHYR_INCLUDE_NET_DHCPV6_H_ */ |