blob: d97c8b8f70047108baea37457f7b6d843312e8ec [file] [log] [blame]
"Robert P. J. Day"63fc1a92006-07-02 19:47:05 +00001/* vi: set sw=4 ts=4: */
Mike Frysinger7031f622006-05-08 03:20:50 +00002/* dhcpd.h */
Denis Vlasenkod55fe3e2008-02-04 13:12:16 +00003
Mike Frysinger7031f622006-05-08 03:20:50 +00004#ifndef _DHCPD_H
5#define _DHCPD_H
6
Mike Frysinger7031f622006-05-08 03:20:50 +00007/************************************/
8/* Defaults _you_ may want to tweak */
9/************************************/
10
11/* the period of time the client is allowed to use that address */
12#define LEASE_TIME (60*60*24*10) /* 10 days of seconds */
13#define LEASES_FILE "/var/lib/misc/udhcpd.leases"
14
15/* where to find the DHCP server configuration file */
16#define DHCPD_CONF_FILE "/etc/udhcpd.conf"
17
Mike Frysinger7031f622006-05-08 03:20:50 +000018struct option_set {
19 uint8_t *data;
20 struct option_set *next;
21};
22
23struct static_lease {
Denis Vlasenko42b3dea2007-07-03 15:47:50 +000024 struct static_lease *next;
Mike Frysinger7031f622006-05-08 03:20:50 +000025 uint8_t *mac;
26 uint32_t *ip;
Mike Frysinger7031f622006-05-08 03:20:50 +000027};
28
29struct server_config_t {
Denis Vlasenko42b3dea2007-07-03 15:47:50 +000030 uint32_t server; /* Our IP, in network order */
Denis Vlasenkob386c1c2008-02-04 13:23:53 +000031#if ENABLE_FEATURE_UDHCP_PORT
Denis Vlasenkod55fe3e2008-02-04 13:12:16 +000032 uint16_t port;
Denis Vlasenkob386c1c2008-02-04 13:23:53 +000033#endif
Denis Vlasenkoc82b5102007-07-01 17:05:57 +000034 /* start,end are in host order: we need to compare start <= ip <= end */
Denis Vlasenko42b3dea2007-07-03 15:47:50 +000035 uint32_t start_ip; /* Start address of leases, in host order */
36 uint32_t end_ip; /* End of leases, in host order */
37 struct option_set *options; /* List of DHCP options loaded from the config file */
38 char *interface; /* The name of the interface to use */
39 int ifindex; /* Index number of the interface to use */
40 uint8_t arp[6]; /* Our arp address */
41 char remaining; /* should the lease file be interpreted as lease time remaining, or
42 * as the time the lease expires */
43 uint32_t lease; /* lease time in seconds (host order) */
44 uint32_t max_leases; /* maximum number of leases (including reserved address) */
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 min_lease; /* minimum lease a client can request */
Mike Frysinger7031f622006-05-08 03:20:50 +000052 char *lease_file;
53 char *pidfile;
Denis Vlasenko42b3dea2007-07-03 15:47:50 +000054 char *notify_file; /* What to run whenever leases are written */
55 uint32_t siaddr; /* next server bootp option */
56 char *sname; /* bootp server name */
57 char *boot_file; /* bootp boot file option */
Mike Frysinger7031f622006-05-08 03:20:50 +000058 struct static_lease *static_leases; /* List of ip/mac pairs to assign static leases */
59};
60
Denis Vlasenkodeabacd2007-09-30 17:55:43 +000061#define server_config (*(struct server_config_t*)&bb_common_bufsiz1)
Denis Vlasenkod55fe3e2008-02-04 13:12:16 +000062/* client_config sits in 2nd half of bb_common_bufsiz1 */
63
64#if ENABLE_FEATURE_UDHCP_PORT
65#define SERVER_PORT (server_config.port)
66#else
67#define SERVER_PORT 67
68#endif
Denis Vlasenkodeabacd2007-09-30 17:55:43 +000069
Mike Frysinger7031f622006-05-08 03:20:50 +000070extern struct dhcpOfferedAddr *leases;
71
72
Denis Vlasenko5a3395b2006-11-18 19:51:32 +000073/*** leases.h ***/
74
75struct dhcpOfferedAddr {
76 uint8_t chaddr[16];
77 uint32_t yiaddr; /* network order */
78 uint32_t expires; /* host order */
79};
80
Denis Vlasenkofbd29182007-04-07 01:05:47 +000081struct dhcpOfferedAddr *add_lease(const uint8_t *chaddr, uint32_t yiaddr, unsigned long lease);
Denis Vlasenko5a3395b2006-11-18 19:51:32 +000082int lease_expired(struct dhcpOfferedAddr *lease);
Denis Vlasenkofbd29182007-04-07 01:05:47 +000083struct dhcpOfferedAddr *find_lease_by_chaddr(const uint8_t *chaddr);
Denis Vlasenko5a3395b2006-11-18 19:51:32 +000084struct dhcpOfferedAddr *find_lease_by_yiaddr(uint32_t yiaddr);
85uint32_t find_address(int check_expired);
86
87
88/*** static_leases.h ***/
89
90/* Config file will pass static lease info to this function which will add it
91 * to a data structure that can be searched later */
92int addStaticLease(struct static_lease **lease_struct, uint8_t *mac, uint32_t *ip);
93/* Check to see if a mac has an associated static lease */
94uint32_t getIpByMac(struct static_lease *lease_struct, void *arg);
95/* Check to see if an ip is reserved as a static ip */
96uint32_t reservedIp(struct static_lease *lease_struct, uint32_t ip);
97/* Print out static leases just to check what's going on (debug code) */
98void printStaticLeases(struct static_lease **lease_struct);
99
100
101/*** serverpacket.h ***/
102
103int sendOffer(struct dhcpMessage *oldpacket);
104int sendNAK(struct dhcpMessage *oldpacket);
105int sendACK(struct dhcpMessage *oldpacket, uint32_t yiaddr);
106int send_inform(struct dhcpMessage *oldpacket);
107
108
109/*** files.h ***/
110
Denis Vlasenko5a3395b2006-11-18 19:51:32 +0000111int read_config(const char *file);
112void write_leases(void);
113void read_leases(const char *file);
Denis Vlasenkob539c842007-11-29 08:17:45 +0000114struct option_set *find_option(struct option_set *opt_list, uint8_t code);
Denis Vlasenko5a3395b2006-11-18 19:51:32 +0000115
116
Mike Frysinger7031f622006-05-08 03:20:50 +0000117#endif