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