blob: 2d97528456ea79f42412b18e8b3f54bb7d7a616d [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
Denis Vlasenko98636eb2008-05-09 17:59:34 +00007#if __GNUC_PREREQ(4,1)
8# pragma GCC visibility push(hidden)
9#endif
10
Mike Frysinger7031f622006-05-08 03:20:50 +000011/************************************/
12/* Defaults _you_ may want to tweak */
13/************************************/
14
15/* the period of time the client is allowed to use that address */
16#define LEASE_TIME (60*60*24*10) /* 10 days of seconds */
Denis Vlasenko84da0bf2008-02-20 22:29:52 +000017#define LEASES_FILE CONFIG_DHCPD_LEASES_FILE
Mike Frysinger7031f622006-05-08 03:20:50 +000018
19/* where to find the DHCP server configuration file */
20#define DHCPD_CONF_FILE "/etc/udhcpd.conf"
21
Mike Frysinger7031f622006-05-08 03:20:50 +000022struct option_set {
23 uint8_t *data;
24 struct option_set *next;
25};
26
27struct static_lease {
Denis Vlasenko42b3dea2007-07-03 15:47:50 +000028 struct static_lease *next;
Mike Frysinger7031f622006-05-08 03:20:50 +000029 uint8_t *mac;
30 uint32_t *ip;
Mike Frysinger7031f622006-05-08 03:20:50 +000031};
32
33struct server_config_t {
Denis Vlasenko42b3dea2007-07-03 15:47:50 +000034 uint32_t server; /* Our IP, in network order */
Denis Vlasenkob386c1c2008-02-04 13:23:53 +000035#if ENABLE_FEATURE_UDHCP_PORT
Denis Vlasenkod55fe3e2008-02-04 13:12:16 +000036 uint16_t port;
Denis Vlasenkob386c1c2008-02-04 13:23:53 +000037#endif
Denis Vlasenkoc82b5102007-07-01 17:05:57 +000038 /* start,end are in host order: we need to compare start <= ip <= end */
Denis Vlasenko42b3dea2007-07-03 15:47:50 +000039 uint32_t start_ip; /* Start address of leases, in host order */
40 uint32_t end_ip; /* End of leases, in host order */
41 struct option_set *options; /* List of DHCP options loaded from the config file */
42 char *interface; /* The name of the interface to use */
43 int ifindex; /* Index number of the interface to use */
44 uint8_t arp[6]; /* Our arp address */
45 char remaining; /* should the lease file be interpreted as lease time remaining, or
46 * as the time the lease expires */
47 uint32_t lease; /* lease time in seconds (host order) */
48 uint32_t max_leases; /* maximum number of leases (including reserved address) */
49 uint32_t auto_time; /* how long should udhcpd wait before writing a config file.
50 * if this is zero, it will only write one on SIGUSR1 */
51 uint32_t decline_time; /* how long an address is reserved if a client returns a
52 * decline message */
53 uint32_t conflict_time; /* how long an arp conflict offender is leased for */
54 uint32_t offer_time; /* how long an offered address is reserved */
55 uint32_t min_lease; /* minimum lease a client can request */
Mike Frysinger7031f622006-05-08 03:20:50 +000056 char *lease_file;
57 char *pidfile;
Denis Vlasenko42b3dea2007-07-03 15:47:50 +000058 char *notify_file; /* What to run whenever leases are written */
59 uint32_t siaddr; /* next server bootp option */
60 char *sname; /* bootp server name */
61 char *boot_file; /* bootp boot file option */
Mike Frysinger7031f622006-05-08 03:20:50 +000062 struct static_lease *static_leases; /* List of ip/mac pairs to assign static leases */
63};
64
Denis Vlasenkodeabacd2007-09-30 17:55:43 +000065#define server_config (*(struct server_config_t*)&bb_common_bufsiz1)
Denis Vlasenkod55fe3e2008-02-04 13:12:16 +000066/* client_config sits in 2nd half of bb_common_bufsiz1 */
67
68#if ENABLE_FEATURE_UDHCP_PORT
69#define SERVER_PORT (server_config.port)
70#else
71#define SERVER_PORT 67
72#endif
Denis Vlasenkodeabacd2007-09-30 17:55:43 +000073
Mike Frysinger7031f622006-05-08 03:20:50 +000074extern struct dhcpOfferedAddr *leases;
75
76
Denis Vlasenko5a3395b2006-11-18 19:51:32 +000077/*** leases.h ***/
78
79struct dhcpOfferedAddr {
80 uint8_t chaddr[16];
81 uint32_t yiaddr; /* network order */
82 uint32_t expires; /* host order */
83};
84
Denis Vlasenkof1980f62008-09-26 09:34:59 +000085struct dhcpOfferedAddr *add_lease(const uint8_t *chaddr, uint32_t yiaddr, unsigned long lease) FAST_FUNC;
86int lease_expired(struct dhcpOfferedAddr *lease) FAST_FUNC;
87struct dhcpOfferedAddr *find_lease_by_chaddr(const uint8_t *chaddr) FAST_FUNC;
88struct dhcpOfferedAddr *find_lease_by_yiaddr(uint32_t yiaddr) FAST_FUNC;
89uint32_t find_address(int check_expired) FAST_FUNC;
Denis Vlasenko5a3395b2006-11-18 19:51:32 +000090
91
92/*** static_leases.h ***/
93
94/* Config file will pass static lease info to this function which will add it
95 * to a data structure that can be searched later */
Denis Vlasenkof1980f62008-09-26 09:34:59 +000096int addStaticLease(struct static_lease **lease_struct, uint8_t *mac, uint32_t *ip) FAST_FUNC;
Denis Vlasenko5a3395b2006-11-18 19:51:32 +000097/* Check to see if a mac has an associated static lease */
Denis Vlasenkof1980f62008-09-26 09:34:59 +000098uint32_t getIpByMac(struct static_lease *lease_struct, void *arg) FAST_FUNC;
Denis Vlasenko5a3395b2006-11-18 19:51:32 +000099/* Check to see if an ip is reserved as a static ip */
Denis Vlasenkof1980f62008-09-26 09:34:59 +0000100uint32_t reservedIp(struct static_lease *lease_struct, uint32_t ip) FAST_FUNC;
Denis Vlasenko5a3395b2006-11-18 19:51:32 +0000101/* Print out static leases just to check what's going on (debug code) */
Denis Vlasenkof1980f62008-09-26 09:34:59 +0000102void printStaticLeases(struct static_lease **lease_struct) FAST_FUNC;
Denis Vlasenko5a3395b2006-11-18 19:51:32 +0000103
104
105/*** serverpacket.h ***/
106
Denis Vlasenkof1980f62008-09-26 09:34:59 +0000107int send_offer(struct dhcpMessage *oldpacket) FAST_FUNC;
108int send_NAK(struct dhcpMessage *oldpacket) FAST_FUNC;
109int send_ACK(struct dhcpMessage *oldpacket, uint32_t yiaddr) FAST_FUNC;
110int send_inform(struct dhcpMessage *oldpacket) FAST_FUNC;
Denis Vlasenko5a3395b2006-11-18 19:51:32 +0000111
112
113/*** files.h ***/
114
Denis Vlasenkof1980f62008-09-26 09:34:59 +0000115void read_config(const char *file) FAST_FUNC;
116void write_leases(void) FAST_FUNC;
117void read_leases(const char *file) FAST_FUNC;
118struct option_set *find_option(struct option_set *opt_list, uint8_t code) FAST_FUNC;
Denis Vlasenko5a3395b2006-11-18 19:51:32 +0000119
120
Denis Vlasenko98636eb2008-05-09 17:59:34 +0000121#if __GNUC_PREREQ(4,1)
122# pragma GCC visibility pop
123#endif
124
Mike Frysinger7031f622006-05-08 03:20:50 +0000125#endif