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