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

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. More...
 
int start_dhcpv6 (struct interface *job, struct net_device *netdev, struct in6_addr *router, int stateful)
 Start DHCPv6. More...
 

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.

◆ DHCPV6_CLIENT_PORT

#define DHCPV6_CLIENT_PORT   546

DHCPv6 client port.

Definition at line 21 of file dhcpv6.h.

◆ DHCPV6_DUID_UUID

#define DHCPV6_DUID_UUID   4

DHCP unique identifier based on UUID (DUID-UUID)

Definition at line 45 of file dhcpv6.h.

◆ DHCPV6_CLIENT_ID

#define DHCPV6_CLIENT_ID   1

DHCPv6 client identifier option.

Definition at line 56 of file dhcpv6.h.

◆ DHCPV6_SERVER_ID

#define DHCPV6_SERVER_ID   2

DHCPv6 server identifier option.

Definition at line 59 of file dhcpv6.h.

◆ 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.

◆ DHCPV6_IAADDR

#define DHCPV6_IAADDR   5

DHCPv6 identity association address (IAADDR) option.

Definition at line 93 of file dhcpv6.h.

◆ 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.

◆ DHCPV6_STATUS_CODE

#define DHCPV6_STATUS_CODE   13

DHCPv6 status code option.

Definition at line 128 of file dhcpv6.h.

◆ DHCPV6_USER_CLASS

#define DHCPV6_USER_CLASS   15

DHCPv6 user class option.

Definition at line 147 of file dhcpv6.h.

◆ 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.

◆ DHCPV6_DOMAIN_LIST

#define DHCPV6_DOMAIN_LIST   24

DHCPv6 domain search list option.

Definition at line 168 of file dhcpv6.h.

◆ DHCPV6_BOOTFILE_URL

#define DHCPV6_BOOTFILE_URL   59

DHCPv6 bootfile URI option.

Definition at line 171 of file dhcpv6.h.

◆ 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.

◆ DHCPV6_BYTE_VALUE

#define DHCPV6_BYTE_VALUE (   value)    ( (value) & 0xff )

Construct a DHCPv6 byte value.

Definition at line 190 of file dhcpv6.h.

◆ DHCPV6_WORD_VALUE

#define DHCPV6_WORD_VALUE (   value)    DHCPV6_BYTE_VALUE ( (value) >> 8 ), DHCPV6_BYTE_VALUE ( (value) >> 0 )

Construct a DHCPv6 word value.

Definition at line 193 of file dhcpv6.h.

◆ DHCPV6_DWORD_VALUE

#define DHCPV6_DWORD_VALUE (   value)    DHCPV6_WORD_VALUE ( (value) >> 16 ), DHCPV6_WORD_VALUE ( (value) >> 0 )

Construct a DHCPv6 dword value.

Definition at line 197 of file dhcpv6.h.

◆ DHCPV6_CODE

#define DHCPV6_CODE (   code)    DHCPV6_WORD_VALUE ( code )

Construct a DHCPv6 option code.

Definition at line 201 of file dhcpv6.h.

◆ DHCPV6_LEN

#define DHCPV6_LEN (   len)    DHCPV6_WORD_VALUE ( len )

Construct a DHCPv6 option length.

Definition at line 204 of file dhcpv6.h.

◆ DHCPV6_OPTION

#define DHCPV6_OPTION (   ...)    DHCPV6_LEN ( VA_ARG_COUNT ( __VA_ARGS__ ) ), __VA_ARGS__

Construct a DHCPv6 option from a list of bytes.

Definition at line 207 of file dhcpv6.h.

◆ DHCPV6_STRING

#define DHCPV6_STRING (   ...)    DHCPV6_OPTION ( __VA_ARGS__ )

Construct a DHCPv6 option from a list of characters.

Definition at line 211 of file dhcpv6.h.

◆ DHCPV6_BYTE

#define DHCPV6_BYTE (   value)    DHCPV6_OPTION ( DHCPV6_BYTE_VALUE ( value ) )

Construct a byte-valued DHCPv6 option.

Definition at line 214 of file dhcpv6.h.

◆ DHCPV6_WORD

#define DHCPV6_WORD (   value)    DHCPV6_OPTION ( DHCPV6_WORD_VALUE ( value ) )

Construct a word-valued DHCPv6 option.

Definition at line 217 of file dhcpv6.h.

◆ DHCPV6_DWORD

#define DHCPV6_DWORD (   value)    DHCPV6_OPTION ( DHCPV6_DWORD_VALUE ( value ) )

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.

◆ DHCPV6_ADVERTISE

#define DHCPV6_ADVERTISE   2

DHCPv6 advertisement.

Definition at line 254 of file dhcpv6.h.

◆ DHCPV6_REQUEST

#define DHCPV6_REQUEST   3

DHCPv6 request.

Definition at line 257 of file dhcpv6.h.

◆ DHCPV6_REPLY

#define DHCPV6_REPLY   7

DHCPv6 reply.

Definition at line 260 of file dhcpv6.h.

◆ DHCPV6_INFORMATION_REQUEST

#define DHCPV6_INFORMATION_REQUEST   11

DHCPv6 information request.

Definition at line 263 of file dhcpv6.h.

◆ DHCPV6_SETTINGS_NAME

#define DHCPV6_SETTINGS_NAME   "dhcpv6"

DHCPv6 settings block name.

Definition at line 266 of file dhcpv6.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED  )

◆ ipv6_all_dhcp_relay_and_servers()

static 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:20
#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 
)

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  {
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 }
static struct dhcpv6_session_state dhcpv6_solicit
DHCPv6 solicitation state.
Definition: dhcpv6.c:553
A DHCPv6 session.
Definition: dhcpv6.c:570
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define AF_INET6
IPv6 Internet addresses.
Definition: socket.h:65
uint8_t ll_addr_len
Link-layer address length.
Definition: netdevice.h:199
static struct interface_descriptor dhcpv6_xfer_desc
DHCPv6 data transfer interface descriptor.
Definition: dhcpv6.c:988
struct interface xfer
Data transfer interface.
Definition: dhcpv6.c:576
struct interface job
Job control interface.
Definition: dhcpv6.c:574
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 ref_init(refcnt, free)
Initialise a reference counter.
Definition: refcnt.h:65
int xfer_open_socket(struct interface *intf, int semantics, struct sockaddr *peer, struct sockaddr *local)
Open socket.
Definition: open.c:143
#define SOCK_DGRAM
Definition: socket.h:30
#define DBGC(...)
Definition: compiler.h:505
struct sockaddr_in6 sin6
Definition: syslog.c:60
uint32_t iaid
Identity association ID.
Definition: dhcpv6.c:585
void intf_plug_plug(struct interface *a, struct interface *b)
Plug two object interfaces together.
Definition: interface.c:108
struct net_device * netdev
Network device being configured.
Definition: dhcpv6.c:579
static void dhcpv6_finished(struct dhcpv6_session *dhcpv6, int rc)
Terminate DHCPv6 session.
Definition: dhcpv6.c:626
unsigned int scope_id
Scope ID.
Definition: netdevice.h:361
A link-layer protocol.
Definition: netdevice.h:115
u32 crc32_le(u32 seed, const void *data, size_t len)
Calculate 32-bit little-endian CRC checksum.
Definition: crc32.c:40
#define ENOMEM
Not enough space.
Definition: errno.h:535
void * memcpy(void *dest, const void *src, size_t len) __nonnull
ring len
Length.
Definition: dwmac.h:231
static struct net_device * netdev
Definition: gdbudp.c:52
struct sockaddr sa
Definition: syslog.c:57
struct in6_addr router
Router address.
Definition: dhcpv6.c:581
struct refcnt refcnt
Reference counter.
Definition: dhcpv6.c:572
static void dhcpv6_free(struct refcnt *refcnt)
Free DHCPv6 session.
Definition: dhcpv6.c:611
static void dhcpv6_timer_expired(struct retry_timer *timer, int fail)
Handle timer expiry.
Definition: dhcpv6.c:817
Generalized socket address structure.
Definition: socket.h:97
static struct dhcpv6_session_state dhcpv6_information_request
DHCPv6 information request state.
Definition: dhcpv6.c:562
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:79
void * zalloc(size_t size)
Allocate cleared memory.
Definition: malloc.c:662
long int random(void)
Generate a pseudo-random number between 0 and 2147483647L or 2147483562?
Definition: random.c:32
static struct net_device * netdev_get(struct net_device *netdev)
Get reference to network device.
Definition: netdevice.h:565
struct retry_timer timer
Retransmission timer.
Definition: dhcpv6.c:598
unsigned int uint32_t
Definition: stdint.h:12
uint16_t type
Type.
Definition: dhcpv6.h:39
char name[NETDEV_NAME_LEN]
Name of this network device.
Definition: netdevice.h:363
unsigned long start
Start time (in ticks)
Definition: dhcpv6.c:587
struct dhcpv6_duid_uuid client_duid
Client DUID.
Definition: dhcpv6.c:589
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
uint8_t xid[3]
Transaction ID.
Definition: dhcpv6.c:583
#define DHCPV6_CLIENT_PORT
DHCPv6 client port.
Definition: dhcpv6.h:21
static struct interface_descriptor dhcpv6_job_desc
DHCPv6 job control interface descriptor.
Definition: dhcpv6.c:979
IPv6 socket address.
Definition: in.h:118
#define DHCPV6_DUID_UUID
DHCP unique identifier based on UUID (DUID-UUID)
Definition: dhcpv6.h:45
int fetch_uuid_setting(struct settings *settings, const struct setting *setting, union uuid *uuid)
Fetch value of UUID setting.
Definition: settings.c:1085
#define DHCPV6_SERVER_PORT
DHCPv6 server port.
Definition: dhcpv6.h:18
uint8_t ll_addr[MAX_LL_ADDR_LEN]
Link-layer address.
Definition: netdevice.h:388
unsigned long currticks(void)
Get current system time in ticks.
Definition: timer.c:43
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
Definition: interface.h:204
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
#define htons(value)
Definition: byteswap.h:136
struct ll_protocol * ll_protocol
Link-layer protocol.
Definition: netdevice.h:373
#define ref_put(refcnt)
Drop reference to object.
Definition: refcnt.h:107
void * memset(void *dest, int character, size_t len) __nonnull
union uuid uuid
UUID.
Definition: dhcpv6.h:41

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, net_device::ll_addr, ll_protocol::ll_addr_len, net_device::ll_protocol, memcpy(), memset(), net_device::name, netdev, dhcpv6_session::netdev, netdev_get(), NULL, random(), rc, ref_init, ref_put, dhcpv6_session::refcnt, dhcpv6_session::router, sa, net_device::scope_id, 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().