iPXE
dhcpv6.h File Reference

Dynamic Host Configuration Protocol for IPv6. More...

#include <stdint.h>
#include <ipxe/in.h>
#include <ipxe/uuid.h>

Go to the source code of this file.

Data Structures

struct  dhcpv6_option
 A DHCPv6 option. More...
struct  dhcpv6_duid_uuid
 DHCP unique identifier based on UUID (DUID-UUID). More...
struct  dhcpv6_duid_option
 DHCPv6 client or server identifier option. More...
struct  dhcpv6_ia_na_option
 DHCPv6 identity association for non-temporary address (IA_NA) option. More...
struct  dhcpv6_iaaddr_option
 DHCPv6 identity association address (IAADDR) option. More...
struct  dhcpv6_option_request_option
 DHCPv6 option request option. More...
struct  dhcpv6_elapsed_time_option
 DHCPv6 elapsed time option. More...
struct  dhcpv6_status_code_option
 DHCPv6 status code option. More...
struct  dhcpv6_user_class
 DHCPv6 user class. More...
struct  dhcpv6_user_class_option
 DHCPv6 user class option. More...
union  dhcpv6_any_option
 Any DHCPv6 option. More...
struct  dhcpv6_header
 A DHCPv6 header. More...

Macros

#define DHCPV6_SERVER_PORT   547
 DHCPv6 server port.
#define DHCPV6_CLIENT_PORT   546
 DHCPv6 client port.
#define DHCPV6_DUID_UUID   4
 DHCP unique identifier based on UUID (DUID-UUID).
#define DHCPV6_CLIENT_ID   1
 DHCPv6 client identifier option.
#define DHCPV6_SERVER_ID   2
 DHCPv6 server identifier option.
#define DHCPV6_IA_NA   3
 DHCPv6 identity association for non-temporary address (IA_NA) option.
#define DHCPV6_IAADDR   5
 DHCPv6 identity association address (IAADDR) option.
#define DHCPV6_OPTION_REQUEST   6
 DHCPv6 option request option.
#define DHCPV6_ELAPSED_TIME   8
 DHCPv6 elapsed time option.
#define DHCPV6_STATUS_CODE   13
 DHCPv6 status code option.
#define DHCPV6_USER_CLASS   15
 DHCPv6 user class option.
#define DHCPV6_VENDOR_CLASS   16
 DHCPv6 vendor class option.
#define DHCPV6_VENDOR_CLASS_PXE   343
 DHCPv6 PXE vendor class.
#define DHCPV6_DNS_SERVERS   23
 DHCPv6 DNS recursive name server option.
#define DHCPV6_DOMAIN_LIST   24
 DHCPv6 domain search list option.
#define DHCPV6_BOOTFILE_URL   59
 DHCPv6 bootfile URI option.
#define DHCPV6_BOOTFILE_PARAM   60
 DHCPv6 bootfile parameters option.
#define DHCPV6_CLIENT_ARCHITECTURE   61
 DHCPv6 client system architecture option.
#define DHCPV6_CLIENT_NDI   62
 DHCPv6 client network interface identifier option.
#define DHCPV6_LOG_SERVERS   0xffffffffUL
 DHCPv6 syslog server option.
#define DHCPV6_BYTE_VALUE(value)
 Construct a DHCPv6 byte value.
#define DHCPV6_WORD_VALUE(value)
 Construct a DHCPv6 word value.
#define DHCPV6_DWORD_VALUE(value)
 Construct a DHCPv6 dword value.
#define DHCPV6_CODE(code)
 Construct a DHCPv6 option code.
#define DHCPV6_LEN(len)
 Construct a DHCPv6 option length.
#define DHCPV6_OPTION(...)
 Construct a DHCPv6 option from a list of bytes.
#define DHCPV6_STRING(...)
 Construct a DHCPv6 option from a list of characters.
#define DHCPV6_BYTE(value)
 Construct a byte-valued DHCPv6 option.
#define DHCPV6_WORD(value)
 Construct a word-valued DHCPv6 option.
#define DHCPV6_DWORD(value)
 Construct a dword-valued DHCPv6 option.
#define DHCPV6_SOLICIT   1
 DHCPv6 solicitation.
#define DHCPV6_ADVERTISE   2
 DHCPv6 advertisement.
#define DHCPV6_REQUEST   3
 DHCPv6 request.
#define DHCPV6_REPLY   7
 DHCPv6 reply.
#define DHCPV6_INFORMATION_REQUEST   11
 DHCPv6 information request.
#define DHCPV6_SETTINGS_NAME   "dhcpv6"
 DHCPv6 settings block name.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
static void ipv6_all_dhcp_relay_and_servers (struct in6_addr *addr)
 Construct all-DHCP-relay-agents-and-servers multicast address.
int start_dhcpv6 (struct interface *job, struct net_device *netdev, struct in6_addr *router, int stateful)
 Start DHCPv6.

Detailed Description

Dynamic Host Configuration Protocol for IPv6.

Definition in file dhcpv6.h.

Macro Definition Documentation

◆ DHCPV6_SERVER_PORT

#define DHCPV6_SERVER_PORT   547

DHCPv6 server port.

Definition at line 18 of file dhcpv6.h.

Referenced by start_dhcpv6().

◆ DHCPV6_CLIENT_PORT

#define DHCPV6_CLIENT_PORT   546

DHCPv6 client port.

Definition at line 21 of file dhcpv6.h.

Referenced by start_dhcpv6().

◆ DHCPV6_DUID_UUID

#define DHCPV6_DUID_UUID   4

DHCP unique identifier based on UUID (DUID-UUID).

Definition at line 45 of file dhcpv6.h.

Referenced by start_dhcpv6().

◆ DHCPV6_CLIENT_ID

#define DHCPV6_CLIENT_ID   1

DHCPv6 client identifier option.

Definition at line 56 of file dhcpv6.h.

Referenced by dhcpv6_rx(), and dhcpv6_tx().

◆ DHCPV6_SERVER_ID

#define DHCPV6_SERVER_ID   2

DHCPv6 server identifier option.

Definition at line 59 of file dhcpv6.h.

Referenced by dhcpv6_rx(), and dhcpv6_tx().

◆ DHCPV6_IA_NA

#define DHCPV6_IA_NA   3

DHCPv6 identity association for non-temporary address (IA_NA) option.

Definition at line 76 of file dhcpv6.h.

Referenced by dhcpv6_iaaddr(), and dhcpv6_tx().

◆ DHCPV6_IAADDR

#define DHCPV6_IAADDR   5

DHCPv6 identity association address (IAADDR) option.

Definition at line 93 of file dhcpv6.h.

Referenced by dhcpv6_iaaddr(), and dhcpv6_tx().

◆ DHCPV6_OPTION_REQUEST

#define DHCPV6_OPTION_REQUEST   6

DHCPv6 option request option.

Definition at line 104 of file dhcpv6.h.

◆ DHCPV6_ELAPSED_TIME

#define DHCPV6_ELAPSED_TIME   8

DHCPv6 elapsed time option.

Definition at line 115 of file dhcpv6.h.

Referenced by dhcpv6_tx().

◆ DHCPV6_STATUS_CODE

#define DHCPV6_STATUS_CODE   13

DHCPv6 status code option.

Definition at line 128 of file dhcpv6.h.

Referenced by dhcpv6_status_code().

◆ DHCPV6_USER_CLASS

#define DHCPV6_USER_CLASS   15

DHCPv6 user class option.

Definition at line 147 of file dhcpv6.h.

Referenced by dhcpv6_tx().

◆ DHCPV6_VENDOR_CLASS

#define DHCPV6_VENDOR_CLASS   16

DHCPv6 vendor class option.

Definition at line 150 of file dhcpv6.h.

◆ DHCPV6_VENDOR_CLASS_PXE

#define DHCPV6_VENDOR_CLASS_PXE   343

DHCPv6 PXE vendor class.

The DHCPv6 vendor class includes a field for an IANA enterprise number. The EDK2 codebase uses the value 343, with the comment:

TODO: IANA TBD: temporarily using Intel's

Since this "temporarily" has applied since at least 2010, we assume that it has become a de facto standard.

Definition at line 162 of file dhcpv6.h.

◆ DHCPV6_DNS_SERVERS

#define DHCPV6_DNS_SERVERS   23

DHCPv6 DNS recursive name server option.

Definition at line 165 of file dhcpv6.h.

Referenced by __setting().

◆ DHCPV6_DOMAIN_LIST

#define DHCPV6_DOMAIN_LIST   24

DHCPv6 domain search list option.

Definition at line 168 of file dhcpv6.h.

Referenced by __setting().

◆ DHCPV6_BOOTFILE_URL

#define DHCPV6_BOOTFILE_URL   59

DHCPv6 bootfile URI option.

Definition at line 171 of file dhcpv6.h.

Referenced by __setting().

◆ DHCPV6_BOOTFILE_PARAM

#define DHCPV6_BOOTFILE_PARAM   60

DHCPv6 bootfile parameters option.

Definition at line 174 of file dhcpv6.h.

◆ DHCPV6_CLIENT_ARCHITECTURE

#define DHCPV6_CLIENT_ARCHITECTURE   61

DHCPv6 client system architecture option.

Definition at line 177 of file dhcpv6.h.

◆ DHCPV6_CLIENT_NDI

#define DHCPV6_CLIENT_NDI   62

DHCPv6 client network interface identifier option.

Definition at line 180 of file dhcpv6.h.

◆ DHCPV6_LOG_SERVERS

#define DHCPV6_LOG_SERVERS   0xffffffffUL

DHCPv6 syslog server option.

This option code has not yet been assigned by IANA. Please update this definition once an option code has been assigned.

Definition at line 187 of file dhcpv6.h.

Referenced by __setting().

◆ DHCPV6_BYTE_VALUE

#define DHCPV6_BYTE_VALUE ( value)
Value:
( (value) & 0xff )
pseudo_bit_t value[0x00020]
Definition arbel.h:2

Construct a DHCPv6 byte value.

Definition at line 190 of file dhcpv6.h.

◆ DHCPV6_WORD_VALUE

#define DHCPV6_WORD_VALUE ( value)
Value:
#define DHCPV6_BYTE_VALUE(value)
Construct a DHCPv6 byte value.
Definition dhcpv6.h:190

Construct a DHCPv6 word value.

Definition at line 193 of file dhcpv6.h.

193#define DHCPV6_WORD_VALUE( value ) \
194 DHCPV6_BYTE_VALUE ( (value) >> 8 ), DHCPV6_BYTE_VALUE ( (value) >> 0 )

◆ DHCPV6_DWORD_VALUE

#define DHCPV6_DWORD_VALUE ( value)
Value:
#define DHCPV6_WORD_VALUE(value)
Construct a DHCPv6 word value.
Definition dhcpv6.h:193

Construct a DHCPv6 dword value.

Definition at line 197 of file dhcpv6.h.

197#define DHCPV6_DWORD_VALUE( value ) \
198 DHCPV6_WORD_VALUE ( (value) >> 16 ), DHCPV6_WORD_VALUE ( (value) >> 0 )

◆ DHCPV6_CODE

#define DHCPV6_CODE ( code)
Value:
static unsigned int code
Definition hyperv.h:26

Construct a DHCPv6 option code.

Definition at line 201 of file dhcpv6.h.

◆ DHCPV6_LEN

#define DHCPV6_LEN ( len)
Value:
ring len
Length.
Definition dwmac.h:226

Construct a DHCPv6 option length.

Definition at line 204 of file dhcpv6.h.

◆ DHCPV6_OPTION

#define DHCPV6_OPTION ( ...)
Value:
DHCPV6_LEN ( VA_ARG_COUNT ( __VA_ARGS__ ) ), __VA_ARGS__
#define DHCPV6_LEN(len)
Construct a DHCPv6 option length.
Definition dhcpv6.h:204
#define VA_ARG_COUNT(...)
Definition stdarg.h:28

Construct a DHCPv6 option from a list of bytes.

Definition at line 207 of file dhcpv6.h.

207#define DHCPV6_OPTION( ... ) \
208 DHCPV6_LEN ( VA_ARG_COUNT ( __VA_ARGS__ ) ), __VA_ARGS__

◆ DHCPV6_STRING

#define DHCPV6_STRING ( ...)
Value:
DHCPV6_OPTION ( __VA_ARGS__ )
#define DHCPV6_OPTION(...)
Construct a DHCPv6 option from a list of bytes.
Definition dhcpv6.h:207

Construct a DHCPv6 option from a list of characters.

Definition at line 211 of file dhcpv6.h.

◆ DHCPV6_BYTE

#define DHCPV6_BYTE ( value)
Value:

Construct a byte-valued DHCPv6 option.

Definition at line 214 of file dhcpv6.h.

◆ DHCPV6_WORD

#define DHCPV6_WORD ( value)
Value:

Construct a word-valued DHCPv6 option.

Definition at line 217 of file dhcpv6.h.

◆ DHCPV6_DWORD

#define DHCPV6_DWORD ( value)
Value:
#define DHCPV6_DWORD_VALUE(value)
Construct a DHCPv6 dword value.
Definition dhcpv6.h:197

Construct a dword-valued DHCPv6 option.

Definition at line 220 of file dhcpv6.h.

◆ DHCPV6_SOLICIT

#define DHCPV6_SOLICIT   1

DHCPv6 solicitation.

Definition at line 251 of file dhcpv6.h.

Referenced by dhcpv6_type_name().

◆ DHCPV6_ADVERTISE

#define DHCPV6_ADVERTISE   2

DHCPv6 advertisement.

Definition at line 254 of file dhcpv6.h.

Referenced by dhcpv6_type_name().

◆ DHCPV6_REQUEST

#define DHCPV6_REQUEST   3

DHCPv6 request.

Definition at line 257 of file dhcpv6.h.

Referenced by dhcpv6_type_name().

◆ DHCPV6_REPLY

#define DHCPV6_REPLY   7

DHCPv6 reply.

Definition at line 260 of file dhcpv6.h.

Referenced by dhcpv6_type_name().

◆ DHCPV6_INFORMATION_REQUEST

#define DHCPV6_INFORMATION_REQUEST   11

DHCPv6 information request.

Definition at line 263 of file dhcpv6.h.

Referenced by dhcpv6_type_name().

◆ DHCPV6_SETTINGS_NAME

#define DHCPV6_SETTINGS_NAME   "dhcpv6"

DHCPv6 settings block name.

Definition at line 266 of file dhcpv6.h.

Referenced by dhcpv6_register().

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

◆ ipv6_all_dhcp_relay_and_servers()

void ipv6_all_dhcp_relay_and_servers ( struct in6_addr * addr)
inlinestatic

Construct all-DHCP-relay-agents-and-servers multicast address.

Parameters
addrZeroed address to construct

Definition at line 273 of file dhcpv6.h.

273 {
274 addr->s6_addr16[0] = htons ( 0xff02 );
275 addr->s6_addr[13] = 1;
276 addr->s6_addr[15] = 2;
277}
uint32_t addr
Buffer address.
Definition dwmac.h:9
#define htons(value)
Definition byteswap.h:136

References addr, and htons.

Referenced by start_dhcpv6().

◆ start_dhcpv6()

int start_dhcpv6 ( struct interface * job,
struct net_device * netdev,
struct in6_addr * router,
int stateful )
extern

Start DHCPv6.

Parameters
jobJob control interface
netdevNetwork device
routerRouter address
statefulPerform stateful address autoconfiguration
Return values
rcReturn status code

Definition at line 1001 of file dhcpv6.c.

1002 {
1003 struct ll_protocol *ll_protocol = netdev->ll_protocol;
1004 struct dhcpv6_session *dhcpv6;
1005 struct {
1006 union {
1007 struct sockaddr_in6 sin6;
1008 struct sockaddr sa;
1009 } client;
1010 union {
1011 struct sockaddr_in6 sin6;
1012 struct sockaddr sa;
1013 } server;
1014 } addresses;
1015 uint32_t xid;
1016 int len;
1017 int rc;
1018
1019 /* Allocate and initialise structure */
1020 dhcpv6 = zalloc ( sizeof ( *dhcpv6 ) );
1021 if ( ! dhcpv6 )
1022 return -ENOMEM;
1023 ref_init ( &dhcpv6->refcnt, dhcpv6_free );
1024 intf_init ( &dhcpv6->job, &dhcpv6_job_desc, &dhcpv6->refcnt );
1025 intf_init ( &dhcpv6->xfer, &dhcpv6_xfer_desc, &dhcpv6->refcnt );
1026 dhcpv6->netdev = netdev_get ( netdev );
1027 memcpy ( &dhcpv6->router, router, sizeof ( dhcpv6->router ) );
1028 xid = random();
1029 memcpy ( dhcpv6->xid, &xid, sizeof ( dhcpv6->xid ) );
1030 dhcpv6->start = currticks();
1031 timer_init ( &dhcpv6->timer, dhcpv6_timer_expired, &dhcpv6->refcnt );
1032
1033 /* Construct client and server addresses */
1034 memset ( &addresses, 0, sizeof ( addresses ) );
1035 addresses.client.sin6.sin6_family = AF_INET6;
1036 addresses.client.sin6.sin6_port = htons ( DHCPV6_CLIENT_PORT );
1037 addresses.server.sin6.sin6_family = AF_INET6;
1038 ipv6_all_dhcp_relay_and_servers ( &addresses.server.sin6.sin6_addr );
1039 addresses.server.sin6.sin6_scope_id = netdev->scope_id;
1040 addresses.server.sin6.sin6_port = htons ( DHCPV6_SERVER_PORT );
1041
1042 /* Construct client DUID from system UUID */
1043 dhcpv6->client_duid.type = htons ( DHCPV6_DUID_UUID );
1044 if ( ( len = fetch_uuid_setting ( NULL, &uuid_setting,
1045 &dhcpv6->client_duid.uuid ) ) < 0 ) {
1046 rc = len;
1047 DBGC ( dhcpv6, "DHCPv6 %s could not create DUID-UUID: %s\n",
1048 dhcpv6->netdev->name, strerror ( rc ) );
1049 goto err_client_duid;
1050 }
1051
1052 /* Construct IAID from link-layer address */
1053 dhcpv6->iaid = crc32_le ( 0, netdev->ll_addr, ll_protocol->ll_addr_len);
1054 DBGC ( dhcpv6, "DHCPv6 %s has XID %02x%02x%02x\n", dhcpv6->netdev->name,
1055 dhcpv6->xid[0], dhcpv6->xid[1], dhcpv6->xid[2] );
1056
1057 /* Enter initial state */
1058 dhcpv6_set_state ( dhcpv6, ( stateful ? &dhcpv6_solicit :
1060
1061 /* Open socket */
1062 if ( ( rc = xfer_open_socket ( &dhcpv6->xfer, SOCK_DGRAM,
1063 &addresses.server.sa,
1064 &addresses.client.sa ) ) != 0 ) {
1065 DBGC ( dhcpv6, "DHCPv6 %s could not open socket: %s\n",
1066 dhcpv6->netdev->name, strerror ( rc ) );
1067 goto err_open_socket;
1068 }
1069
1070 /* Attach parent interface, mortalise self, and return */
1071 intf_plug_plug ( &dhcpv6->job, job );
1072 ref_put ( &dhcpv6->refcnt );
1073 return 0;
1074
1075 err_open_socket:
1076 dhcpv6_finished ( dhcpv6, rc );
1077 err_client_duid:
1078 ref_put ( &dhcpv6->refcnt );
1079 return rc;
1080}
#define NULL
NULL pointer (VOID *).
Definition Base.h:321
struct arbelprm_rc_send_wqe rc
Definition arbel.h:3
unsigned int uint32_t
Definition stdint.h:12
u32 crc32_le(u32 seed, const void *data, size_t len)
Calculate 32-bit little-endian CRC checksum.
Definition crc32.c:40
static void dhcpv6_free(struct refcnt *refcnt)
Free DHCPv6 session.
Definition dhcpv6.c:611
static struct interface_descriptor dhcpv6_xfer_desc
DHCPv6 data transfer interface descriptor.
Definition dhcpv6.c:989
static struct dhcpv6_session_state dhcpv6_solicit
DHCPv6 solicitation state.
Definition dhcpv6.c:553
static struct dhcpv6_session_state dhcpv6_information_request
DHCPv6 information request state.
Definition dhcpv6.c:562
static void dhcpv6_finished(struct dhcpv6_session *dhcpv6, int rc)
Terminate DHCPv6 session.
Definition dhcpv6.c:626
static void dhcpv6_timer_expired(struct retry_timer *timer, int fail)
Handle timer expiry.
Definition dhcpv6.c:817
static struct interface_descriptor dhcpv6_job_desc
DHCPv6 job control interface descriptor.
Definition dhcpv6.c:980
static void dhcpv6_set_state(struct dhcpv6_session *dhcpv6, struct dhcpv6_session_state *state)
Transition to new DHCPv6 session state.
Definition dhcpv6.c:642
#define DHCPV6_CLIENT_PORT
DHCPv6 client port.
Definition dhcpv6.h:21
#define DHCPV6_DUID_UUID
DHCP unique identifier based on UUID (DUID-UUID).
Definition dhcpv6.h:45
#define DHCPV6_SERVER_PORT
DHCPv6 server port.
Definition dhcpv6.h:18
static void ipv6_all_dhcp_relay_and_servers(struct in6_addr *addr)
Construct all-DHCP-relay-agents-and-servers multicast address.
Definition dhcpv6.h:273
static struct net_device * netdev
Definition gdbudp.c:53
#define AF_INET6
IPv6 Internet addresses.
Definition socket.h:65
#define SOCK_DGRAM
Definition socket.h:30
#define DBGC(...)
Definition compiler.h:530
#define ENOMEM
Not enough space.
Definition errno.h:578
void * memcpy(void *dest, const void *src, size_t len) __nonnull
void * memset(void *dest, int character, size_t len) __nonnull
void intf_plug_plug(struct interface *a, struct interface *b)
Plug two object interfaces together.
Definition interface.c:108
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
Definition interface.h:204
void * zalloc(size_t size)
Allocate cleared memory.
Definition malloc.c:718
static struct net_device * netdev_get(struct net_device *netdev)
Get reference to network device.
Definition netdevice.h:568
int xfer_open_socket(struct interface *intf, int semantics, struct sockaddr *peer, struct sockaddr *local)
Open socket.
Definition open.c:152
long int random(void)
Generate a pseudo-random number between 0 and 2147483647L or 2147483562?
Definition random.c:32
#define ref_put(refcnt)
Drop reference to object.
Definition refcnt.h:107
#define ref_init(refcnt, free)
Initialise a reference counter.
Definition refcnt.h:65
int fetch_uuid_setting(struct settings *settings, const struct setting *setting, union uuid *uuid)
Fetch value of UUID setting.
Definition settings.c:1095
char * strerror(int errno)
Retrieve string representation of error number.
Definition strerror.c:79
union uuid uuid
UUID.
Definition dhcpv6.h:41
uint16_t type
Type.
Definition dhcpv6.h:39
A DHCPv6 session.
Definition dhcpv6.c:570
struct retry_timer timer
Retransmission timer.
Definition dhcpv6.c:598
uint8_t xid[3]
Transaction ID.
Definition dhcpv6.c:583
struct interface job
Job control interface.
Definition dhcpv6.c:574
struct dhcpv6_duid_uuid client_duid
Client DUID.
Definition dhcpv6.c:589
unsigned long start
Start time (in ticks).
Definition dhcpv6.c:587
struct in6_addr router
Router address.
Definition dhcpv6.c:581
struct net_device * netdev
Network device being configured.
Definition dhcpv6.c:579
struct refcnt refcnt
Reference counter.
Definition dhcpv6.c:572
struct interface xfer
Data transfer interface.
Definition dhcpv6.c:576
uint32_t iaid
Identity association ID.
Definition dhcpv6.c:585
A link-layer protocol.
Definition netdevice.h:115
uint8_t ll_addr_len
Link-layer address length.
Definition netdevice.h:199
char name[NETDEV_NAME_LEN]
Name of this network device.
Definition netdevice.h:363
struct sockaddr_in6 sin6
Definition syslog.c:60
struct sockaddr sa
Definition syslog.c:57
unsigned long currticks(void)
Get current system time in ticks.
Definition timer.c:43

References AF_INET6, dhcpv6_session::client_duid, crc32_le(), currticks(), DBGC, DHCPV6_CLIENT_PORT, DHCPV6_DUID_UUID, dhcpv6_finished(), dhcpv6_free(), dhcpv6_information_request, dhcpv6_job_desc, DHCPV6_SERVER_PORT, dhcpv6_set_state(), dhcpv6_solicit, dhcpv6_timer_expired(), dhcpv6_xfer_desc, ENOMEM, fetch_uuid_setting(), htons, dhcpv6_session::iaid, intf_init(), intf_plug_plug(), ipv6_all_dhcp_relay_and_servers(), dhcpv6_session::job, len, ll_protocol::ll_addr_len, memcpy(), memset(), net_device::name, dhcpv6_session::netdev, netdev, netdev_get(), NULL, random(), rc, ref_init, ref_put, dhcpv6_session::refcnt, dhcpv6_session::router, sa, sin6, SOCK_DGRAM, dhcpv6_session::start, strerror(), dhcpv6_session::timer, dhcpv6_duid_uuid::type, dhcpv6_duid_uuid::uuid, dhcpv6_session::xfer, xfer_open_socket(), dhcpv6_session::xid, and zalloc().

Referenced by ipv6conf_rx_router_advertisement().