+++ /dev/null
-/*++\r
-\r
-Copyright (c) 2006 - 2007, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
---*/\r
-\r
-#ifndef _IP_H_\r
-#define _IP_H_\r
-\r
-#include "hton.h"\r
-\r
-//\r
-// Client architecture types\r
-//\r
-#if defined MDE_CPU_IA32\r
-#define SYS_ARCH 0x6\r
-#elif defined MDE_CPU_X64\r
-#define SYS_ARCH 0x7\r
-#elif defined MDE_CPU_IPF\r
-#define SYS_ARCH 0x2\r
-#else\r
-#error Unsupported Client Processor Type\r
-#endif\r
-\r
-\r
-//\r
-// portability macros\r
-//\r
-#define UDP_FILTER_MASK (EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP | \\r
- EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT | \\r
- EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP | \\r
- EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT | \\r
- EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER \\r
- )\r
-\r
-#define PXE_BOOT_LAYER_MASK 0x7FFF\r
-#define PXE_BOOT_LAYER_INITIAL 0x0000\r
-#define PXE_BOOT_LAYER_CREDENTIAL_FLAG 0x8000\r
-#define MAX_BOOT_SERVERS 32\r
-\r
-//\r
-// macro to evaluate IP address as TRUE if it is a multicast IP address\r
-//\r
-#define IS_MULTICAST(ptr) ((*((UINT8 *) ptr) & 0xf0) == 0xe0)\r
-\r
-//\r
-// length macros\r
-//\r
-#define IP_ADDRESS_LENGTH(qp) (((qp)->UsingIpv6) ? sizeof (EFI_IPv6_ADDRESS) : sizeof (EFI_IPv4_ADDRESS))\r
-\r
-#define MAX_FRAME_DATA_SIZE 1488\r
-#define ALLOCATE_SIZE(X) (((X) + 7) & 0xfff8)\r
-#define MODE_ALLOCATE_SIZE ALLOCATE_SIZE (sizeof (EFI_PXE_BASE_CODE_MODE))\r
-#define BUFFER_ALLOCATE_SIZE (8192 + 512)\r
-#define ROUTER_ALLOCATE_SIZE ALLOCATE_SIZE ((sizeof (EFI_PXE_BASE_CODE_ROUTE_ENTRY) * PXE_ROUTER_TABLE_SIZE))\r
-#define ARP_ALLOCATE_SIZE ALLOCATE_SIZE ((sizeof (EFI_PXE_BASE_CODE_ARP_ENTRY) * PXE_ARP_CACHE_SIZE))\r
-#define FILTER_ALLOCATE_SIZE ALLOCATE_SIZE ((sizeof (EFI_IP_ADDRESS) * PXE_IP_FILTER_SIZE))\r
-#define PXE_ARP_CACHE_SIZE 8\r
-#define PXE_ROUTER_TABLE_SIZE 8\r
-#define PXE_IP_FILTER_SIZE 8\r
-#define ICMP_ALLOCATE_SIZE ALLOCATE_SIZE (sizeof (EFI_PXE_BASE_CODE_ICMP_ERROR))\r
-#define TFTP_ERR_ALLOCATE_SIZE ALLOCATE_SIZE (sizeof (EFI_PXE_BASE_CODE_TFTP_ERROR))\r
-\r
-//\r
-// DHCP discover/request packets are sent to this UDP port. ProxyDHCP\r
-// servers listen on this port for DHCP discover packets that have a\r
-// class identifier (option 60) with 'PXEClient' in the first 9 bytes.\r
-// Bootservers also listen on this port for PXE broadcast discover\r
-// requests from PXE clients.\r
-//\r
-#define DHCP_SERVER_PORT 67\r
-\r
-//\r
-// When DHCP, proxyDHCP and Bootservers respond to DHCP and PXE broadcast\r
-// discover requests by broadcasting the reply packet, the packet is\r
-// broadcast to this port.\r
-//\r
-#define DHCP_CLIENT_PORT 68\r
-\r
-//\r
-// TFTP servers listen for TFTP open requests on this port.\r
-//\r
-#define TFTP_OPEN_PORT 69\r
-\r
-//\r
-// proxyDHCP and Bootservers listen on this port for a PXE unicast and/or\r
-// multicast discover requests from PXE clients. A PXE discover request\r
-// looks like a DHCP discover or DHCP request packet.\r
-//\r
-#define PXE_DISCOVERY_PORT 4011\r
-\r
-//\r
-// This port is used by the PXE client/server protocol tests.\r
-//\r
-#define PXE_PORT_PXETEST_PORT 0x8080\r
-\r
-//\r
-// Definitions for Ethertype protocol numbers and interface types\r
-// Per RFC 1700,\r
-//\r
-#define PXE_PROTOCOL_ETHERNET_IP 0x0800\r
-#define PXE_PROTOCOL_ETHERNET_ARP 0x0806\r
-#define PXE_PROTOCOL_ETHERNET_RARP 0x8035\r
-\r
-#define PXE_IFTYPE_ETHERNET 0x01\r
-#define PXE_IFTYPE_TOKENRING 0x04\r
-#define PXE_IFTYPE_FIBRE_CHANNEL 0x12\r
-\r
-//\r
-// Definitions for internet protocol version 4 header\r
-// Per RFC 791, September 1981.\r
-//\r
-#define IPVER4 4\r
-\r
-#pragma pack(1) // make network structures packed byte alignment\r
-typedef union {\r
- UINT8 B[4];\r
- UINT32 L;\r
-} IPV4_ADDR;\r
-\r
-#define IPV4_HEADER_LENGTH(IpHeaderPtr) (((IpHeaderPtr)->VersionIhl & 0xf) << 2)\r
-\r
-#define SET_IPV4_VER_HDL(IpHeaderPtr, IpHeaderLen) { \\r
- (IpHeaderPtr)->VersionIhl = (UINT8) ((IPVER4 << 4) | ((IpHeaderLen) >> 2)); \\r
- }\r
-\r
-typedef struct {\r
- UINT8 VersionIhl;\r
- UINT8 TypeOfService;\r
- UINT16 TotalLength;\r
- UINT16 Id;\r
- UINT16 FragmentFields;\r
- UINT8 TimeToLive;\r
- UINT8 Protocol;\r
- UINT16 HeaderChecksum;\r
- IPV4_ADDR SrcAddr;\r
- IPV4_ADDR DestAddr;\r
- //\r
- // options are not implemented\r
- //\r
-} IPV4_HEADER;\r
-\r
-#define IP_FRAG_RSVD 0x8000 // reserved bit - must be zero\r
-#define IP_NO_FRAG 0x4000 // do not fragment bit\r
-#define IP_MORE_FRAG 0x2000 // not last fragment\r
-#define IP_FRAG_OFF_MSK 0x1fff // fragment offset in 8 byte chunks\r
-#define DEFAULT_RFC_TTL 64\r
-\r
-#define PROT_ICMP 1\r
-#define PROT_IGMP 2\r
-#define PROT_TCP 6\r
-#define PROT_UDP 17\r
-\r
-/*\r
- * Definitions for internet control message protocol version 4 message\r
- * structure. Per RFC 792, September 1981.\r
- */\r
-\r
-//\r
-// icmp header for all icmp messages\r
-//\r
-typedef struct {\r
- UINT8 Type; // message type\r
- UINT8 Code; // type specific - 0 for types we implement\r
- UINT16 Checksum; // ones complement of ones complement sum of 16 bit words of message\r
-} ICMPV4_HEADER;\r
-\r
-#define ICMP_DEST_UNREACHABLE 3\r
-#define ICMP_SOURCE_QUENCH 4\r
-#define ICMP_REDIRECT 5\r
-#define ICMP_ECHO 8\r
-#define ICMP_ECHO_REPLY 0\r
-#define ICMP_ROUTER_ADV 9\r
-#define ICMP_ROUTER_SOLICIT 10\r
-#define ICMP_TIME_EXCEEDED 11\r
-#define ICMP_PARAMETER_PROBLEM 12\r
-#define ICMP_TIMESTAMP 13\r
-#define ICMP_TIMESTAMP_REPLY 14\r
-#define ICMP_INFO_REQ 15\r
-#define ICMP_INFO_REQ_REPLY 16\r
-#define ICMP_SUBNET_MASK_REQ 17\r
-#define ICMP_SUBNET_MASK_REPLY 18\r
-//\r
-// other ICMP message types ignored in this implementation\r
-//\r
-// icmp general messages\r
-//\r
-typedef struct {\r
- ICMPV4_HEADER Header;\r
- //\r
- // generally unused except byte [0] for\r
- // parameter problem message\r
- //\r
- UINT8 GenerallyUnused[4];\r
- //\r
- // original message ip header of plus 64\r
- // bits of data\r
- //\r
- IPV4_HEADER IpHeader;\r
-} ICMPV4_GENERAL_MESSAGE;\r
-\r
-//\r
-// icmp req/rply message header\r
-//\r
-typedef struct {\r
- ICMPV4_HEADER Header;\r
- UINT16 Id;\r
- UINT16 SequenceNumber;\r
-} ICMPV4_REQUEST_REPLY_HEADER;\r
-\r
-//\r
-// icmp echo message\r
-//\r
-typedef struct {\r
- ICMPV4_REQUEST_REPLY_HEADER Header;\r
- UINT8 EchoData[1]; // variable length data to be echoed\r
-} ICMPV4_ECHO_MESSAGE;\r
-\r
-//\r
-// icmp timestamp message - times are milliseconds since midnight UT -\r
-// if non std, set high order bit\r
-//\r
-typedef struct {\r
- ICMPV4_REQUEST_REPLY_HEADER Header;\r
- UINT32 OriginalTime; // originating timestamp\r
- UINT32 ReceiveTime; // receiving timestamp\r
- UINT32 TransmitTime; // transmitting timestamp\r
-} ICMPV4_TIMESTAMP_MESSAGE;\r
-\r
-//\r
-// icmp info request structure - fill in source and dest net ip address on reply\r
-//\r
-typedef struct {\r
- ICMPV4_REQUEST_REPLY_HEADER Header;\r
-} ICMPV4_INFO_MESSAGE;\r
-\r
-//\r
-// Definitions for internet control message protocol version 4 message structure\r
-// Router discovery\r
-// Per RFC 1256, September 1991.\r
-//\r
-//\r
-// icmp router advertisement message\r
-//\r
-typedef struct {\r
- ICMPV4_HEADER Header;\r
- UINT8 NumberEntries; // number of address entries\r
- UINT8 EntrySize; // number of 32 bit words per address entry\r
- UINT16 Lifetime; // seconds to consider info valid\r
- UINT32 RouterIp;\r
- UINT32 Preferance;\r
-} ICMPV4_ROUTER_ADVERTISE_MESSAGE;\r
-\r
-//\r
-// icmp router solicitation message\r
-//\r
-typedef struct {\r
- ICMPV4_HEADER Header;\r
- UINT32 Reserved;\r
-} ICMPV4_ROUTER_SOLICIT_MESSAGE;\r
-\r
-#define MAX_SOLICITATION_DELAY 1 // 1 second\r
-#define SOLICITATION_INTERVAL 3 // 3 seconds\r
-#define MAX_SOLICITATIONS 3 // 3 transmissions\r
-#define V1ROUTER_PRESENT_TIMEOUT 400 // 400 second timeout until v2 reports can be sent\r
-#define UNSOLICITED_REPORT_INTERVAL 10 // 10 seconds between unsolicited reports\r
-#define BROADCAST_IPv4 0xffffffff\r
-\r
-//\r
-// Definitions for address resolution protocol message structure\r
-// Per RFC 826, November 1982\r
-//\r
-typedef struct {\r
- UINT16 HwType; // hardware type - e.g. ethernet (1)\r
- UINT16 ProtType; // protocol type - for ethernet, 0x800 for IP\r
- UINT8 HwAddLen; // byte length of a hardware address (e.g. 6 for ethernet)\r
- UINT8 ProtAddLen; // byte length of a protocol address (e.g. 4 for ipv4)\r
- UINT16 OpCode;\r
- //\r
- // source and dest hw and prot addresses follow - see example below\r
- //\r
-} ARP_HEADER;\r
-\r
-#define ETHERNET_ADD_SPC 1\r
-\r
-#define ETHER_TYPE_IP 0x800\r
-\r
-#define ARP_REQUEST 1\r
-#define ARP_REPLY 2\r
-\r
-//\r
-// generic ARP packet\r
-//\r
-typedef struct {\r
- ARP_HEADER ArpHeader;\r
- EFI_MAC_ADDRESS SrcHardwareAddr;\r
- EFI_IP_ADDRESS SrcProtocolAddr;\r
- EFI_MAC_ADDRESS DestHardwareAddr;\r
- EFI_IP_ADDRESS DestProtocolAddr;\r
-} ARP_PACKET;\r
-\r
-#define ENET_HWADDLEN 6\r
-#define IPV4_PROTADDLEN 4\r
-\r
-//\r
-// Definitions for user datagram protocol version 4 pseudo header & header\r
-// Per RFC 768, 28 August 1980\r
-//\r
-typedef struct {\r
- IPV4_ADDR SrcAddr; // source ip address\r
- IPV4_ADDR DestAddr; // dest ip address\r
- UINT8 Zero; // 0\r
- UINT8 Protocol; // protocol\r
- UINT16 TotalLength; // UDP length - sizeof udpv4hdr + data length\r
-} UDPV4_PSEUDO_HEADER;\r
-\r
-typedef struct {\r
- UINT16 SrcPort; // source port identifier\r
- UINT16 DestPort; // destination port identifier\r
- UINT16 TotalLength; // total length header plus data\r
- //\r
- // ones complement of ones complement sum of 16 bit\r
- // words of pseudo header, UDP header, and data\r
- // zero checksum is transmitted as -0 (ones comp)\r
- // zero transmitted means checksum not computed\r
- // data follows\r
- //\r
- UINT16 Checksum;\r
-} UDPV4_HEADER;\r
-\r
-typedef struct {\r
- UDPV4_PSEUDO_HEADER Udpv4PseudoHeader;\r
- UDPV4_HEADER Udpv4Header;\r
-} UDPV4_HEADERS;\r
-\r
-//\r
-// Definitions for transmission control protocol header\r
-// Per RFC 793, September, 1981\r
-//\r
-typedef struct {\r
- IPV4_ADDR SrcAddr; // source ip address\r
- IPV4_ADDR DestAddr; // dest ip address\r
- UINT8 Zero; // 0\r
- UINT8 Protocol; // protocol\r
- UINT16 TotalLength; // TCP length - TCP header length + data length\r
-} TCPV4_PSEUDO_HEADER;\r
-\r
-typedef struct {\r
- UINT16 SrcPort; // source port identifier\r
- UINT16 DestPort; // destination port identifier\r
- UINT32 SeqNumber; // Sequence number\r
- UINT32 AckNumber; // Acknowledgement Number\r
- //\r
- // Nibble of HLEN (length of header in 32-bit multiples)\r
- // 6bits of RESERVED\r
- // Nibble of Code Bits\r
- //\r
- UINT16 HlenResCode;\r
- UINT16 Window; // Software buffer size (sliding window size) in network-standard byte order\r
- //\r
- // ones complement of ones complement sum of 16 bit words of\r
- // pseudo header, TCP header, and data\r
- // zero checksum is transmitted as -0 (ones comp)\r
- // zero transmitted means checksum not computed\r
- //\r
- UINT16 Checksum;\r
- UINT16 UrgentPointer; // pointer to urgent data (allows sender to specify urgent data)\r
-} TCPV4_HEADER;\r
-\r
-typedef struct {\r
- TCPV4_PSEUDO_HEADER Tcpv4PseudoHeader;\r
- TCPV4_HEADER Tcpv4Header;\r
-} TCPV4_HEADERS;\r
-\r
-typedef struct {\r
- UINT8 Kind; // one of the following:\r
- UINT8 Length; // total option length including Kind and Lth\r
- UINT8 Data[1]; // length = Lth - 2\r
-} TCPV4_OPTION;\r
-\r
-#define TCP_OP_END 0 // only used to pad to end of TCP header\r
-#define TCP_NOP 1 // optional - may be used to pad between options to get alignment\r
-#define TCP_MAX_SEG 2 // maximum receive segment size - only send at initial connection request\r
-#define MAX_MEDIA_HDR_SIZE 64\r
-#define MIN_ENET_DATA_SIZE 64\r
-#define MAX_ENET_DATA_SIZE 1500 // temp def - make a network based var\r
-#define MAX_IPV4_PKT_SIZE 65535 // maximum IP packet size\r
-#define MAX_IPV4_DATA_SIZE (MAX_IPV4_PKT_SIZE - sizeof (IPV4_HEADER))\r
-#define MAX_IPV4_FRAME_DATA_SIZE (MAX_FRAME_DATA_SIZE - sizeof (IPV4_HEADER))\r
-#define REAS_IPV4_PKT_SIZE 576 // minimum IP packet size all IP host can handle\r
-#define REAS_IPV4_DATA_SIZE (REAS_IPV4_PKT_SIZE - sizeof (IPV4_HEADER))\r
-\r
-//\r
-//\r
-//\r
-typedef union {\r
- UINT8 Data[MAX_ENET_DATA_SIZE];\r
- ICMPV4_HEADER IcmpHeader;\r
- IGMPV2_MESSAGE IgmpMessage;\r
- struct {\r
- UDPV4_HEADER UdpHeader;\r
- UINT8 Data[1];\r
- } Udp;\r
- struct {\r
- TCPV4_HEADER TcpHeader;\r
- UINT8 Data[1];\r
- } Tcp;\r
-} PROTOCOL_UNION;\r
-\r
-//\r
-// out buffer structure\r
-//\r
-typedef struct {\r
- UINT8 MediaHeader[MAX_MEDIA_HDR_SIZE];\r
- IPV4_HEADER IpHeader;\r
- //\r
- // following union placement only valid if no option IP header\r
- //\r
- PROTOCOL_UNION u;\r
-} IPV4_BUFFER;\r
-\r
-typedef struct {\r
- IPV4_HEADER IpHeader;\r
- //\r
- // following union placement only valid if no option IP header\r
- //\r
- PROTOCOL_UNION u;\r
-} IPV4_STRUCT;\r
-\r
-#pragma pack() // reset to default\r
-\r
- ////////////////////////////////////////////////////////////\r
-//\r
-// BC IP Filter Routine\r
-//\r
-EFI_STATUS\r
-IpFilter (\r
- PXE_BASECODE_DEVICE *Private,\r
- IN EFI_PXE_BASE_CODE_IP_FILTER *Filter\r
- )\r
-;\r
-\r
-//\r
-// //////////////////////////////////////////////////////////////////////\r
-//\r
-// Udp Write Routine - called by base code - e.g. TFTP - already locked\r
-//\r
-EFI_STATUS\r
-UdpWrite (\r
- IN PXE_BASECODE_DEVICE *Private,\r
- IN UINT16 OpFlags,\r
- IN EFI_IP_ADDRESS *DestIpPtr,\r
- IN EFI_PXE_BASE_CODE_UDP_PORT *DestPortptr,\r
- IN EFI_IP_ADDRESS *GatewayIpPtr, OPTIONAL\r
- IN EFI_IP_ADDRESS *SrcIpPtr, OPTIONAL\r
- IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPortPtr, OPTIONAL\r
- IN UINTN *HeaderSizePtr, OPTIONAL\r
- IN VOID *HeaderPtr, OPTIONAL\r
- IN UINTN *BufferSizePtr,\r
- IN VOID *BufferPtr\r
- )\r
-;\r
-\r
-//\r
-// /////////////////////////////////////////////////////////////////////\r
-//\r
-// Udp Read Routine - called by base code - e.g. TFTP - already locked\r
-//\r
-EFI_STATUS\r
-UdpRead (\r
- IN PXE_BASECODE_DEVICE *Private,\r
- IN UINT16 OpFlags,\r
- IN OUT EFI_IP_ADDRESS *DestIpPtr, OPTIONAL\r
- IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPorPtrt, OPTIONAL\r
- IN OUT EFI_IP_ADDRESS *SrcIpPtr, OPTIONAL\r
- IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPortPtr, OPTIONAL\r
- IN UINTN *HeaderSizePtr, OPTIONAL\r
- IN VOID *HeaderPtr, OPTIONAL\r
- IN OUT UINTN *BufferSizePtr,\r
- IN VOID *BufferPtr,\r
- IN EFI_EVENT TimeoutEvent\r
- )\r
-;\r
-\r
-VOID\r
-IgmpLeaveGroup (\r
- PXE_BASECODE_DEVICE *Private,\r
- EFI_IP_ADDRESS *\r
- )\r
-;\r
-\r
-VOID\r
-IgmpJoinGroup (\r
- PXE_BASECODE_DEVICE *Private,\r
- EFI_IP_ADDRESS *\r
- )\r
-;\r
-\r
-//\r
-// convert number to zero filled ascii value of length lth\r
-//\r
-VOID\r
-CvtNum (\r
- UINTN Number,\r
- UINT8 *BufferPtr,\r
- INTN BufferLen\r
- )\r
-;\r
-\r
-//\r
-// convert number to ascii string at ptr\r
-//\r
-VOID\r
-UtoA10 (\r
- UINTN Number,\r
- UINT8 *BufferPtr\r
- )\r
-;\r
-\r
-//\r
-// convert ascii numeric string to UINTN\r
-//\r
-UINTN\r
-AtoU (\r
- UINT8 *BufferPtr\r
- )\r
-;\r
-\r
-UINT64\r
-AtoU64 (\r
- UINT8 *BufferPtr\r
- )\r
-;\r
-\r
-//\r
-// calculate the internet checksum (RFC 1071)\r
-// return 16 bit ones complement of ones complement sum of 16 bit words\r
-//\r
-UINT16\r
-IpChecksum (\r
- UINT16 *MessagePtr,\r
- UINTN ByteLength\r
- )\r
-;\r
-\r
-//\r
-// do checksum on non contiguous header and data\r
-//\r
-UINT16\r
-IpChecksum2 (\r
- UINT16 *Header,\r
- UINTN HeaderLength,\r
- UINT16 *Message,\r
- UINTN MessageLength\r
- )\r
-;\r
-\r
-//\r
-// update checksum when only a single word changes\r
-//\r
-UINT16\r
-UpdateChecksum (\r
- UINT16 OldChecksum,\r
- UINT16 OldWord,\r
- UINT16 NewWord\r
- )\r
-;\r
-\r
-VOID\r
-SeedRandom (\r
- IN PXE_BASECODE_DEVICE *Private,\r
- IN UINT16 InitialSeed\r
- )\r
-;\r
-\r
-UINT16\r
-Random (\r
- IN PXE_BASECODE_DEVICE *Private\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-SendPacket (\r
- PXE_BASECODE_DEVICE *Private,\r
- VOID *HeaderPtr,\r
- VOID *PacketPtr,\r
- INTN PacketLength,\r
- VOID *HardwareAddress,\r
- UINT16 MediaProtocol,\r
- IN EFI_PXE_BASE_CODE_FUNCTION Function\r
- )\r
-;\r
-\r
-VOID\r
-HandleArpReceive (\r
- PXE_BASECODE_DEVICE *Private,\r
- ARP_PACKET *ArpPacketPtr,\r
- VOID *HeaderPtr\r
- )\r
-;\r
-\r
-VOID\r
-HandleIgmp (\r
- PXE_BASECODE_DEVICE *Private,\r
- IGMPV2_MESSAGE *IgmpMessageptr,\r
- UINTN IgmpMessageLen\r
- )\r
-;\r
-\r
-VOID\r
-IgmpCheckTimers (\r
- PXE_BASECODE_DEVICE *Private\r
- )\r
-; // poll when doing a receive\r
-// return hw add of IP and TRUE if available, otherwise FALSE\r
-//\r
-BOOLEAN\r
-GetHwAddr (\r
- IN PXE_BASECODE_DEVICE *Private,\r
- EFI_IP_ADDRESS *ProtocolAddressPtr,\r
- EFI_MAC_ADDRESS *HardwareAddressPtr\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-DoArp (\r
- IN PXE_BASECODE_DEVICE *Private,\r
- IN EFI_IP_ADDRESS *ProtocolAddressPtr,\r
- OUT EFI_MAC_ADDRESS *HardwareAddressptr\r
- )\r
-;\r
-\r
-BOOLEAN\r
-OnSameSubnet (\r
- UINTN IpAddressLen,\r
- EFI_IP_ADDRESS *Ip1,\r
- EFI_IP_ADDRESS *Ip2,\r
- EFI_IP_ADDRESS *SubnetMask\r
- )\r
-;\r
-\r
-VOID\r
-IpAddRouter (\r
- PXE_BASECODE_DEVICE *Private,\r
- EFI_IP_ADDRESS *RouterIp\r
- )\r
-;\r
-\r
-#define Ip4AddRouter(Private, Ipv4Ptr) IpAddRouter (Private, (EFI_IP_ADDRESS *) Ipv4Ptr)\r
-\r
-//\r
-// routine to send ipv4 packet\r
-// ipv4 + upper protocol header for length TotHdrLth in xmtbuf, ipv4 header length IpHdrLth\r
-// routine fills in ipv4hdr Ver_Hdl, TotLth, and Checksum, moves in Data, and gets dest MAC address\r
-//\r
-EFI_STATUS\r
-Ipv4Xmt (\r
- PXE_BASECODE_DEVICE *Private,\r
- UINT32 GatewayIP,\r
- UINTN IpHeaderLen,\r
- UINTN TotalHeaderLen,\r
- VOID *Data,\r
- UINTN DataLen,\r
- EFI_PXE_BASE_CODE_FUNCTION Function\r
- )\r
-;\r
-\r
-//\r
-// send ipv4 packet with ipv4 option\r
-//\r
-EFI_STATUS\r
-Ipv4SendWOp (\r
- PXE_BASECODE_DEVICE *Private,\r
- UINT32 GatewayIP,\r
- UINT8 *MessagePtr,\r
- UINTN MessageLth,\r
- UINT8 Protocol,\r
- UINT8 *Option,\r
- UINTN OptionLen,\r
- UINT32 DestIp,\r
- EFI_PXE_BASE_CODE_FUNCTION Function\r
- )\r
-;\r
-\r
-//\r
-// send MsgLth message at MsgPtr - higher level protocol header already in xmtbuf, length HdrSize\r
-//\r
-EFI_STATUS\r
-Ip4Send (\r
- IN PXE_BASECODE_DEVICE *Private, // pointer to instance data\r
- IN UINTN MayFragment, //\r
- IN UINT8 Protocol, // protocol\r
- IN UINT32 SrcIp, // Source IP address\r
- IN UINT32 DestIp, // Destination IP address\r
- IN UINT32 GatewayIp, // used if not NULL and needed\r
- IN UINTN HeaderSize, // protocol header byte length\r
- IN UINT8 *MsgPtr, // pointer to data\r
- IN UINTN MsgLength\r
- )\r
-; // data byte length\r
-// receive up to MsgLth message into MsgPtr for protocol Prot\r
-// return message length, src/dest ips if select any, and pointer to protocol header\r
-//\r
-EFI_STATUS\r
-IpReceive (\r
- IN PXE_BASECODE_DEVICE *Private, // pointer to instance data\r
- UINT16 OpFlags, // Flags to determine if filtering on IP addresses\r
- EFI_IP_ADDRESS *SrcIpPtr, // if filtering, O if accept any\r
- EFI_IP_ADDRESS *DstIpPtr, // if filtering, O if accept any\r
- UINT8 Protocol, // protocol\r
- VOID *HeaderPtr, // address of where to put protocol header\r
- UINTN HeaderSize, // protocol header byte length\r
- UINT8 *MsgPtr, // pointer to data buffer\r
- UINTN *MsgLenPtr, // pointer to data buffer length/ O - returned data length\r
- IN EFI_EVENT TimeoutEvent\r
- )\r
-;\r
-\r
-//\r
-// routine to cycle waiting for a receive or timeout\r
-//\r
-EFI_STATUS\r
-WaitForReceive (\r
- IN PXE_BASECODE_DEVICE *Private,\r
- IN EFI_PXE_BASE_CODE_FUNCTION Function,\r
- IN EFI_EVENT TimeoutEvent,\r
- IN OUT UINTN *HeaderSizePtr,\r
- IN OUT UINTN *BufferSizePtr,\r
- IN OUT UINT16 *ProtocolPtr\r
- )\r
-;\r
-\r
-#endif /* _IP_H_ */\r
-\r
-/* EOF - ip.h */\r