2020-05-11 08:51:44 -06:00
|
|
|
/**************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* Copyright (c) Microsoft Corporation. All rights reserved. */
|
|
|
|
/* */
|
|
|
|
/* This software is licensed under the Microsoft Software License */
|
|
|
|
/* Terms for Microsoft Azure RTOS. Full text of the license can be */
|
|
|
|
/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
|
|
|
|
/* and in the root directory of this software. */
|
|
|
|
/* */
|
|
|
|
/**************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
/**************************************************************************/
|
|
|
|
/**************************************************************************/
|
|
|
|
/** */
|
|
|
|
/** NetX Component */
|
|
|
|
/** */
|
|
|
|
/** Dynamic Host Configuration Protocol (DHCP) */
|
|
|
|
/** */
|
|
|
|
/**************************************************************************/
|
|
|
|
/**************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
/**************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* APPLICATION INTERFACE DEFINITION RELEASE */
|
|
|
|
/* */
|
|
|
|
/* nx_dhcp.h PORTABLE C */
|
2022-01-26 23:52:30 +00:00
|
|
|
/* 6.1.10 */
|
2020-05-11 08:51:44 -06:00
|
|
|
/* AUTHOR */
|
|
|
|
/* */
|
|
|
|
/* Yuxin Zhou, Microsoft Corporation */
|
|
|
|
/* */
|
|
|
|
/* DESCRIPTION */
|
|
|
|
/* */
|
|
|
|
/* This file defines the NetX Dynamic Host Configuration Protocol */
|
|
|
|
/* (DHCP) component, including all data types and external references. */
|
|
|
|
/* It is assumed that nx_api.h and nx_port.h have already been */
|
|
|
|
/* included. */
|
|
|
|
/* */
|
|
|
|
/* RELEASE HISTORY */
|
|
|
|
/* */
|
|
|
|
/* DATE NAME DESCRIPTION */
|
|
|
|
/* */
|
|
|
|
/* 05-19-2020 Yuxin Zhou Initial Version 6.0 */
|
2020-10-09 12:30:51 -07:00
|
|
|
/* 09-30-2020 Yuxin Zhou Modified comment(s), */
|
|
|
|
/* resulting in version 6.1 */
|
2021-07-28 07:24:17 +00:00
|
|
|
/* 08-02-2021 Yuxin Zhou Modified comment(s), supported*/
|
|
|
|
/* adding additional request */
|
|
|
|
/* option in parameter request,*/
|
|
|
|
/* resulting in version 6.1.8 */
|
2022-01-26 23:52:30 +00:00
|
|
|
/* 01-31-2022 Yuxin Zhou Modified comment(s), supported*/
|
|
|
|
/* multiple client instances, */
|
|
|
|
/* resulting in version 6.1.10 */
|
2020-05-11 08:51:44 -06:00
|
|
|
/* */
|
|
|
|
/**************************************************************************/
|
|
|
|
|
|
|
|
#ifndef NX_DHCP_H
|
|
|
|
#define NX_DHCP_H
|
|
|
|
|
|
|
|
/* Determine if a C++ compiler is being used. If so, ensure that standard
|
|
|
|
C is used to process the API information. */
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
|
|
/* Yes, C++ compiler is present. Use standard C. */
|
|
|
|
extern "C" {
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "nx_api.h"
|
|
|
|
#include "nx_udp.h"
|
|
|
|
#include "nx_ip.h"
|
|
|
|
|
|
|
|
|
|
|
|
/* Enable BOOTP protocol instead of DHCP, define this option.
|
|
|
|
#define NX_DHCP_ENABLE_BOOTP
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Enable support for client state preserved between reboots
|
|
|
|
#define NX_DHCP_CLIENT_RESTORE_STATE
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Enable the DHCP Client to accept a pointer to the DHCP packet pool.
|
|
|
|
#define NX_DHCP_CLIENT_USER_CREATE_PACKET_POOL
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Enables an ARP probe for verifying the assigned DHCP address is
|
|
|
|
not owned by another host. This is recommended, but not required by RFC 2131 (4.4.1).
|
|
|
|
#define NX_DHCP_CLIENT_SEND_ARP_PROBE
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Enables DHCP Client send Maximum DHCP Message Size Option. RFC2132, Section9.10, Page29.
|
|
|
|
#define NX_DHCP_CLIENT_SEND_MAX_DHCP_MESSAGE_OPTION
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Defined, the host name is checked, the host name must follow the rules for ARPANET host names.
|
|
|
|
RFC 1035, Section 2.3.1, Page 8. The default is disabled.
|
|
|
|
#define NX_DHCP_CLIENT_ENABLE_HOST_NAME_CHECK
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Define the DHCP ID that is used to mark the DHCP structure as created. */
|
|
|
|
#define NX_DHCP_ID 0x44484350UL
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the DHCP stack size. */
|
|
|
|
#ifndef NX_DHCP_THREAD_STACK_SIZE
|
|
|
|
#define NX_DHCP_THREAD_STACK_SIZE (4096)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the number of interfaces the Client is running on. This can be any
|
|
|
|
size but practically speaking should be less than or equal to the number
|
|
|
|
of physical interfaces attached to the IP instance (NX_MAX_PHYSICAL_INTERFACES). */
|
|
|
|
/* Note: User can redefine the symbol to reduce the size of records if the dhcp interfaces
|
|
|
|
are less than true physical interfaces.
|
|
|
|
For example: There are three physical interfaces, but only two interfaces enable DHCP,
|
|
|
|
the recommended value for NX_DHCP_CLIENT_MAX_RECORDS should be 2. */
|
|
|
|
#ifndef NX_DHCP_CLIENT_MAX_RECORDS
|
|
|
|
#define NX_DHCP_CLIENT_MAX_RECORDS (NX_MAX_PHYSICAL_INTERFACES)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the DHCP stack priority. This priority must be high enough to insure the
|
|
|
|
DHCP client gets scheduled promptly, and thus assigned an IP address. Assigning
|
|
|
|
it a higher priority increases the risk of 'starving' out the IP thread task which
|
|
|
|
needs to initialize the network driver (which is required to be able to transmit packets). */
|
|
|
|
#ifndef NX_DHCP_THREAD_PRIORITY
|
|
|
|
#define NX_DHCP_THREAD_PRIORITY 3
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* Define DHCP timer expiration interval. */
|
|
|
|
#ifndef NX_DHCP_TIME_INTERVAL
|
|
|
|
#define NX_DHCP_TIME_INTERVAL (1 * NX_IP_PERIODIC_RATE)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2021-07-28 07:24:17 +00:00
|
|
|
/* Define the max number of user request parameter.
|
|
|
|
Subnet mask, gateway and dns server options are added in _nx_dhcp_request_parameters arrary by default. */
|
|
|
|
#ifndef NX_DHCP_CLIENT_MAX_USER_REQUEST_PARAMETER
|
|
|
|
#define NX_DHCP_CLIENT_MAX_USER_REQUEST_PARAMETER 4
|
|
|
|
#endif /* NX_DHCP_CLIENT_MAX_USER_REQUEST_PARAMETER */
|
|
|
|
|
|
|
|
|
2020-05-11 08:51:44 -06:00
|
|
|
/* Define the size of DHCP options buffer. */
|
|
|
|
/* A DHCP client must be prepared to receive DHCP messages with an 'options' field of
|
|
|
|
at least length 312 octets. RFC 2131; Section 2. Protocol Summary. */
|
|
|
|
#ifndef NX_DHCP_OPTIONS_BUFFER_SIZE
|
|
|
|
#define NX_DHCP_OPTIONS_BUFFER_SIZE 312
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the size of the BOOT buffer. This should be large enough for all the
|
|
|
|
required DHCP header fields plus the minimum requirement of 312 bytes of option data
|
|
|
|
(total: 548 bytes) as per RFC 2131; Section 2. Protocol Summary. */
|
|
|
|
#define NX_BOOT_CLIENT_BUFFER_SIZE 548
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the minimum IP datafram size as per RFC 2131; Section 2. Protocol Summary.
|
|
|
|
A DHCP Client must be prepared to receive a message of up to 576 bytes:
|
|
|
|
IP header(20 bytes), UDP header (8 bytes), required DHCP header fields (236 bytes)
|
|
|
|
and the minimum requirement of option data(312 bytes). */
|
|
|
|
#define NX_DHCP_MINIMUM_IP_DATAGRAM 576
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the packet payload size, keeping in mind the DHCP Client must be prepared to
|
|
|
|
receive a message of up to 576 octets and allow room for physical network header,
|
|
|
|
as per RFC 2131; Section 2. Protocol Summary. */
|
|
|
|
#ifndef NX_DHCP_PACKET_PAYLOAD
|
|
|
|
#define NX_DHCP_PACKET_PAYLOAD (NX_DHCP_MINIMUM_IP_DATAGRAM + NX_PHYSICAL_HEADER)
|
|
|
|
#endif /* NX_DHCP_PACKET_PAYLOAD */
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the packet pool size. */
|
|
|
|
#ifndef NX_DHCP_PACKET_POOL_SIZE
|
|
|
|
#define NX_DHCP_PACKET_POOL_SIZE (5 * NX_DHCP_PACKET_PAYLOAD)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* Define time out options for retransmission in seconds. */
|
|
|
|
/* Define the minimum amount of time to retransmit a DHCP IP address request. The
|
|
|
|
recommended wait time is 4 seconds in RFC 2131. */
|
|
|
|
#ifndef NX_DHCP_MIN_RETRANS_TIMEOUT
|
|
|
|
#define NX_DHCP_MIN_RETRANS_TIMEOUT (4 * NX_IP_PERIODIC_RATE)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the maximum amount of time to retransmit a DHCP IP address request. The
|
|
|
|
recommended wait time is 64 seconds in RFC 2131. */
|
|
|
|
#ifndef NX_DHCP_MAX_RETRANS_TIMEOUT
|
|
|
|
#define NX_DHCP_MAX_RETRANS_TIMEOUT (64 * NX_IP_PERIODIC_RATE)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the minimum amount of time to retransmit a DHCP renew/rebind request. The
|
|
|
|
recommended wait time is 60 seconds in RFC 2131. */
|
|
|
|
#ifndef NX_DHCP_MIN_RENEW_TIMEOUT
|
|
|
|
#define NX_DHCP_MIN_RENEW_TIMEOUT (60 * NX_IP_PERIODIC_RATE)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* Define UDP socket create options. */
|
|
|
|
#ifndef NX_DHCP_TYPE_OF_SERVICE
|
|
|
|
#define NX_DHCP_TYPE_OF_SERVICE NX_IP_NORMAL
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef NX_DHCP_FRAGMENT_OPTION
|
|
|
|
#define NX_DHCP_FRAGMENT_OPTION NX_DONT_FRAGMENT
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef NX_DHCP_TIME_TO_LIVE
|
|
|
|
#define NX_DHCP_TIME_TO_LIVE 0x80
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef NX_DHCP_QUEUE_DEPTH
|
|
|
|
#define NX_DHCP_QUEUE_DEPTH 4
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NX_DHCP_CLIENT_SEND_ARP_PROBE
|
|
|
|
|
|
|
|
/* Define the timing and retry constants for ARP probe. RFC5227, Section1.1, Page 5. */
|
|
|
|
#ifndef NX_DHCP_ARP_PROBE_WAIT
|
|
|
|
#define NX_DHCP_ARP_PROBE_WAIT (1 * NX_IP_PERIODIC_RATE)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Define the number of ARP probes sent. */
|
|
|
|
#ifndef NX_DHCP_ARP_PROBE_NUM
|
|
|
|
#define NX_DHCP_ARP_PROBE_NUM 3
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Define the minimum and maximum variation in the interval between ARP probe transmissions. */
|
|
|
|
#ifndef NX_DHCP_ARP_PROBE_MIN
|
|
|
|
#define NX_DHCP_ARP_PROBE_MIN (1 * NX_IP_PERIODIC_RATE)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef NX_DHCP_ARP_PROBE_MAX
|
|
|
|
#define NX_DHCP_ARP_PROBE_MAX (2 * NX_IP_PERIODIC_RATE)
|
|
|
|
#endif
|
|
|
|
#endif /* NX_DHCP_CLIENT_SEND_ARP_PROBE */
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the wait time before restarting the configuration process when DHCP detects that the address is
|
|
|
|
already in use.
|
|
|
|
|
|
|
|
The client SHOULD wait a minimum of ten seconds before restarting the configuration process
|
|
|
|
to avoid excessive network traffic in case of looping. RFC2131, Section 3.1, Page 17. */
|
|
|
|
#ifndef NX_DHCP_RESTART_WAIT
|
|
|
|
#define NX_DHCP_RESTART_WAIT (10 * NX_IP_PERIODIC_RATE)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the BootP Message Area Offsets. The DHCP message format is identical to that of BootP, except
|
|
|
|
for the Vendor options that start at the offset specified by NX_BOOTP_OFFSET_OPTIONS. */
|
|
|
|
#define NX_BOOTP_OFFSET_OP 0 /* 1 BootP Operation 1=req, 2=reply */
|
|
|
|
#define NX_BOOTP_OFFSET_HTYPE 1 /* 1 Hardware type 1 = Ethernet */
|
|
|
|
#define NX_BOOTP_OFFSET_HLEN 2 /* 1 Hardware address length, 6 for Ethernet */
|
|
|
|
#define NX_BOOTP_OFFSET_HOPS 3 /* 1 Number of hops, usually 0 */
|
|
|
|
#define NX_BOOTP_OFFSET_XID 4 /* 4 Transaction ID, pseudo random number */
|
|
|
|
#define NX_BOOTP_OFFSET_SECS 8 /* 2 Seconds since boot */
|
|
|
|
#define NX_BOOTP_OFFSET_FLAGS 10 /* 2 Flags, 0x80 = Broadcast response, 0 = unicast response */
|
|
|
|
#define NX_BOOTP_OFFSET_CLIENT_IP 12 /* 4 Initial client IP, used as dest for unicast response */
|
|
|
|
#define NX_BOOTP_OFFSET_YOUR_IP 16 /* 4 Assigned IP, initialized to 0.0.0.0 */
|
|
|
|
#define NX_BOOTP_OFFSET_SERVER_IP 20 /* 4 Server IP, usually initialized to 0.0.0.0 */
|
|
|
|
#define NX_BOOTP_OFFSET_GATEWAY_IP 24 /* 4 gateway IP, usually 0.0.0.0, only for BootP and TFTP */
|
|
|
|
#define NX_BOOTP_OFFSET_CLIENT_HW 28 /* 16 Client hardware address */
|
|
|
|
#define NX_BOOTP_OFFSET_SERVER_NM 44 /* 64 Server name, nulls if unused */
|
|
|
|
#define NX_BOOTP_OFFSET_BOOT_FILE 108 /* 128 Boot file name, null if unused */
|
|
|
|
#define NX_BOOTP_OFFSET_VENDOR 236 /* 64 Vendor options, set first 4 bytes to a magic number */
|
|
|
|
#define NX_BOOTP_OFFSET_OPTIONS 240 /* First variable vendor option */
|
|
|
|
#define NX_BOOTP_OFFSET_END 300 /* End of BOOTP buffer */
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the DHCP Specific Vendor Extensions. */
|
|
|
|
#define NX_DHCP_OPTION_PAD 0
|
|
|
|
#define NX_DHCP_OPTION_PAD_SIZE 0
|
|
|
|
#define NX_DHCP_OPTION_SUBNET_MASK 1
|
|
|
|
#define NX_DHCP_OPTION_SUBNET_MASK_SIZE 4
|
|
|
|
#define NX_DHCP_OPTION_TIME_OFFSET 2
|
|
|
|
#define NX_DHCP_OPTION_TIME_OFFSET_SIZE 4
|
|
|
|
#define NX_DHCP_OPTION_GATEWAYS 3
|
|
|
|
#define NX_DHCP_OPTION_TIMESVR 4
|
|
|
|
#define NX_DHCP_OPTION_DNS_SVR 6
|
|
|
|
#define NX_DHCP_OPTION_HOST_NAME 12
|
|
|
|
#define NX_DHCP_OPTION_DNS_NAME 15
|
|
|
|
#define NX_DHCP_OPTION_NTP_SVR 42
|
|
|
|
#define NX_DHCP_OPTION_VENDOR_OPTIONS 43
|
|
|
|
#define NX_DHCP_OPTION_DHCP_IP_REQ 50
|
|
|
|
#define NX_DHCP_OPTION_DHCP_IP_REQ_SIZE 4
|
|
|
|
#define NX_DHCP_OPTION_DHCP_LEASE 51
|
|
|
|
#define NX_DHCP_OPTION_DHCP_LEASE_SIZE 4
|
|
|
|
#define NX_DHCP_OPTION_DHCP_TYPE 53
|
|
|
|
#define NX_DHCP_OPTION_DHCP_TYPE_SIZE 1
|
|
|
|
#define NX_DHCP_OPTION_DHCP_SERVER 54
|
|
|
|
#define NX_DHCP_OPTION_DHCP_SERVER_SIZE 4
|
|
|
|
#define NX_DHCP_OPTION_DHCP_PARAMETERS 55
|
|
|
|
#define NX_DHCP_OPTION_DHCP_MESSAGE 56
|
|
|
|
#define NX_DHCP_OPTION_MAX_DHCP_MESSAGE 57
|
|
|
|
#define NX_DHCP_OPTION_RENEWAL 58
|
|
|
|
#define NX_DHCP_OPTION_RENEWAL_SIZE 4
|
|
|
|
#define NX_DHCP_OPTION_REBIND 59
|
|
|
|
#define NX_DHCP_OPTION_REBIND_SIZE 4
|
|
|
|
#define NX_DHCP_OPTION_CLIENT_ID 61
|
|
|
|
#define NX_DHCP_OPTION_CLIENT_ID_SIZE 7 /* 1 byte for address type (01 = Ethernet), 6 bytes for address */
|
|
|
|
#define NX_DHCP_OPTION_FDQN 81
|
|
|
|
#define NX_DHCP_OPTION_FDQN_FLAG_N 8
|
|
|
|
#define NX_DHCP_OPTION_FDQN_FLAG_E 4
|
|
|
|
#define NX_DHCP_OPTION_FDQN_FLAG_O 2
|
|
|
|
#define NX_DHCP_OPTION_FDQN_FLAG_S 1
|
|
|
|
#define NX_DHCP_OPTION_END 255
|
|
|
|
#define NX_DHCP_OPTION_END_SIZE 0
|
|
|
|
|
|
|
|
|
|
|
|
/* Define various BootP/DHCP constants. */
|
|
|
|
#define NX_DHCP_SERVER_UDP_PORT 67
|
|
|
|
#define NX_DHCP_SERVER_TCP_PORT 67
|
|
|
|
#define NX_DHCP_CLIENT_UDP_PORT 68
|
|
|
|
#define NX_DHCP_CLIENT_TCP_PORT 68
|
|
|
|
|
|
|
|
#define NX_BOOTP_OP_REQUEST 1
|
|
|
|
#define NX_BOOTP_OP_REPLY 2
|
|
|
|
#define NX_BOOTP_TYPE_ETHERNET 1
|
|
|
|
#define NX_BOOTP_HLEN_ETHERNET 6
|
|
|
|
#define NX_BOOTP_FLAGS_BROADCAST 0x80
|
|
|
|
#define NX_BOOTP_FLAGS_UNICAST 0x00
|
|
|
|
#define NX_BOOTP_MAGIC_COOKIE IP_ADDRESS(99, 130, 83, 99)
|
|
|
|
#define NX_BOOTP_NO_ADDRESS IP_ADDRESS(0, 0, 0, 0)
|
|
|
|
#define NX_BOOTP_BC_ADDRESS IP_ADDRESS(255, 255, 255, 255)
|
|
|
|
#define NX_AUTO_IP_ADDRESS IP_ADDRESS(169, 254, 0, 0)
|
|
|
|
#define NX_AUTO_IP_ADDRESS_MASK 0xFFFF0000UL
|
|
|
|
|
|
|
|
#define NX_DHCP_INFINITE_LEASE 0xffffffffUL
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the DHCP Message Types. */
|
|
|
|
#define NX_DHCP_TYPE_DHCPDISCOVER 1
|
|
|
|
#define NX_DHCP_TYPE_DHCPOFFER 2
|
|
|
|
#define NX_DHCP_TYPE_DHCPREQUEST 3
|
|
|
|
#define NX_DHCP_TYPE_DHCPDECLINE 4
|
|
|
|
#define NX_DHCP_TYPE_DHCPACK 5
|
|
|
|
#define NX_DHCP_TYPE_DHCPNACK 6
|
|
|
|
#define NX_DHCP_TYPE_DHCPRELEASE 7
|
|
|
|
#define NX_DHCP_TYPE_DHCPINFORM 8
|
|
|
|
#define NX_DHCP_TYPE_DHCPFORCERENEW 9
|
|
|
|
#ifdef NX_DHCP_ENABLE_BOOTP
|
|
|
|
#define NX_DHCP_TYPE_BOOT_REQUEST 10
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the states of the DHCP state machine. */
|
|
|
|
#define NX_DHCP_STATE_NOT_STARTED 0 /* Not started */
|
|
|
|
#define NX_DHCP_STATE_BOOT 1 /* Started with a previous address */
|
|
|
|
#define NX_DHCP_STATE_INIT 2 /* Started with no previous address */
|
|
|
|
#define NX_DHCP_STATE_SELECTING 3 /* Waiting to identify a DHCP server */
|
|
|
|
#define NX_DHCP_STATE_REQUESTING 4 /* Address requested, waiting for the Ack */
|
|
|
|
#define NX_DHCP_STATE_BOUND 5 /* Address established, no time outs */
|
|
|
|
#define NX_DHCP_STATE_RENEWING 6 /* Address established, renewal time out */
|
|
|
|
#define NX_DHCP_STATE_REBINDING 7 /* Address established, renewal and rebind time out */
|
|
|
|
#define NX_DHCP_STATE_FORCERENEW 8 /* Address established, force renewal */
|
|
|
|
#define NX_DHCP_STATE_ADDRESS_PROBING 9 /* Address probing, address conflict detection */
|
|
|
|
|
|
|
|
/* Define error codes from DHCP API. */
|
|
|
|
#define NX_DHCP_ERROR 0x90 /* General DHCP error code */
|
|
|
|
#define NX_DHCP_NO_RESPONSE 0x91 /* No response from server for option request */
|
|
|
|
#define NX_DHCP_BAD_IP_ADDRESS 0x92 /* Bad IP address or invalid interface input */
|
|
|
|
#define NX_DHCP_ALREADY_STARTED 0x93 /* DHCP was already started */
|
|
|
|
#define NX_DHCP_NOT_BOUND 0x94 /* DHCP is not in a bound state */
|
|
|
|
#define NX_DHCP_DEST_TO_SMALL 0x95 /* DHCP response is too big for destination */
|
|
|
|
#define NX_DHCP_NOT_STARTED 0x96 /* DHCP was not started when stop was issued */
|
|
|
|
#define NX_DHCP_PARSE_ERROR 0x97 /* Error extracting DHCP option data */
|
|
|
|
#define NX_DHCP_BAD_XID 0x98 /* DHCP packet received with mismatched XID */
|
|
|
|
#define NX_DHCP_BAD_MAC_ADDRESS 0x99 /* DHCP packet received with mismatched MAC address */
|
|
|
|
#define NX_DHCP_INVALID_MESSAGE 0x9B /* Invalid message received or requested to send */
|
|
|
|
#define NX_DHCP_INVALID_PAYLOAD 0x9C /* Client receives DHCP message exceeding packet payload */
|
|
|
|
#define NX_DHCP_INVALID_IP_REQUEST 0x9D /* Null IP address input for requesting IP address */
|
|
|
|
#define NX_DHCP_UNKNOWN_OPTION 0x9F /* This option is unknow. */
|
|
|
|
#define NX_DHCP_INTERFACE_ALREADY_ENABLED 0xA3 /* Interface is already enabled */
|
|
|
|
#define NX_DHCP_INTERFACE_NOT_ENABLED 0xA4 /* If interface not enabled for DHCP interaction */
|
|
|
|
#define NX_DHCP_NO_INTERFACES_ENABLED 0xA5 /* No interfaces enabled for DHCP interaction */
|
|
|
|
#define NX_DHCP_NO_INTERFACES_STARTED 0xA6 /* If DHCP CLient fails to start any interfacers */
|
|
|
|
#define NX_DHCP_NO_RECORDS_AVAILABLE 0xA7 /* No Client record available to start DHCP on an interface */
|
|
|
|
#define NX_DHCP_INVALID_NAME 0xA8 /* Client host name has invalid characters */
|
|
|
|
|
|
|
|
|
|
|
|
/* Define DHCP Client thread events. */
|
|
|
|
#define NX_DHCP_CLIENT_RECEIVE_EVENT 0x00000001 /* DHCP Server data received */
|
|
|
|
#define NX_DHCP_CLIENT_TIMER_EVENT 0x00000002 /* DHCP timer expires */
|
|
|
|
#define NX_DHCP_CLIENT_CONFLICT_EVENT 0x00000004 /* IP conflict event detected */
|
|
|
|
#define NX_DHCP_CLIENT_ALL_EVENTS 0xFFFFFFFF /* All DHCP events */
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NX_DHCP_CLIENT_RESTORE_STATE
|
|
|
|
|
|
|
|
/* Define a Client record for restore DHCP Client state from non volatile memory/across reboots. */
|
|
|
|
typedef struct NX_DHCP_CLIENT_RECORD_STRUCT
|
|
|
|
{
|
|
|
|
UCHAR nx_dhcp_state; /* The current state of the DHCP Client */
|
|
|
|
ULONG nx_dhcp_ip_address; /* Server assigned IP Address */
|
|
|
|
ULONG nx_dhcp_network_mask; /* Server assigned network mask */
|
|
|
|
ULONG nx_dhcp_gateway_address; /* Server assigned gateway address */
|
|
|
|
UINT nx_dhcp_interface_index; /* Index of DHCP Client network interface */
|
|
|
|
ULONG nx_dhcp_timeout; /* The current value of any timeout, in seconds */
|
|
|
|
ULONG nx_dhcp_server_ip; /* The server IP Address */
|
|
|
|
ULONG nx_dhcp_lease_remain_time; /* Time remaining before lease expires */
|
|
|
|
ULONG nx_dhcp_lease_time; /* The current Lease Time in seconds */
|
|
|
|
ULONG nx_dhcp_renewal_time; /* Renewal Time in seconds */
|
|
|
|
ULONG nx_dhcp_rebind_time; /* Rebind Time in seconds */
|
|
|
|
ULONG nx_dhcp_renewal_remain_time;/* Time remaining to renew (before rebinding necessary) */
|
|
|
|
ULONG nx_dhcp_rebind_remain_time; /* Time remaining to rebind (before lease expires) */
|
|
|
|
} NX_DHCP_CLIENT_RECORD;
|
|
|
|
#endif /* NX_DHCP_CLIENT_RESTORE_STATE */
|
|
|
|
|
|
|
|
/* Define the DHCP interface record that contains all the information necessary for a DHCP
|
|
|
|
instance on each interface. */
|
|
|
|
typedef struct NX_DHCP_INTERFACE_RECORD_STRUCT
|
|
|
|
{
|
|
|
|
UCHAR nx_dhcp_record_valid; /* The flag indicate this record is valid. NX_TRUE: valid */
|
|
|
|
UCHAR nx_dhcp_state; /* The current state of the DHCP Client */
|
|
|
|
UCHAR nx_dhcp_user_option; /* User option request */
|
|
|
|
UCHAR reserved;
|
|
|
|
ULONG nx_dhcp_xid; /* Unique transaction ID */
|
|
|
|
ULONG nx_dhcp_seconds; /* Track number of seconds for a DHCP request process */
|
|
|
|
ULONG nx_dhcp_ip_address; /* Server assigned IP Address */
|
|
|
|
ULONG nx_dhcp_gateway_address; /* Server assigned gateway address */
|
|
|
|
ULONG nx_dhcp_server_ip; /* The server IP Address */
|
|
|
|
ULONG nx_dhcp_network_mask; /* Server assigned network mask */
|
|
|
|
UINT nx_dhcp_interface_index; /* Index of DHCP Client network interface */
|
|
|
|
ULONG nx_dhcp_timeout; /* Count down timer for sending out DHCP message */
|
|
|
|
ULONG nx_dhcp_rtr_interval; /* Interval between sending out another DHCP message */
|
|
|
|
ULONG nx_dhcp_lease_remain_time; /* Time remaining before lease expires */
|
|
|
|
ULONG nx_dhcp_lease_time; /* The current Lease Time in seconds */
|
|
|
|
ULONG nx_dhcp_renewal_time; /* Renewal Time in seconds */
|
|
|
|
ULONG nx_dhcp_rebind_time; /* Rebind Time in seconds */
|
|
|
|
ULONG nx_dhcp_renewal_remain_time;/* Time remaining to renew (before rebinding necessary) */
|
|
|
|
ULONG nx_dhcp_rebind_remain_time; /* Time remaining to rebind (before lease expires) */
|
|
|
|
#ifdef NX_DHCP_CLIENT_SEND_ARP_PROBE
|
|
|
|
UINT nx_dhcp_probe_count; /* Number of ARP probes to send to prove IP address unique */
|
|
|
|
#endif
|
|
|
|
UINT nx_dhcp_clear_broadcast; /* Client sends messages with unicast reply requested */
|
|
|
|
UINT nx_dhcp_skip_discovery; /* Indicate if host should skip the discovery message */
|
|
|
|
UCHAR nx_dhcp_options_buffer[NX_DHCP_OPTIONS_BUFFER_SIZE];
|
|
|
|
UINT nx_dhcp_options_size; /* The total size of DHCP options. */
|
|
|
|
|
|
|
|
ULONG nx_dhcp_internal_errors; /* The number of internal DHCP errors encountered */
|
|
|
|
ULONG nx_dhcp_discoveries_sent; /* The number of Discovery sent by the Client */
|
|
|
|
ULONG nx_dhcp_offers_received; /* The number of Offers received by the Client */
|
|
|
|
ULONG nx_dhcp_requests_sent; /* The number of Request attempts made by the Client */
|
|
|
|
ULONG nx_dhcp_acks_received; /* The number of ACKs received by the Client */
|
|
|
|
ULONG nx_dhcp_nacks_received; /* The number of NACKs received by the Client */
|
|
|
|
ULONG nx_dhcp_releases_sent; /* The number of Releases sent by the Client */
|
|
|
|
ULONG nx_dhcp_declines_sent; /* The number of Declines sent by the Client */
|
|
|
|
ULONG nx_dhcp_force_renewal_rec; /* The number of Forced Renewal received by the Client */
|
|
|
|
ULONG nx_dhcp_informs_sent; /* The number of Inform (option requests) sent by the Client*/
|
|
|
|
ULONG nx_dhcp_inform_responses; /* The number of Inform responses */
|
|
|
|
|
|
|
|
} NX_DHCP_INTERFACE_RECORD;
|
|
|
|
|
|
|
|
|
|
|
|
/* Define the DHCP structure that contains all information common to all interfaces on
|
|
|
|
which DHCP Client may run. */
|
|
|
|
typedef struct NX_DHCP_STRUCT
|
|
|
|
{
|
|
|
|
|
|
|
|
ULONG nx_dhcp_id; /* DHCP Structure ID */
|
|
|
|
CHAR *nx_dhcp_name; /* DHCP name supplied at create */
|
|
|
|
NX_IP *nx_dhcp_ip_ptr; /* The associated IP pointer for this DHCP instance */
|
|
|
|
#ifndef NX_DHCP_CLIENT_USER_CREATE_PACKET_POOL
|
|
|
|
NX_PACKET_POOL nx_dhcp_pool; /* The pool of UDP data packets for DHCP messages */
|
|
|
|
UCHAR nx_dhcp_pool_area[NX_DHCP_PACKET_POOL_SIZE];
|
|
|
|
#endif
|
|
|
|
NX_PACKET_POOL *nx_dhcp_packet_pool_ptr; /* Pointer to DHCP Client packet pool */
|
|
|
|
NX_UDP_SOCKET nx_dhcp_socket; /* The Socket used for DHCP messages */
|
|
|
|
TX_THREAD nx_dhcp_thread; /* The DHCP processing thread */
|
|
|
|
UCHAR nx_dhcp_thread_stack[NX_DHCP_THREAD_STACK_SIZE];
|
|
|
|
TX_MUTEX nx_dhcp_mutex; /* The DHCP mutex for protecting access */
|
|
|
|
TX_EVENT_FLAGS_GROUP
|
|
|
|
nx_dhcp_events; /* DHCP Client thread events */
|
|
|
|
TX_TIMER nx_dhcp_timer; /* DHCP Client timeout timer */
|
|
|
|
NX_DHCP_INTERFACE_RECORD
|
|
|
|
nx_dhcp_interface_record[NX_DHCP_CLIENT_MAX_RECORDS];
|
|
|
|
/* Record of DHCP Client state on specific interface */
|
2021-07-28 07:24:17 +00:00
|
|
|
UCHAR nx_dhcp_user_request_parameter[NX_DHCP_CLIENT_MAX_USER_REQUEST_PARAMETER];
|
|
|
|
/* User request parameter */
|
|
|
|
UINT nx_dhcp_user_request_parameter_size;
|
|
|
|
/* User request parameter size */
|
2020-05-11 08:51:44 -06:00
|
|
|
|
|
|
|
#ifdef NX_DHCP_CLIENT_SEND_MAX_DHCP_MESSAGE_OPTION
|
|
|
|
ULONG nx_dhcp_max_dhcp_message_size;
|
|
|
|
/* Maximum length DHCP message DHCP Client will accept */
|
|
|
|
#endif /* NX_DHCP_CLIENT_SEND_MAX_DHCP_MESSAGE_OPTION */
|
|
|
|
|
|
|
|
#ifdef NX_DHCP_CLIENT_SEND_ARP_PROBE
|
|
|
|
UINT nx_dhcp_interface_conflict_flag; /* The flag indicate IP addresses conflict on which interfaces, one bit represent one interface.
|
|
|
|
For examples:
|
|
|
|
0x00000001: interface index 0;
|
|
|
|
0x00000002: interface index 1;
|
|
|
|
0x00000003: interface index 0 and 1; */
|
|
|
|
#endif /* NX_DHCP_CLIENT_SEND_ARP_PROBE */
|
|
|
|
|
|
|
|
/* Define the callback function for DHCP state change notification. If specified
|
|
|
|
by the application, this function is called whenever a state change occurs for
|
|
|
|
the DHCP associated with this IP instance. */
|
|
|
|
VOID (*nx_dhcp_state_change_callback)(struct NX_DHCP_STRUCT *dhcp_ptr, UCHAR new_state);
|
|
|
|
|
|
|
|
/* Define the callback function for DHCP interface state change notification.
|
|
|
|
this function is similar as nx_dhcp_state_change_callback,
|
|
|
|
|
|
|
|
Note: Suggest using state change notification, and use nx_dhcp_interface_state_change_callback
|
|
|
|
if DHCP is running on multiple interfaces. */
|
|
|
|
VOID (*nx_dhcp_interface_state_change_callback)(struct NX_DHCP_STRUCT *dhcp_ptr, UINT iface_index, UCHAR new_state);
|
|
|
|
|
|
|
|
/* Define the callback function for adding specific DHCP user option. */
|
|
|
|
UINT (*nx_dhcp_user_option_add)(struct NX_DHCP_STRUCT *dhcp_ptr, UINT iface_index, UINT message_type, UCHAR *user_option_ptr, UINT *user_option_length);
|
|
|
|
|
2022-01-26 23:52:30 +00:00
|
|
|
/* Define the link between other DHCP structures created by the application. */
|
|
|
|
struct NX_DHCP_STRUCT *nx_dhcp_created_next;
|
|
|
|
|
2020-05-11 08:51:44 -06:00
|
|
|
/* This pointer is reserved for application specific use. */
|
|
|
|
void *nx_dhcp_reserved_ptr;
|
|
|
|
|
|
|
|
} NX_DHCP;
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NX_DHCP_SOURCE_CODE
|
|
|
|
|
|
|
|
/* Application caller is present, perform API mapping. */
|
|
|
|
|
|
|
|
/* Determine if error checking is desired. If so, map DHCP API functions
|
|
|
|
to the appropriate error checking front-ends. Otherwise, map API
|
|
|
|
functions to the core functions that actually perform the work.
|
|
|
|
Note: error checking is enabled by default. */
|
|
|
|
|
|
|
|
#ifdef NX_DISABLE_ERROR_CHECKING
|
|
|
|
|
|
|
|
/* Services without error checking. */
|
|
|
|
|
|
|
|
#define nx_dhcp_create _nx_dhcp_create
|
|
|
|
#define nx_dhcp_packet_pool_set _nx_dhcp_packet_pool_set
|
|
|
|
#define nx_dhcp_request_client_ip _nx_dhcp_request_client_ip
|
|
|
|
#define nx_dhcp_delete _nx_dhcp_delete
|
|
|
|
#define nx_dhcp_decline _nx_dhcp_decline
|
|
|
|
#define nx_dhcp_force_renew _nx_dhcp_force_renew
|
|
|
|
#define nx_dhcp_release _nx_dhcp_release
|
|
|
|
#define nx_dhcp_start _nx_dhcp_start
|
|
|
|
#define nx_dhcp_stop _nx_dhcp_stop
|
|
|
|
#define nx_dhcp_server_address_get _nx_dhcp_server_address_get
|
|
|
|
#define nx_dhcp_state_change_notify _nx_dhcp_state_change_notify
|
2021-07-28 07:24:17 +00:00
|
|
|
#define nx_dhcp_user_option_request _nx_dhcp_user_option_request
|
2020-05-11 08:51:44 -06:00
|
|
|
#define nx_dhcp_user_option_retrieve _nx_dhcp_user_option_retrieve
|
|
|
|
#define nx_dhcp_user_option_convert _nx_dhcp_user_option_convert
|
|
|
|
#define nx_dhcp_user_option_add_callback_set _nx_dhcp_user_option_add_callback_set
|
|
|
|
#define nx_dhcp_reinitialize _nx_dhcp_reinitialize
|
|
|
|
#define nx_dhcp_send_request _nx_dhcp_send_request
|
|
|
|
#define nx_dhcp_set_interface_index _nx_dhcp_set_interface_index
|
|
|
|
#define nx_dhcp_clear_broadcast_flag _nx_dhcp_clear_broadcast_flag
|
|
|
|
#define nx_dhcp_interface_clear_broadcast_flag _nx_dhcp_interface_clear_broadcast_flag
|
|
|
|
#define nx_dhcp_interface_enable _nx_dhcp_interface_enable
|
|
|
|
#define nx_dhcp_interface_disable _nx_dhcp_interface_disable
|
|
|
|
#define nx_dhcp_interface_decline _nx_dhcp_interface_decline
|
|
|
|
#define nx_dhcp_interface_force_renew _nx_dhcp_interface_force_renew
|
|
|
|
#define nx_dhcp_interface_reinitialize _nx_dhcp_interface_reinitialize
|
|
|
|
#define nx_dhcp_interface_release _nx_dhcp_interface_release
|
|
|
|
#define nx_dhcp_interface_request_client_ip _nx_dhcp_interface_request_client_ip
|
|
|
|
#define nx_dhcp_interface_start _nx_dhcp_interface_start
|
|
|
|
#define nx_dhcp_interface_stop _nx_dhcp_interface_stop
|
|
|
|
#define nx_dhcp_interface_send_request _nx_dhcp_interface_send_request
|
|
|
|
#define nx_dhcp_interface_server_address_get _nx_dhcp_interface_server_address_get
|
|
|
|
#define nx_dhcp_interface_state_change_notify _nx_dhcp_interface_state_change_notify
|
|
|
|
#define nx_dhcp_interface_user_option_retrieve _nx_dhcp_interface_user_option_retrieve
|
|
|
|
#ifdef NX_DHCP_CLIENT_RESTORE_STATE
|
|
|
|
#define nx_dhcp_resume _nx_dhcp_resume
|
|
|
|
#define nx_dhcp_suspend _nx_dhcp_suspend
|
|
|
|
#define nx_dhcp_client_get_record _nx_dhcp_client_get_record
|
|
|
|
#define nx_dhcp_client_restore_record _nx_dhcp_client_restore_record
|
|
|
|
#define nx_dhcp_client_update_time_remaining _nx_dhcp_client_update_time_remaining
|
|
|
|
#define nx_dhcp_client_interface_get_record _nx_dhcp_client_interface_get_record
|
|
|
|
#define nx_dhcp_client_interface_restore_record _nx_dhcp_client_interface_restore_record
|
|
|
|
#define nx_dhcp_client_interface_update_time_remaining _nx_dhcp_client_interface_update_time_remaining
|
|
|
|
#endif /* NX_DHCP_CLIENT_RESTORE_STATE */
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
/* Services with error checking. */
|
|
|
|
|
|
|
|
#define nx_dhcp_create _nxe_dhcp_create
|
|
|
|
#define nx_dhcp_packet_pool_set _nxe_dhcp_packet_pool_set
|
|
|
|
#define nx_dhcp_request_client_ip _nxe_dhcp_request_client_ip
|
|
|
|
#define nx_dhcp_delete _nxe_dhcp_delete
|
|
|
|
#define nx_dhcp_decline _nxe_dhcp_decline
|
|
|
|
#define nx_dhcp_force_renew _nxe_dhcp_force_renew
|
|
|
|
#define nx_dhcp_release _nxe_dhcp_release
|
|
|
|
#define nx_dhcp_start _nxe_dhcp_start
|
|
|
|
#define nx_dhcp_stop _nxe_dhcp_stop
|
|
|
|
#define nx_dhcp_server_address_get _nxe_dhcp_server_address_get
|
|
|
|
#define nx_dhcp_state_change_notify _nxe_dhcp_state_change_notify
|
2021-07-28 07:24:17 +00:00
|
|
|
#define nx_dhcp_user_option_request _nxe_dhcp_user_option_request
|
2020-05-11 08:51:44 -06:00
|
|
|
#define nx_dhcp_user_option_retrieve _nxe_dhcp_user_option_retrieve
|
|
|
|
#define nx_dhcp_user_option_convert _nxe_dhcp_user_option_convert
|
|
|
|
#define nx_dhcp_user_option_add_callback_set _nxe_dhcp_user_option_add_callback_set
|
|
|
|
#define nx_dhcp_reinitialize _nxe_dhcp_reinitialize
|
|
|
|
#define nx_dhcp_send_request _nxe_dhcp_send_request
|
|
|
|
#define nx_dhcp_set_interface_index _nxe_dhcp_set_interface_index
|
|
|
|
#define nx_dhcp_clear_broadcast_flag _nxe_dhcp_clear_broadcast_flag
|
|
|
|
#define nx_dhcp_interface_clear_broadcast_flag _nxe_dhcp_interface_clear_broadcast_flag
|
|
|
|
#define nx_dhcp_interface_enable _nxe_dhcp_interface_enable
|
|
|
|
#define nx_dhcp_interface_disable _nxe_dhcp_interface_disable
|
|
|
|
#define nx_dhcp_interface_decline _nxe_dhcp_interface_decline
|
|
|
|
#define nx_dhcp_interface_force_renew _nxe_dhcp_interface_force_renew
|
|
|
|
#define nx_dhcp_interface_reinitialize _nxe_dhcp_interface_reinitialize
|
|
|
|
#define nx_dhcp_interface_release _nxe_dhcp_interface_release
|
|
|
|
#define nx_dhcp_interface_request_client_ip _nxe_dhcp_interface_request_client_ip
|
|
|
|
#define nx_dhcp_interface_start _nxe_dhcp_interface_start
|
|
|
|
#define nx_dhcp_interface_stop _nxe_dhcp_interface_stop
|
|
|
|
#define nx_dhcp_interface_send_request _nxe_dhcp_interface_send_request
|
|
|
|
#define nx_dhcp_interface_server_address_get _nxe_dhcp_interface_server_address_get
|
|
|
|
#define nx_dhcp_interface_state_change_notify _nxe_dhcp_interface_state_change_notify
|
|
|
|
#define nx_dhcp_interface_user_option_retrieve _nxe_dhcp_interface_user_option_retrieve
|
|
|
|
#ifdef NX_DHCP_CLIENT_RESTORE_STATE
|
|
|
|
#define nx_dhcp_resume _nxe_dhcp_resume
|
|
|
|
#define nx_dhcp_suspend _nxe_dhcp_suspend
|
|
|
|
#define nx_dhcp_client_get_record _nxe_dhcp_client_get_record
|
|
|
|
#define nx_dhcp_client_restore_record _nxe_dhcp_client_restore_record
|
|
|
|
#define nx_dhcp_client_update_time_remaining _nxe_dhcp_client_update_time_remaining
|
|
|
|
#define nx_dhcp_client_interface_get_record _nxe_dhcp_client_interface_get_record
|
|
|
|
#define nx_dhcp_client_interface_restore_record _nxe_dhcp_client_interface_restore_record
|
|
|
|
#define nx_dhcp_client_interface_update_time_remaining _nxe_dhcp_client_interface_update_time_remaining
|
|
|
|
#endif /* NX_DHCP_CLIENT_RESTORE_STATE */
|
|
|
|
|
|
|
|
#endif /* NX_DISABLE_ERROR_CHECKING */
|
|
|
|
|
|
|
|
/* Define the prototypes accessible to the application software. */
|
|
|
|
|
|
|
|
UINT nx_dhcp_create(NX_DHCP *dhcp_ptr, NX_IP *ip_ptr, CHAR *name_ptr);
|
|
|
|
UINT nx_dhcp_packet_pool_set(NX_DHCP *dhcp_ptr, NX_PACKET_POOL *packet_pool_ptr);
|
|
|
|
UINT nx_dhcp_request_client_ip(NX_DHCP *dhcp_ptr, ULONG client_ip_address, UINT skip_discover_message);
|
|
|
|
UINT nx_dhcp_delete(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT nx_dhcp_decline(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT nx_dhcp_force_renew(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT nx_dhcp_release(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT nx_dhcp_start(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT nx_dhcp_stop(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT nx_dhcp_server_address_get(NX_DHCP *dhcp_ptr, ULONG *server_address);
|
|
|
|
UINT nx_dhcp_state_change_notify(NX_DHCP *dhcp_ptr, VOID (*dhcp_state_change_notify)(NX_DHCP *dhcp_ptr, UCHAR new_state));
|
2021-07-28 07:24:17 +00:00
|
|
|
UINT nx_dhcp_user_option_request(NX_DHCP *dhcp_ptr, UINT option_code);
|
2020-05-11 08:51:44 -06:00
|
|
|
UINT nx_dhcp_user_option_retrieve(NX_DHCP *dhcp_ptr, UINT request_option, UCHAR *destination_ptr, UINT *destination_size);
|
|
|
|
ULONG nx_dhcp_user_option_convert(UCHAR *source_ptr);
|
|
|
|
UINT nx_dhcp_user_option_add_callback_set(NX_DHCP *dhcp_ptr, UINT (*dhcp_user_option_add)(NX_DHCP *dhcp_ptr, UINT iface_index, UINT message_type, UCHAR *user_option_ptr, UINT *user_option_length));
|
|
|
|
UINT nx_dhcp_reinitialize(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT nx_dhcp_send_request(NX_DHCP *dhcp_ptr, UINT dhcp_message_type);
|
|
|
|
UINT nx_dhcp_set_interface_index(NX_DHCP *dhcp_ptr, UINT interface_index);
|
|
|
|
UINT nx_dhcp_clear_broadcast_flag(NX_DHCP *dhcp_ptr, UINT clear_flag);
|
2020-05-12 16:51:09 -06:00
|
|
|
UINT nx_dhcp_interface_clear_broadcast_flag(NX_DHCP *dhcp_ptr, UINT iface_index, UINT clear_flag);
|
2020-05-11 08:51:44 -06:00
|
|
|
UINT nx_dhcp_interface_enable(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT nx_dhcp_interface_disable(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT nx_dhcp_interface_decline(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT nx_dhcp_interface_force_renew(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT nx_dhcp_interface_release(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT nx_dhcp_interface_reinitialize(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT nx_dhcp_interface_request_client_ip(NX_DHCP *dhcp_ptr, UINT iface_index, ULONG client_ip_address, UINT skip_discover_message);
|
|
|
|
UINT nx_dhcp_interface_start(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT nx_dhcp_interface_stop(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT nx_dhcp_interface_send_request(NX_DHCP *dhcp_ptr, UINT iface_index, UINT dhcp_message_type);
|
|
|
|
UINT nx_dhcp_interface_server_address_get(NX_DHCP *dhcp_ptr, UINT iface_index, ULONG *server_address);
|
|
|
|
UINT nx_dhcp_interface_state_change_notify(NX_DHCP *dhcp_ptr, VOID (*dhcp_interface_state_change_notify)(NX_DHCP *dhcp_ptr, UINT iface_index, UCHAR new_state));
|
|
|
|
UINT nx_dhcp_interface_user_option_retrieve(NX_DHCP *dhcp_ptr, UINT iface_index, UINT option_request, UCHAR *destination_ptr, UINT *destination_size);
|
|
|
|
|
|
|
|
#ifdef NX_DHCP_CLIENT_RESTORE_STATE
|
|
|
|
UINT nx_dhcp_resume(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT nx_dhcp_suspend(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT nx_dhcp_client_get_record(NX_DHCP *dhcp_ptr, NX_DHCP_CLIENT_RECORD *record_ptr);
|
|
|
|
UINT nx_dhcp_client_restore_record(NX_DHCP *dhcp_ptr, NX_DHCP_CLIENT_RECORD *record_ptr, ULONG time_elapsed);
|
|
|
|
UINT nx_dhcp_client_update_time_remaining(NX_DHCP *dhcp_ptr, ULONG time_elapsed);
|
|
|
|
UINT nx_dhcp_client_interface_get_record(NX_DHCP *dhcp_ptr, UINT iface_index, NX_DHCP_CLIENT_RECORD *record_ptr);
|
|
|
|
UINT nx_dhcp_client_interface_restore_record(NX_DHCP *dhcp_ptr, UINT iface_index, NX_DHCP_CLIENT_RECORD *record_ptr, ULONG time_elapsed);
|
|
|
|
UINT nx_dhcp_client_interface_update_time_remaining(NX_DHCP *dhcp_ptr, UINT iface_index, ULONG time_elapsed);
|
|
|
|
#endif /* NX_DHCP_CLIENT_RESTORE_STATE */
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
/* DHCP source code is being compiled, do not perform any API mapping. */
|
|
|
|
|
|
|
|
UINT _nxe_dhcp_create(NX_DHCP *dhcp_ptr, NX_IP *ip_ptr, CHAR *name_ptr);
|
|
|
|
UINT _nx_dhcp_create(NX_DHCP *dhcp_ptr, NX_IP *ip_ptr, CHAR *name_ptr);
|
|
|
|
UINT _nxe_dhcp_packet_pool_set(NX_DHCP *dhcp_ptr, NX_PACKET_POOL *packet_pool_ptr);
|
|
|
|
UINT _nx_dhcp_packet_pool_set(NX_DHCP *dhcp_ptr, NX_PACKET_POOL *packet_pool_ptr);
|
|
|
|
UINT _nxe_dhcp_request_client_ip(NX_DHCP *dhcp_ptr, ULONG client_ip_address, UINT skip_discover_message);
|
|
|
|
UINT _nx_dhcp_request_client_ip(NX_DHCP *dhcp_ptr, ULONG client_ip_address, UINT skip_discover_message);
|
|
|
|
UINT _nxe_dhcp_delete(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nx_dhcp_delete(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nxe_dhcp_decline(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nx_dhcp_decline(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nxe_dhcp_force_renew(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nx_dhcp_force_renew(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nxe_dhcp_release(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nx_dhcp_release(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nxe_dhcp_start(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nx_dhcp_start(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nxe_dhcp_stop(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nx_dhcp_stop(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nxe_dhcp_server_address_get(NX_DHCP *dhcp_ptr, ULONG *server_address);
|
|
|
|
UINT _nx_dhcp_server_address_get(NX_DHCP *dhcp_ptr, ULONG *server_address);
|
|
|
|
UINT _nxe_dhcp_state_change_notify(NX_DHCP *dhcp_ptr, VOID (*dhcp_state_change_notify)(NX_DHCP *dhcp_ptr, UCHAR new_state));
|
|
|
|
UINT _nx_dhcp_state_change_notify(NX_DHCP *dhcp_ptr, VOID (*dhcp_state_change_notify)(NX_DHCP *dhcp_ptr, UCHAR new_state));
|
2021-07-28 07:24:17 +00:00
|
|
|
UINT _nxe_dhcp_user_option_request(NX_DHCP *dhcp_ptr, UINT option_code);
|
|
|
|
UINT _nx_dhcp_user_option_request(NX_DHCP *dhcp_ptr, UINT option_code);
|
2020-05-11 08:51:44 -06:00
|
|
|
UINT _nxe_dhcp_user_option_retrieve(NX_DHCP *dhcp_ptr, UINT request_option, UCHAR *destination_ptr, UINT *destination_size);
|
|
|
|
UINT _nx_dhcp_user_option_retrieve(NX_DHCP *dhcp_ptr, UINT request_option, UCHAR *destination_ptr, UINT *destination_size);
|
|
|
|
ULONG _nxe_dhcp_user_option_convert(UCHAR *source_ptr);
|
|
|
|
ULONG _nx_dhcp_user_option_convert(UCHAR *source_ptr);
|
|
|
|
UINT _nxe_dhcp_reinitialize(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nx_dhcp_reinitialize(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nxe_dhcp_send_request(NX_DHCP *dhcp_ptr, UINT dhcp_message_type);
|
|
|
|
UINT _nx_dhcp_send_request(NX_DHCP *dhcp_ptr, UINT dhcp_message_type);
|
|
|
|
UINT _nxe_dhcp_set_interface_index(NX_DHCP *dhcp_ptr, UINT interface_index);
|
|
|
|
UINT _nx_dhcp_set_interface_index(NX_DHCP *dhcp_ptr, UINT interface_index);
|
|
|
|
UINT _nxe_dhcp_clear_broadcast_flag(NX_DHCP *dhcp_ptr, UINT clear_flag);
|
|
|
|
UINT _nx_dhcp_clear_broadcast_flag(NX_DHCP *dhcp_ptr, UINT clear_flag);
|
|
|
|
UINT _nxe_dhcp_user_option_add_callback_set(NX_DHCP *dhcp_ptr, UINT (*dhcp_user_option_add)(NX_DHCP *dhcp_ptr, UINT iface_index, UINT message_type, UCHAR *user_option_ptr, UINT *user_option_length));
|
|
|
|
UINT _nx_dhcp_user_option_add_callback_set(NX_DHCP *dhcp_ptr, UINT (*dhcp_user_option_add)(NX_DHCP *dhcp_ptr, UINT iface_index, UINT message_type, UCHAR *user_option_ptr, UINT *user_option_length));
|
2020-05-12 16:51:09 -06:00
|
|
|
UINT _nxe_dhcp_interface_clear_broadcast_flag(NX_DHCP *dhcp_ptr, UINT iface_index, UINT clear_flag);
|
|
|
|
UINT _nx_dhcp_interface_clear_broadcast_flag(NX_DHCP *dhcp_ptr, UINT iface_index, UINT clear_flag);
|
2020-05-11 08:51:44 -06:00
|
|
|
UINT _nxe_dhcp_interface_enable(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nx_dhcp_interface_enable(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nxe_dhcp_interface_disable(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nx_dhcp_interface_disable(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nxe_dhcp_interface_decline(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nx_dhcp_interface_decline(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nxe_dhcp_interface_force_renew(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nx_dhcp_interface_force_renew(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nxe_dhcp_interface_release(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nx_dhcp_interface_release(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nxe_dhcp_interface_reinitialize(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nx_dhcp_interface_reinitialize(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nxe_dhcp_interface_start(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nx_dhcp_interface_start(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nxe_dhcp_interface_stop(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nx_dhcp_interface_stop(NX_DHCP *dhcp_ptr, UINT iface_index);
|
|
|
|
UINT _nxe_dhcp_interface_request_client_ip(NX_DHCP *dhcp_ptr, UINT iface_index, ULONG client_ip_address, UINT skip_discover_message);
|
|
|
|
UINT _nx_dhcp_interface_request_client_ip(NX_DHCP *dhcp_ptr, UINT iface_index, ULONG client_ip_address, UINT skip_discover_message);
|
|
|
|
UINT _nxe_dhcp_interface_send_request(NX_DHCP *dhcp_ptr, UINT iface_index, UINT dhcp_message_type);
|
|
|
|
UINT _nx_dhcp_interface_send_request(NX_DHCP *dhcp_ptr, UINT iface_index, UINT dhcp_message_type);
|
|
|
|
UINT _nxe_dhcp_interface_server_address_get(NX_DHCP *dhcp_ptr, UINT iface_index, ULONG *server_address);
|
|
|
|
UINT _nx_dhcp_interface_server_address_get(NX_DHCP *dhcp_ptr, UINT iface_index, ULONG *server_address);
|
|
|
|
UINT _nxe_dhcp_interface_state_change_notify(NX_DHCP *dhcp_ptr, VOID (*dhcp_interface_state_change_notify)(NX_DHCP *dhcp_ptr, UINT iface_index, UCHAR new_state));
|
|
|
|
UINT _nx_dhcp_interface_state_change_notify(NX_DHCP *dhcp_ptr, VOID (*dhcp_interface_state_change_notify)(NX_DHCP *dhcp_ptr, UINT iface_index, UCHAR new_state));
|
|
|
|
UINT _nxe_dhcp_interface_user_option_retrieve(NX_DHCP *dhcp_ptr, UINT iface_index, UINT option_request, UCHAR *destination_ptr, UINT *destination_size);
|
|
|
|
UINT _nx_dhcp_interface_user_option_retrieve(NX_DHCP *dhcp_ptr, UINT iface_index, UINT option_request, UCHAR *destination_ptr, UINT *destination_size);
|
|
|
|
|
|
|
|
#ifdef NX_DHCP_CLIENT_RESTORE_STATE
|
|
|
|
UINT _nxe_dhcp_resume(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nx_dhcp_resume(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nxe_dhcp_suspend(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nx_dhcp_suspend(NX_DHCP *dhcp_ptr);
|
|
|
|
UINT _nxe_dhcp_client_get_record(NX_DHCP *dhcp_ptr, NX_DHCP_CLIENT_RECORD *record_ptr);
|
|
|
|
UINT _nx_dhcp_client_get_record(NX_DHCP *dhcp_ptr, NX_DHCP_CLIENT_RECORD *record_ptr);
|
|
|
|
UINT _nxe_dhcp_client_restore_record(NX_DHCP *dhcp_ptr, NX_DHCP_CLIENT_RECORD *record_ptr, ULONG time_elapsed);
|
|
|
|
UINT _nx_dhcp_client_restore_record(NX_DHCP *dhcp_ptr, NX_DHCP_CLIENT_RECORD *record_ptr, ULONG time_elapsed);
|
|
|
|
UINT _nxe_dhcp_client_update_time_remaining(NX_DHCP *dhcp_ptr, ULONG time_elapsed);
|
|
|
|
UINT _nx_dhcp_client_update_time_remaining(NX_DHCP *dhcp_ptr, ULONG time_elapsed);
|
|
|
|
UINT _nxe_dhcp_client_interface_get_record(NX_DHCP *dhcp_ptr, UINT iface_index, NX_DHCP_CLIENT_RECORD *record_ptr);
|
|
|
|
UINT _nx_dhcp_client_interface_get_record(NX_DHCP *dhcp_ptr, UINT iface_index, NX_DHCP_CLIENT_RECORD *record_ptr);
|
|
|
|
UINT _nxe_dhcp_client_interface_restore_record(NX_DHCP *dhcp_ptr, UINT iface_index, NX_DHCP_CLIENT_RECORD *record_ptr, ULONG time_elapsed);
|
|
|
|
UINT _nx_dhcp_client_interface_restore_record(NX_DHCP *dhcp_ptr, UINT iface_index, NX_DHCP_CLIENT_RECORD *record_ptr, ULONG time_elapsed);
|
|
|
|
UINT _nxe_dhcp_client_interface_update_time_remaining(NX_DHCP *dhcp_ptr, UINT iface_index, ULONG time_elapsed);
|
|
|
|
UINT _nx_dhcp_client_interface_update_time_remaining(NX_DHCP *dhcp_ptr, UINT iface_index, ULONG time_elapsed);
|
|
|
|
#endif /* NX_DHCP_CLIENT_RESTORE_STATE */
|
|
|
|
|
|
|
|
#endif /* NX_DHCP_SOURCE_CODE */
|
|
|
|
|
|
|
|
|
|
|
|
/* Determine if a C++ compiler is being used. If so, complete the standard
|
|
|
|
C conditional started above. */
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
|
|
#endif /* NX_DHCP_H */
|