blob: 95b59f530b59c80438148a9e813a7386b4564ee5 [file] [log] [blame]
/*
* 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_ */