source: MondoRescue/branches/3.3/mindi-busybox/networking/udhcp/dhcpd.h@ 3803

Last change on this file since 3803 was 3621, checked in by Bruno Cornec, 10 years ago

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

File size: 4.8 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * Licensed under GPLv2, see file LICENSE in this source tree.
4 */
5#ifndef UDHCP_DHCPD_H
6#define UDHCP_DHCPD_H 1
7
8PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
9
10/* Defaults you may want to tweak */
11/* Default max_lease_sec */
12#define DEFAULT_LEASE_TIME (60*60*24 * 10)
13#define LEASES_FILE CONFIG_DHCPD_LEASES_FILE
14/* Where to find the DHCP server configuration file */
15#define DHCPD_CONF_FILE "/etc/udhcpd.conf"
16
17
18struct static_lease {
19 struct static_lease *next;
20 uint32_t nip;
21 uint8_t mac[6];
22};
23
24struct server_config_t {
25 char *interface; /* interface to use */
26//TODO: ifindex, server_nip, server_mac
27// are obtained from interface name.
28// Instead of querying them *once*, create update_server_network_data_cache()
29// and call it before any usage of these fields.
30// update_server_network_data_cache() must re-query data
31// if more than N seconds have passed after last use.
32 int ifindex;
33 uint32_t server_nip;
34#if ENABLE_FEATURE_UDHCP_PORT
35 uint16_t port;
36#endif
37 uint8_t server_mac[6]; /* our MAC address (used only for ARP probing) */
38 struct option_set *options; /* list of DHCP options loaded from the config file */
39 /* start,end are in host order: we need to compare start <= ip <= end */
40 uint32_t start_ip; /* start address of leases, in host order */
41 uint32_t end_ip; /* end of leases, in host order */
42 uint32_t max_lease_sec; /* maximum lease time (host order) */
43 uint32_t min_lease_sec; /* minimum lease time a client can request */
44 uint32_t max_leases; /* maximum number of leases (including reserved addresses) */
45 uint32_t auto_time; /* how long should udhcpd wait before writing a config file.
46 * if this is zero, it will only write one on SIGUSR1 */
47 uint32_t decline_time; /* how long an address is reserved if a client returns a
48 * decline message */
49 uint32_t conflict_time; /* how long an arp conflict offender is leased for */
50 uint32_t offer_time; /* how long an offered address is reserved */
51 uint32_t siaddr_nip; /* "next server" bootp option */
52 char *lease_file;
53 char *pidfile;
54 char *notify_file; /* what to run whenever leases are written */
55 char *sname; /* bootp server name */
56 char *boot_file; /* bootp boot file option */
57 struct static_lease *static_leases; /* List of ip/mac pairs to assign static leases */
58} FIX_ALIASING;
59
60#define server_config (*(struct server_config_t*)bb_common_bufsiz1)
61/* client_config sits in 2nd half of bb_common_bufsiz1 */
62
63#if ENABLE_FEATURE_UDHCP_PORT
64#define SERVER_PORT (server_config.port)
65#define SERVER_PORT6 (server_config.port)
66#else
67#define SERVER_PORT 67
68#define SERVER_PORT6 547
69#endif
70
71
72typedef uint32_t leasetime_t;
73typedef int32_t signed_leasetime_t;
74
75struct dyn_lease {
76 /* Unix time when lease expires. Kept in memory in host order.
77 * When written to file, converted to network order
78 * and adjusted (current time subtracted) */
79 leasetime_t expires;
80 /* "nip": IP in network order */
81 uint32_t lease_nip;
82 /* We use lease_mac[6], since e.g. ARP probing uses
83 * only 6 first bytes anyway. We check received dhcp packets
84 * that their hlen == 6 and thus chaddr has only 6 significant bytes
85 * (dhcp packet has chaddr[16], not [6])
86 */
87 uint8_t lease_mac[6];
88 char hostname[20];
89 uint8_t pad[2];
90 /* total size is a multiply of 4 */
91} PACKED;
92
93extern struct dyn_lease *g_leases;
94
95struct dyn_lease *add_lease(
96 const uint8_t *chaddr, uint32_t yiaddr,
97 leasetime_t leasetime,
98 const char *hostname, int hostname_len
99 ) FAST_FUNC;
100int is_expired_lease(struct dyn_lease *lease) FAST_FUNC;
101struct dyn_lease *find_lease_by_mac(const uint8_t *mac) FAST_FUNC;
102struct dyn_lease *find_lease_by_nip(uint32_t nip) FAST_FUNC;
103uint32_t find_free_or_expired_nip(const uint8_t *safe_mac, unsigned arpping_ms) FAST_FUNC;
104
105
106/* Config file parser will pass static lease info to this function
107 * which will add it to a data structure that can be searched later */
108void add_static_lease(struct static_lease **st_lease_pp, uint8_t *mac, uint32_t nip) FAST_FUNC;
109/* Find static lease IP by mac */
110uint32_t get_static_nip_by_mac(struct static_lease *st_lease, void *arg) FAST_FUNC;
111/* Check to see if an IP is reserved as a static IP */
112int is_nip_reserved(struct static_lease *st_lease, uint32_t nip) FAST_FUNC;
113/* Print out static leases just to check what's going on (debug code) */
114#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 2
115void log_static_leases(struct static_lease **st_lease_pp) FAST_FUNC;
116#else
117# define log_static_leases(st_lease_pp) ((void)0)
118#endif
119
120
121void read_config(const char *file) FAST_FUNC;
122void write_leases(void) FAST_FUNC;
123void read_leases(const char *file) FAST_FUNC;
124
125
126POP_SAVED_FUNCTION_VISIBILITY
127
128#endif
Note: See TracBrowser for help on using the repository browser.