libsefi/protocols/network.h
2024-05-27 21:45:04 +02:00

755 lines
20 KiB
C

#ifndef EFI_PROTOCOLS_NETWORK_H
#define EFI_PROTOCOLS_NETWORK_H
////
// Simple Network Protocol
///
#define EFI_SIMPLE_NETWORK_PROTOCOL_GUID {0xa19832b9,0xac25,0x11d3, {0x9a,0x2d,0x00,0x90,0x27,0x3f,0xc1,0x4d}}
#define EFI_SIMPLE_NETWORK_PROTOCOL_REVISION 0x00010000
#define MAX_MCAST_FILTER_CNT 16
// Bit Mask Values for ReceiveFilterString
#define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST 0x01
#define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST 0x02
#define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST 0x04
#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS 0x08
#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10
// Interrupt Bit Mask Settings for InterruptStatus
#define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT 0x01
#define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT 0x02
#define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT 0x04
#define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT 0x08
typedef struct _EFI_SIMPLE_NETWORK_PROTOCOL EFI_SIMPLE_NETWORK_PROTOCOL;
typedef enum {
EfiSimpleNetworkStopped,
EfiSimpleNetworkStarted,
EfiSimpleNetworkInitialized,
EfiSimpleNetworkMaxState
} EFI_SIMPLE_NETWORK_STATE;
typedef struct {
EFI_UINT32 State;
EFI_UINT32 HwAddressSize;
EFI_UINT32 MediaHeaderSize;
EFI_UINT32 MaxPacketSize;
EFI_UINT32 NvRamSize;
EFI_UINT32 NvRamAccessSize;
EFI_UINT32 ReceiveFilterMask;
EFI_UINT32 ReceiveFilterSetting;
EFI_UINT32 MaxMCastFilterCount;
EFI_UINT32 MCastFilterCount;
EFI_MAC_ADDRESS MCastFilter[MAX_MCAST_FILTER_CNT];
EFI_MAC_ADDRESS CurrentAddress;
EFI_MAC_ADDRESS BroadcastAddress;
EFI_MAC_ADDRESS PermanentAddress;
EFI_UINT8 IfType;
EFI_BOOLEAN MacAddressChangeable;
EFI_BOOLEAN MultipleTxSupported;
EFI_BOOLEAN MediaPresentSupported;
EFI_BOOLEAN MediaPresent;
} EFI_SIMPLE_NETWORK_MODE;
typedef struct {
EFI_UINT64 RxTotalFrames;
EFI_UINT64 RxGoodFrames;
EFI_UINT64 RxUndersizeFrames;
EFI_UINT64 RxOversizeFrames;
EFI_UINT64 RxDroppedFrames;
EFI_UINT64 RxUnicastFrames;
EFI_UINT64 RxBroadcastFrames;
EFI_UINT64 RxMulticastFrames;
EFI_UINT64 RxCrcErrorFrames;
EFI_UINT64 RxTotalBytes;
EFI_UINT64 TxTotalFrames;
EFI_UINT64 TxGoodFrames;
EFI_UINT64 TxUndersizeFrames;
EFI_UINT64 TxOversizeFrames;
EFI_UINT64 TxDroppedFrames;
EFI_UINT64 TxUnicastFrames;
EFI_UINT64 TxBroadcastFrames;
EFI_UINT64 TxMulticastFrames;
EFI_UINT64 TxCrcErrorFrames;
EFI_UINT64 TxTotalBytes;
EFI_UINT64 Collisions;
EFI_UINT64 UnsupportedProtocol;
EFI_UINT64 RxDuplicatedFrames;
EFI_UINT64 RxDecryptErrorFrames;
EFI_UINT64 TxErrorFrames;
EFI_UINT64 TxRetryFrames;
} EFI_NETWORK_STATISTICS;
typedef
EFI_STATUS
(EFIAPI *EFI_SIMPLE_NETWORK_START)(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
);
typedef
EFI_STATUS
(EFIAPI *EFI_SIMPLE_NETWORK_STOP)(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
);
typedef
EFI_STATUS
(EFIAPI *EFI_SIMPLE_NETWORK_INITIALIZE)(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN EFI_UINTN ExtraRxBufferSize OPTIONAL,
IN EFI_UINTN ExtraTxBufferSize OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_SIMPLE_NETWORK_RESET)(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN EFI_BOOLEAN ExtendedVerification
);
typedef
EFI_STATUS
(EFIAPI *EFI_SIMPLE_NETWORK_SHUTDOWN)(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
);
typedef
EFI_STATUS
(EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE_FILTERS)(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN EFI_UINT32 Enable,
IN EFI_UINT32 Disable,
IN EFI_BOOLEAN ResetMCastFilter,
IN EFI_UINTN MCastFilterCnt OPTIONAL,
IN EFI_MAC_ADDRESS MCastFilter OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_SIMPLE_NETWORK_STATION_ADDRESS)(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN EFI_BOOLEAN Reset,
IN EFI_MAC_ADDRESS *New OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_SIMPLE_NETWORK_STATISTICS)(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN EFI_BOOLEAN Reset,
IN OUT EFI_UINTN *StatisticsSize OPTIONAL,
OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC)(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN EFI_BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
OUT EFI_MAC_ADDRESS *MAC
);
typedef
EFI_STATUS
(EFIAPI *EFI_SIMPLE_NETWORK_NVDATA)(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN EFI_BOOLEAN ReadWrite,
IN EFI_UINTN Offset,
IN EFI_UINTN BufferSize,
IN OUT VOID *Buffer
);
typedef
EFI_STATUS
(EFIAPI *EFI_SIMPLE_NETWORK_GET_STATUS)(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT EFI_UINT32 *InterruptStatus OPTIONAL,
OUT VOID **TxBuf OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_SIMPLE_NETWORK_TRANSMIT)(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN EFI_UINTN HeaderSize,
IN EFI_UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN EFI_UINT16 *Protocol OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE)(
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT EFI_UINTN *HeaderSize OPTIONAL,
IN OUT EFI_UINTN *BufferSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
OUT EFI_UINT16 *Protocol OPTIONAL
);
typedef struct _EFI_SIMPLE_NETWORK_PROTOCOL {
EFI_UINT64 Revision;
EFI_SIMPLE_NETWORK_START Start;
EFI_SIMPLE_NETWORK_STOP Stop;
EFI_SIMPLE_NETWORK_INITIALIZE Initialize;
EFI_SIMPLE_NETWORK_RESET Reset;
EFI_SIMPLE_NETWORK_SHUTDOWN Shutdown;
EFI_SIMPLE_NETWORK_RECEIVE_FILTERS ReceiveFilters;
EFI_SIMPLE_NETWORK_STATION_ADDRESS StationAddress;
EFI_SIMPLE_NETWORK_STATISTICS Statistics;
EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC MCastIpToMac;
EFI_SIMPLE_NETWORK_NVDATA NvData;
EFI_SIMPLE_NETWORK_GET_STATUS GetStatus;
EFI_SIMPLE_NETWORK_TRANSMIT Transmit;
EFI_SIMPLE_NETWORK_RECEIVE Receive;
EFI_EVENT WaitForPacket;
EFI_SIMPLE_NETWORK_MODE *Mode;
} EFI_SIMPLE_NETWORK_PROTOCOL;
////
// Network Interface Identifier Protocol
///
#define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_GUID_31 {0x1aced566, 0x76ed, 0x4218, {0xbc, 0x81, 0x76, 0x7f, 0x1f, 0x97, 0x7a, 0x89}}
#define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_REVISION 0x00020000
typedef struct _EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL;
typedef enum {
EfiNetworkInterfaceUndi = 1
} EFI_NETWORK_INTERFACE_TYPE;
typedef struct _EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL {
EFI_UINT64 Revision;
EFI_UINT64 Id;
EFI_UINT64 ImageAddr;
EFI_UINT32 ImageSize;
CHAR8 StringId[4];
EFI_UINT8 Type;
EFI_UINT8 MajorVer;
EFI_UINT8 MinorVer;
EFI_BOOLEAN Ipv6Supported;
EFI_UINT16 IfNum;
} EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL;
////
// PXE Base Code Protocol
///
#define EFI_PXE_BASE_CODE_PROTOCOL_GUID {0x03c4e603,0xac28,0x11d3, {0x9a,0x2d,0x00,0x90,0x27,0x3f,0xc1,0x4d}}
#define EFI_PXE_BASE_CODE_PROTOCOL_REVISION 0x00010000
// Maximum ARP and Route Entries
#define EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES 8
#define EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES 8
#define EFI_PXE_BASE_CODE_MAX_IPCNT 8
#define EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP 0x0001
#define EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST 0x0002
#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS 0x0004
#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST 0x0008
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP 0x0001
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT 0x0002
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP 0x0004
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT 0x0008
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER 0x0010
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_MAY_FRAGMENT 0x0020
#define DEFAULT_TTL 16
#define DEFAULT_ToS 0
// Bootstrap Types
#define EFI_PXE_BASE_CODE_BOOT_TYPE_BOOTSTRAP 0
#define EFI_PXE_BASE_CODE_BOOT_TYPE_MS_WINNT_RIS 1
#define EFI_PXE_BASE_CODE_BOOT_TYPE_INTEL_LCM 2
#define EFI_PXE_BASE_CODE_BOOT_TYPE_DOSUNDI 3
#define EFI_PXE_BASE_CODE_BOOT_TYPE_NEC_ESMPRO 4
#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_WSoD 5
#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_LCCM 6
#define EFI_PXE_BASE_CODE_BOOT_TYPE_CA_UNICENTER_TNG 7
#define EFI_PXE_BASE_CODE_BOOT_TYPE_HP_OPENVIEW 8
#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_9 9
#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_10 10
#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_11 11
#define EFI_PXE_BASE_CODE_BOOT_TYPE_NOT_USED_12 12
#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_INSTALL 13
#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_BOOT 14
#define EFI_PXE_BASE_CODE_BOOT_TYPE_REMBO 15
#define EFI_PXE_BASE_CODE_BOOT_TYPE_BEOBOOT 16
#define EFI_PXE_BASE_CODE_BOOT_TYPE_PXETEST 65535
#define EFI_PXE_BASE_CODE_BOOT_LAYER_MASK 0x7FFF
#define EFI_PXE_BASE_CODE_BOOT_LAYER_INITIAL 0x0000
typedef struct _EFI_PXE_BASE_CODE_PROTOCOL EFI_PXE_BASE_CODE_PROTOCOL;
typedef EFI_UINT16 EFI_PXE_BASE_CODE_UDP_PORT;
typedef enum {
EFI_PXE_BASE_CODE_TFTP_FIRST,
EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE,
EFI_PXE_BASE_CODE_TFTP_READ_FILE,
EFI_PXE_BASE_CODE_TFTP_WRITE_FILE,
EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY,
EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE,
EFI_PXE_BASE_CODE_MTFTP_READ_FILE,
EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY,
EFI_PXE_BASE_CODE_MTFTP_LAST
} EFI_PXE_BASE_CODE_TFTP_OPCODE;
typedef struct {
EFI_UINT8 Filters;
EFI_UINT8 IpCnt;
EFI_UINT16 Reserved;
EFI_IP_ADDRESS IpList[EFI_PXE_BASE_CODE_MAX_IPCNT];
} EFI_PXE_BASE_CODE_IP_FILTER;
typedef struct {
EFI_UINT8 BootpOpcode;
EFI_UINT8 BootpHwType;
EFI_UINT8 BootpHwAddrLen;
EFI_UINT8 BootpGateHops;
EFI_UINT32 BootpIdent;
EFI_UINT16 BootpSeconds;
EFI_UINT16 BootpFlags;
EFI_UINT8 BootpCiAddr[4];
EFI_UINT8 BootpYiAddr[4];
EFI_UINT8 BootpSiAddr[4];
EFI_UINT8 BootpGiAddr[4];
EFI_UINT8 BootpHwAddr[16];
EFI_UINT8 BootpSrvName[64];
EFI_UINT8 BootpBootFile[128];
EFI_UINT32 DhcpMagik;
EFI_UINT8 DhcpOptions[56];
} EFI_PXE_BASE_CODE_DHCPV4_PACKET;
typedef struct {
EFI_UINT32 MessageType : 8;
EFI_UINT32 TransactionId : 24;
EFI_UINT8 DhcpOptions[1024];
} EFI_PXE_BASE_CODE_DHCPV6_PACKET;
typedef union {
EFI_UINT8 Raw[1472];
EFI_PXE_BASE_CODE_DHCPV4_PACKET Dhcpv4;
EFI_PXE_BASE_CODE_DHCPV6_PACKET Dhcpv6;
} EFI_PXE_BASE_CODE_PACKET;
typedef struct {
EFI_UINT8 Type;
EFI_UINT8 Code;
EFI_UINT16 Checksum;
union {
EFI_UINT32 reserved;
EFI_UINT32 Mtu;
EFI_UINT32 Pointer;
struct {
EFI_UINT16 Identifier;
EFI_UINT16 Sequence;
} Echo;
} u;
EFI_UINT8 Data[494];
} EFI_PXE_BASE_CODE_ICMP_ERROR;
typedef struct {
EFI_UINT8 ErrorCode;
CHAR8 ErrorString[127];
} EFI_PXE_BASE_CODE_TFTP_ERROR;
typedef struct {
EFI_IP_ADDRESS IpAddr;
EFI_MAC_ADDRESS MacAddr;
} EFI_PXE_BASE_CODE_ARP_ENTRY;
typedef struct {
EFI_IP_ADDRESS IpAddr;
EFI_IP_ADDRESS SubnetMask;
EFI_IP_ADDRESS GwAddr;
} EFI_PXE_BASE_CODE_ROUTE_ENTRY;
typedef struct {
EFI_UINT16 Type;
EFI_BOOLEAN AcceptAnyResponse;
EFI_UINT8 reserved;
EFI_IP_ADDRESS IpAddr;
} EFI_PXE_BASE_CODE_SRVLIST;
typedef struct {
EFI_BOOLEAN UseMCast;
EFI_BOOLEAN UseBCast;
EFI_BOOLEAN UseUCast;
EFI_BOOLEAN MustUseList;
EFI_IP_ADDRESS ServerMCastIp;
EFI_UINT16 IpCnt;
EFI_PXE_BASE_CODE_SRVLIST SrvList[1];
} EFI_PXE_BASE_CODE_DISCOVER_INFO;
typedef struct {
EFI_BOOLEAN Started;
EFI_BOOLEAN Ipv6Available;
EFI_BOOLEAN Ipv6Supported;
EFI_BOOLEAN UsingIpv6;
EFI_BOOLEAN BisSupported;
EFI_BOOLEAN BisDetected;
EFI_BOOLEAN AutoArp;
EFI_BOOLEAN SendGUID;
EFI_BOOLEAN DhcpDiscoverValid;
EFI_BOOLEAN DhcpAckReceivd;
EFI_BOOLEAN ProxyOfferReceived;
EFI_BOOLEAN PxeDiscoverValid;
EFI_BOOLEAN PxeReplyReceived;
EFI_BOOLEAN PxeBisReplyReceived;
EFI_BOOLEAN IcmpErrorReceived;
EFI_BOOLEAN TftpErrorReceived;
EFI_BOOLEAN MakeCallbacks;
EFI_UINT8 TTL;
EFI_UINT8 ToS;
EFI_IP_ADDRESS StationIp;
EFI_IP_ADDRESS SubnetMask;
EFI_PXE_BASE_CODE_PACKET DhcpDiscover;
EFI_PXE_BASE_CODE_PACKET DhcpAck;
EFI_PXE_BASE_CODE_PACKET ProxyOffer;
EFI_PXE_BASE_CODE_PACKET PxeDiscover;
EFI_PXE_BASE_CODE_PACKET PxeReply;
EFI_PXE_BASE_CODE_PACKET PxeBisReply;
EFI_PXE_BASE_CODE_IP_FILTER IpFilter;
EFI_UINT32 ArpCacheEntries;
EFI_PXE_BASE_CODE_ARP_ENTRY ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES];
EFI_UINT32 RouteTableEntries;
EFI_PXE_BASE_CODE_ROUTE_ENTRY RouteTable[EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES];
EFI_PXE_BASE_CODE_ICMP_ERROR IcmpError;
EFI_PXE_BASE_CODE_TFTP_ERROR TftpError;
} EFI_PXE_BASE_CODE_MODE;
typedef struct {
EFI_IP_ADDRESS MCastIp;
EFI_PXE_BASE_CODE_UDP_PORT CPort;
EFI_PXE_BASE_CODE_UDP_PORT SPort;
EFI_UINT16 ListenTimeout;
EFI_UINT16 TransmitTimeout;
} EFI_PXE_BASE_CODE_MTFTP_INFO;
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_BASE_CODE_START)(
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
IN EFI_BOOLEAN UseIpv6
);
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_BASE_CODE_STOP)(
IN EFI_PXE_BASE_CODE_PROTOCOL *This
);
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_BASE_CODE_DHCP) (
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
IN EFI_BOOLEAN SortOffers
);
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_BASE_CODE_DISCOVER)(
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
IN EFI_UINT16 Type,
IN EFI_UINT16 *Layer,
IN EFI_BOOLEAN UseBis,
IN EFI_PXE_BASE_CODE_DISCOVER_INFO *Info OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_BASE_CODE_MTFTP)(
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,
IN OUT VOID *BufferPtr OPTIONAL,
IN EFI_BOOLEAN Overwrite,
IN OUT EFI_UINT64 *BufferSize,
IN EFI_UINTN *BlockSize OPTIONAL,
IN EFI_IP_ADDRESS *ServerIp,
IN CHAR8 *Filename OPTIONAL,
IN EFI_PXE_BASE_CODE_MTFTP_INFO *Info OPTIONAL,
IN EFI_BOOLEAN DontUseBuffer
);
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_BASE_CODE_UDP_WRITE)(
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
IN EFI_UINT16 OpFlags,
IN EFI_IP_ADDRESS *DestIp,
IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort,
IN EFI_IP_ADDRESS *GatewayIp OPTIONAL,
IN EFI_IP_ADDRESS *SrcIp OPTIONAL,
IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL,
IN EFI_UINTN *HeaderSize OPTIONAL,
IN VOID *HeaderPtr OPTIONAL,
IN EFI_UINTN *BufferSize,
IN VOID *BufferPtr
);
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_BASE_CODE_UDP_READ)(
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
IN EFI_UINT16 OpFlags,
IN OUT EFI_IP_ADDRESS *DestIp OPTIONAL,
IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort OPTIONAL,
IN OUT EFI_IP_ADDRESS *SrcIp OPTIONAL,
IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL,
IN EFI_UINTN *HeaderSize OPTIONAL,
IN VOID *HeaderPtr OPTIONAL,
IN OUT EFI_UINTN *BufferSize,
IN VOID *BufferPtr
);
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_BASE_CODE_SET_IP_FILTER)(
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter
);
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_BASE_CODE_ARP)(
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
IN EFI_IP_ADDRESS *IpAddr,
IN EFI_MAC_ADDRESS *MacAddr OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_BASE_CODE_SET_PARAMETERS)(
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
IN EFI_BOOLEAN *NewAutoArp OPTIONAL,
IN EFI_BOOLEAN *NewSendGUID OPTIONAL,
IN EFI_UINT8 *NewTTL OPTIONAL,
IN EFI_UINT8 *NewToS OPTIONAL,
IN EFI_BOOLEAN *NewMakeCallback OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_BASE_CODE_SET_STATION_IP)(
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
IN EFI_IP_ADDRESS *NewStationIp OPTIONAL,
IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_PXE_BASE_CODE_SET_PACKETS)(
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
IN EFI_BOOLEAN *NewDhcpDiscoverValid, OPTIONAL
IN EFI_BOOLEAN *NewDhcpAckReceived, OPTIONAL
IN EFI_BOOLEAN *NewProxyOfferReceived, OPTIONAL
IN EFI_BOOLEAN *NewPxeDiscoverValid, OPTIONAL
IN EFI_BOOLEAN *NewPxeReplyReceived, OPTIONAL
IN EFI_BOOLEAN *NewPxeBisReplyReceived, OPTIONAL
IN EFI_PXE_BASE_CODE_PACKET *NewDhcpDiscover, OPTIONAL
IN EFI_PXE_BASE_CODE_PACKET *NewDhcpAck, OPTIONAL
IN EFI_PXE_BASE_CODE_PACKET *NewProxyOffer, OPTIONAL
IN EFI_PXE_BASE_CODE_PACKET *NewPxeDiscover, OPTIONAL
IN EFI_PXE_BASE_CODE_PACKET *NewPxeReply, OPTIONAL
IN EFI_PXE_BASE_CODE_PACKET *NewPxeBisReply OPTIONAL
);
typedef struct _EFI_PXE_BASE_CODE_PROTOCOL {
EFI_UINT64 Revision;
EFI_PXE_BASE_CODE_START Start;
EFI_PXE_BASE_CODE_STOP Stop;
EFI_PXE_BASE_CODE_DHCP Dhcp;
EFI_PXE_BASE_CODE_DISCOVER Discover;
EFI_PXE_BASE_CODE_MTFTP Mtftp;
EFI_PXE_BASE_CODE_UDP_WRITE UdpWrite;
EFI_PXE_BASE_CODE_UDP_READ UdpRead;
EFI_PXE_BASE_CODE_SET_IP_FILTER SetIpFilter;
EFI_PXE_BASE_CODE_ARP Arp;
EFI_PXE_BASE_CODE_SET_PARAMETERS SetParameters;
EFI_PXE_BASE_CODE_SET_STATION_IP SetStationIp;
EFI_PXE_BASE_CODE_SET_PACKETS SetPackets;
EFI_PXE_BASE_CODE_MODE *Mode;
} EFI_PXE_BASE_CODE_PROTOCOL;
////
// Boot Integrity Services Protocol
///
#define EFI_BIS_PROTOCOL_GUID {0x0b64aab0,0x5429,0x11d4, {0x98,0x16,0x00,0xa0,0xc9,0x1f,0xad,0xcf}}
#define BOOT_OBJECT_AUTHORIZATION_PARMSET_GUID {0xedd35e31,0x7b9,0x11d2, {0x83,0xa3,0x0,0xa0,0xc9,0x1f,0xad,0xcf}}
#define BIS_CURRENT_VERSION_MAJOR BIS_VERSION_1
#define BIS_VERSION_1 1
#define BIS_ALG_DSA (41) //CSSM_ALGID_DSA
#define BIS_ALG_RSA_MD5 (42) //CSSM_ALGID_MD5_WITH_RSA
#define BIS_CERT_ID_DSA BIS_ALG_DSA //CSSM_ALGID_DSA
#define BIS_CERT_ID_RSA_MD5 BIS_ALG_RSA_MD5 //CSSM_ALGID_MD5_WITH_RSA
#define BIS_CERT_ID_MASK (0xFF7F7FFF)
#define BIS_GET_SIGINFO_COUNT(BisDataPtr) ((BisDataPtr)->Length/sizeof(EFI_BIS_SIGNATURE_INFO))
#define BIS_GET_SIGINFO_ARRAY(BisDataPtr) ((EFI_BIS_SIGNATURE_INFO*)(BisDataPtr)->Data)
typedef struct _EFI_BIS_PROTOCOL EFI_BIS_PROTOCOL;
typedef VOID *BIS_APPLICATION_HANDLE;
typedef EFI_UINT32 BIS_CERT_ID;
typedef EFI_UINT16 BIS_ALG_ID;
typedef struct {
EFI_UINT32 Major;
EFI_UINT32 Minor;
} EFI_BIS_VERSION;
typedef struct {
EFI_UINT32 Length;
EFI_UINT8 *Data;
} EFI_BIS_DATA;
typedef struct {
BIS_CERT_ID CertificateID;
BIS_ALG_ID AlgorithmID;
EFI_UINT16 KeyLength;
} EFI_BIS_SIGNATURE_INFO;
typedef
EFI_STATUS
(EFIAPI *EFI_BIS_INITIALIZE)(
IN EFI_BIS_PROTOCOL *This,
OUT BIS_APPLICATION_HANDLE *AppHandle,
IN OUT EFI_BIS_VERSION *InterfaceVersion,
IN EFI_BIS_DATA *TargetAddress
);
typedef
EFI_STATUS
(EFIAPI *EFI_BIS_SHUTDOWN)(
IN BIS_APPLICATION_HANDLE AppHandle
);
typedef
EFI_STATUS
(EFIAPI *EFI_BIS_FREE)(
IN BIS_APPLICATION_HANDLE AppHandle,
IN EFI_BIS_DATA *ToFree
);
typedef
EFI_STATUS
(EFIAPI *EFI_BIS_GET_BOOT_OBJECT_AUTHORIZATION_CERTIFICATE)(
IN BIS_APPLICATION_HANDLE AppHandle,
OUT EFI_BIS_DATA **Certificate
);
typedef
EFI_STATUS
(EFIAPI *EFI_BIS_GET_BOOT_OBJECT_AUTHORIZATION_CHECKFLAG)(
IN BIS_APPLICATION_HANDLE AppHandle,
OUT EFI_BOOLEAN *CheckIsRequired
);
typedef
EFI_STATUS
(EFIAPI *EFI_BIS_GET_BOOT_OBJECT_AUTHORIZATION_UPDATE_TOKEN)(
IN BIS_APPLICATION_HANDLE AppHandle,
OUT EFI_BIS_DATA **UpdateToken
);
typedef
EFI_STATUS
(EFIAPI *EFI_BIS_GET_SIGNATURE_INFO)(
IN BIS_APPLICATION_HANDLE AppHandle,
OUT EFI_BIS_DATA **SignatureInfo
);
typedef
EFI_STATUS
(EFIAPI *EFI_BIS_UPDATE_BOOT_OBJECT_AUTHORIZATION)(
IN BIS_APPLICATION_HANDLE AppHandle,
IN EFI_BIS_DATA *RequestCredential,
OUT EFI_BIS_DATA **NewUpdateToken
);
typedef
EFI_STATUS
(EFIAPI *EFI_BIS_VERIFY_BOOT_OBJECT)(
IN BIS_APPLICATION_HANDLE AppHandle,
IN EFI_BIS_DATA *Credentials,
IN EFI_BIS_DATA *DataObject,
OUT EFI_BOOLEAN *IsVerified
);
typedef
EFI_STATUS
(EFIAPI *EFI_BIS_VERIFY_OBJECT_WITH_CREDENTIAL)(
IN BIS_APPLICATION_HANDLE AppHandle,
IN EFI_BIS_DATA *Credentials,
IN EFI_BIS_DATA *DataObject,
IN EFI_BIS_DATA *SectionName,
IN EFI_BIS_DATA *AuthorityCertificate,
OUT EFI_BOOLEAN *IsVerified
);
typedef struct _EFI_BIS_PROTOCOL {
EFI_BIS_INITIALIZE Initialize;
EFI_BIS_SHUTDOWN Shutdown;
EFI_BIS_FREE Free;
EFI_BIS_GET_BOOT_OBJECT_AUTHORIZATION_CERTIFICATE GetBootObjectAuthorizationCertificate;
EFI_BIS_GET_BOOT_OBJECT_AUTHORIZATION_CHECKFLAG GetBootObjectAuthorizationCheckFlag;
EFI_BIS_GET_BOOT_OBJECT_AUTHORIZATION_UPDATE_TOKEN GetBootObjectAuthorizationUpdateToken;
EFI_BIS_GET_SIGNATURE_INFO GetSignatureInfo;
EFI_BIS_UPDATE_BOOT_OBJECT_AUTHORIZATION UpdateBootObjectAuthorization;
EFI_BIS_VERIFY_BOOT_OBJECT VerifyBootObject;
EFI_BIS_VERIFY_OBJECT_WITH_CREDENTIAL VerifyObjectWithCredential;
} EFI_BIS_PROTOCOL;
////
// HTTP Boot Callback Protocol
///
#define EFI_HTTP_BOOT_CALLBACK_PROTOCOL_GUID {0xba23b311,0x343d,0x11e6, {0x91,0x85,0x58,0x20,0xb1,0xd6,0x52,0x99}}
typedef struct _EFI_HTTP_BOOT_CALLBACK_PROTOCOL EFI_HTTP_BOOT_CALLBACK_PROTOCOL;
typedef enum {
HttpBootDhcp4,
HttpBootDhcp6,
HttpBootHttpRequest,
HttpBootHttpResponse,
HttpBootHttpEntityBody,
HttpBootTypeMax
} EFI_HTTP_BOOT_CALLBACK_DATA_TYPE;
typedef
EFI_STATUS
(EFIAPI *EFI_HTTP_BOOT_CALLBACK)(
IN EFI_HTTP_BOOT_CALLBACK_PROTOCOL *This,
IN EFI_HTTP_BOOT_CALLBACK_DATA_TYPE DataType,
IN EFI_BOOLEAN Received,
IN EFI_UINT32 DataLength,
IN VOID *Data OPTIONAL
);
typedef struct _EFI_HTTP_BOOT_CALLBACK_PROTOCOL {
EFI_HTTP_BOOT_CALLBACK Callback;
} EFI_HTTP_BOOT_CALLBACK_PROTOCOL;
#endif /* EFI_PROTOCOLS_NETWORK_H */