1*2068f686Sderaadt /* $OpenBSD: bootp.h,v 1.8 2007/10/07 16:41:05 deraadt Exp $ */ 2cf4e9b47Sho 3*2068f686Sderaadt /* @(#) $Id: bootp.h,v 1.8 2007/10/07 16:41:05 deraadt Exp $ (LBL) */ 4df930be7Sderaadt /* 5df930be7Sderaadt * Bootstrap Protocol (BOOTP). RFC951 and RFC1048. 6df930be7Sderaadt * 7df930be7Sderaadt * This file specifies the "implementation-independent" BOOTP protocol 8df930be7Sderaadt * information which is common to both client and server. 9df930be7Sderaadt * 10df930be7Sderaadt * Copyright 1988 by Carnegie Mellon. 11df930be7Sderaadt * 12df930be7Sderaadt * Permission to use, copy, modify, and distribute this program for any 13df930be7Sderaadt * purpose and without fee is hereby granted, provided that this copyright 14df930be7Sderaadt * and permission notice appear on all copies and supporting documentation, 15df930be7Sderaadt * the name of Carnegie Mellon not be used in advertising or publicity 16df930be7Sderaadt * pertaining to distribution of the program without specific prior 17df930be7Sderaadt * permission, and notice be given in supporting documentation that copying 18df930be7Sderaadt * and distribution is by permission of Carnegie Mellon and Stanford 19df930be7Sderaadt * University. Carnegie Mellon makes no representations about the 20df930be7Sderaadt * suitability of this software for any purpose. It is provided "as is" 21df930be7Sderaadt * without express or implied warranty. 22df930be7Sderaadt */ 23df930be7Sderaadt 24df930be7Sderaadt 25df930be7Sderaadt struct bootp { 26df930be7Sderaadt unsigned char bp_op; /* packet opcode type */ 27df930be7Sderaadt unsigned char bp_htype; /* hardware addr type */ 28df930be7Sderaadt unsigned char bp_hlen; /* hardware addr length */ 29df930be7Sderaadt unsigned char bp_hops; /* gateway hops */ 30c15d59edSmickey u_int32_t bp_xid; /* transaction ID */ 31df930be7Sderaadt unsigned short bp_secs; /* seconds since boot began */ 32edd7aa8fSjakob unsigned short bp_flags; /* flags: 0x8000 is broadcast */ 33df930be7Sderaadt struct in_addr bp_ciaddr; /* client IP address */ 34df930be7Sderaadt struct in_addr bp_yiaddr; /* 'your' IP address */ 35df930be7Sderaadt struct in_addr bp_siaddr; /* server IP address */ 36df930be7Sderaadt struct in_addr bp_giaddr; /* gateway IP address */ 37df930be7Sderaadt unsigned char bp_chaddr[16]; /* client hardware address */ 38df930be7Sderaadt unsigned char bp_sname[64]; /* server host name */ 39df930be7Sderaadt unsigned char bp_file[128]; /* boot file name */ 40df930be7Sderaadt unsigned char bp_vend[64]; /* vendor-specific area */ 41df930be7Sderaadt }; 42df930be7Sderaadt 43df930be7Sderaadt /* 44df930be7Sderaadt * UDP port numbers, server and client. 45df930be7Sderaadt */ 46df930be7Sderaadt #define IPPORT_BOOTPS 67 47df930be7Sderaadt #define IPPORT_BOOTPC 68 48df930be7Sderaadt 49df930be7Sderaadt #define BOOTREPLY 2 50df930be7Sderaadt #define BOOTREQUEST 1 51df930be7Sderaadt 52df930be7Sderaadt 53df930be7Sderaadt /* 54df930be7Sderaadt * Vendor magic cookie (v_magic) for CMU 55df930be7Sderaadt */ 56df930be7Sderaadt #define VM_CMU "CMU" 57df930be7Sderaadt 58df930be7Sderaadt /* 59df930be7Sderaadt * Vendor magic cookie (v_magic) for RFC1048 60df930be7Sderaadt */ 61df930be7Sderaadt #define VM_RFC1048 { 99, 130, 83, 99 } 62df930be7Sderaadt 63df930be7Sderaadt 64df930be7Sderaadt 65df930be7Sderaadt /* 66df930be7Sderaadt * RFC1048 tag values used to specify what information is being supplied in 67df930be7Sderaadt * the vendor field of the packet. 68df930be7Sderaadt */ 69df930be7Sderaadt 70df930be7Sderaadt #define TAG_PAD ((unsigned char) 0) 71df930be7Sderaadt #define TAG_SUBNET_MASK ((unsigned char) 1) 72df930be7Sderaadt #define TAG_TIME_OFFSET ((unsigned char) 2) 73df930be7Sderaadt #define TAG_GATEWAY ((unsigned char) 3) 74df930be7Sderaadt #define TAG_TIME_SERVER ((unsigned char) 4) 75df930be7Sderaadt #define TAG_NAME_SERVER ((unsigned char) 5) 76df930be7Sderaadt #define TAG_DOMAIN_SERVER ((unsigned char) 6) 77df930be7Sderaadt #define TAG_LOG_SERVER ((unsigned char) 7) 78df930be7Sderaadt #define TAG_COOKIE_SERVER ((unsigned char) 8) 79df930be7Sderaadt #define TAG_LPR_SERVER ((unsigned char) 9) 80df930be7Sderaadt #define TAG_IMPRESS_SERVER ((unsigned char) 10) 81df930be7Sderaadt #define TAG_RLP_SERVER ((unsigned char) 11) 82df930be7Sderaadt #define TAG_HOSTNAME ((unsigned char) 12) 83df930be7Sderaadt #define TAG_BOOTSIZE ((unsigned char) 13) 84df930be7Sderaadt #define TAG_END ((unsigned char) 255) 85df930be7Sderaadt /* RFC1497 tags */ 86df930be7Sderaadt #define TAG_DUMPPATH ((unsigned char) 14) 87df930be7Sderaadt #define TAG_DOMAINNAME ((unsigned char) 15) 88df930be7Sderaadt #define TAG_SWAP_SERVER ((unsigned char) 16) 89df930be7Sderaadt #define TAG_ROOTPATH ((unsigned char) 17) 90df930be7Sderaadt #define TAG_EXTPATH ((unsigned char) 18) 91edd7aa8fSjakob /* RFC2132 */ 92edd7aa8fSjakob #define TAG_IP_FORWARD ((unsigned char) 19) 93edd7aa8fSjakob #define TAG_NL_SRCRT ((unsigned char) 20) 94edd7aa8fSjakob #define TAG_PFILTERS ((unsigned char) 21) 95edd7aa8fSjakob #define TAG_REASS_SIZE ((unsigned char) 22) 96edd7aa8fSjakob #define TAG_DEF_TTL ((unsigned char) 23) 97edd7aa8fSjakob #define TAG_MTU_TIMEOUT ((unsigned char) 24) 98edd7aa8fSjakob #define TAG_MTU_TABLE ((unsigned char) 25) 99edd7aa8fSjakob #define TAG_INT_MTU ((unsigned char) 26) 100edd7aa8fSjakob #define TAG_LOCAL_SUBNETS ((unsigned char) 27) 101edd7aa8fSjakob #define TAG_BROAD_ADDR ((unsigned char) 28) 102edd7aa8fSjakob #define TAG_DO_MASK_DISC ((unsigned char) 29) 103edd7aa8fSjakob #define TAG_SUPPLY_MASK ((unsigned char) 30) 104edd7aa8fSjakob #define TAG_DO_RDISC ((unsigned char) 31) 105edd7aa8fSjakob #define TAG_RTR_SOL_ADDR ((unsigned char) 32) 106edd7aa8fSjakob #define TAG_STATIC_ROUTE ((unsigned char) 33) 107edd7aa8fSjakob #define TAG_USE_TRAILERS ((unsigned char) 34) 108edd7aa8fSjakob #define TAG_ARP_TIMEOUT ((unsigned char) 35) 109edd7aa8fSjakob #define TAG_ETH_ENCAP ((unsigned char) 36) 110edd7aa8fSjakob #define TAG_TCP_TTL ((unsigned char) 37) 111edd7aa8fSjakob #define TAG_TCP_KEEPALIVE ((unsigned char) 38) 112edd7aa8fSjakob #define TAG_KEEPALIVE_GO ((unsigned char) 39) 113edd7aa8fSjakob #define TAG_NIS_DOMAIN ((unsigned char) 40) 114edd7aa8fSjakob #define TAG_NIS_SERVERS ((unsigned char) 41) 115edd7aa8fSjakob #define TAG_NTP_SERVERS ((unsigned char) 42) 116edd7aa8fSjakob #define TAG_VENDOR_OPTS ((unsigned char) 43) 117edd7aa8fSjakob #define TAG_NETBIOS_NS ((unsigned char) 44) 118edd7aa8fSjakob #define TAG_NETBIOS_DDS ((unsigned char) 45) 119edd7aa8fSjakob #define TAG_NETBIOS_NODE ((unsigned char) 46) 120edd7aa8fSjakob #define TAG_NETBIOS_SCOPE ((unsigned char) 47) 121edd7aa8fSjakob #define TAG_XWIN_FS ((unsigned char) 48) 122edd7aa8fSjakob #define TAG_XWIN_DM ((unsigned char) 49) 123edd7aa8fSjakob #define TAG_NIS_P_DOMAIN ((unsigned char) 64) 124edd7aa8fSjakob #define TAG_NIS_P_SERVERS ((unsigned char) 65) 125edd7aa8fSjakob #define TAG_MOBILE_HOME ((unsigned char) 68) 126edd7aa8fSjakob #define TAG_SMPT_SERVER ((unsigned char) 69) 127edd7aa8fSjakob #define TAG_POP3_SERVER ((unsigned char) 70) 128edd7aa8fSjakob #define TAG_NNTP_SERVER ((unsigned char) 71) 129edd7aa8fSjakob #define TAG_WWW_SERVER ((unsigned char) 72) 130edd7aa8fSjakob #define TAG_FINGER_SERVER ((unsigned char) 73) 131edd7aa8fSjakob #define TAG_IRC_SERVER ((unsigned char) 74) 132edd7aa8fSjakob #define TAG_STREETTALK_SRVR ((unsigned char) 75) 133edd7aa8fSjakob #define TAG_STREETTALK_STDA ((unsigned char) 76) 134edd7aa8fSjakob /* DHCP options */ 135edd7aa8fSjakob #define TAG_REQUESTED_IP ((unsigned char) 50) 136edd7aa8fSjakob #define TAG_IP_LEASE ((unsigned char) 51) 137edd7aa8fSjakob #define TAG_OPT_OVERLOAD ((unsigned char) 52) 138edd7aa8fSjakob #define TAG_TFTP_SERVER ((unsigned char) 66) 139edd7aa8fSjakob #define TAG_BOOTFILENAME ((unsigned char) 67) 140edd7aa8fSjakob #define TAG_DHCP_MESSAGE ((unsigned char) 53) 141edd7aa8fSjakob #define TAG_SERVER_ID ((unsigned char) 54) 142edd7aa8fSjakob #define TAG_PARM_REQUEST ((unsigned char) 55) 143edd7aa8fSjakob #define TAG_MESSAGE ((unsigned char) 56) 144edd7aa8fSjakob #define TAG_MAX_MSG_SIZE ((unsigned char) 57) 145edd7aa8fSjakob #define TAG_RENEWAL_TIME ((unsigned char) 58) 146edd7aa8fSjakob #define TAG_REBIND_TIME ((unsigned char) 59) 147edd7aa8fSjakob #define TAG_VENDOR_CLASS ((unsigned char) 60) 148edd7aa8fSjakob #define TAG_CLIENT_ID ((unsigned char) 61) 149df930be7Sderaadt 150edd7aa8fSjakob /* DHCP Message types (values for TAG_DHCP_MESSAGE option) */ 151edd7aa8fSjakob #define DHCPDISCOVER 1 152edd7aa8fSjakob #define DHCPOFFER 2 153edd7aa8fSjakob #define DHCPREQUEST 3 154edd7aa8fSjakob #define DHCPDECLINE 4 155edd7aa8fSjakob #define DHCPACK 5 156edd7aa8fSjakob #define DHCPNAK 6 157edd7aa8fSjakob #define DHCPRELEASE 7 158edd7aa8fSjakob #define DHCPINFORM 8 159df930be7Sderaadt 160df930be7Sderaadt 161df930be7Sderaadt /* 162df930be7Sderaadt * "vendor" data permitted for CMU bootp clients. 163df930be7Sderaadt */ 164df930be7Sderaadt 165df930be7Sderaadt struct cmu_vend { 166df930be7Sderaadt unsigned char v_magic[4]; /* magic number */ 167c15d59edSmickey u_int32_t v_flags; /* flags/opcodes, etc. */ 168df930be7Sderaadt struct in_addr v_smask; /* Subnet mask */ 169df930be7Sderaadt struct in_addr v_dgate; /* Default gateway */ 170df930be7Sderaadt struct in_addr v_dns1, v_dns2; /* Domain name servers */ 171df930be7Sderaadt struct in_addr v_ins1, v_ins2; /* IEN-116 name servers */ 172df930be7Sderaadt struct in_addr v_ts1, v_ts2; /* Time servers */ 173df930be7Sderaadt unsigned char v_unused[24]; /* currently unused */ 174df930be7Sderaadt }; 175df930be7Sderaadt 176df930be7Sderaadt 177df930be7Sderaadt /* v_flags values */ 178df930be7Sderaadt #define VF_SMASK 1 /* Subnet mask field contains valid data */ 179