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
Response 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 1000 of file dhcpv6.c.

1001 {
1002 struct ll_protocol *ll_protocol = netdev->ll_protocol;
1003 struct dhcpv6_session *dhcpv6;
1004 struct {
1005 union {
1006 struct sockaddr_in6 sin6;
1007 struct sockaddr sa;
1008 } client;
1009 union {
1010 struct sockaddr_in6 sin6;
1011 struct sockaddr sa;
1012 } server;
1013 } addresses;
1014 uint32_t xid;
1015 int len;
1016 int rc;
1017
1018 /* Allocate and initialise structure */
1019 dhcpv6 = zalloc ( sizeof ( *dhcpv6 ) );
1020 if ( ! dhcpv6 )
1021 return -ENOMEM;
1022 ref_init ( &dhcpv6->refcnt, dhcpv6_free );
1023 intf_init ( &dhcpv6->job, &dhcpv6_job_desc, &dhcpv6->refcnt );
1024 intf_init ( &dhcpv6->xfer, &dhcpv6_xfer_desc, &dhcpv6->refcnt );
1025 dhcpv6->netdev = netdev_get ( netdev );
1026 memcpy ( &dhcpv6->router, router, sizeof ( dhcpv6->router ) );
1027 xid = random();
1028 memcpy ( dhcpv6->xid, &xid, sizeof ( dhcpv6->xid ) );
1029 dhcpv6->start = currticks();
1030 timer_init ( &dhcpv6->timer, dhcpv6_timer_expired, &dhcpv6->refcnt );
1031
1032 /* Construct client and server addresses */
1033 memset ( &addresses, 0, sizeof ( addresses ) );
1034 addresses.client.sin6.sin6_family = AF_INET6;
1035 addresses.client.sin6.sin6_port = htons ( DHCPV6_CLIENT_PORT );
1036 addresses.server.sin6.sin6_family = AF_INET6;
1037 ipv6_all_dhcp_relay_and_servers ( &addresses.server.sin6.sin6_addr );
1038 addresses.server.sin6.sin6_scope_id = netdev->scope_id;
1039 addresses.server.sin6.sin6_port = htons ( DHCPV6_SERVER_PORT );
1040
1041 /* Construct client DUID from system UUID */
1042 dhcpv6->client_duid.type = htons ( DHCPV6_DUID_UUID );
1043 if ( ( len = fetch_uuid_setting ( NULL, &uuid_setting,
1044 &dhcpv6->client_duid.uuid ) ) < 0 ) {
1045 rc = len;
1046 DBGC ( dhcpv6, "DHCPv6 %s could not create DUID-UUID: %s\n",
1047 dhcpv6->netdev->name, strerror ( rc ) );
1048 goto err_client_duid;
1049 }
1050
1051 /* Construct IAID from link-layer address */
1052 dhcpv6->iaid = crc32_le ( 0, netdev->ll_addr, ll_protocol->ll_addr_len);
1053 DBGC ( dhcpv6, "DHCPv6 %s has XID %02x%02x%02x\n", dhcpv6->netdev->name,
1054 dhcpv6->xid[0], dhcpv6->xid[1], dhcpv6->xid[2] );
1055
1056 /* Enter initial state */
1057 dhcpv6_set_state ( dhcpv6, ( stateful ? &dhcpv6_solicit :
1059
1060 /* Open socket */
1061 if ( ( rc = xfer_open_socket ( &dhcpv6->xfer, SOCK_DGRAM,
1062 &addresses.server.sa,
1063 &addresses.client.sa ) ) != 0 ) {
1064 DBGC ( dhcpv6, "DHCPv6 %s could not open socket: %s\n",
1065 dhcpv6->netdev->name, strerror ( rc ) );
1066 goto err_open_socket;
1067 }
1068
1069 /* Attach parent interface, mortalise self, and return */
1070 intf_plug_plug ( &dhcpv6->job, job );
1071 ref_put ( &dhcpv6->refcnt );
1072 return 0;
1073
1074 err_open_socket:
1075 dhcpv6_finished ( dhcpv6, rc );
1076 err_client_duid:
1077 ref_put ( &dhcpv6->refcnt );
1078 return rc;
1079}
#define NULL
NULL pointer (VOID *)
Definition Base.h:322
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:988
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:979
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:505
#define ENOMEM
Not enough space.
Definition errno.h:535
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:662
static struct net_device * netdev_get(struct net_device *netdev)
Get reference to network device.
Definition netdevice.h:565
int xfer_open_socket(struct interface *intf, int semantics, struct sockaddr *peer, struct sockaddr *local)
Open socket.
Definition open.c:143
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:1085
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().