99 128, 129, 130, 131, 132, 133, 134, 135,
107 &vendor_class_setting,
113 .name =
"dhcp-server",
114 .description =
"DHCP server",
116 .type = &setting_type_ipv4,
140 case DHCPACK:
return "DHCPACK";
141 case DHCPNAK:
return "DHCPNAK";
144 default:
return "DHCP<invalid>";
288 DBGC ( dhcp,
"DHCP %p entering %s state\n", dhcp,
state->name );
292 set_timer_limits ( &dhcp->
timer,
338 DBGC ( dhcp,
"DHCP %p DHCPDISCOVER\n", dhcp );
368 unsigned long elapsed;
370 DBGC ( dhcp,
"DHCP %p %s from %s:%d", dhcp,
373 if ( ( server_id.
s_addr !=
peer->sin_addr.s_addr ) ||
374 ( pseudo_id.
s_addr !=
peer->sin_addr.s_addr ) ) {
386 vci,
sizeof ( vci ) );
387 has_pxeclient = ( ( vci_len >= ( int )
sizeof ( vci ) ) &&
388 (
strncmp (
"PXEClient", vci,
sizeof (vci) ) == 0 ));
389 if ( has_pxeclient ) {
402 sizeof ( no_pxedhcp ) );
404 DBGC ( dhcp,
" nopxe" );
409 ( ( msgtype ==
DHCPOFFER ) || ( ! msgtype ) ) &&
418 if ( pseudo_id.
s_addr && has_pxeclient &&
460 DBGC ( dhcp,
"DHCP %p deferring discovery\n", dhcp );
514 DBGC ( dhcp,
"DHCP %p DHCPREQUEST to %s:%d",
521 sizeof ( dhcp->
server ) ) ) != 0 )
527 sizeof ( dhcp->
offer ) ) ) != 0 )
557 DBGC ( dhcp,
"DHCP %p %s from %s:%d", dhcp,
560 if ( ( server_id.
s_addr !=
peer->sin_addr.s_addr ) ||
561 ( pseudo_id.
s_addr !=
peer->sin_addr.s_addr ) ) {
587 if ( msgtype && ( msgtype !=
DHCPACK ) )
600 DBGC ( dhcp,
"DHCP %p could not register settings: %s\n",
622 DBGC ( dhcp,
"DHCP %p could not register "
623 "proxy settings: %s\n",
673 DBGC ( dhcp,
"DHCP %p ProxyDHCP REQUEST to %s\n", dhcp,
707 DBGC ( dhcp,
"DHCP %p %s from %s:%d", dhcp,
710 if ( ( server_id.
s_addr !=
peer->sin_addr.s_addr ) ||
711 ( pseudo_id.
s_addr !=
peer->sin_addr.s_addr ) ) {
716 DBGC ( dhcp,
" pxe" );
732 DBGC ( dhcp,
"DHCP %p could not register proxy settings: %s\n",
789 DBGC ( dhcp,
"DHCP %p PXEBS REQUEST to %s:%d for type %d\n",
796 &menu_item,
sizeof ( menu_item ) ) ) != 0 )
823 DBGC ( dhcp,
"DHCP %p rejecting server %s\n",
846 DBGC ( dhcp,
"DHCP %p %s from %s:%d", dhcp,
849 if ( ( server_id.
s_addr !=
peer->sin_addr.s_addr ) ||
850 ( pseudo_id.
s_addr !=
peer->sin_addr.s_addr ) ) {
857 &menu_item,
sizeof ( menu_item ) );
858 if ( menu_item.
type )
876 DBGC ( dhcp,
"DHCP %p could not register settings: %s\n",
948 void *
data,
size_t max_len ) {
953 if ( max_len < (
sizeof ( *
dhcphdr ) + options_len ) )
964 netdev->ll_protocol->ll_addr_len );
982 memset ( dhcppkt, 0,
sizeof ( *dhcppkt ) );
987 &msgtype,
sizeof ( msgtype ) ) ) != 0 )
1011 void *
data,
size_t max_len ) {
1017 size_t dhcp_features_len;
1028 data, max_len ) ) != 0 ) {
1029 DBG (
"DHCP could not create DHCP packet: %s\n",
1031 goto err_create_packet;
1041 dhcp_features_len ) ) != 0 ) {
1042 DBG (
"DHCP could not set features list option: %s\n",
1044 goto err_store_features;
1049 &dhcp_desc,
sizeof ( dhcp_desc ) );
1051 sizeof ( dhcp_desc ) ) ) != 0 ) {
1052 DBG (
"DHCP could not set bus ID option: %s\n",
1054 goto err_store_busid;
1061 ll_addr_len =
netdev->ll_protocol->ll_addr_len;
1065 ( ll_addr_len + 1 ) ) ) != 0 ) {
1066 DBG (
"DHCP could not set client ID: %s\n",
1068 goto err_store_client_id;
1078 &client_uuid.
uuid ) ) >= 0 ) {
1082 sizeof ( client_uuid ) ) ) != 0 ) {
1083 DBG (
"DHCP could not set client UUID: %s\n",
1085 goto err_store_client_uuid;
1098 DBG (
"DHCP could not set %s: %s\n",
1106 err_store_client_uuid:
1107 err_store_client_id:
1155 DBGC ( dhcp,
"DHCP %p could not construct DHCP request: %s\n",
1169 if ( (
rc = dhcp->
state->
tx ( dhcp, &dhcppkt, &
peer ) ) != 0 ) {
1170 DBGC ( dhcp,
"DHCP %p could not fill DHCP request: %s\n",
1179 DBGC ( dhcp,
"DHCP %p could not transmit UDP packet: %s\n",
1207 struct in_addr server_id = { 0 };
1212 if ( !
meta->src ) {
1213 DBGC ( dhcp,
"DHCP %p received packet without source port\n",
1229 goto err_alloc_dhcppkt;
1231 dhcphdr = ( ( (
void * ) dhcppkt ) +
sizeof ( *dhcppkt ) );
1237 sizeof ( msgtype ) );
1241 &server_id,
sizeof ( server_id ) );
1244 pseudo_id = server_id;
1245 if ( ! pseudo_id.
s_addr )
1247 if ( ! pseudo_id.
s_addr )
1248 pseudo_id =
peer->sin_addr;
1252 DBGC ( dhcp,
"DHCP %p %s from %s:%d has bad transaction "
1263 DBGC ( dhcp,
"DHCP %p %s from %s:%d has bad chaddr %s\n",
1272 dhcp->
state->
rx ( dhcp, dhcppkt,
peer, msgtype, server_id, pseudo_id );
1363 dhcp =
zalloc (
sizeof ( *dhcp ) );
1415 if (
raw_len <
sizeof ( *server ) ) {
1416 DBGC ( dhcp,
"DHCP %p malformed PXE server list\n",
1423 DBGC ( dhcp,
"DHCP %p malformed PXE server list\n",
1428 for ( i = 0 ; i < server->
num_ip ; i++ )
1429 *(
ip++) = server->
ip[i];
1431 server = ( ( (
void * ) server ) + server_len );
1449 unsigned int pxe_type ) {
1450 struct setting pxe_discovery_control_setting =
1452 struct setting pxe_boot_servers_setting =
1454 struct setting pxe_boot_server_mcast_setting =
1459 unsigned int pxe_discovery_control;
1465 if ( pxebs_list_len < 0 )
1469 dhcp =
zalloc (
sizeof ( *dhcp ) +
sizeof ( *
ip ) +
1470 sizeof ( *
ip ) + pxebs_list_len +
1486 pxe_discovery_control =
1488 ip = ( ( (
void * ) dhcp ) +
sizeof ( *dhcp ) );
1499 if ( pxebs_list_len ) {
1503 buf,
sizeof ( buf ) );
1507 DBGC ( dhcp,
"DHCP %p has no PXE boot servers for type %04x\n",
1514 DBGC ( dhcp,
"DHCP %p attempting", dhcp );
1517 DBGC ( dhcp,
"\n" );
1519 DBGC ( dhcp,
"DHCP %p accepting", dhcp );
1522 DBGC ( dhcp,
"\n" );
#define NULL
NULL pointer (VOID *)
typeof(acpi_finder=acpi_find)
ACPI table finder.
struct arbelprm_rc_send_wqe rc
#define DHCP_ARCH_CLIENT_ARCHITECTURE
DHCP client architecture.
#define DHCP_ARCH_CLIENT_NDI
DHCP client network device interface.
#define assert(condition)
Assert a condition at run-time.
struct bofm_section_header done
#define DHCP_DISC_START_TIMEOUT_SEC
#define DHCP_REQ_START_TIMEOUT_SEC
#define DHCP_PROXY_START_TIMEOUT_SEC
#define PXEBS_START_TIMEOUT_SEC
#define PXEBS_END_TIMEOUT_SEC
#define DHCP_PROXY_END_TIMEOUT_SEC
#define DHCP_REQ_PROXY_TIMEOUT_SEC
#define DHCP_DISC_PROXY_TIMEOUT_SEC
#define DHCP_DISC_END_TIMEOUT_SEC
#define DHCP_REQ_END_TIMEOUT_SEC
#define PXEBS_MAX_TIMEOUT_SEC
#define DHCP_DISC_MAX_DEFERRALS
static struct dhcp_session_state dhcp_state_pxebs
PXE Boot Server Discovery state operations.
static struct interface_operation dhcp_job_op[]
DHCP job control interface operations.
static const char * dhcp_msgtype_name(unsigned int msgtype)
Name a DHCP packet type.
static struct interface_descriptor dhcp_job_desc
DHCP job control interface descriptor.
static void dhcp_finished(struct dhcp_session *dhcp, int rc)
Mark DHCP session as complete.
uint32_t dhcp_last_xid
Most recent DHCP transaction ID.
static int dhcp_pxebs_tx(struct dhcp_session *dhcp, struct dhcp_packet *dhcppkt, struct sockaddr_in *peer)
Construct transmitted packet for PXE Boot Server Discovery.
static void dhcp_proxy_expired(struct dhcp_session *dhcp)
Handle timer expiry during ProxyDHCP request.
int start_pxebs(struct interface *job, struct net_device *netdev, unsigned int pxe_type)
Start PXE Boot Server Discovery on a network device.
static struct interface_descriptor dhcp_xfer_desc
DHCP data transfer interface descriptor.
static struct dhcp_session_state dhcp_state_proxy
ProxyDHCP request state operations.
static void dhcp_defer(struct dhcp_session *dhcp)
Defer DHCP discovery.
static struct dhcp_session_state dhcp_state_discover
DHCP discovery state operations.
static void dhcp_discovery_expired(struct dhcp_session *dhcp)
Handle timer expiry during DHCP discovery.
static void dhcp_free(struct refcnt *refcnt)
Free DHCP session.
static void dhcp_discovery_rx(struct dhcp_session *dhcp, struct dhcp_packet *dhcppkt, struct sockaddr_in *peer, uint8_t msgtype, struct in_addr server_id, struct in_addr pseudo_id)
Handle received packet during DHCP discovery.
static int dhcp_pxebs_accept(struct dhcp_session *dhcp, struct in_addr bs)
Check to see if PXE Boot Server address is acceptable.
static void pxebs_list(struct dhcp_session *dhcp, void *raw, size_t raw_len, struct in_addr *ip)
Retrieve list of PXE boot servers for a given server type.
static void dhcp_proxy_rx(struct dhcp_session *dhcp, struct dhcp_packet *dhcppkt, struct sockaddr_in *peer, uint8_t msgtype, struct in_addr server_id, struct in_addr pseudo_id)
Handle received packet during ProxyDHCP request.
static const struct setting * dhcp_request_settings[]
Settings copied in to all DHCP requests.
static void dhcp_pxebs_rx(struct dhcp_session *dhcp, struct dhcp_packet *dhcppkt, struct sockaddr_in *peer, uint8_t msgtype, struct in_addr server_id, struct in_addr pseudo_id)
Handle received packet during PXE Boot Server Discovery.
static void dhcp_request_rx(struct dhcp_session *dhcp, struct dhcp_packet *dhcppkt, struct sockaddr_in *peer, uint8_t msgtype, struct in_addr server_id, struct in_addr pseudo_id)
Handle received packet during DHCP request.
static uint8_t dhcp_request_options_data[]
Raw option data for options common to all DHCP requests.
static void dhcp_timer_expired(struct retry_timer *timer, int fail)
Handle DHCP retry timer expiry.
static struct dhcp_session_state dhcp_state_request
DHCP request state operations.
static struct sockaddr dhcp_peer
DHCP peer address for socket opening.
static void dhcp_request_expired(struct dhcp_session *dhcp)
Handle timer expiry during DHCP discovery.
static const uint8_t dhcp_op[]
DHCP operation types.
static int dhcp_deliver(struct dhcp_session *dhcp, struct io_buffer *iobuf, struct xfer_metadata *meta)
Receive new data.
static int dhcp_request_tx(struct dhcp_session *dhcp, struct dhcp_packet *dhcppkt, struct sockaddr_in *peer)
Construct transmitted packet for DHCP request.
static int dhcp_has_pxeopts(struct dhcp_packet *dhcppkt)
Check if DHCP packet contains PXE options.
static void dhcp_pxebs_expired(struct dhcp_session *dhcp)
Handle timer expiry during PXE Boot Server Discovery.
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.
static int dhcp_tx(struct dhcp_session *dhcp)
Transmit DHCP request.
static void dhcp_set_state(struct dhcp_session *dhcp, struct dhcp_session_state *state)
Transition to new DHCP session state.
static int dhcp_proxy_tx(struct dhcp_session *dhcp, struct dhcp_packet *dhcppkt, struct sockaddr_in *peer)
Construct transmitted packet for ProxyDHCP request.
static struct interface_operation dhcp_xfer_operations[]
DHCP data transfer interface operations.
static int dhcp_discovery_tx(struct dhcp_session *dhcp, struct dhcp_packet *dhcppkt __unused, struct sockaddr_in *peer)
Construct transmitted packet for DHCP discovery.
void dhcppkt_init(struct dhcp_packet *dhcppkt, struct dhcphdr *data, size_t len)
Initialise DHCP packet.
int dhcppkt_store(struct dhcp_packet *dhcppkt, unsigned int tag, const void *data, size_t len)
Store value of DHCP packet setting.
int dhcppkt_fetch(struct dhcp_packet *dhcppkt, unsigned int tag, void *data, size_t len)
Fetch value of DHCP packet setting.
static struct dhcp_packet * dhcppkt_get(struct dhcp_packet *dhcppkt)
Increment reference count on DHCP packet.
static void dhcppkt_put(struct dhcp_packet *dhcppkt)
Decrement reference count on DHCP packet.
static size_t dhcppkt_len(struct dhcp_packet *dhcppkt)
Get used length of DHCP packet.
const struct setting ip_setting
uint8_t data[48]
Additional event data.
uint8_t meta
Metadata flags.
static struct net_device * netdev
#define AF_INET
IPv4 Internet addresses.
#define __unused
Declare a variable or data structure as unused.
#define DBG(...)
Print a debugging message.
#define DHCP_CLIENT_ARCHITECTURE
Client system architecture.
#define DHCP_NTP_SERVERS
NTP servers.
#define DHCP_STATIC_ROUTES
Classless static routes.
#define DHCP_ROOT_PATH
Root path.
#define DHCP_DOMAIN_NAME
Domain name.
#define DHCP_REQUESTED_ADDRESS
Requested IP address.
#define DHCP_CLIENT_UUID
UUID client identifier.
#define DHCP_CLIENT_UUID_TYPE
#define DHCP_VENDOR_PXECLIENT(arch, ndi)
Vendor class identifier for PXE clients.
#define DHCP_MAX_MESSAGE_SIZE
Maximum DHCP message size.
#define DHCP_EB_PRIORITY
Priority of this options block.
#define DHCP_EB_ENCAP
Etherboot-specific encapsulated options.
#define DHCP_SUBNET_MASK
Subnet mask.
#define DHCP_PXE_BOOT_SERVERS
PXE boot servers.
#define DHCP_PXE_BOOT_MENU_ITEM
PXE boot menu item.
#define DHCP_CLIENT_ID
Client identifier.
#define DHCP_VENDOR_ENCAP
Vendor encapsulated options.
#define DHCP_MTU
Maximum transmission unit.
#define DHCP_VENDOR_CLASS_ID
Vendor class identifier.
#define DHCP_ISCSI_INITIATOR_IQN
iSCSI initiator IQN
#define DHCP_PXE_DISCOVERY_CONTROL
PXE boot server discovery control.
#define DHCP_EB_NO_PXEDHCP
Skip PXE DHCP protocol extensions such as ProxyDHCP.
#define DHCP_PARAMETER_REQUEST_LIST
Parameter request list.
#define DHCP_DNS_SERVERS
DNS servers.
#define DHCP_CLIENT_NDI
Client network device interface.
#define DHCP_MESSAGE_TYPE
DHCP message type.
#define DHCP_END
End of options.
#define DHCP_USER_CLASS_ID
User class identifier.
#define DHCP_PXE_BOOT_MENU
PXE boot menu.
#define DHCP_DOMAIN_SEARCH
DNS domain search list.
#define DHCP_EB_BUS_ID
Network device descriptor.
#define DHCP_SERVER_IDENTIFIER
DHCP server identifier.
#define DHCP_BOOTFILE_NAME
Bootfile name.
#define DHCP_HOST_NAME
Host name.
#define DHCP_PXE_BOOT_SERVER_MCAST
PXE boot server multicast address.
#define DHCP_ROUTERS
Routers.
#define DHCP_TFTP_SERVER_NAME
TFTP server name.
#define DHCP_LOG_SERVERS
Syslog servers.
@ 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.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define ENOSPC
No space left on device.
#define EINVAL
Invalid argument.
#define ETIMEDOUT
Connection timed out.
#define ENOMEM
Not enough space.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
#define SETTING_MISC
Miscellaneous settings.
#define le16_to_cpu(value)
#define cpu_to_le16(value)
Dynamic Host Configuration Protocol.
#define PXE_PORT
PXE server port.
#define PXEBS_SETTINGS_NAME
Setting block name used for BootServerDHCP responses.
#define DHCP_OPTION(...)
Construct a DHCP option from a list of bytes.
#define BOOTP_REQUEST
Opcode for a request from client to server.
#define BOOTPS_PORT
BOOTP/DHCP server port.
#define BOOTPC_PORT
BOOTP/DHCP client port.
#define DHCP_STRING(...)
Construct a DHCP option from a list of characters.
#define PROXYDHCP_SETTINGS_NAME
Settings block name used for ProxyDHCP responses.
#define DHCP_WORD(value)
Construct a word-valued DHCP option.
#define DHCP_BYTE(value)
Construct a byte-valued DHCP option.
#define BOOTP_FL_BROADCAST
BOOTP reply must be broadcast.
#define BOOTP_REPLY
Opcode for a reply from server to client.
#define DHCP_MAGIC_COOKIE
DHCP magic cookie.
#define DHCP_SETTINGS_NAME
Settings block name used for DHCP responses.
#define DHCP_MIN_LEN
DHCP minimum packet length.
DHCP client architecture definitions.
#define __setting(setting_order, name)
Declare a configuration setting.
Transport-network layer interface.
#define TICKS_PER_SEC
Number of ticks per second.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
void * memset(void *dest, int character, size_t len) __nonnull
void intf_close(struct interface *intf, int rc)
Close an object interface.
void intf_plug_plug(struct interface *a, struct interface *b)
Plug two object interfaces together.
void intf_shutdown(struct interface *intf, int rc)
Shut down an object interface.
#define INTF_DESC(object_type, intf, operations)
Define an object interface descriptor.
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
#define INTF_OP(op_type, object_type, op_func)
Define an object interface operation.
void free_iob(struct io_buffer *iobuf)
Free I/O buffer.
#define iob_put(iobuf, len)
#define iob_disown(iobuf)
Disown an I/O buffer.
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
static size_t iob_tailroom(struct io_buffer *iobuf)
Calculate available space at end of an I/O buffer.
int ipv4_has_any_addr(struct net_device *netdev)
Check if network device has any IPv4 address.
char * inet_ntoa(struct in_addr in)
Convert IPv4 address to dotted-quad notation.
#define DHCP_FEATURES
DHCP feature table.
void * zalloc(size_t size)
Allocate cleared memory.
struct mschapv2_challenge peer
Peer challenge.
Network device management.
static int netdev_link_blocked(struct net_device *netdev)
Check link block state of network device.
static struct net_device * netdev_get(struct net_device *netdev)
Get reference to network device.
#define LL_NAME_ONLY
Local link-layer address functions only as a name.
static void netdev_put(struct net_device *netdev)
Drop reference to network device.
#define __net_device_configurator
Declare a network device configurator.
static struct settings * netdev_settings(struct net_device *netdev)
Get per-netdevice configuration settings block.
int xfer_open_socket(struct interface *intf, int semantics, struct sockaddr *peer, struct sockaddr *local)
Open socket.
Data transfer interface opening.
IP4_t ip
Destination IP address.
long int random(void)
Generate a pseudo-random number between 0 and 2147483647L or 2147483562?
static void(* free)(struct refcnt *refcnt))
#define ref_put(refcnt)
Drop reference to object.
#define ref_init(refcnt, free)
Initialise a reference counter.
void start_timer(struct retry_timer *timer)
Start timer.
void start_timer_fixed(struct retry_timer *timer, unsigned long timeout)
Start timer with a specified timeout.
void stop_timer(struct retry_timer *timer)
Stop timer.
static void start_timer_nodelay(struct retry_timer *timer)
Start timer with no delay.
int register_settings(struct settings *settings, struct settings *parent, const char *name)
Register settings block.
int fetch_raw_setting_copy(struct settings *settings, const struct setting *setting, void **data)
Fetch value of setting.
int fetch_raw_setting(struct settings *settings, const struct setting *setting, void *data, size_t len)
Fetch value of setting.
unsigned long fetch_uintz_setting(struct settings *settings, const struct setting *setting)
Fetch value of unsigned integer setting, or zero.
void unregister_settings(struct settings *settings)
Unregister settings block.
int fetch_ipv4_setting(struct settings *settings, const struct setting *setting, struct in_addr *inp)
Fetch value of IPv4 address setting.
struct settings * find_settings(const char *name)
Find settings block.
int fetch_uuid_setting(struct settings *settings, const struct setting *setting, union uuid *uuid)
Fetch value of UUID setting.
#define offsetof(type, field)
Get offset of a field within a structure.
#define container_of(ptr, type, field)
Get containing structure.
uint16_t priority
Priotity.
char * strerror(int errno)
Retrieve string representation of error number.
int strncmp(const char *first, const char *second, size_t max)
Compare strings.
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
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.
struct settings settings
Settings interface.
struct dhcphdr * dhcphdr
The DHCP packet contents.
uint8_t num_ip
Number of IPv4 addresses.
struct in_addr ip[0]
IPv4 addresses.
DHCP session state operations.
uint8_t min_timeout_sec
Timeout parameters.
uint8_t tx_msgtype
Transmitted message type.
void(* rx)(struct dhcp_session *dhcp, struct dhcp_packet *dhcppkt, struct sockaddr_in *peer, uint8_t msgtype, struct in_addr server_id, struct in_addr pseudo_id)
Handle received packet.
void(* expired)(struct dhcp_session *dhcp)
Handle timer expiry.
const char * name
State name.
int(* tx)(struct dhcp_session *dhcp, struct dhcp_packet *dhcppkt, struct sockaddr_in *peer)
Construct transmitted packet.
struct in_addr offer
Offered IP address.
int proxy_priority
ProxyDHCP offer priority.
struct dhcp_session_state * state
State of the session.
struct in_addr proxy_server
ProxyDHCP server.
struct interface xfer
Data transfer interface.
int no_pxedhcp
ProxyDHCP protocol extensions should be ignored.
uint16_t pxe_type
PXE Boot Server type.
unsigned long start
Start time of the current state (in ticks)
uint32_t xid
Transaction ID (in network-endian order)
int priority
DHCP offer priority.
struct sockaddr_in local
Local socket address.
struct refcnt refcnt
Reference counter.
struct retry_timer timer
Retransmission timer.
struct in_addr * pxe_accept
List of PXE Boot Servers to accept.
struct dhcp_packet * proxy_offer
ProxyDHCP offer.
struct in_addr * pxe_attempt
List of PXE Boot Servers to attempt.
struct net_device * netdev
Network device being configured.
unsigned int count
Transmission counter.
struct in_addr server
DHCP server.
struct interface job
Job control interface.
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 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 hlen
Hardware address length.
An object interface descriptor.
An object interface operation.
void * data
Start of data.
const char *(* ntoa)(const void *ll_addr)
Transcribe link-layer address.
uint8_t ll_addr_len
Link-layer address length.
A network device configurator.
uint64_t tag
Setting tag, if applicable.
struct settings * parent
Parent settings block.
uint16_t sin_port
TCP/IP port (part of struct sockaddr_tcpip)
struct in_addr sin_addr
IPv4 address.
sa_family_t sin_family
Socket address family (part of struct sockaddr)
Generalized socket address structure.
#define table_num_entries(table)
Get number of entries in linker table.
#define table_start(table)
Get start of linker table.
unsigned long currticks(void)
Get current system time in ticks.
uint32_t data_len
Microcode data size (or 0 to indicate 2000 bytes)
static void uuid_mangle(union uuid *uuid)
Change UUID endianness.
int xfer_deliver(struct interface *intf, struct io_buffer *iobuf, struct xfer_metadata *meta)
Deliver datagram.
struct io_buffer * xfer_alloc_iob(struct interface *intf, size_t len)
Allocate I/O buffer.
Data transfer interfaces.