1
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
42
43
49
50
51
52
53
54
55
56
57
58
59
60
61
62
65
66
67
68
69
70
75
76
77
78
79
85
86
87
88
92
93
97
98
99
100
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
133
134
135
142
143
144
145
146
147
148
149
150
151
152
153
154
161
162
163
169
170
171
177
178
179
186
187
188
189
190
191
192
/* ... */
#ifndef __DHCPS_H__
#define __DHCPS_H__
#include "sdkconfig.h"
#include <stdbool.h>
#include "lwip/ip_addr.h"
#include "lwip/err.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct dhcps_state{
s16_t state;
}{ ... } dhcps_state;
typedef struct dhcps_msg {
u8_t op, htype, hlen, hops;
u8_t xid[4];
u16_t secs, flags;
u8_t ciaddr[4];
u8_t yiaddr[4];
u8_t siaddr[4];
u8_t giaddr[4];
u8_t chaddr[16];
u8_t sname[64];
u8_t file[128];
u8_t options[312];
}{ ... }dhcps_msg;
typedef struct {
bool enable;
ip4_addr_t start_ip;
ip4_addr_t end_ip;
}{ ... } dhcps_lease_t;
enum dhcps_offer_option{
OFFER_START = 0x00,
OFFER_ROUTER = 0x01,
OFFER_DNS = 0x02,
OFFER_END
}{ ... };
/* ... */
/* ... */
#define DHCPS_COARSE_TIMER_SECS 1
#define DHCPS_MAX_LEASE 0x64
#define DHCPS_LEASE_TIME_DEF (120)
#define DHCPS_LEASE_UNIT CONFIG_LWIP_DHCPS_LEASE_UNIT
struct dhcps_pool{
ip4_addr_t ip;
u8_t mac[6];
u32_t lease_timer;
}{ ... };
typedef u32_t dhcps_time_t;
typedef u8_t dhcps_offer_t;
typedef struct {
dhcps_offer_t dhcps_offer;
dhcps_offer_t dhcps_dns;
dhcps_time_t dhcps_time;
dhcps_lease_t dhcps_poll;
}{ ... } dhcps_options_t;
typedef void (*dhcps_cb_t)(void* cb_arg, u8_t client_ip[4], u8_t client_mac[6]);
static inline bool dhcps_router_enabled (dhcps_offer_t offer)
{
return (offer & OFFER_ROUTER) != 0;
}{ ... }
static inline bool dhcps_dns_enabled (dhcps_offer_t offer)
{
return (offer & OFFER_DNS) != 0;
}{ ... }
typedef struct dhcps_t dhcps_t;
/* ... */
dhcps_t *dhcps_new(void);
/* ... */
void dhcps_delete(dhcps_t *dhcps);
/* ... */
err_t dhcps_start(dhcps_t *dhcps, struct netif *netif, ip4_addr_t ip);
/* ... */
err_t dhcps_stop(dhcps_t *dhcps, struct netif *netif);
/* ... */
void *dhcps_option_info(dhcps_t *dhcps, u8_t op_id, u32_t opt_len);
/* ... */
err_t dhcps_set_option_info(dhcps_t *dhcps, u8_t op_id, void *opt_info, u32_t opt_len);
/* ... */
bool dhcp_search_ip_on_mac(dhcps_t *dhcps, u8_t *mac, ip4_addr_t *ip);
/* ... */
err_t dhcps_dns_setserver(dhcps_t *dhcps, const ip_addr_t *dnsserver);
/* ... */
err_t dhcps_dns_getserver(dhcps_t *dhcps, ip4_addr_t *dnsserver);
/* ... */
err_t dhcps_set_new_lease_cb(dhcps_t *dhcps, dhcps_cb_t cb, void* cb_arg);
#ifdef __cplusplus
}{...}
#endif
/* ... */
#endif