90 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* options.h */
 | 
						|
#ifndef OPTIONS_H_
 | 
						|
#define OPTIONS_H_
 | 
						|
 | 
						|
#include "packet.h"
 | 
						|
 | 
						|
#define DHCP_OPTIONS_BUFSIZE    308
 | 
						|
 | 
						|
/* DHCP option codes (partial list) */
 | 
						|
#define DHCP_PADDING            0x00
 | 
						|
#define DHCP_SUBNET             0x01
 | 
						|
#define DHCP_TIME_OFFSET        0x02
 | 
						|
#define DHCP_ROUTER             0x03
 | 
						|
#define DHCP_TIME_SERVER        0x04
 | 
						|
#define DHCP_NAME_SERVER        0x05
 | 
						|
#define DHCP_DNS_SERVER         0x06
 | 
						|
#define DHCP_LOG_SERVER         0x07
 | 
						|
#define DHCP_COOKIE_SERVER      0x08
 | 
						|
#define DHCP_LPR_SERVER         0x09
 | 
						|
#define DHCP_HOST_NAME          0x0c
 | 
						|
#define DHCP_BOOT_SIZE          0x0d
 | 
						|
#define DHCP_DOMAIN_NAME        0x0f
 | 
						|
#define DHCP_SWAP_SERVER        0x10
 | 
						|
#define DHCP_ROOT_PATH          0x11
 | 
						|
#define DHCP_IP_TTL             0x17
 | 
						|
#define DHCP_MTU                0x1a
 | 
						|
#define DHCP_BROADCAST          0x1c
 | 
						|
#define DHCP_NIS_DOMAIN         0x28
 | 
						|
#define DHCP_NIS_SERVER         0x29
 | 
						|
#define DHCP_NTP_SERVER         0x2a
 | 
						|
#define DHCP_WINS_SERVER        0x2c
 | 
						|
#define DHCP_REQUESTED_IP       0x32
 | 
						|
#define DHCP_LEASE_TIME         0x33
 | 
						|
#define DHCP_OPTION_OVERLOAD    0x34
 | 
						|
#define DHCP_MESSAGE_TYPE       0x35
 | 
						|
#define DHCP_SERVER_ID          0x36
 | 
						|
#define DHCP_PARAM_REQ          0x37
 | 
						|
#define DHCP_MESSAGE            0x38
 | 
						|
#define DHCP_MAX_SIZE           0x39
 | 
						|
#define DHCP_T1                 0x3a
 | 
						|
#define DHCP_T2                 0x3b
 | 
						|
#define DHCP_VENDOR             0x3c
 | 
						|
#define DHCP_CLIENT_ID          0x3d
 | 
						|
#define DHCP_TFTP_SERVER_NAME   0x42
 | 
						|
#define DHCP_BOOT_FILE          0x43
 | 
						|
#define DHCP_USER_CLASS         0x4d
 | 
						|
#define DHCP_FQDN               0x51
 | 
						|
#define DHCP_DOMAIN_SEARCH      0x77
 | 
						|
#define DHCP_SIP_SERVERS        0x78
 | 
						|
#define DHCP_STATIC_ROUTES      0x79
 | 
						|
#define DHCP_WPAD               0xfc
 | 
						|
#define DHCP_END                0xff
 | 
						|
 | 
						|
enum {
 | 
						|
	OPTION_IP=1,
 | 
						|
	OPTION_STRING,
 | 
						|
	OPTION_U8,
 | 
						|
	OPTION_U16,
 | 
						|
	OPTION_S16,
 | 
						|
	OPTION_U32,
 | 
						|
	OPTION_S32
 | 
						|
};
 | 
						|
 | 
						|
struct dhcp_option {
 | 
						|
	char name[10];
 | 
						|
	char type;
 | 
						|
	unsigned char code;
 | 
						|
};
 | 
						|
 | 
						|
extern struct dhcp_option options[];
 | 
						|
extern int option_lengths[];
 | 
						|
 | 
						|
size_t sizeof_option(unsigned char code, size_t datalen);
 | 
						|
size_t set_option(unsigned char *buf, size_t buflen, unsigned char code,
 | 
						|
				  unsigned char *optdata, size_t datalen);
 | 
						|
unsigned char *alloc_option(unsigned char code, unsigned char *optdata,
 | 
						|
							size_t datalen);
 | 
						|
 | 
						|
unsigned char *alloc_dhcp_client_id_option(unsigned char type,
 | 
						|
										   unsigned char *idstr, size_t idstrlen);
 | 
						|
 | 
						|
uint8_t *get_option(struct dhcpMessage *packet, int code, ssize_t *optlen);
 | 
						|
int end_option(uint8_t *optionptr);
 | 
						|
int add_option_string(unsigned char *optionptr, unsigned char *string);
 | 
						|
int add_simple_option(unsigned char *optionptr, unsigned char code, uint32_t data);
 | 
						|
 | 
						|
void add_requests(struct dhcpMessage *packet);
 | 
						|
 | 
						|
#endif
 |