Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | /* * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. The rights granted to you under the License * may not be used to create, or enable the creation or redistribution of, * unlawful or unlicensed copies of an Apple operating system, or to * circumvent, violate, or enable the circumvention or violation of, any * terms of an Apple operating system software license agreement. * * Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* * Bootstrap Protocol (BOOTP). RFC 951. */ /* * HISTORY * * 14 May 1992 ? at NeXT * Added correct padding to struct nextvend. This is * needed for the i386 due to alignment differences wrt * the m68k. Also adjusted the size of the array fields * because the NeXT vendor area was overflowing the bootp * packet. */ #include <netinet/udp.h> #define iaddr_t struct in_addr struct bootp { u_char bp_op; /* packet opcode type */ #define BOOTREQUEST 1 #define BOOTREPLY 2 u_char bp_htype; /* hardware addr type */ u_char bp_hlen; /* hardware addr length */ u_char bp_hops; /* gateway hops */ u_int32_t bp_xid; /* transaction ID */ u_short bp_secs; /* seconds since boot began */ u_short bp_unused; iaddr_t bp_ciaddr; /* client IP address */ iaddr_t bp_yiaddr; /* 'your' IP address */ iaddr_t bp_siaddr; /* server IP address */ iaddr_t bp_giaddr; /* gateway IP address */ u_char bp_chaddr[16]; /* client hardware address */ u_char bp_sname[64]; /* server host name */ u_char bp_file[128]; /* boot file name */ u_char bp_vend[64]; /* vendor-specific area */ }; /* * UDP port numbers, server and client. */ #define IPPORT_BOOTPS 67 #define IPPORT_BOOTPC 68 /* * "vendor" data permitted for Stanford boot clients. */ struct vend { u_char v_magic[4]; /* magic number */ u_int32_t v_flags; /* flags/opcodes, etc. */ u_char v_unused[56]; /* currently unused */ }; #define VM_STANFORD "STAN" /* v_magic for Stanford */ /* v_flags values */ #define VF_PCBOOT 1 /* an IBMPC or Mac wants environment info */ #define VF_HELP 2 /* help me, I'm not registered */ #define NVMAXTEXT 55 /* don't change this, it just fits RFC951 */ struct nextvend { u_char nv_magic[4]; /* Magic number for vendor specificity */ u_char nv_version; /* NeXT protocol version */ /* * Round the beginning * of the union to a 16 * bit boundary due to * struct/union alignment * on the m68k. */ unsigned short :0; union { u_char NV0[58]; struct { u_char NV1_opcode; /* opcode - Version 1 */ u_char NV1_xid; /* transcation id */ u_char NV1_text[NVMAXTEXT]; /* text */ u_char NV1_null; /* null terminator */ } NV1; } nv_U; }; #define nv_unused nv_U.NV0 #define nv_opcode nv_U.NV1.NV1_opcode #define nv_xid nv_U.NV1.NV1_xid #define nv_text nv_U.NV1.NV1_text #define nv_null nv_U.NV1.NV1_null /* Magic number */ #define VM_NEXT "NeXT" /* v_magic for NeXT, Inc. */ /* Opcodes */ #define BPOP_OK 0 #define BPOP_QUERY 1 #define BPOP_QUERY_NE 2 #define BPOP_ERROR 3 struct bootp_packet { struct ip bp_ip; struct udphdr bp_udp; struct bootp bp_bootp; }; #define BOOTP_PKTSIZE (sizeof (struct bootp_packet)) /* backoffs must be masks */ #define BOOTP_MIN_BACKOFF 0x7ff /* 2.048 sec */ #define BOOTP_MAX_BACKOFF 0xffff /* 65.535 sec */ #define BOOTP_RETRY 6 /* # retries */ |