1/* vi: set sw=4 ts=4: */ 2/* options.h */ 3#ifndef _OPTIONS_H 4#define _OPTIONS_H 5 6#define TYPE_MASK 0x0F 7 8enum { 9 OPTION_IP=1, 10 OPTION_IP_PAIR, 11 OPTION_STRING, 12#if ENABLE_FEATURE_RFC3397 13 OPTION_STR1035, /* RFC1035 compressed domain name list */ 14#endif 15 OPTION_BOOLEAN, 16 OPTION_U8, 17 OPTION_U16, 18 OPTION_S16, 19 OPTION_U32, 20 OPTION_S32 21}; 22 23#define OPTION_REQ 0x10 /* have the client request this option */ 24#define OPTION_LIST 0x20 /* There can be a list of 1 or more of these */ 25 26/*****************************************************************/ 27/* Do not modify below here unless you know what you are doing!! */ 28/*****************************************************************/ 29 30/* DHCP protocol -- see RFC 2131 */ 31#define SERVER_PORT 67 32#define CLIENT_PORT 68 33 34#define DHCP_MAGIC 0x63825363 35 36/* DHCP option codes (partial list) */ 37#define DHCP_PADDING 0x00 38#define DHCP_SUBNET 0x01 39#define DHCP_TIME_OFFSET 0x02 40#define DHCP_ROUTER 0x03 41#define DHCP_TIME_SERVER 0x04 42#define DHCP_NAME_SERVER 0x05 43#define DHCP_DNS_SERVER 0x06 44#define DHCP_LOG_SERVER 0x07 45#define DHCP_COOKIE_SERVER 0x08 46#define DHCP_LPR_SERVER 0x09 47#define DHCP_HOST_NAME 0x0c 48#define DHCP_BOOT_SIZE 0x0d 49#define DHCP_DOMAIN_NAME 0x0f 50#define DHCP_SWAP_SERVER 0x10 51#define DHCP_ROOT_PATH 0x11 52#define DHCP_IP_TTL 0x17 53#define DHCP_MTU 0x1a 54#define DHCP_BROADCAST 0x1c 55#define DHCP_NTP_SERVER 0x2a 56#define DHCP_WINS_SERVER 0x2c 57#define DHCP_REQUESTED_IP 0x32 58#define DHCP_LEASE_TIME 0x33 59#define DHCP_OPTION_OVER 0x34 60#define DHCP_MESSAGE_TYPE 0x35 61#define DHCP_SERVER_ID 0x36 62#define DHCP_PARAM_REQ 0x37 63#define DHCP_MESSAGE 0x38 64#define DHCP_MAX_SIZE 0x39 65#define DHCP_T1 0x3a 66#define DHCP_T2 0x3b 67#define DHCP_VENDOR 0x3c 68#define DHCP_CLIENT_ID 0x3d 69#define DHCP_FQDN 0x51 70 71#define DHCP_END 0xFF 72 73 74#define BOOTREQUEST 1 75#define BOOTREPLY 2 76 77#define ETH_10MB 1 78#define ETH_10MB_LEN 6 79 80#define DHCPDISCOVER 1 81#define DHCPOFFER 2 82#define DHCPREQUEST 3 83#define DHCPDECLINE 4 84#define DHCPACK 5 85#define DHCPNAK 6 86#define DHCPRELEASE 7 87#define DHCPINFORM 8 88 89#define BROADCAST_FLAG 0x8000 90 91#define OPTION_FIELD 0 92#define FILE_FIELD 1 93#define SNAME_FIELD 2 94 95/* miscellaneous defines */ 96#define OPT_CODE 0 97#define OPT_LEN 1 98#define OPT_DATA 2 99 100struct dhcp_option { 101 char name[12]; 102 char flags; 103 uint8_t code; 104}; 105 106extern const struct dhcp_option dhcp_options[]; 107extern const unsigned char option_lengths[]; 108 109uint8_t *get_option(struct dhcpMessage *packet, int code); 110int end_option(uint8_t *optionptr); 111int add_option_string(uint8_t *optionptr, uint8_t *string); 112int add_simple_option(uint8_t *optionptr, uint8_t code, uint32_t data); 113#if ENABLE_FEATURE_RFC3397 114char *dname_dec(const uint8_t *cstr, int clen, const char *pre); 115uint8_t *dname_enc(const uint8_t *cstr, int clen, const char *src, int *retlen); 116#endif 117 118#endif 119