Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
dhcpv4_server.h
Go to the documentation of this file.
1
4
5/*
6 * Copyright (c) 2024 Nordic Semiconductor ASA
7 *
8 * SPDX-License-Identifier: Apache-2.0
9 */
10
11#ifndef ZEPHYR_INCLUDE_NET_DHCPV4_SERVER_H_
12#define ZEPHYR_INCLUDE_NET_DHCPV4_SERVER_H_
13
14#include <zephyr/net/net_ip.h>
15#include <zephyr/sys/clock.h>
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
29
31
32struct net_if;
33
34#define DHCPV4_CLIENT_ID_MAX_SIZE 20
35
39#define DHCPV4_HARDWARE_ADDRESS_MAX_SIZE 16
40
41enum dhcpv4_server_addr_state {
42 DHCPV4_SERVER_ADDR_FREE,
43 DHCPV4_SERVER_ADDR_RESERVED,
44 DHCPV4_SERVER_ADDR_ALLOCATED,
45 DHCPV4_SERVER_ADDR_DECLINED,
46};
47
48struct dhcpv4_client_id {
49 uint8_t hw_addr_type;
50 uint8_t hw_addr_buf[DHCPV4_HARDWARE_ADDRESS_MAX_SIZE];
51 uint8_t hw_addr_len;
52
53 uint8_t buf[DHCPV4_CLIENT_ID_MAX_SIZE];
54 uint8_t len;
55};
56
57struct dhcpv4_addr_slot {
58 enum dhcpv4_server_addr_state state;
59 struct dhcpv4_client_id client_id;
60 struct net_in_addr addr;
61 uint32_t lease_time;
62 k_timepoint_t expiry;
63};
64
66
81int net_dhcpv4_server_start(struct net_if *iface, struct net_in_addr *base_addr);
82
93int net_dhcpv4_server_stop(struct net_if *iface);
94
103typedef void (*net_dhcpv4_lease_cb_t)(struct net_if *iface,
104 struct dhcpv4_addr_slot *lease,
105 void *user_data);
106
121 void *user_data);
122
138typedef int (*net_dhcpv4_server_provider_cb_t)(struct net_if *iface,
139 const struct dhcpv4_client_id *client_id,
140 struct net_in_addr *addr,
141 void *user_data);
149 void *user_data);
150
167 const struct dhcpv4_client_id *client_id,
168 const struct net_in_addr *addr,
169 void *user_data);
177 void *user_data);
178
182
183#ifdef __cplusplus
184}
185#endif
186
187#endif /* ZEPHYR_INCLUDE_NET_DHCPV4_SERVER_H_ */
System clock APIs.
int net_dhcpv4_server_start(struct net_if *iface, struct net_in_addr *base_addr)
Start DHCPv4 server instance on an iface.
void net_dhcpv4_server_set_provider_cb(net_dhcpv4_server_provider_cb_t cb, void *user_data)
Set the callback used to provide addresses to the DHCP server.
void net_dhcpv4_server_set_address_validator_cb(net_dhcpv4_server_address_validator_cb_t cb, void *user_data)
Set the callback used to validate new addresses to the DHCP server.
int(* net_dhcpv4_server_provider_cb_t)(struct net_if *iface, const struct dhcpv4_client_id *client_id, struct net_in_addr *addr, void *user_data)
Callback used to let application provide an address for a given client ID.
Definition dhcpv4_server.h:138
int net_dhcpv4_server_foreach_lease(struct net_if *iface, net_dhcpv4_lease_cb_t cb, void *user_data)
Iterate over all DHCPv4 address leases on a given network interface and call callback for each lease.
int net_dhcpv4_server_stop(struct net_if *iface)
Stop DHCPv4 server instance on an iface.
void(* net_dhcpv4_lease_cb_t)(struct net_if *iface, struct dhcpv4_addr_slot *lease, void *user_data)
Callback used while iterating over active DHCPv4 address leases.
Definition dhcpv4_server.h:103
bool(* net_dhcpv4_server_address_validator_cb_t)(struct net_if *iface, const struct dhcpv4_client_id *client_id, const struct net_in_addr *addr, void *user_data)
Callback used to let application accept or reject a proposed DHCP address.
Definition dhcpv4_server.h:166
IPv6 and IPv4 definitions.
state
Definition parser_state.h:29
#define bool
Definition stdbool.h:13
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
Network Interface structure.
Definition net_if.h:777
IPv4 address struct.
Definition net_ip.h:156