1/* dhcpd.h */ 2#ifndef _DHCPD_H 3#define _DHCPD_H 4 5#include <netinet/ip.h> 6#include <netinet/udp.h> 7 8#include "libbb_udhcp.h" 9#include "leases.h" 10 11/************************************/ 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 */ 17 18/* where to find the DHCP server configuration file */ 19#define DHCPD_CONF_FILE "/etc/udhcpd.conf" 20 21/*****************************************************************/ 22/* Do not modify below here unless you know what you are doing!! */ 23/*****************************************************************/ 24 25/* DHCP protocol -- see RFC 2131 */ 26#define SERVER_PORT 67 27#define CLIENT_PORT 68 28 29#define DHCP_MAGIC 0x63825363 30 31/* DHCP option codes (partial list) */ 32#define DHCP_PADDING 0x00 33#define DHCP_SUBNET 0x01 34#define DHCP_TIME_OFFSET 0x02 35#define DHCP_ROUTER 0x03 36#define DHCP_TIME_SERVER 0x04 37#define DHCP_NAME_SERVER 0x05 38#define DHCP_DNS_SERVER 0x06 39#define DHCP_LOG_SERVER 0x07 40#define DHCP_COOKIE_SERVER 0x08 41#define DHCP_LPR_SERVER 0x09 42#define DHCP_HOST_NAME 0x0c 43#define DHCP_BOOT_SIZE 0x0d 44#define DHCP_DOMAIN_NAME 0x0f 45#define DHCP_SWAP_SERVER 0x10 46#define DHCP_ROOT_PATH 0x11 47#define DHCP_IP_TTL 0x17 48#define DHCP_MTU 0x1a 49#define DHCP_BROADCAST 0x1c 50#define DHCP_NTP_SERVER 0x2a 51#define DHCP_WINS_SERVER 0x2c 52#define DHCP_REQUESTED_IP 0x32 53#define DHCP_LEASE_TIME 0x33 54#define DHCP_OPTION_OVER 0x34 55#define DHCP_MESSAGE_TYPE 0x35 56#define DHCP_SERVER_ID 0x36 57#define DHCP_PARAM_REQ 0x37 58#define DHCP_MESSAGE 0x38 59#define DHCP_MAX_SIZE 0x39 60#define DHCP_T1 0x3a 61#define DHCP_T2 0x3b 62#define DHCP_VENDOR 0x3c 63#define DHCP_CLIENT_ID 0x3d 64 65#define DHCP_END 0xFF 66 67 68#define BOOTREQUEST 1 69#define BOOTREPLY 2 70 71#define ETH_10MB 1 72#define ETH_10MB_LEN 6 73 74#define DHCPDISCOVER 1 75#define DHCPOFFER 2 76#define DHCPREQUEST 3 77#define DHCPDECLINE 4 78#define DHCPACK 5 79#define DHCPNAK 6 80#define DHCPRELEASE 7 81#define DHCPINFORM 8 82 83#define BROADCAST_FLAG 0x8000 84 85#define OPTION_FIELD 0 86#define FILE_FIELD 1 87#define SNAME_FIELD 2 88 89/* miscellaneous defines */ 90#define MAC_BCAST_ADDR (unsigned char *) "\xff\xff\xff\xff\xff\xff" 91#define OPT_CODE 0 92#define OPT_LEN 1 93#define OPT_DATA 2 94 95#define MAX_TOKEN_SIZE 100 96#define MAX_RESERVED_IP 64 /* Foxconn modified pling 10/04/2007, 30->64 */ 97#define MAX_RESERVED_MAC 64 /* Foxconn modified pling 10/04/2007, 30->64 */ 98 99struct option_set { 100 unsigned char *data; 101 struct option_set *next; 102}; 103 104struct server_config_t { 105 u_int32_t server; /* Our IP, in network order */ 106 u_int32_t start; /* Start address of leases, network order */ 107 u_int32_t end; /* End of leases, network order */ 108 struct option_set *options; /* List of DHCP options loaded from the config file */ 109 char *interface; /* The name of the interface to use */ 110 int ifindex; /* Index number of the interface to use */ 111 unsigned char arp[6]; /* Our arp address */ 112 unsigned long lease; /* lease time in seconds (host order) */ 113 unsigned long max_leases; /* maximum number of leases (including reserved address) */ 114 char remaining; /* should the lease file be interpreted as lease time remaining, or 115 * as the time the lease expires */ 116 unsigned long auto_time; /* how long should udhcpd wait before writing a config file. 117 * if this is zero, it will only write one on SIGUSR1 */ 118 unsigned long decline_time; /* how long an address is reserved if a client returns a 119 * decline message */ 120 unsigned long conflict_time; /* how long an arp conflict offender is leased for */ 121 unsigned long offer_time; /* how long an offered address is reserved */ 122 unsigned long min_lease; /* minimum lease a client can request*/ 123 char *lease_file; 124 char *pidfile; 125 char *notify_file; /* What to run whenever leases are written */ 126 u_int32_t siaddr; /* next server bootp option */ 127 char *sname; /* bootp server name */ 128 char *boot_file; /* bootp boot file option */ 129}; 130 131extern struct server_config_t server_config; 132extern struct dhcpOfferedAddr *leases; 133extern char resrvMacAddr[MAX_RESERVED_MAC][MAX_TOKEN_SIZE]; 134extern char resrvIpAddr[MAX_RESERVED_IP][MAX_TOKEN_SIZE]; 135extern int num_of_reservedIP; 136extern int getReservedAddr(char reservedMacAddr[][MAX_TOKEN_SIZE], char reservedIpAddr[][MAX_TOKEN_SIZE]); 137extern int check_reserved_ip(u_int32_t req_ip, u_int8_t *chaddr); 138extern u_int32_t find_reserved_ip(u_int8_t *chaddr); 139 140#endif 141