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 */ 128 struct 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 146 struct 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 */ 165 struct bootpip_t 166 { 167 struct iphdr ip; 168 struct udphdr udp; 169 struct bootp_t bp; 170 }; 171 struct 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