41#define DHCP_ENCAP_OPT( encapsulator, encapsulated ) \
42 ( ( (encapsulator) << 8 ) | (encapsulated) )
44#define DHCP_ENCAPSULATOR( encap_opt ) ( (encap_opt) >> 8 )
46#define DHCP_ENCAPSULATED( encap_opt ) ( (encap_opt) & 0xff )
48#define DHCP_IS_ENCAP_OPT( opt ) DHCP_ENCAPSULATOR( opt )
63#define DHCP_MIN_OPTION 1
66#define DHCP_SUBNET_MASK 1
72#define DHCP_DNS_SERVERS 6
75#define DHCP_LOG_SERVERS 7
78#define DHCP_HOST_NAME 12
81#define DHCP_DOMAIN_NAME 15
84#define DHCP_ROOT_PATH 17
90#define DHCP_NTP_SERVERS 42
93#define DHCP_VENDOR_ENCAP 43
96#define DHCP_PXE_DISCOVERY_CONTROL DHCP_ENCAP_OPT ( DHCP_VENDOR_ENCAP, 6 )
111#define DHCP_PXE_BOOT_SERVER_MCAST DHCP_ENCAP_OPT ( DHCP_VENDOR_ENCAP, 7 )
114#define DHCP_PXE_BOOT_SERVERS DHCP_ENCAP_OPT ( DHCP_VENDOR_ENCAP, 8 )
127#define DHCP_PXE_BOOT_MENU DHCP_ENCAP_OPT ( DHCP_VENDOR_ENCAP, 9 )
140#define DHCP_PXE_BOOT_MENU_PROMPT DHCP_ENCAP_OPT ( DHCP_VENDOR_ENCAP, 10 )
159#define DHCP_PXE_BOOT_MENU_ITEM DHCP_ENCAP_OPT ( DHCP_VENDOR_ENCAP, 71 )
177#define DHCP_REQUESTED_ADDRESS 50
180#define DHCP_LEASE_TIME 51
187#define DHCP_OPTION_OVERLOAD 52
190#define DHCP_OPTION_OVERLOAD_FILE 1
193#define DHCP_OPTION_OVERLOAD_SNAME 2
196#define DHCP_MESSAGE_TYPE 53
198#define DHCPDISCOVER 1
208#define DHCP_SERVER_IDENTIFIER 54
211#define DHCP_PARAMETER_REQUEST_LIST 55
214#define DHCP_MAX_MESSAGE_SIZE 57
217#define DHCP_VENDOR_CLASS_ID 60
220#define DHCP_VENDOR_PXECLIENT( arch, ndi ) \
221 'P', 'X', 'E', 'C', 'l', 'i', 'e', 'n', 't', ':', \
222 'A', 'r', 'c', 'h', ':', DHCP_VENDOR_PXECLIENT_ARCH ( arch ), \
223 ':', 'U', 'N', 'D', 'I', ':', DHCP_VENDOR_PXECLIENT_UNDI ( ndi )
226#define DHCP_VENDOR_PXECLIENT_ARCH( arch ) \
227 ( '0' + ( ( (arch) / 10000 ) % 10 ) ), \
228 ( '0' + ( ( (arch) / 1000 ) % 10 ) ), \
229 ( '0' + ( ( (arch) / 100 ) % 10 ) ), \
230 ( '0' + ( ( (arch) / 10 ) % 10 ) ), \
231 ( '0' + ( ( (arch) / 1 ) % 10 ) )
234#define DHCP_VENDOR_PXECLIENT_UNDI( type, major, minor ) \
235 DHCP_VENDOR_PXECLIENT_UNDI_VERSION ( major ), \
236 DHCP_VENDOR_PXECLIENT_UNDI_VERSION ( minor )
237#define DHCP_VENDOR_PXECLIENT_UNDI_VERSION( version ) \
238 ( '0' + ( ( (version) / 100 ) % 10 ) ), \
239 ( '0' + ( ( (version) / 10 ) % 10 ) ), \
240 ( '0' + ( ( (version) / 1 ) % 10 ) )
243#define DHCP_CLIENT_ID 61
258#define DHCP_TFTP_SERVER_NAME 66
265#define DHCP_BOOTFILE_NAME 67
268#define DHCP_USER_CLASS_ID 77
271#define DHCP_CLIENT_ARCHITECTURE 93
330#define DHCP_CLIENT_NDI 94
333#define DHCP_CLIENT_UUID 97
343#define DHCP_CLIENT_UUID_TYPE 0
346#define DHCP_DOMAIN_SEARCH 119
349#define DHCP_STATIC_ROUTES 121
357#define DHCP_EB_ENCAP 175
366#define DHCP_EB_PRIORITY DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0x01 )
374#define DHCP_EB_YIADDR DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0x02 )
382#define DHCP_EB_SIADDR DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0x03 )
390#define DHCP_EB_KEEP_SAN DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0x08 )
399#define DHCP_EB_SKIP_SAN_BOOT DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0x09 )
411#define DHCP_EB_SCRIPTLET DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0x51 )
414#define DHCP_EB_SYSLOGS_SERVER DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0x55 )
417#define DHCP_EB_TRUST DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0x5a )
420#define DHCP_EB_CERT DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0x5b )
423#define DHCP_EB_KEY DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0x5c )
426#define DHCP_EB_CROSS_CERT DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0x5d )
433#define DHCP_EB_NO_PXEDHCP DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xb0 )
446#define DHCP_EB_BUS_ID DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xb1 )
459#define DHCP_EB_USE_CACHED DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xb2 )
466#define DHCP_EB_SAN_RETRY DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xbb )
472#define DHCP_EB_SAN_FILENAME DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xbc )
479#define DHCP_EB_SAN_DRIVE DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xbd )
488#define DHCP_EB_USERNAME DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xbe )
497#define DHCP_EB_PASSWORD DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xbf )
506#define DHCP_EB_REVERSE_USERNAME DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xc0 )
515#define DHCP_EB_REVERSE_PASSWORD DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xc1 )
521#define DHCP_EB_UID DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xc2 )
527#define DHCP_EB_GID DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xc3 )
530#define DHCP_EB_VERSION DHCP_ENCAP_OPT ( DHCP_EB_ENCAP, 0xeb )
533#define DHCP_ISCSI_PRIMARY_TARGET_IQN 201
536#define DHCP_ISCSI_SECONDARY_TARGET_IQN 202
539#define DHCP_ISCSI_INITIATOR_IQN 203
542#define DHCP_MAX_OPTION 254
554#define DHCP_OPTION( ... ) VA_ARG_COUNT ( __VA_ARGS__ ), __VA_ARGS__
557#define DHCP_STRING( ... ) DHCP_OPTION ( __VA_ARGS__ )
560#define DHCP_BYTE( value ) DHCP_OPTION ( value )
563#define DHCP_WORD( value ) DHCP_OPTION ( ( ( (value) >> 8 ) & 0xff ), \
564 ( ( (value) >> 0 ) & 0xff ) )
567#define DHCP_DWORD( value ) DHCP_OPTION ( ( ( (value) >> 24 ) & 0xff ), \
568 ( ( (value) >> 16 ) & 0xff ), \
569 ( ( (value) >> 8 ) & 0xff ), \
570 ( ( (value) >> 0 ) & 0xff ) )
573#define DHCP_ENCAP( ... ) DHCP_OPTION ( __VA_ARGS__, DHCP_END )
607#define DHCP_OPTION_HEADER_LEN ( offsetof ( struct dhcp_option, data ) )
610#define DHCP_MAX_LEN 0xff
688#define BOOTP_REQUEST 1
698#define BOOTP_FL_BROADCAST 0x8000
701#define DHCP_MAGIC_COOKIE 0x63825363UL
708#define DHCP_MIN_LEN 552
711#define DHCP_SETTINGS_NAME "dhcp"
714#define PROXYDHCP_SETTINGS_NAME "proxydhcp"
717#define PXEBS_SETTINGS_NAME "pxebs"
723 size_t options_len,
void *
data,
729 void *
data,
size_t max_len );
732 unsigned int pxe_type );
uint32_t dhcp_last_xid
Most recent DHCP transaction ID.
uint8_t data[48]
Additional event data.
static struct net_device * netdev
dhcp_client_architecture_values
DHCP client architecture values.
dhcp_pxe_discovery_control
PXE boot server discovery control bits.
@ DHCP_CLIENT_ARCHITECTURE_X86_64
EFI x86-64.
@ DHCP_CLIENT_ARCHITECTURE_ARM64
EFI 64-bit ARM.
@ DHCP_CLIENT_ARCHITECTURE_ALPHA
DEC Alpha.
@ DHCP_CLIENT_ARCHITECTURE_MIPS32
EFI 32-bit MIPS.
@ DHCP_CLIENT_ARCHITECTURE_RISCV128
EFI 128-bit RISC-V.
@ DHCP_CLIENT_ARCHITECTURE_LOONG64
EFI 64-bit LoongArch.
@ DHCP_CLIENT_ARCHITECTURE_RISCV32
EFI 32-bit RISC-V.
@ DHCP_CLIENT_ARCHITECTURE_SUNWAY64
EFI 64-bit Sunway.
@ DHCP_CLIENT_ARCHITECTURE_LOONG32
EFI 32-bit LoongArch.
@ DHCP_CLIENT_ARCHITECTURE_IA64
EFI Itanium.
@ DHCP_CLIENT_ARCHITECTURE_XSCALE
EFI Xscale.
@ DHCP_CLIENT_ARCHITECTURE_RISCV64
EFI 64-bit RISC-V.
@ DHCP_CLIENT_ARCHITECTURE_EFI
EFI BC.
@ DHCP_CLIENT_ARCHITECTURE_LC
Intel Lean Client.
@ DHCP_CLIENT_ARCHITECTURE_ARM32
EFI 32-bit ARM.
@ DHCP_CLIENT_ARCHITECTURE_SUNWAY32
EFI 32-bit Sunway.
@ DHCP_CLIENT_ARCHITECTURE_ARCX86
Arc x86.
@ DHCP_CLIENT_ARCHITECTURE_X86
Intel x86 PC.
@ DHCP_CLIENT_ARCHITECTURE_MIPS64
EFI 64-bit MIPS.
@ DHCP_CLIENT_ARCHITECTURE_PC98
NEC/PC98.
@ DHCP_CLIENT_ARCHITECTURE_IA32
EFI IA32.
@ PXEBS_NO_UNKNOWN_SERVERS
Accept only servers in DHCP_PXE_BOOT_SERVERS list.
@ PXEBS_NO_MULTICAST
Inhibit multicast discovery.
@ PXEBS_NO_BROADCAST
Inhibit broadcast discovery.
@ PXEBS_SKIP
Skip discovery if filename present.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
int start_pxebs(struct interface *job, struct net_device *netdev, unsigned int pxe_type)
Start PXE Boot Server Discovery on a network device.
int start_dhcp(struct interface *job, struct net_device *netdev)
Start DHCP state machine on a network device.
int dhcp_create_packet(struct dhcp_packet *dhcppkt, struct net_device *netdev, uint8_t msgtype, uint32_t xid, const void *options, size_t options_len, void *data, size_t max_len)
Create a DHCP packet.
int dhcp_create_request(struct dhcp_packet *dhcppkt, struct net_device *netdev, unsigned int msgtype, uint32_t xid, struct in_addr ciaddr, void *data, size_t max_len)
Create DHCP request packet.
Network device management.
#define MAX_LL_ADDR_LEN
Maximum length of a link-layer address.
DHCP client architecture.
uint8_t ll_addr[MAX_LL_ADDR_LEN]
Link-layer address.
uint8_t ll_proto
Link-layer protocol.
uint8_t type
Identifier type.
Network device descriptor.
uint16_t device
Device ID.
uint16_t vendor
Vendor ID.
uint8_t data[0]
Option data.
uint8_t num_ip
Number of IPv4 addresses.
struct in_addr ip[0]
IPv4 addresses.
uint32_t xid
Transaction ID.
uint32_t magic
DHCP magic cookie.
uint8_t options[0]
DHCP options.
uint8_t chaddr[16]
Client hardware address.
struct in_addr giaddr
"Gateway" IP address
struct in_addr yiaddr
"Your" IP address
uint16_t secs
Seconds since start of acquisition.
uint8_t htype
Hardware address type.
struct in_addr ciaddr
"Client" IP address
struct in_addr siaddr
"Server" IP address
uint8_t hops
Number of hops from server.
char sname[64]
Server host name (null terminated)
uint8_t hlen
Hardware address length.
char file[128]
Boot file name (null terminated)