xref: /openbmc/u-boot/net/bootp.h (revision 971a54193c9a90a6651064c4a7879e3568e9e7b8)
1  /*
2   *	Copied from LiMon - BOOTP.
3   *
4   *	Copyright 1994, 1995, 2000 Neil Russell.
5   *	(See License)
6   *	Copyright 2000 Paolo Scaffardi
7   */
8  
9  #ifndef __BOOTP_H__
10  #define __BOOTP_H__
11  
12  #ifndef __NET_H__
13  #include <net.h>
14  #endif /* __NET_H__ */
15  
16  /**********************************************************************/
17  
18  /*
19   *	BOOTP header.
20   */
21  #if defined(CONFIG_CMD_DHCP)
22  /* Minimum DHCP Options size per RFC2131 - results in 576 byte pkt */
23  #define OPT_FIELD_SIZE 312
24  #if defined(CONFIG_BOOTP_VENDOREX)
25  extern u8 *dhcp_vendorex_prep(u8 *e); /*rtn new e after add own opts. */
26  extern u8 *dhcp_vendorex_proc(u8 *e); /*rtn next e if mine,else NULL  */
27  #endif
28  #else
29  #define OPT_FIELD_SIZE 64
30  #endif
31  
32  struct bootp_hdr {
33  	u8		bp_op;		/* Operation			*/
34  # define OP_BOOTREQUEST	1
35  # define OP_BOOTREPLY	2
36  	u8		bp_htype;	/* Hardware type		*/
37  # define HWT_ETHER	1
38  	u8		bp_hlen;	/* Hardware address length	*/
39  # define HWL_ETHER	6
40  	u8		bp_hops;	/* Hop count (gateway thing)	*/
41  	u32		bp_id;		/* Transaction ID		*/
42  	u16		bp_secs;	/* Seconds since boot		*/
43  	u16		bp_spare1;	/* Alignment			*/
44  	struct in_addr	bp_ciaddr;	/* Client IP address		*/
45  	struct in_addr	bp_yiaddr;	/* Your (client) IP address	*/
46  	struct in_addr	bp_siaddr;	/* Server IP address		*/
47  	struct in_addr	bp_giaddr;	/* Gateway IP address		*/
48  	u8		bp_chaddr[16];	/* Client hardware address	*/
49  	char		bp_sname[64];	/* Server host name		*/
50  	char		bp_file[128];	/* Boot file name		*/
51  	char		bp_vend[OPT_FIELD_SIZE]; /* Vendor information	*/
52  } __attribute__((packed));
53  
54  #define BOOTP_HDR_SIZE	sizeof(struct bootp_hdr)
55  
56  /**********************************************************************/
57  /*
58   *	Global functions and variables.
59   */
60  
61  /* bootp.c */
62  extern u32	bootp_id;		/* ID of cur BOOTP request	*/
63  extern int	bootp_try;
64  
65  
66  /* Send a BOOTP request */
67  void bootp_reset(void);
68  void bootp_request(void);
69  
70  /****************** DHCP Support *********************/
71  void dhcp_request(void);
72  
73  /* DHCP States */
74  typedef enum { INIT,
75  	       INIT_REBOOT,
76  	       REBOOTING,
77  	       SELECTING,
78  	       REQUESTING,
79  	       REBINDING,
80  	       BOUND,
81  	       RENEWING } dhcp_state_t;
82  
83  #define DHCP_DISCOVER 1
84  #define DHCP_OFFER    2
85  #define DHCP_REQUEST  3
86  #define DHCP_DECLINE  4
87  #define DHCP_ACK      5
88  #define DHCP_NAK      6
89  #define DHCP_RELEASE  7
90  
91  /**********************************************************************/
92  
93  #endif /* __BOOTP_H__ */
94