blob: 0f58f19fd72e609397e29c6db9081aed73559dfc [file] [log] [blame]
/*
* This file provides the typedefs and constants for the TFTP server and Distress
* Beacn implimentation
*/
#ifndef __RCVR_H__
#define __RCVR_H__
#include <common.h>
#include <command.h>
#include <net.h>
#if defined(CONFIG_CMD_RCVR)
/********************************************************************************************************************/
/* DISTRESS BEACON DEFINITIONS */
/********************************************************************************************************************/
#define BEACON_UDP_PORT 3583 /* Destination UDP Port to broadcast the distress beacon to */
#define RECOVERY_MODE 0xDE /* packet_type values/signatures */
#define RECOVERY_STATE_FIRST 0x00001 /* First stage for loading the initrd */
#define RECOVERY_STATE_SECOND 0x00002 /* Second stage for loading the firmware.bin - not used in UBoot */
#define BEACON_VERSION 1 /* Current version of the Beacon Packet */
#define LL_ADDR_LEN 6 /* Length of a link level address (in bytes) */
#define IP_ADDR_LEN 4 /* Length of IP address in bytes */
#define MAX_NAME_LEN 16 /* Length of name (NetBIOS) */
#define MAX_MODEL_NUMBER_LEN 50 /* Length of model Number */
#pragma pack (1)
/* LinkLevelAddrStruct - Defines the structure of a link level address */
typedef struct
{
uchar LinkLevelAddr[LL_ADDR_LEN];
} LinkLevelAddrStruct;
/* IPAddrStruct - Defines the structure of an IP address */
typedef struct
{
ulong IPAddress;
} IPAddressStruct;
/* PacketHeaderStruct - Defines the structure of the beacon packet header
* - 16-bit value that specifies teh type of packet, (RECOVERY_MODE)
* - 8-bit version of packet for future extension
*/
typedef struct
{
uchar PacketType;
uchar Version;
}PacketHeaderStruct;
/* DistressBeaconPayloadStruct - Defines the structure of the beacon packet payload
* - 4 bytes IP address of the NAS in distress
* - 6 bytes LL address of the NAS in distress
* - 16 bytes string with the name of the NAS in distress
* - 50 bytes string with the NAS Model number
*/
typedef struct
{
ushort State;
IPAddressStruct IPAddr;
LinkLevelAddrStruct LinkAddr;
char Name[MAX_NAME_LEN];
char ModelNumber[MAX_MODEL_NUMBER_LEN];
}DistressBeaconPayloadStruct;
/* DistressBeaconPacketStruct - The structure with both the header and payload */
typedef struct
{
PacketHeaderStruct Header;
DistressBeaconPayloadStruct Payload;
}DistressBeaconPacketStruct;
#pragma pack ()
/********************************************************************************************************************/
/* RECOVERY DEFINITIONS */
/********************************************************************************************************************/
#define RCVR_BEACON_TIMEOUT 5 /* timeout in seconds between Distress Beacon */
#define RCVR_DATA_TIMEOUT 6 /* timeout in seconds to receive a data packet */
#define RCVR_FINISH_TIMEOUT 2 /* timeout in seconds to verify that the client received the last ACK */
/* Recovery States */
typedef enum
{
RCVR_INIT,
RCVR_WAIT_4_CNCT,
RCVR_IMAGE_DWNLD,
RCVR_FINISHED
}rcvr_state_t;
/* Function Prototypes */
void RecoverRequest(void);
/********************************************************************************************************************/
/* TFTP SERVER DEFINITIONS */
/********************************************************************************************************************/
/* TFTP ports */
#define TFTP_SERVER_PORT 69
/* Length of the opcode field */
#define TFTP_OPCODE_LEN 2
/* All possible TFTP opcodes */
#define TFTP_OPCODE_RRQ 0x0001
#define TFTP_OPCODE_WRQ 0x0002
#define TFTP_OPCODE_DATA 0x0003
#define TFTP_OPCODE_ACK 0x0004
#define TFTP_OPCODE_ERR 0x0005
/* TFTP error codes supported */
#define TFTP_ERROR_UNDEFINED 0
#define TFTP_ERROR_ILLEGAL_OPERATION 4
/* MAX size of TFTP DATA */
#define TFTP_MAX_DATA_LEN 512
#endif /* #if defined(CONFIG_CMD_RCVR) */
#endif /* __RCVR_H__ */