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