1228753Smm/************************************************************************ 2228753Smm Copyright 1988, 1991 by Carnegie Mellon University 3228753Smm 4228753Smm All Rights Reserved 5228753Smm 6228753SmmPermission to use, copy, modify, and distribute this software and its 7228753Smmdocumentation for any purpose and without fee is hereby granted, provided 8228753Smmthat the above copyright notice appear in all copies and that both that 9228753Smmcopyright notice and this permission notice appear in supporting 10228753Smmdocumentation, and that the name of Carnegie Mellon University not be used 11228753Smmin advertising or publicity pertaining to distribution of the software 12228753Smmwithout specific, written prior permission. 13228753Smm 14228753SmmCARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS 15228753SmmSOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. 16228753SmmIN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL 17228753SmmDAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 18228753SmmPROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 19228753SmmACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 20228753SmmSOFTWARE. 21228753Smm************************************************************************/ 22228753Smm 23228753Smm/* 24228753Smm * Bootstrap Protocol (BOOTP). RFC951 and RFC1395. 25228753Smm * 26228763Smm * $FreeBSD$ 27228753Smm * 28228753Smm * 29228753Smm * This file specifies the "implementation-independent" BOOTP protocol 30228753Smm * information which is common to both client and server. 31228753Smm * 32228753Smm */ 33228753Smm 34228753Smm#include "bptypes.h" /* for int32, u_int32 */ 35232153Smm 36228753Smm#define BP_CHADDR_LEN 16 37228753Smm#define BP_SNAME_LEN 64 38228753Smm#define BP_FILE_LEN 128 39348607Smm#define BP_VEND_LEN 64 40348607Smm#define BP_MINPKTSZ 300 /* to check sizeof(struct bootp) */ 41228753Smm/* Overhead to fit a bootp message into an Ethernet packet. */ 42228753Smm#define BP_MSG_OVERHEAD (14 + 20 + 8) /* Ethernet + IP + UDP headers */ 43228753Smm 44232153Smmstruct bootp { 45232153Smm unsigned char bp_op; /* packet opcode type */ 46232153Smm unsigned char bp_htype; /* hardware addr type */ 47232153Smm unsigned char bp_hlen; /* hardware addr length */ 48232153Smm unsigned char bp_hops; /* gateway hops */ 49232153Smm u_int32 bp_xid; /* transaction ID */ 50232153Smm unsigned short bp_secs; /* seconds since boot began */ 51232153Smm unsigned short bp_flags; /* RFC1532 broadcast, etc. */ 52232153Smm struct in_addr bp_ciaddr; /* client IP address */ 53228753Smm struct in_addr bp_yiaddr; /* 'your' IP address */ 54228753Smm struct in_addr bp_siaddr; /* server IP address */ 55228753Smm struct in_addr bp_giaddr; /* gateway IP address */ 56228753Smm unsigned char bp_chaddr[BP_CHADDR_LEN]; /* client hardware address */ 57228753Smm char bp_sname[BP_SNAME_LEN]; /* server host name */ 58228753Smm char bp_file[BP_FILE_LEN]; /* boot file name */ 59228753Smm unsigned char bp_vend[BP_VEND_LEN]; /* vendor-specific area */ 60228753Smm /* note that bp_vend can be longer, extending to end of packet. */ 61228753Smm}; 62232153Smm 63232153Smm/* 64228753Smm * UDP port numbers, server and client. 65228753Smm */ 66228753Smm#define IPPORT_BOOTPS 67 67228753Smm#define IPPORT_BOOTPC 68 68348607Smm 69348607Smm#define BOOTREPLY 2 70348607Smm#define BOOTREQUEST 1 71228753Smm 72228753Smm/* 73228753Smm * Hardware types from Assigned Numbers RFC. 74228753Smm */ 75232153Smm#define HTYPE_ETHERNET 1 76232153Smm#define HTYPE_EXP_ETHERNET 2 77228753Smm#define HTYPE_AX25 3 78228753Smm#define HTYPE_PRONET 4 79228753Smm#define HTYPE_CHAOS 5 80228753Smm#define HTYPE_IEEE802 6 81228753Smm#define HTYPE_ARCNET 7 82228753Smm 83228753Smm/* 84228753Smm * Vendor magic cookie (v_magic) for CMU 85228753Smm */ 86232153Smm#define VM_CMU "CMU" 87232153Smm 88228753Smm/* 89232153Smm * Vendor magic cookie (v_magic) for RFC1048 90232153Smm */ 91228753Smm#define VM_RFC1048 { 99, 130, 83, 99 } 92228753Smm 93228753Smm 94228753Smm 95228753Smm/* 96228753Smm * Tag values used to specify what information is being supplied in 97228753Smm * the vendor (options) data area of the packet. 98228753Smm */ 99228753Smm/* RFC 1048 */ 100228753Smm#define TAG_END ((unsigned char) 255) 101228753Smm#define TAG_PAD ((unsigned char) 0) 102228753Smm#define TAG_SUBNET_MASK ((unsigned char) 1) 103232153Smm#define TAG_TIME_OFFSET ((unsigned char) 2) 104232153Smm#define TAG_GATEWAY ((unsigned char) 3) 105232153Smm#define TAG_TIME_SERVER ((unsigned char) 4) 106232153Smm#define TAG_NAME_SERVER ((unsigned char) 5) 107232153Smm#define TAG_DOMAIN_SERVER ((unsigned char) 6) 108232153Smm#define TAG_LOG_SERVER ((unsigned char) 7) 109232153Smm#define TAG_COOKIE_SERVER ((unsigned char) 8) 110232153Smm#define TAG_LPR_SERVER ((unsigned char) 9) 111232153Smm#define TAG_IMPRESS_SERVER ((unsigned char) 10) 112232153Smm#define TAG_RLP_SERVER ((unsigned char) 11) 113232153Smm#define TAG_HOST_NAME ((unsigned char) 12) 114232153Smm#define TAG_BOOT_SIZE ((unsigned char) 13) 115232153Smm/* RFC 1395 */ 116232153Smm#define TAG_DUMP_FILE ((unsigned char) 14) 117232153Smm#define TAG_DOMAIN_NAME ((unsigned char) 15) 118232153Smm#define TAG_SWAP_SERVER ((unsigned char) 16) 119232153Smm#define TAG_ROOT_PATH ((unsigned char) 17) 120232153Smm/* RFC 1497 */ 121232153Smm#define TAG_EXTEN_FILE ((unsigned char) 18) 122232153Smm/* RFC 1533 */ 123232153Smm#define TAG_NIS_DOMAIN ((unsigned char) 40) 124232153Smm#define TAG_NIS_SERVER ((unsigned char) 41) 125232153Smm#define TAG_NTP_SERVER ((unsigned char) 42) 126348607Smm/* DHCP maximum message size. */ 127232153Smm#define TAG_MAX_MSGSZ ((unsigned char) 57) 128232153Smm 129232153Smm/* XXX - Add new tags here */ 130232153Smm 131232153Smm 132232153Smm/* 133232153Smm * "vendor" data permitted for CMU bootp clients. 134232153Smm */ 135232153Smm 136232153Smmstruct cmu_vend { 137232153Smm char v_magic[4]; /* magic number */ 138232153Smm u_int32 v_flags; /* flags/opcodes, etc. */ 139232153Smm struct in_addr v_smask; /* Subnet mask */ 140228753Smm struct in_addr v_dgate; /* Default gateway */ 141 struct in_addr v_dns1, v_dns2; /* Domain name servers */ 142 struct in_addr v_ins1, v_ins2; /* IEN-116 name servers */ 143 struct in_addr v_ts1, v_ts2; /* Time servers */ 144 int32 v_unused[6]; /* currently unused */ 145}; 146 147 148/* v_flags values */ 149#define VF_SMASK 1 /* Subnet mask field contains valid data */ 150