Skip to content

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)-&gt;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)-&gt;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:

  • dhcp Pointer to DHCP context.
  • mac_addr 6-byte client MAC address.
  • buf_out Output buffer (must hold at least 250 bytes).
  • buf_size Output buffer capacity.
  • len_out Pointer 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:

  • dhcp Pointer to DHCP context.
  • mac_addr 6-byte client MAC address.
  • buf_out Output buffer (must hold at least 260 bytes).
  • buf_size Output buffer capacity.
  • len_out Pointer to receive byte length of generated payload.

Returns:

SYN_OK on success.


function syn_dhcp_init

Initialize DHCP Client Context.

SYN_Status syn_dhcp_init (
    SYN_DHCP * dhcp,
    uint32_t xid
) 

Parameters:

  • dhcp Pointer to DHCP context.
  • xid 32-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:

  • dhcp Pointer to DHCP context.
  • eth Pointer to Ethernet context (updated automatically when BOUND).
  • dhcp_pkt Pointer to incoming DHCP UDP payload.
  • len Payload 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:

  • pt Protothread context.
  • task Pointer to SYN_Task.
  • dhcp Pointer to DHCP context.

define PT_DHCP_WAIT_BOUND

Block a protothread coroutine until DHCP IP lease binding completes.

#define PT_DHCP_WAIT_BOUND (
    pt,
    dhcp
) `PT_WAIT_UNTIL (pt, (dhcp)->state == SYN_DHCP_STATE_BOUND)`

Parameters:

  • pt Protothread context.
  • dhcp Pointer to DHCP context.

define SYN_DHCP_ACK

#define SYN_DHCP_ACK `5U`

DHCP Message Type: ACK (5)


define SYN_DHCP_CLIENT_PORT

#define SYN_DHCP_CLIENT_PORT `68U`

DHCP UDP client port (68)


define SYN_DHCP_DECLINE

#define SYN_DHCP_DECLINE `4U`

DHCP Message Type: DECLINE (4)


define SYN_DHCP_DISCOVER

#define SYN_DHCP_DISCOVER `1U`

DHCP Message Type: DISCOVER (1)


#define SYN_DHCP_MAGIC_COOKIE `0x63825363UL`

DHCP options magic cookie (99.130.83.99)


define SYN_DHCP_NAK

#define SYN_DHCP_NAK `6U`

DHCP Message Type: NAK (6)


define SYN_DHCP_OFFER

#define SYN_DHCP_OFFER `2U`

DHCP Message Type: OFFER (2)


define SYN_DHCP_OPT_END

#define SYN_DHCP_OPT_END `255U`

DHCP Option 255: End Marker


define SYN_DHCP_OPT_LEASE_TIME

#define SYN_DHCP_OPT_LEASE_TIME `51U`

DHCP Option 51: IP Address Lease Time


define SYN_DHCP_OPT_MSG_TYPE

#define SYN_DHCP_OPT_MSG_TYPE `53U`

DHCP Option 53: DHCP Message Type


define SYN_DHCP_OPT_ROUTER

#define SYN_DHCP_OPT_ROUTER `3U`

DHCP Option 3: Router/Gateway IP


define SYN_DHCP_OPT_SUBNET_MASK

#define SYN_DHCP_OPT_SUBNET_MASK `1U`

DHCP Option 1: Subnet Mask


define SYN_DHCP_REQUEST

#define SYN_DHCP_REQUEST `3U`

DHCP Message Type: REQUEST (3)


define SYN_DHCP_SERVER_PORT

#define SYN_DHCP_SERVER_PORT `67U`

DHCP UDP server port (67)



The documentation for this class was generated from the following file src/syntropic/net/syn_dhcp.h