1*4a5d661aSToomas Soome #ifndef _EFI_UDP_H 2*4a5d661aSToomas Soome #define _EFI_UDP_H 3*4a5d661aSToomas Soome 4*4a5d661aSToomas Soome 5*4a5d661aSToomas Soome /*++ 6*4a5d661aSToomas Soome Copyright (c) 2013 Intel Corporation 7*4a5d661aSToomas Soome 8*4a5d661aSToomas Soome --*/ 9*4a5d661aSToomas Soome 10*4a5d661aSToomas Soome #define EFI_UDP4_SERVICE_BINDING_PROTOCOL \ 11*4a5d661aSToomas Soome { 0x83f01464, 0x99bd, 0x45e5, {0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6} } 12*4a5d661aSToomas Soome 13*4a5d661aSToomas Soome #define EFI_UDP4_PROTOCOL \ 14*4a5d661aSToomas Soome { 0x3ad9df29, 0x4501, 0x478d, {0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3} } 15*4a5d661aSToomas Soome 16*4a5d661aSToomas Soome #define EFI_UDP6_SERVICE_BINDING_PROTOCOL \ 17*4a5d661aSToomas Soome { 0x66ed4721, 0x3c98, 0x4d3e, {0x81, 0xe3, 0xd0, 0x3d, 0xd3, 0x9a, 0x72, 0x54} } 18*4a5d661aSToomas Soome 19*4a5d661aSToomas Soome #define EFI_UDP6_PROTOCOL \ 20*4a5d661aSToomas Soome { 0x4f948815, 0xb4b9, 0x43cb, {0x8a, 0x33, 0x90, 0xe0, 0x60, 0xb3,0x49, 0x55} } 21*4a5d661aSToomas Soome 22*4a5d661aSToomas Soome INTERFACE_DECL(_EFI_UDP4); 23*4a5d661aSToomas Soome INTERFACE_DECL(_EFI_UDP6); 24*4a5d661aSToomas Soome 25*4a5d661aSToomas Soome typedef struct { 26*4a5d661aSToomas Soome BOOLEAN AcceptBroadcast; 27*4a5d661aSToomas Soome BOOLEAN AcceptPromiscuous; 28*4a5d661aSToomas Soome BOOLEAN AcceptAnyPort; 29*4a5d661aSToomas Soome BOOLEAN AllowDuplicatePort; 30*4a5d661aSToomas Soome UINT8 TypeOfService; 31*4a5d661aSToomas Soome UINT8 TimeToLive; 32*4a5d661aSToomas Soome BOOLEAN DoNotFragment; 33*4a5d661aSToomas Soome UINT32 ReceiveTimeout; 34*4a5d661aSToomas Soome UINT32 TransmitTimeout; 35*4a5d661aSToomas Soome BOOLEAN UseDefaultAddress; 36*4a5d661aSToomas Soome EFI_IPv4_ADDRESS StationAddress; 37*4a5d661aSToomas Soome EFI_IPv4_ADDRESS SubnetMask; 38*4a5d661aSToomas Soome UINT16 StationPort; 39*4a5d661aSToomas Soome EFI_IPv4_ADDRESS RemoteAddress; 40*4a5d661aSToomas Soome UINT16 RemotePort; 41*4a5d661aSToomas Soome } EFI_UDP4_CONFIG_DATA; 42*4a5d661aSToomas Soome 43*4a5d661aSToomas Soome typedef 44*4a5d661aSToomas Soome EFI_STATUS 45*4a5d661aSToomas Soome (EFIAPI *EFI_UDP4_GET_MODE_DATA) ( 46*4a5d661aSToomas Soome IN struct _EFI_UDP4 *This, 47*4a5d661aSToomas Soome OUT EFI_UDP4_CONFIG_DATA *Udp4ConfigData OPTIONAL, 48*4a5d661aSToomas Soome OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL, 49*4a5d661aSToomas Soome OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, 50*4a5d661aSToomas Soome OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL 51*4a5d661aSToomas Soome ); 52*4a5d661aSToomas Soome 53*4a5d661aSToomas Soome typedef 54*4a5d661aSToomas Soome EFI_STATUS 55*4a5d661aSToomas Soome (EFIAPI *EFI_UDP4_CONFIGURE) ( 56*4a5d661aSToomas Soome IN struct _EFI_UDP4 *This, 57*4a5d661aSToomas Soome IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL 58*4a5d661aSToomas Soome ); 59*4a5d661aSToomas Soome 60*4a5d661aSToomas Soome typedef 61*4a5d661aSToomas Soome EFI_STATUS 62*4a5d661aSToomas Soome (EFIAPI *EFI_UDP4_GROUPS) ( 63*4a5d661aSToomas Soome IN struct _EFI_UDP4 *This, 64*4a5d661aSToomas Soome IN BOOLEAN JoinFlag, 65*4a5d661aSToomas Soome IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL 66*4a5d661aSToomas Soome ); 67*4a5d661aSToomas Soome 68*4a5d661aSToomas Soome typedef 69*4a5d661aSToomas Soome EFI_STATUS 70*4a5d661aSToomas Soome (EFIAPI *EFI_UDP4_ROUTES) ( 71*4a5d661aSToomas Soome IN struct _EFI_UDP4 *This, 72*4a5d661aSToomas Soome IN BOOLEAN DeleteRoute, 73*4a5d661aSToomas Soome IN EFI_IPv4_ADDRESS *SubnetAddress, 74*4a5d661aSToomas Soome IN EFI_IPv4_ADDRESS *SubnetMask, 75*4a5d661aSToomas Soome IN EFI_IPv4_ADDRESS *GatewayAddress 76*4a5d661aSToomas Soome ); 77*4a5d661aSToomas Soome 78*4a5d661aSToomas Soome #define EFI_NETWORK_UNREACHABLE EFIERR(100) 79*4a5d661aSToomas Soome #define EFI_HOST_UNREACHABLE EFIERR(101) 80*4a5d661aSToomas Soome #define EFI_PROTOCOL_UNREACHABLE EFIERR(102) 81*4a5d661aSToomas Soome #define EFI_PORT_UNREACHABLE EFIERR(103) 82*4a5d661aSToomas Soome 83*4a5d661aSToomas Soome typedef struct { 84*4a5d661aSToomas Soome EFI_IPv4_ADDRESS SourceAddress; 85*4a5d661aSToomas Soome UINT16 SourcePort; 86*4a5d661aSToomas Soome EFI_IPv4_ADDRESS DestinationAddress; 87*4a5d661aSToomas Soome UINT16 DestinationPort; 88*4a5d661aSToomas Soome } EFI_UDP4_SESSION_DATA; 89*4a5d661aSToomas Soome 90*4a5d661aSToomas Soome typedef struct { 91*4a5d661aSToomas Soome UINT32 FragmentLength; 92*4a5d661aSToomas Soome VOID *FragmentBuffer; 93*4a5d661aSToomas Soome } EFI_UDP4_FRAGMENT_DATA; 94*4a5d661aSToomas Soome 95*4a5d661aSToomas Soome typedef struct { 96*4a5d661aSToomas Soome EFI_TIME TimeStamp; 97*4a5d661aSToomas Soome EFI_EVENT RecycleSignal; 98*4a5d661aSToomas Soome EFI_UDP4_SESSION_DATA UdpSession; 99*4a5d661aSToomas Soome UINT32 DataLength; 100*4a5d661aSToomas Soome UINT32 FragmentCount; 101*4a5d661aSToomas Soome EFI_UDP4_FRAGMENT_DATA FragmentTable[1]; 102*4a5d661aSToomas Soome } EFI_UDP4_RECEIVE_DATA; 103*4a5d661aSToomas Soome 104*4a5d661aSToomas Soome typedef struct { 105*4a5d661aSToomas Soome EFI_UDP4_SESSION_DATA *UdpSessionData; 106*4a5d661aSToomas Soome EFI_IPv4_ADDRESS *GatewayAddress; 107*4a5d661aSToomas Soome UINT32 DataLength; 108*4a5d661aSToomas Soome UINT32 FragmentCount; 109*4a5d661aSToomas Soome EFI_UDP4_FRAGMENT_DATA FragmentTable[1]; 110*4a5d661aSToomas Soome } EFI_UDP4_TRANSMIT_DATA; 111*4a5d661aSToomas Soome 112*4a5d661aSToomas Soome typedef struct { 113*4a5d661aSToomas Soome EFI_EVENT Event; 114*4a5d661aSToomas Soome EFI_STATUS Status; 115*4a5d661aSToomas Soome union { 116*4a5d661aSToomas Soome EFI_UDP4_RECEIVE_DATA *RxData; 117*4a5d661aSToomas Soome EFI_UDP4_TRANSMIT_DATA *TxData; 118*4a5d661aSToomas Soome } Packet; 119*4a5d661aSToomas Soome } EFI_UDP4_COMPLETION_TOKEN; 120*4a5d661aSToomas Soome 121*4a5d661aSToomas Soome typedef 122*4a5d661aSToomas Soome EFI_STATUS 123*4a5d661aSToomas Soome (EFIAPI *EFI_UDP4_TRANSMIT) ( 124*4a5d661aSToomas Soome IN struct _EFI_UDP4 *This, 125*4a5d661aSToomas Soome IN EFI_UDP4_COMPLETION_TOKEN *Token 126*4a5d661aSToomas Soome ); 127*4a5d661aSToomas Soome 128*4a5d661aSToomas Soome typedef 129*4a5d661aSToomas Soome EFI_STATUS 130*4a5d661aSToomas Soome (EFIAPI *EFI_UDP4_RECEIVE) ( 131*4a5d661aSToomas Soome IN struct _EFI_UDP4 *This, 132*4a5d661aSToomas Soome IN EFI_UDP4_COMPLETION_TOKEN *Token 133*4a5d661aSToomas Soome ); 134*4a5d661aSToomas Soome 135*4a5d661aSToomas Soome typedef 136*4a5d661aSToomas Soome EFI_STATUS 137*4a5d661aSToomas Soome (EFIAPI *EFI_UDP4_CANCEL)( 138*4a5d661aSToomas Soome IN struct _EFI_UDP4 *This, 139*4a5d661aSToomas Soome IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL 140*4a5d661aSToomas Soome ); 141*4a5d661aSToomas Soome 142*4a5d661aSToomas Soome typedef 143*4a5d661aSToomas Soome EFI_STATUS 144*4a5d661aSToomas Soome (EFIAPI *EFI_UDP4_POLL) ( 145*4a5d661aSToomas Soome IN struct _EFI_UDP4 *This 146*4a5d661aSToomas Soome ); 147*4a5d661aSToomas Soome 148*4a5d661aSToomas Soome typedef struct _EFI_UDP4 { 149*4a5d661aSToomas Soome EFI_UDP4_GET_MODE_DATA GetModeData; 150*4a5d661aSToomas Soome EFI_UDP4_CONFIGURE Configure; 151*4a5d661aSToomas Soome EFI_UDP4_GROUPS Groups; 152*4a5d661aSToomas Soome EFI_UDP4_ROUTES Routes; 153*4a5d661aSToomas Soome EFI_UDP4_TRANSMIT Transmit; 154*4a5d661aSToomas Soome EFI_UDP4_RECEIVE Receive; 155*4a5d661aSToomas Soome EFI_UDP4_CANCEL Cancel; 156*4a5d661aSToomas Soome EFI_UDP4_POLL Poll; 157*4a5d661aSToomas Soome } EFI_UDP4; 158*4a5d661aSToomas Soome 159*4a5d661aSToomas Soome typedef struct { 160*4a5d661aSToomas Soome BOOLEAN AcceptPromiscuous; 161*4a5d661aSToomas Soome BOOLEAN AcceptAnyPort; 162*4a5d661aSToomas Soome BOOLEAN AllowDuplicatePort; 163*4a5d661aSToomas Soome UINT8 TrafficClass; 164*4a5d661aSToomas Soome UINT8 HopLimit; 165*4a5d661aSToomas Soome UINT32 ReceiveTimeout; 166*4a5d661aSToomas Soome UINT32 TransmitTimeout; 167*4a5d661aSToomas Soome EFI_IPv6_ADDRESS StationAddress; 168*4a5d661aSToomas Soome UINT16 StationPort; 169*4a5d661aSToomas Soome EFI_IPv6_ADDRESS RemoteAddress; 170*4a5d661aSToomas Soome UINT16 RemotePort; 171*4a5d661aSToomas Soome } EFI_UDP6_CONFIG_DATA; 172*4a5d661aSToomas Soome 173*4a5d661aSToomas Soome typedef 174*4a5d661aSToomas Soome EFI_STATUS 175*4a5d661aSToomas Soome (EFIAPI *EFI_UDP6_GET_MODE_DATA) ( 176*4a5d661aSToomas Soome IN struct _EFI_UDP6 *This, 177*4a5d661aSToomas Soome OUT EFI_UDP6_CONFIG_DATA *Udp6ConfigData OPTIONAL, 178*4a5d661aSToomas Soome OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL, 179*4a5d661aSToomas Soome OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, 180*4a5d661aSToomas Soome OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL 181*4a5d661aSToomas Soome ); 182*4a5d661aSToomas Soome 183*4a5d661aSToomas Soome typedef 184*4a5d661aSToomas Soome EFI_STATUS 185*4a5d661aSToomas Soome (EFIAPI *EFI_UDP6_CONFIGURE) ( 186*4a5d661aSToomas Soome IN struct _EFI_UDP6 *This, 187*4a5d661aSToomas Soome IN EFI_UDP6_CONFIG_DATA *UdpConfigData OPTIONAL 188*4a5d661aSToomas Soome ); 189*4a5d661aSToomas Soome 190*4a5d661aSToomas Soome typedef 191*4a5d661aSToomas Soome EFI_STATUS 192*4a5d661aSToomas Soome (EFIAPI *EFI_UDP6_GROUPS) ( 193*4a5d661aSToomas Soome IN struct _EFI_UDP6 *This, 194*4a5d661aSToomas Soome IN BOOLEAN JoinFlag, 195*4a5d661aSToomas Soome IN EFI_IPv6_ADDRESS *MulticastAddress OPTIONAL 196*4a5d661aSToomas Soome ); 197*4a5d661aSToomas Soome 198*4a5d661aSToomas Soome typedef struct { 199*4a5d661aSToomas Soome EFI_IPv6_ADDRESS SourceAddress; 200*4a5d661aSToomas Soome UINT16 SourcePort; 201*4a5d661aSToomas Soome EFI_IPv6_ADDRESS DestinationAddress; 202*4a5d661aSToomas Soome UINT16 DestinationPort; 203*4a5d661aSToomas Soome } EFI_UDP6_SESSION_DATA; 204*4a5d661aSToomas Soome 205*4a5d661aSToomas Soome typedef struct { 206*4a5d661aSToomas Soome UINT32 FragmentLength; 207*4a5d661aSToomas Soome VOID *FragmentBuffer; 208*4a5d661aSToomas Soome } EFI_UDP6_FRAGMENT_DATA; 209*4a5d661aSToomas Soome 210*4a5d661aSToomas Soome typedef struct { 211*4a5d661aSToomas Soome EFI_TIME TimeStamp; 212*4a5d661aSToomas Soome EFI_EVENT RecycleSignal; 213*4a5d661aSToomas Soome EFI_UDP6_SESSION_DATA UdpSession; 214*4a5d661aSToomas Soome UINT32 DataLength; 215*4a5d661aSToomas Soome UINT32 FragmentCount; 216*4a5d661aSToomas Soome EFI_UDP6_FRAGMENT_DATA FragmentTable[1]; 217*4a5d661aSToomas Soome } EFI_UDP6_RECEIVE_DATA; 218*4a5d661aSToomas Soome 219*4a5d661aSToomas Soome typedef struct { 220*4a5d661aSToomas Soome EFI_UDP6_SESSION_DATA *UdpSessionData; 221*4a5d661aSToomas Soome UINT32 DataLength; 222*4a5d661aSToomas Soome UINT32 FragmentCount; 223*4a5d661aSToomas Soome EFI_UDP6_FRAGMENT_DATA FragmentTable[1]; 224*4a5d661aSToomas Soome } EFI_UDP6_TRANSMIT_DATA; 225*4a5d661aSToomas Soome 226*4a5d661aSToomas Soome typedef struct { 227*4a5d661aSToomas Soome EFI_EVENT Event; 228*4a5d661aSToomas Soome EFI_STATUS Status; 229*4a5d661aSToomas Soome union { 230*4a5d661aSToomas Soome EFI_UDP6_RECEIVE_DATA *RxData; 231*4a5d661aSToomas Soome EFI_UDP6_TRANSMIT_DATA *TxData; 232*4a5d661aSToomas Soome } Packet; 233*4a5d661aSToomas Soome } EFI_UDP6_COMPLETION_TOKEN; 234*4a5d661aSToomas Soome 235*4a5d661aSToomas Soome typedef 236*4a5d661aSToomas Soome EFI_STATUS 237*4a5d661aSToomas Soome (EFIAPI *EFI_UDP6_TRANSMIT) ( 238*4a5d661aSToomas Soome IN struct _EFI_UDP6 *This, 239*4a5d661aSToomas Soome IN EFI_UDP6_COMPLETION_TOKEN *Token 240*4a5d661aSToomas Soome ); 241*4a5d661aSToomas Soome 242*4a5d661aSToomas Soome typedef 243*4a5d661aSToomas Soome EFI_STATUS 244*4a5d661aSToomas Soome (EFIAPI *EFI_UDP6_RECEIVE) ( 245*4a5d661aSToomas Soome IN struct _EFI_UDP6 *This, 246*4a5d661aSToomas Soome IN EFI_UDP6_COMPLETION_TOKEN *Token 247*4a5d661aSToomas Soome ); 248*4a5d661aSToomas Soome 249*4a5d661aSToomas Soome typedef 250*4a5d661aSToomas Soome EFI_STATUS 251*4a5d661aSToomas Soome (EFIAPI *EFI_UDP6_CANCEL)( 252*4a5d661aSToomas Soome IN struct _EFI_UDP6 *This, 253*4a5d661aSToomas Soome IN EFI_UDP6_COMPLETION_TOKEN *Token OPTIONAL 254*4a5d661aSToomas Soome ); 255*4a5d661aSToomas Soome 256*4a5d661aSToomas Soome typedef 257*4a5d661aSToomas Soome EFI_STATUS 258*4a5d661aSToomas Soome (EFIAPI *EFI_UDP6_POLL) ( 259*4a5d661aSToomas Soome IN struct _EFI_UDP6 *This 260*4a5d661aSToomas Soome ); 261*4a5d661aSToomas Soome 262*4a5d661aSToomas Soome typedef struct _EFI_UDP6 { 263*4a5d661aSToomas Soome EFI_UDP6_GET_MODE_DATA GetModeData; 264*4a5d661aSToomas Soome EFI_UDP6_CONFIGURE Configure; 265*4a5d661aSToomas Soome EFI_UDP6_GROUPS Groups; 266*4a5d661aSToomas Soome EFI_UDP6_TRANSMIT Transmit; 267*4a5d661aSToomas Soome EFI_UDP6_RECEIVE Receive; 268*4a5d661aSToomas Soome EFI_UDP6_CANCEL Cancel; 269*4a5d661aSToomas Soome EFI_UDP6_POLL Poll; 270*4a5d661aSToomas Soome } EFI_UDP6; 271*4a5d661aSToomas Soome 272*4a5d661aSToomas Soome #endif /* _EFI_UDP_H */ 273