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