1#ifndef _BOOTP_H 2#define _BOOTP_H 3 4#include "if_ether.h" 5#include "ip.h" 6#include "udp.h" 7 8#ifndef MAX_BOOTP_RETRIES 9#define MAX_BOOTP_RETRIES 20 10#endif 11 12#ifdef ALTERNATE_DHCP_PORTS_1067_1068 13#undef NON_STANDARD_BOOTP_SERVER 14#define NON_STANDARD_BOOTP_SERVER 1067 15#undef NON_STANDARD_BOOTP_CLIENT 16#define NON_STANDARD_BOOTP_CLIENT 1068 17#endif 18 19#ifdef NON_STANDARD_BOOTP_SERVER 20#define BOOTP_SERVER NON_STANDARD_BOOTP_SERVER 21#else 22#define BOOTP_SERVER 67 23#endif 24#ifdef NON_STANDARD_BOOTP_CLIENT 25#define BOOTP_CLIENT NON_STANDARD_BOOTP_CLIENT 26#else 27#define BOOTP_CLIENT 68 28#endif 29 30#define BOOTP_REQUEST 1 31#define BOOTP_REPLY 2 32 33#define TAG_LEN(p) (*((p)+1)) 34#define RFC1533_COOKIE 99, 130, 83, 99 35#define RFC1533_PAD 0 36#define RFC1533_NETMASK 1 37#define RFC1533_TIMEOFFSET 2 38#define RFC1533_GATEWAY 3 39#define RFC1533_TIMESERVER 4 40#define RFC1533_IEN116NS 5 41#define RFC1533_DNS 6 42#define RFC1533_LOGSERVER 7 43#define RFC1533_COOKIESERVER 8 44#define RFC1533_LPRSERVER 9 45#define RFC1533_IMPRESSSERVER 10 46#define RFC1533_RESOURCESERVER 11 47#define RFC1533_HOSTNAME 12 48#define RFC1533_BOOTFILESIZE 13 49#define RFC1533_MERITDUMPFILE 14 50#define RFC1533_DOMAINNAME 15 51#define RFC1533_SWAPSERVER 16 52#define RFC1533_ROOTPATH 17 53#define RFC1533_EXTENSIONPATH 18 54#define RFC1533_IPFORWARDING 19 55#define RFC1533_IPSOURCEROUTING 20 56#define RFC1533_IPPOLICYFILTER 21 57#define RFC1533_IPMAXREASSEMBLY 22 58#define RFC1533_IPTTL 23 59#define RFC1533_IPMTU 24 60#define RFC1533_IPMTUPLATEAU 25 61#define RFC1533_INTMTU 26 62#define RFC1533_INTLOCALSUBNETS 27 63#define RFC1533_INTBROADCAST 28 64#define RFC1533_INTICMPDISCOVER 29 65#define RFC1533_INTICMPRESPOND 30 66#define RFC1533_INTROUTEDISCOVER 31 67#define RFC1533_INTROUTESOLICIT 32 68#define RFC1533_INTSTATICROUTES 33 69#define RFC1533_LLTRAILERENCAP 34 70#define RFC1533_LLARPCACHETMO 35 71#define RFC1533_LLETHERNETENCAP 36 72#define RFC1533_TCPTTL 37 73#define RFC1533_TCPKEEPALIVETMO 38 74#define RFC1533_TCPKEEPALIVEGB 39 75#define RFC1533_NISDOMAIN 40 76#define RFC1533_NISSERVER 41 77#define RFC1533_NTPSERVER 42 78#define RFC1533_VENDOR 43 79#define RFC1533_NBNS 44 80#define RFC1533_NBDD 45 81#define RFC1533_NBNT 46 82#define RFC1533_NBSCOPE 47 83#define RFC1533_XFS 48 84#define RFC1533_XDM 49 85#ifndef NO_DHCP_SUPPORT 86#define RFC2132_REQ_ADDR 50 87#define RFC2132_MSG_TYPE 53 88#define RFC2132_SRV_ID 54 89#define RFC2132_PARAM_LIST 55 90#define RFC2132_MAX_SIZE 57 91#define RFC2132_VENDOR_CLASS_ID 60 92 93#define DHCPDISCOVER 1 94#define DHCPOFFER 2 95#define DHCPREQUEST 3 96#define DHCPACK 5 97#endif /* NO_DHCP_SUPPORT */ 98 99#define RFC1533_VENDOR_MAJOR 0 100#define RFC1533_VENDOR_MINOR 0 101 102#define RFC1533_VENDOR_MAGIC 128 103#define RFC1533_VENDOR_ADDPARM 129 104#define RFC1533_VENDOR_ETHDEV 130 105#ifdef IMAGE_FREEBSD 106#define RFC1533_VENDOR_HOWTO 132 107#define RFC1533_VENDOR_KERNEL_ENV 133 108#endif 109#define RFC1533_VENDOR_ETHERBOOT_ENCAP 150 110#define RFC1533_VENDOR_MNUOPTS 160 111#define RFC1533_VENDOR_NIC_DEV_ID 175 112#define RFC1533_VENDOR_SELECTION 176 113#define RFC1533_VENDOR_ARCH 177 114#define RFC1533_VENDOR_MOTD 184 115#define RFC1533_VENDOR_NUMOFMOTD 8 116#define RFC1533_VENDOR_IMG 192 117#define RFC1533_VENDOR_NUMOFIMG 16 118 119#define RFC1533_VENDOR_CONFIGFILE 150 120 121#define RFC1533_END 255 122 123#define BOOTP_VENDOR_LEN 64 124 125#define DHCP_OPT_LEN 312 126 127/* Format of a bootp packet */ 128struct bootp_t { 129 uint8_t bp_op; 130 uint8_t bp_htype; 131 uint8_t bp_hlen; 132 uint8_t bp_hops; 133 uint32_t bp_xid; 134 uint16_t bp_secs; 135 uint16_t unused; 136 in_addr bp_ciaddr; 137 in_addr bp_yiaddr; 138 in_addr bp_siaddr; 139 in_addr bp_giaddr; 140 uint8_t bp_hwaddr[16]; 141 uint8_t bp_sname[64]; 142 char bp_file[128]; 143 uint8_t bp_vend[BOOTP_VENDOR_LEN]; 144}; 145 146struct dhcp_t { 147 uint8_t bp_op; 148 uint8_t bp_htype; 149 uint8_t bp_hlen; 150 uint8_t bp_hops; 151 uint32_t bp_xid; 152 uint16_t bp_secs; 153 uint16_t bp_flag; 154 in_addr bp_ciaddr; 155 in_addr bp_yiaddr; 156 in_addr bp_siaddr; 157 in_addr bp_giaddr; 158 uint8_t bp_hwaddr[16]; 159 uint8_t bp_sname[64]; 160 char bp_file[128]; 161 uint8_t bp_vend[DHCP_OPT_LEN]; 162}; 163 164/* Format of a bootp IP packet */ 165struct bootpip_t 166{ 167 struct iphdr ip; 168 struct udphdr udp; 169 struct bootp_t bp; 170}; 171struct dhcpip_t 172{ 173 struct iphdr ip; 174 struct udphdr udp; 175 struct dhcp_t bp; 176}; 177 178#define MAX_RFC1533_VENDLEN (ETH_MAX_MTU - sizeof(struct bootpip_t) + BOOTP_VENDOR_LEN) 179 180#define BOOTP_DATA_ADDR (&bootp_data) 181 182#endif /* _BOOTP_H */ 183