diff packages/redboot/current/include/net/bootp.h @ 115:6ed91473a1cd ecos-sw-2000-08-21

Merge from eCos master repository on 2000-08-21-22:40:54-BST
author jlarmour
date Fri, 25 Aug 2000 17:32:38 +0000
parents
children e0c0827131d1
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/redboot/current/include/net/bootp.h
@@ -0,0 +1,299 @@
+//==========================================================================
+//
+//      net/bootp.h
+//
+//      Stand-alone BOOTP support for RedBoot
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos Public License 
+// Version 1.1 (the "License"); you may not use this file except in         
+// compliance with the License.  You may obtain a copy of the License at    
+// http://www.redhat.com/                                                   
+//                                                                          
+// Software distributed under the License is distributed on an "AS IS"      
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+// License for the specific language governing rights and limitations under 
+// the License.                                                             
+//                                                                          
+// The Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    gthomas
+// Contributors: gthomas
+// Date:         2000-07-14
+// Purpose:      
+// Description:  
+//              
+// This code is part of RedBoot (tm).
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+/************************************************************************
+          Copyright 1988, 1991 by Carnegie Mellon University
+
+                          All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name of Carnegie Mellon University not be used
+in advertising or publicity pertaining to distribution of the software
+without specific, written prior permission.
+
+CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
+DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+************************************************************************/
+
+#ifndef _BOOTP_H_
+#define _BOOTP_H_
+
+/*
+ * Bootstrap Protocol (BOOTP).  RFC951 and RFC1395.
+ *
+ * This file specifies the "implementation-independent" BOOTP protocol
+ * information which is common to both client and server.
+ *
+ */
+
+#define BP_CHADDR_LEN	 16
+#define BP_SNAME_LEN	 64
+#define BP_FILE_LEN	128
+#define BP_VEND_LEN	 64
+#define BP_MINPKTSZ	300	/* to check sizeof(struct bootp) */
+
+typedef struct bootp {
+    unsigned char    bp_op;			/* packet opcode type */
+    unsigned char    bp_htype;			/* hardware addr type */
+    unsigned char    bp_hlen;			/* hardware addr length */
+    unsigned char    bp_hops;			/* gateway hops */
+    unsigned int     bp_xid;			/* transaction ID */
+    unsigned short   bp_secs;			/* seconds since boot began */
+    unsigned short   bp_flags;			/* RFC1532 broadcast, etc. */
+    struct in_addr   bp_ciaddr;			/* client IP address */
+    struct in_addr   bp_yiaddr;			/* 'your' IP address */
+    struct in_addr   bp_siaddr;			/* server IP address */
+    struct in_addr   bp_giaddr;			/* gateway IP address */
+    unsigned char    bp_chaddr[BP_CHADDR_LEN];	/* client hardware address */
+    char	     bp_sname[BP_SNAME_LEN];	/* server host name */
+    char	     bp_file[BP_FILE_LEN];	/* boot file name */
+    unsigned char    bp_vend[BP_VEND_LEN];	/* vendor-specific area */
+    /* note that bp_vend can be longer, extending to end of packet. */
+} bootp_header_t;
+
+/*
+ * UDP port numbers, server and client.
+ */
+#define	IPPORT_BOOTPS		67
+#define	IPPORT_BOOTPC		68
+
+#define BOOTREPLY		2
+#define BOOTREQUEST		1
+
+/*
+ * Hardware types from Assigned Numbers RFC.
+ */
+#define HTYPE_ETHERNET		  1
+#define HTYPE_EXP_ETHERNET	  2
+#define HTYPE_AX25		  3
+#define HTYPE_PRONET		  4
+#define HTYPE_CHAOS		  5
+#define HTYPE_IEEE802		  6
+#define HTYPE_ARCNET		  7
+
+/*
+ * Vendor magic cookie (v_magic) for CMU
+ */
+#define VM_CMU		"CMU"
+
+/*
+ * Vendor magic cookie (v_magic) for RFC1048
+ */
+#define VM_RFC1048	{ 99, 130, 83, 99 }
+
+
+
+/*
+ * Tag values used to specify what information is being supplied in
+ * the vendor (options) data area of the packet.
+ */
+/* RFC 1048 */
+/* End of cookie */
+#define TAG_END			((unsigned char) 255)
+/* padding for alignment */
+#define TAG_PAD			((unsigned char)   0)
+/* Subnet mask */
+#define TAG_SUBNET_MASK		((unsigned char)   1)
+/* Time offset from UTC for this system */
+#define TAG_TIME_OFFSET		((unsigned char)   2)
+/* List of routers on this subnet */
+#define TAG_GATEWAY		((unsigned char)   3)
+/* List of rfc868 time servers available to client */
+#define TAG_TIME_SERVER		((unsigned char)   4)
+/* List of IEN 116 name servers */
+#define TAG_NAME_SERVER		((unsigned char)   5)
+/* List of DNS name servers */
+#define TAG_DOMAIN_SERVER	((unsigned char)   6)
+/* List of MIT-LCS UDL log servers */
+#define TAG_LOG_SERVER		((unsigned char)   7)
+/* List of rfc865 cookie servers */
+#define TAG_COOKIE_SERVER	((unsigned char)   8)
+/* List of rfc1179 printer servers (in order to try) */
+#define TAG_LPR_SERVER		((unsigned char)   9)
+/* List of Imagen Impress servers (in prefered order) */
+#define TAG_IMPRESS_SERVER	((unsigned char)  10)
+/* List of rfc887 Resourse Location servers */
+#define TAG_RLP_SERVER		((unsigned char)  11)
+/* Hostname of client */
+#define TAG_HOST_NAME		((unsigned char)  12)
+/* boot file size */
+#define TAG_BOOT_SIZE		((unsigned char)  13)
+/* RFC 1395 */
+/* path to dump to in case of crash */
+#define TAG_DUMP_FILE		((unsigned char)  14)
+/* domain name for use with the DNS */
+#define TAG_DOMAIN_NAME		((unsigned char)  15)
+/* IP address of the swap server for this machine */
+#define TAG_SWAP_SERVER		((unsigned char)  16)
+/* The path name to the root filesystem for this machine */
+#define TAG_ROOT_PATH		((unsigned char)  17)
+/* RFC 1497 */
+/* filename to tftp with more options in it */
+#define TAG_EXTEN_FILE		((unsigned char)  18)
+/* RFC 1533 */
+/* The following are in rfc1533 and may be used by BOOTP/DHCP */
+/* IP forwarding enable/disable */
+#define TAG_IP_FORWARD          ((unsigned char)  19)
+/* Non-Local source routing enable/disable */
+#define TAG_IP_NLSR             ((unsigned char)  20)
+/* List of pairs of addresses/masks to allow non-local source routing to */
+#define TAG_IP_POLICY_FILTER    ((unsigned char)  21)
+/* Maximum size of datagrams client should be prepared to reassemble */
+#define TAG_IP_MAX_DRS          ((unsigned char)  22)
+/* Default IP TTL */
+#define TAG_IP_TTL              ((unsigned char)  23)
+/* Timeout in seconds to age path MTU values found with rfc1191 */
+#define TAG_IP_MTU_AGE          ((unsigned char)  24)
+/* Table of MTU sizes to use when doing rfc1191 MTU discovery */
+#define TAG_IP_MTU_PLAT         ((unsigned char)  25)
+/* MTU to use on this interface */
+#define TAG_IP_MTU              ((unsigned char)  26)
+/* All subnets are local option */
+#define TAG_IP_SNARL            ((unsigned char)  27)
+/* broadcast address */
+#define TAG_IP_BROADCAST        ((unsigned char)  28)
+/* perform subnet mask discovery using ICMP */
+#define TAG_IP_SMASKDISC        ((unsigned char)  29)
+/* act as a subnet mask server using ICMP */
+#define TAG_IP_SMASKSUPP        ((unsigned char)  30)
+/* perform rfc1256 router discovery */
+#define TAG_IP_ROUTERDISC       ((unsigned char)  31)
+/* address to send router solicitation requests */
+#define TAG_IP_ROUTER_SOL_ADDR  ((unsigned char)  32)
+/* list of static routes to addresses (addr, router) pairs */
+#define TAG_IP_STATIC_ROUTES    ((unsigned char)  33)
+/* use trailers (rfc893) when using ARP */
+#define TAG_IP_TRAILER_ENC      ((unsigned char)  34)
+/* timeout in seconds for ARP cache entries */
+#define TAG_ARP_TIMEOUT         ((unsigned char)  35)
+/* use either Ethernet version 2 (rfc894) or IEEE 802.3 (rfc1042) */
+#define TAG_ETHER_IEEE          ((unsigned char)  36)
+/* default TCP TTL when sending TCP segments */
+#define TAG_IP_TCP_TTL          ((unsigned char)  37)
+/* time for client to wait before sending a keepalive on a TCP connection */
+#define TAG_IP_TCP_KA_INT       ((unsigned char)  38)
+/* don't send keepalive with an octet of garbage for compatability */
+#define TAG_IP_TCP_KA_GARBAGE   ((unsigned char)  39)
+/* NIS domainname */
+#define TAG_NIS_DOMAIN		((unsigned char)  40)
+/* list of NIS servers */
+#define TAG_NIS_SERVER		((unsigned char)  41)
+/* list of NTP servers */
+#define TAG_NTP_SERVER		((unsigned char)  42)
+/* and stuff vendors may want to add */
+#define TAG_VEND_SPECIFIC       ((unsigned char)  43)
+/* NetBios over TCP/IP name server */
+#define TAG_NBNS_SERVER         ((unsigned char)  44)
+/* NetBios over TCP/IP NBDD servers (rfc1001/1002) */
+#define TAG_NBDD_SERVER         ((unsigned char)  45)
+/* NetBios over TCP/IP node type option for use with above */
+#define TAG_NBOTCP_OTPION       ((unsigned char)  46)
+/* NetBios over TCP/IP scopt option for use with above */
+#define TAG_NB_SCOPE            ((unsigned char)  47)
+/* list of X Window system font servers */
+#define TAG_XFONT_SERVER        ((unsigned char)  48)
+/* list of systems running X Display Manager (xdm) available to this client */
+#define TAG_XDISPLAY_SERVER     ((unsigned char)  49)
+
+/* While the following are only allowed for DHCP */
+/* DHCP requested IP address */
+#define TAG_DHCP_REQ_IP         ((unsigned char)  50)
+/* DHCP time for lease of IP address */
+#define TAG_DHCP_LEASE_TIME     ((unsigned char)  51)
+/* DHCP options overload */
+#define TAG_DHCP_OPTOVER        ((unsigned char)  52)
+/* DHCP message type */
+#define TAG_DHCP_MESS_TYPE      ((unsigned char)  53)
+/* DHCP server identification */
+#define TAG_DHCP_SERVER_ID      ((unsigned char)  54)
+/* DHCP ordered list of requested parameters */
+#define TAG_DHCP_PARM_REQ_LIST  ((unsigned char)  55)
+/* DHCP reply message */
+#define TAG_DHCP_TEXT_MESSAGE   ((unsigned char)  56)
+/* DHCP maximum packet size willing to accept */
+#define TAG_DHCP_MAX_MSGSZ      ((unsigned char)  57)
+/* DHCP time 'til client needs to renew */
+#define TAG_DHCP_RENEWAL_TIME   ((unsigned char)  58)
+/* DHCP  time 'til client needs to rebind */
+#define TAG_DHCP_REBIND_TIME    ((unsigned char)  59)
+/* DHCP class identifier */
+#define TAG_DHCP_CLASSID        ((unsigned char)  60)
+/* DHCP client unique identifier */
+#define TAG_DHCP_CLIENTID       ((unsigned char)  61)
+
+/* XXX - Add new tags here */
+
+
+/*
+ * "vendor" data permitted for CMU bootp clients.
+ */
+
+struct cmu_vend {
+	char		v_magic[4];	/* magic number */
+        unsigned int    v_flags;        /* flags/opcodes, etc. */
+	struct in_addr 	v_smask;	/* Subnet mask */
+	struct in_addr 	v_dgate;	/* Default gateway */
+	struct in_addr	v_dns1, v_dns2; /* Domain name servers */
+	struct in_addr	v_ins1, v_ins2; /* IEN-116 name servers */
+	struct in_addr	v_ts1, v_ts2;	/* Time servers */
+        int             v_unused[6];	/* currently unused */
+};
+
+
+/* v_flags values */
+#define VF_SMASK	1	/* Subnet mask field contains valid data */
+
+#define IPPORT_BOOTPS           67
+#define IPPORT_BOOTPC           68
+
+#endif // _BOOTP_H_