1
2
3#ifndef UDHCP_DHCPD_H
4#define UDHCP_DHCPD_H 1
5
6PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
7
8
9
10#define LEASE_TIME (60*60*24 * 10)
11#define LEASES_FILE CONFIG_DHCPD_LEASES_FILE
12
13#define DHCPD_CONF_FILE "/etc/udhcpd.conf"
14
15
16struct option_set {
17 uint8_t *data;
18 struct option_set *next;
19};
20
21struct static_lease {
22 struct static_lease *next;
23 uint32_t nip;
24 uint8_t mac[6];
25};
26
27struct server_config_t {
28 char *interface;
29
30
31
32
33
34
35 int ifindex;
36 uint32_t server_nip;
37#if ENABLE_FEATURE_UDHCP_PORT
38 uint16_t port;
39#endif
40 uint8_t server_mac[6];
41 struct option_set *options;
42 int verbose;
43
44 uint32_t start_ip;
45 uint32_t end_ip;
46 uint32_t max_lease_sec;
47 uint32_t min_lease_sec;
48 uint32_t max_leases;
49 uint32_t auto_time;
50
51 uint32_t decline_time;
52
53 uint32_t conflict_time;
54 uint32_t offer_time;
55 uint32_t siaddr_nip;
56 char *lease_file;
57 char *pidfile;
58 char *notify_file;
59 char *sname;
60 char *boot_file;
61 struct static_lease *static_leases;
62};
63
64#define server_config (*(struct server_config_t*)&bb_common_bufsiz1)
65
66
67#if ENABLE_FEATURE_UDHCP_PORT
68#define SERVER_PORT (server_config.port)
69#else
70#define SERVER_PORT 67
71#endif
72
73
74
75
76typedef uint32_t leasetime_t;
77typedef int32_t signed_leasetime_t;
78
79struct dyn_lease {
80
81
82
83
84 leasetime_t expires;
85 uint32_t lease_nip;
86
87
88
89
90
91 uint8_t lease_mac[6];
92 char hostname[20];
93 uint8_t pad[2];
94
95} PACKED;
96
97extern struct dyn_lease *g_leases;
98
99struct dyn_lease *add_lease(
100 const uint8_t *chaddr, uint32_t yiaddr,
101 leasetime_t leasetime,
102 const char *hostname, int hostname_len
103 ) FAST_FUNC;
104int is_expired_lease(struct dyn_lease *lease) FAST_FUNC;
105struct dyn_lease *find_lease_by_mac(const uint8_t *mac) FAST_FUNC;
106struct dyn_lease *find_lease_by_nip(uint32_t nip) FAST_FUNC;
107uint32_t find_free_or_expired_nip(const uint8_t *safe_mac) FAST_FUNC;
108
109
110
111
112
113
114void add_static_lease(struct static_lease **st_lease_pp, uint8_t *mac, uint32_t nip) FAST_FUNC;
115
116uint32_t get_static_nip_by_mac(struct static_lease *st_lease, void *arg) FAST_FUNC;
117
118int is_nip_reserved(struct static_lease *st_lease, uint32_t nip) FAST_FUNC;
119
120#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 2
121void log_static_leases(struct static_lease **st_lease_pp) FAST_FUNC;
122#else
123# define log_static_leases(st_lease_pp) ((void)0)
124#endif
125
126
127
128
129int send_offer(struct dhcp_packet *oldpacket) FAST_FUNC;
130int send_NAK(struct dhcp_packet *oldpacket) FAST_FUNC;
131int send_ACK(struct dhcp_packet *oldpacket, uint32_t yiaddr) FAST_FUNC;
132int send_inform(struct dhcp_packet *oldpacket) FAST_FUNC;
133
134
135
136
137void read_config(const char *file) FAST_FUNC;
138void write_leases(void) FAST_FUNC;
139void read_leases(const char *file) FAST_FUNC;
140struct option_set *find_option(struct option_set *opt_list, uint8_t code) FAST_FUNC;
141
142
143POP_SAVED_FUNCTION_VISIBILITY
144
145#endif
146