File syn_dhcp.h¶
FileList > net > syn_dhcp.h
Go to the source code of this file
Zero-Heap Native DHCP Client Protocol Engine. More...
#include "syntropic/common/syn_defs.h"#include "syntropic/net/syn_eth.h"#include "syntropic/pt/syn_pt.h"#include <stdbool.h>#include <stddef.h>#include <stdint.h>
Classes¶
| Type | Name |
|---|---|
| struct | SYN_DHCP |
Public Types¶
| Type | Name |
|---|---|
| enum | SYN_DHCP_State |
Public Functions¶
| Type | Name |
|---|---|
| SYN_Status | syn_dhcp_build_discover (SYN_DHCP * dhcp, const uint8_t mac_addr, uint8_t * buf_out, size_t buf_size, size_t * len_out) Build a DHCPDISCOVER UDP packet payload. |
| SYN_Status | syn_dhcp_build_request (SYN_DHCP * dhcp, const uint8_t mac_addr, uint8_t * buf_out, size_t buf_size, size_t * len_out) Build a DHCPREQUEST UDP packet payload. |
| SYN_Status | syn_dhcp_init (SYN_DHCP * dhcp, uint32_t xid) Initialize DHCP Client Context. |
| SYN_Status | syn_dhcp_process_packet (SYN_DHCP * dhcp, SYN_ETH * eth, const uint8_t * dhcp_pkt, size_t len) Process incoming DHCP response packet payload (DHCPOFFER or DHCPACK). |
Macros¶
| Type | Name |
|---|---|
| define | PT_DHCP_BLOCK_BOUND (pt, task, dhcp) [**PT\_BLOCK\_CONDITION**](syn__pt_8h.md#define-pt_block_condition)(pt, task, (dhcp)->state == SYN\_DHCP\_STATE\_BOUND)Block task execution (SYN_TASK_BLOCKED) until DHCP IP lease binding completes. |
| define | PT_DHCP_WAIT_BOUND (pt, dhcp) [**PT\_WAIT\_UNTIL**](syn__pt_8h.md#define-pt_wait_until)(pt, (dhcp)->state == SYN\_DHCP\_STATE\_BOUND)Block a protothread coroutine until DHCP IP lease binding completes. |
| define | SYN_DHCP_ACK 5U |
| define | SYN_DHCP_CLIENT_PORT 68U |
| define | SYN_DHCP_DECLINE 4U |
| define | SYN_DHCP_DISCOVER 1U |
| define | SYN_DHCP_MAGIC_COOKIE 0x63825363UL |
| define | SYN_DHCP_NAK 6U |
| define | SYN_DHCP_OFFER 2U |
| define | SYN_DHCP_OPT_END 255U |
| define | SYN_DHCP_OPT_LEASE_TIME 51U |
| define | SYN_DHCP_OPT_MSG_TYPE 53U |
| define | SYN_DHCP_OPT_ROUTER 3U |
| define | SYN_DHCP_OPT_SUBNET_MASK 1U |
| define | SYN_DHCP_REQUEST 3U |
| define | SYN_DHCP_SERVER_PORT 67U |
Detailed Description¶
Specifications: * RFC 2131 Dynamic Host Configuration Protocol * UDP Port 68 (Client) <-> Port 67 (Server) * Zero dynamic memory allocation (0 bytes heap) * DHCP Option parsing: Subnet Mask (1), Gateway (3), Lease Time (51), Msg Type (53)
Public Types Documentation¶
enum SYN_DHCP_State¶
enum SYN_DHCP_State {
SYN_DHCP_STATE_INIT = 0,
SYN_DHCP_STATE_DISCOVER,
SYN_DHCP_STATE_OFFER,
SYN_DHCP_STATE_REQUEST,
SYN_DHCP_STATE_BOUND
};
DHCP Client State Machine Enum.
Public Functions Documentation¶
function syn_dhcp_build_discover¶
Build a DHCPDISCOVER UDP packet payload.
SYN_Status syn_dhcp_build_discover (
SYN_DHCP * dhcp,
const uint8_t mac_addr,
uint8_t * buf_out,
size_t buf_size,
size_t * len_out
)
Parameters:
dhcpPointer to DHCP context.mac_addr6-byte client MAC address.buf_outOutput buffer (must hold at least 250 bytes).buf_sizeOutput buffer capacity.len_outPointer to receive byte length of generated payload.
Returns:
SYN_OK on success.
function syn_dhcp_build_request¶
Build a DHCPREQUEST UDP packet payload.
SYN_Status syn_dhcp_build_request (
SYN_DHCP * dhcp,
const uint8_t mac_addr,
uint8_t * buf_out,
size_t buf_size,
size_t * len_out
)
Parameters:
dhcpPointer to DHCP context.mac_addr6-byte client MAC address.buf_outOutput buffer (must hold at least 260 bytes).buf_sizeOutput buffer capacity.len_outPointer to receive byte length of generated payload.
Returns:
SYN_OK on success.
function syn_dhcp_init¶
Initialize DHCP Client Context.
Parameters:
dhcpPointer to DHCP context.xid32-bit transaction ID (e.g. random value or tick count).
Returns:
SYN_OK on success.
function syn_dhcp_process_packet¶
Process incoming DHCP response packet payload (DHCPOFFER or DHCPACK).
SYN_Status syn_dhcp_process_packet (
SYN_DHCP * dhcp,
SYN_ETH * eth,
const uint8_t * dhcp_pkt,
size_t len
)
Parameters:
dhcpPointer to DHCP context.ethPointer to Ethernet context (updated automatically when BOUND).dhcp_pktPointer to incoming DHCP UDP payload.lenPayload byte length.
Returns:
SYN_OK on success, SYN_BUSY if still waiting/in-progress.
Macro Definition Documentation¶
define PT_DHCP_BLOCK_BOUND¶
Block task execution (SYN_TASK_BLOCKED) until DHCP IP lease binding completes.
#define PT_DHCP_BLOCK_BOUND (
pt,
task,
dhcp
) `PT_BLOCK_CONDITION (pt, task, (dhcp)->state == SYN_DHCP_STATE_BOUND)`
Parameters:
ptProtothread context.taskPointer to SYN_Task.dhcpPointer to DHCP context.
define PT_DHCP_WAIT_BOUND¶
Block a protothread coroutine until DHCP IP lease binding completes.
Parameters:
ptProtothread context.dhcpPointer to DHCP context.
define SYN_DHCP_ACK¶
DHCP Message Type: ACK (5)
define SYN_DHCP_CLIENT_PORT¶
DHCP UDP client port (68)
define SYN_DHCP_DECLINE¶
DHCP Message Type: DECLINE (4)
define SYN_DHCP_DISCOVER¶
DHCP Message Type: DISCOVER (1)
define SYN_DHCP_MAGIC_COOKIE¶
DHCP options magic cookie (99.130.83.99)
define SYN_DHCP_NAK¶
DHCP Message Type: NAK (6)
define SYN_DHCP_OFFER¶
DHCP Message Type: OFFER (2)
define SYN_DHCP_OPT_END¶
DHCP Option 255: End Marker
define SYN_DHCP_OPT_LEASE_TIME¶
DHCP Option 51: IP Address Lease Time
define SYN_DHCP_OPT_MSG_TYPE¶
DHCP Option 53: DHCP Message Type
define SYN_DHCP_OPT_ROUTER¶
DHCP Option 3: Router/Gateway IP
define SYN_DHCP_OPT_SUBNET_MASK¶
DHCP Option 1: Subnet Mask
define SYN_DHCP_REQUEST¶
DHCP Message Type: REQUEST (3)
define SYN_DHCP_SERVER_PORT¶
DHCP UDP server port (67)
The documentation for this class was generated from the following file src/syntropic/net/syn_dhcp.h