4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The EFI UDPv6 (User Datagram Protocol version 6) Protocol Definition, which is built upon
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the EFI IPv6 Protocol and provides simple packet-oriented services to transmit and receive
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UDP packets.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @par Revision Reference:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This Protocol is introduced in UEFI Specification 2.2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __EFI_UDP6_PROTOCOL_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __EFI_UDP6_PROTOCOL_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Ip6.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_UDP6_SERVICE_BINDING_PROTOCOL_GUID \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x66ed4721, 0x3c98, 0x4d3e, {0x81, 0xe3, 0xd0, 0x3d, 0xd3, 0x9a, 0x72, 0x54 } \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_UDP6_PROTOCOL_GUID \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x4f948815, 0xb4b9, 0x43cb, {0x8a, 0x33, 0x90, 0xe0, 0x60, 0xb3, 0x49, 0x55 } \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The EFI UDPv6 Protocol instance handle that is using this address/port pair.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE InstanceHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The IPv6 address to which this instance of the EFI UDPv6 Protocol is bound.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Set to 0::/128, if this instance is used to listen all packets from any
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// source address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IPv6_ADDRESS LocalAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The port number in host byte order on which the service is listening.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 LocalPort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The IPv6 address of the remote host. May be 0::/128 if it is not connected
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// to any remote host or connected with more than one remote host.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IPv6_ADDRESS RemoteAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The port number in host byte order on which the remote host is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// listening. Maybe zero if it is not connected to any remote host.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 RemotePort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_UDP6_SERVICE_POINT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The handle of the driver that creates this entry.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE DriverHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The number of address/port pairs that follow this data structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ServiceCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// List of address/port pairs that are currently in use.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_SERVICE_POINT Services[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_UDP6_VARIABLE_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EFI_UDP6_PROTOCOL EFI_UDP6_PROTOCOL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// EFI_UDP6_FRAGMENT_DATA allows multiple receive or transmit buffers to be specified.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The purpose of this structure is to avoid copying the same packet multiple times.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 FragmentLength; ///< Length of the fragment data buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *FragmentBuffer; ///< Pointer to the fragment data buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_UDP6_FRAGMENT_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The EFI_UDP6_SESSION_DATA is used to retrieve the settings when receiving packets or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// to override the existing settings (only DestinationAddress and DestinationPort can
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// be overridden) of this EFI UDPv6 Protocol instance when sending packets.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Address from which this packet is sent. This field should not be used when
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// sending packets.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IPv6_ADDRESS SourceAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Port from which this packet is sent. It is in host byte order. This field should
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// not be used when sending packets.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 SourcePort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Address to which this packet is sent. When sending packet, it'll be ignored
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// if it is zero.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IPv6_ADDRESS DestinationAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Port to which this packet is sent. When sending packet, it'll be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// ignored if it is zero.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 DestinationPort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_UDP6_SESSION_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Set to TRUE to accept UDP packets that are sent to any address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN AcceptPromiscuous;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Set to TRUE to accept UDP packets that are sent to any port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN AcceptAnyPort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Set to TRUE to allow this EFI UDPv6 Protocol child instance to open a port number
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// that is already being used by another EFI UDPv6 Protocol child instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN AllowDuplicatePort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// TrafficClass field in transmitted IPv6 packets.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 TrafficClass;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// HopLimit field in transmitted IPv6 packets.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 HopLimit;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The receive timeout value (number of microseconds) to be associated with each
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// incoming packet. Zero means do not drop incoming packets.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ReceiveTimeout;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The transmit timeout value (number of microseconds) to be associated with each
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// outgoing packet. Zero means do not drop outgoing packets.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TransmitTimeout;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The station IP address that will be assigned to this EFI UDPv6 Protocol instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The EFI UDPv6 and EFI IPv6 Protocol drivers will only deliver incoming packets
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// whose destination matches this IP address exactly. Address 0::/128 is also accepted
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// as a special case. Under this situation, underlying IPv6 driver is responsible for
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// binding a source address to this EFI IPv6 protocol instance according to source
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// address selection algorithm. Only incoming packet from the selected source address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// is delivered. This field can be set and changed only when the EFI IPv6 driver is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// transitioning from the stopped to the started states. If no address is available
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// for selecting, the EFI IPv6 Protocol driver will use EFI_IP6_CONFIG_PROTOCOL to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// retrieve the IPv6 address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IPv6_ADDRESS StationAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The port number to which this EFI UDPv6 Protocol instance is bound. If a client
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// of the EFI UDPv6 Protocol does not care about the port number, set StationPort
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// to zero. The EFI UDPv6 Protocol driver will assign a random port number to transmitted
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// UDP packets. Ignored it if AcceptAnyPort is TRUE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 StationPort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The IP address of remote host to which this EFI UDPv6 Protocol instance is connecting.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// If RemoteAddress is not 0::/128, this EFI UDPv6 Protocol instance will be connected to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// RemoteAddress; i.e., outgoing packets of this EFI UDPv6 Protocol instance will be sent
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// to this address by default and only incoming packets from this address will be delivered
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// to client. Ignored for incoming filtering if AcceptPromiscuous is TRUE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IPv6_ADDRESS RemoteAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The port number of the remote host to which this EFI UDPv6 Protocol instance is connecting.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// If it is not zero, outgoing packets of this EFI UDPv6 Protocol instance will be sent to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// this port number by default and only incoming packets from this port will be delivered
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// to client. Ignored if RemoteAddress is 0::/128 and ignored for incoming filtering if
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// AcceptPromiscuous is TRUE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 RemotePort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_UDP6_CONFIG_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The EFI UDPv6 Protocol client must fill this data structure before sending a packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The packet may contain multiple buffers that may be not in a continuous memory location.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// If not NULL, the data that is used to override the transmitting settings.Only the two
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// filed UdpSessionData.DestinationAddress and UdpSessionData.DestionPort can be used as
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// the transmitting setting filed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_SESSION_DATA *UdpSessionData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Sum of the fragment data length. Must not exceed the maximum UDP packet size.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DataLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Number of fragments.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 FragmentCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Array of fragment descriptors.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_UDP6_TRANSMIT_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// EFI_UDP6_RECEIVE_DATA is filled by the EFI UDPv6 Protocol driver when this EFI UDPv6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Protocol instance receives an incoming packet. If there is a waiting token for incoming
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// packets, the CompletionToken.Packet.RxData field is updated to this incoming packet and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// the CompletionToken.Event is signaled. The EFI UDPv6 Protocol client must signal the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// RecycleSignal after processing the packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// FragmentTable could contain multiple buffers that are not in the continuous memory locations.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The EFI UDPv6 Protocol client might need to combine two or more buffers in FragmentTable to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// form their own protocol header.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Time when the EFI UDPv6 Protocol accepted the packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_TIME TimeStamp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Indicates the event to signal when the received data has been processed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EVENT RecycleSignal;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The UDP session data including SourceAddress, SourcePort, DestinationAddress,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// and DestinationPort.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_SESSION_DATA UdpSession;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The sum of the fragment data length.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DataLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Number of fragments. Maybe zero.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 FragmentCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Array of fragment descriptors. Maybe zero.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_UDP6_RECEIVE_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The EFI_UDP6_COMPLETION_TOKEN structures are used for both transmit and receive operations.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// When used for transmitting, the Event and TxData fields must be filled in by the EFI UDPv6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Protocol client. After the transmit operation completes, the Status field is updated by the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// EFI UDPv6 Protocol and the Event is signaled.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// When used for receiving, only the Event field must be filled in by the EFI UDPv6 Protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// client. After a packet is received, RxData and Status are filled in by the EFI UDPv6 Protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// and the Event is signaled.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// This Event will be signaled after the Status field is updated by the EFI UDPv6 Protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// driver. The type of Event must be EVT_NOTIFY_SIGNAL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EVENT Event;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Will be set to one of the following values:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// - EFI_SUCCESS: The receive or transmit operation completed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// - EFI_ABORTED: The receive or transmit was aborted.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// - EFI_TIMEOUT: The transmit timeout expired.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// - EFI_NETWORK_UNREACHABLE: The destination network is unreachable. RxData is set to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// NULL in this situation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// - EFI_HOST_UNREACHABLE: The destination host is unreachable. RxData is set to NULL in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// this situation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// - EFI_PROTOCOL_UNREACHABLE: The UDP protocol is unsupported in the remote system.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// RxData is set to NULL in this situation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// - EFI_PORT_UNREACHABLE: No service is listening on the remote port. RxData is set to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// NULL in this situation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// - EFI_ICMP_ERROR: Some other Internet Control Message Protocol (ICMP) error report was
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// received. For example, packets are being sent too fast for the destination to receive them
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// and the destination sent an ICMP source quench report. RxData is set to NULL in this situation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// - EFI_DEVICE_ERROR: An unexpected system or network error occurred.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// - EFI_SECURITY_VIOLATION: The transmit or receive was failed because of IPsec policy check.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// - EFI_NO_MEDIA: There was a media error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync union {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// When this token is used for receiving, RxData is a pointer to EFI_UDP6_RECEIVE_DATA.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_RECEIVE_DATA *RxData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// When this token is used for transmitting, TxData is a pointer to EFI_UDP6_TRANSMIT_DATA.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_TRANSMIT_DATA *TxData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } Packet;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_UDP6_COMPLETION_TOKEN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Read the current operational settings.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The GetModeData() function copies the current operational settings of this EFI UDPv6 Protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync instance into user-supplied buffers. This function is used optionally to retrieve the operational
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mode data of underlying networks or drivers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Pointer to the EFI_UDP6_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Udp6ConfigData The buffer in which the current UDP configuration data is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Ip6ModeData The buffer in which the current EFI IPv6 Protocol mode data is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] MnpConfigData The buffer in which the current managed network configuration data is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] SnpModeData The buffer in which the simple network mode data is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The mode data was read.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_STARTED When Udp6ConfigData is queried, no configuration data is available
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync because this instance has not been started.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER This is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_UDP6_GET_MODE_DATA)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UDP6_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_UDP6_CONFIG_DATA *Udp6ConfigData OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Initializes, changes, or resets the operational parameters for this instance of the EFI UDPv6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The Configure() function is used to do the following:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Initialize and start this instance of the EFI UDPv6 Protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Change the filtering rules and operational parameters.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Reset this instance of the EFI UDPv6 Protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Until these parameters are initialized, no network traffic can be sent or received by this instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This instance can be also reset by calling Configure() with UdpConfigData set to NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Once reset, the receiving queue and transmitting queue are flushed and no traffic is allowed through
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync this instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync With different parameters in UdpConfigData, Configure() can be used to bind this instance to specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Pointer to the EFI_UDP6_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] UdpConfigData Pointer to the buffer contained the configuration data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The configuration settings were set, changed, or reset successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MAPPING The underlying IPv6 driver was responsible for choosing a source
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync address for this instance, but no source address was available for use.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - This is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - UdpConfigData.StationAddress neither zero nor one of the configured IP
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync addresses in the underlying IPv6 driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - UdpConfigData.RemoteAddress is not a valid unicast IPv6 address if it
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is not zero.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ALREADY_STARTED The EFI UDPv6 Protocol instance is already started/configured and must be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync stopped/reset before it can be reconfigured. Only TrafficClass, HopLimit,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ReceiveTimeout, and TransmitTimeout can be reconfigured without stopping
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the current instance of the EFI UDPv6 Protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED UdpConfigData.AllowDuplicatePort is FALSE and UdpConfigData.StationPort
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is already used by other instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES The EFI UDPv6 Protocol driver cannot allocate memory for this EFI UDPv6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Protocol instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR An unexpected network or system error occurred and this instance was not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync opened.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_UDP6_CONFIGURE)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UDP6_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UDP6_CONFIG_DATA *UdpConfigData OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Joins and leaves multicast groups.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The Groups() function is used to join or leave one or more multicast group.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the JoinFlag is FALSE and the MulticastAddress is NULL, then all currently joined groups are left.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Pointer to the EFI_UDP6_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] JoinFlag Set to TRUE to join a multicast group. Set to FALSE to leave one
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync or all multicast groups.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] MulticastAddress Pointer to multicast group address to join or leave.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The operation completed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_STARTED The EFI UDPv6 Protocol instance has not been started.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Could not allocate resources to join the group.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - This is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - JoinFlag is TRUE and MulticastAddress is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - JoinFlag is TRUE and *MulticastAddress is not a valid multicast address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ALREADY_STARTED The group address is already in the group table (when JoinFlag is TRUE).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND The group address is not in the group table (when JoinFlag is FALSE).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR An unexpected system or network error occurred.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_UDP6_GROUPS)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UDP6_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN JoinFlag,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IPv6_ADDRESS *MulticastAddress OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Queues outgoing data packets into the transmit queue.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The Transmit() function places a sending request to this instance of the EFI UDPv6 Protocol,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync alongside the transmit data that was filled by the user. Whenever the packet in the token is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync sent out or some errors occur, the Token.Event will be signaled and Token.Status is updated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Providing a proper notification function and context for the event will enable the user to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync receive the notification and transmitting status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Pointer to the EFI_UDP6_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Token Pointer to the completion token that will be placed into the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync transmit queue.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The data has been queued for transmission.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_STARTED This EFI UDPv6 Protocol instance has not been started.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MAPPING The underlying IPv6 driver was responsible for choosing a source
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync address for this instance, but no source address was available
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for use.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER One or more of the following are TRUE:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - This is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Token is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Token.Event is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Token.Packet.TxData is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Token.Packet.TxData.FragmentCount is zero.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Token.Packet.TxData.DataLength is not equal to the sum of fragment
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync lengths.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - One or more of the Token.Packet.TxData.FragmentTable[].FragmentLength
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fields is zero.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - One or more of the Token.Packet.TxData.FragmentTable[].FragmentBuffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fields is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Token.Packet.TxData.UdpSessionData.DestinationAddress is not zero
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and is not valid unicast Ipv6 address if UdpSessionData is not NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Token.Packet.TxData.UdpSessionData is NULL and this instance's
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UdpConfigData.RemoteAddress is unspecified.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Token.Packet.TxData.UdpSessionData.DestinationAddress is non-zero
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync when DestinationAddress is configured as non-zero when doing Configure()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for this EFI Udp6 protocol instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Token.Packet.TxData.UdpSesionData.DestinationAddress is zero when
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DestinationAddress is unspecified when doing Configure() for this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI Udp6 protocol instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED The transmit completion token with the same Token.Event was already
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in the transmit queue.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_READY The completion token could not be queued because the transmit queue
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is full.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Could not queue the transmit data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND There is no route to the destination network or address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_BAD_BUFFER_SIZE The data length is greater than the maximum UDP packet size.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_UDP6_TRANSMIT)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UDP6_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UDP6_COMPLETION_TOKEN *Token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Places an asynchronous receive request into the receiving queue.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The Receive() function places a completion token into the receive packet queue. This function is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync always asynchronous.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The caller must fill in the Token.Event field in the completion token, and this field cannot be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL. When the receive operation completes, the EFI UDPv6 Protocol driver updates the Token.Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and Token.Packet.RxData fields and the Token.Event is signaled.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Providing a proper notification function and context for the event will enable the user to receive
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the notification and receiving status. That notification function is guaranteed to not be re-entered.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Pointer to the EFI_UDP6_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Token Pointer to a token that is associated with the receive data descriptor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The receive completion token was cached.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_STARTED This EFI UDPv6 Protocol instance has not been started.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MAPPING The underlying IPv6 driver was responsible for choosing a source
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync address for this instance, but no source address was available
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for use.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER One or more of the following is TRUE:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - This is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Token is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync - Token.Event is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES The receive completion token could not be queued due to a lack of system
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync resources (usually memory).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR An unexpected system or network error occurred. The EFI UDPv6 Protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync instance has been reset to startup defaults.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED A receive completion token with the same Token.Event was already in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the receive queue.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_READY The receive request could not be queued because the receive queue is full.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_UDP6_RECEIVE)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UDP6_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UDP6_COMPLETION_TOKEN *Token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Aborts an asynchronous transmit or receive request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The Cancel() function is used to abort a pending transmit or receive request. If the token is in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync transmit or receive request queues, after calling this function, Token.Status will be set to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ABORTED and then Token.Event will be signaled. If the token is not in one of the queues,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which usually means that the asynchronous operation has completed, this function will not signal the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync token and EFI_NOT_FOUND is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Pointer to the EFI_UDP6_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Token Pointer to a token that has been issued by EFI_UDP6_PROTOCOL.Transmit()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync or EFI_UDP6_PROTOCOL.Receive().If NULL, all pending tokens are aborted.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The asynchronous I/O request was aborted and Token.Event was signaled.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync When Token is NULL, all pending requests are aborted and their events
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are signaled.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER This is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_STARTED This instance has not been started.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND When Token is not NULL, the asynchronous I/O request was not found in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the transmit or receive queue. It has either completed or was not issued
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by Transmit() and Receive().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_UDP6_CANCEL)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UDP6_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UDP6_COMPLETION_TOKEN *Token OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Polls for incoming data packets and processes outgoing data packets.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The Poll() function can be used by network drivers and applications to increase the rate that data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync packets are moved between the communications device and the transmit and receive queues.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync In some systems, the periodic timer event in the managed network driver may not poll the underlying
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync communications device fast enough to transmit and/or receive all data packets without missing incoming
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync packets or dropping outgoing packets. Drivers and applications that are experiencing packet loss should
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync try calling the Poll() function more often.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Pointer to the EFI_UDP6_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Incoming or outgoing data was processed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER This is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR An unexpected system or network error occurred.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT Data was dropped out of the transmit and/or receive queue.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Consider increasing the polling rate.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_UDP6_POLL)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UDP6_PROTOCOL *This
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The EFI_UDP6_PROTOCOL defines an EFI UDPv6 Protocol session that can be used by any network drivers,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// applications, or daemons to transmit or receive UDP packets. This protocol instance can either be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// bound to a specified port as a service or connected to some remote peer as an active client.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Each instance has its own settings, such as group table, that are independent from each other.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _EFI_UDP6_PROTOCOL {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_GET_MODE_DATA GetModeData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_CONFIGURE Configure;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_GROUPS Groups;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_TRANSMIT Transmit;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_RECEIVE Receive;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_CANCEL Cancel;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_POLL Poll;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_GUID gEfiUdp6ServiceBindingProtocolGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_GUID gEfiUdp6ProtocolGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif