Home | History | Annotate | Download | only in Udp4
      1 /*++
      2 
      3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
      4 This program and the accompanying materials
      5 are licensed and made available under the terms and conditions of the BSD License
      6 which accompanies this distribution.  The full text of the license may be found at
      7 http://opensource.org/licenses/bsd-license.php
      8 
      9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 Module Name:
     13 
     14   Udp4.h
     15 
     16 Abstract:
     17 
     18 --*/
     19 
     20 #ifndef _UDP4_H_
     21 #define _UDP4_H_
     22 
     23 #include EFI_PROTOCOL_DEFINITION (ServiceBinding)
     24 #include EFI_PROTOCOL_DEFINITION (Ip4)
     25 
     26 //
     27 //GUID definitions
     28 //
     29 #define EFI_UDP4_SERVICE_BINDING_PROTOCOL_GUID \
     30   { 0x83f01464, 0x99bd, 0x45e5, {0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6} }
     31 
     32 #define EFI_UDP4_PROTOCOL_GUID \
     33   { 0x3ad9df29, 0x4501, 0x478d, {0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3} }
     34 
     35 typedef struct {
     36   EFI_HANDLE          InstanceHandle;
     37   EFI_IPv4_ADDRESS    LocalAddress;
     38   UINT16              LocalPort;
     39   EFI_IPv4_ADDRESS    RemoteAddress;
     40   UINT16              RemotePort;
     41 } EFI_UDP4_SERVICE_POINT;
     42 
     43 typedef struct {
     44   EFI_HANDLE              DriverHandle;
     45   UINT32                  ServiceCount;
     46   EFI_UDP4_SERVICE_POINT  Services[1];
     47 } EFI_UDP4_VARIABLE_DATA;
     48 
     49 //
     50 //ICMP error definitions
     51 //
     52 #define EFI_NETWORK_UNREACHABLE      EFIERR(100)
     53 #define EFI_HOST_UNREACHABLE         EFIERR(101)
     54 #define EFI_PROTOCOL_UNREACHABLE     EFIERR(102)
     55 #define EFI_PORT_UNREACHABLE         EFIERR(103)
     56 
     57 EFI_FORWARD_DECLARATION (EFI_UDP4_PROTOCOL);
     58 
     59 //*************************************************
     60 //      EFI_UDP4_FRAGMENT_DATA                    *
     61 //*************************************************
     62 typedef struct {
     63   UINT32        FragmentLength;
     64   VOID         *FragmentBuffer;
     65 } EFI_UDP4_FRAGMENT_DATA;
     66 
     67 //*************************************************
     68 //      EFI_UDP4_SESSION_DATA                     *
     69 //*************************************************
     70 typedef struct {
     71   EFI_IPv4_ADDRESS   SourceAddress;
     72   UINT16             SourcePort;
     73   EFI_IPv4_ADDRESS   DestinationAddress;
     74   UINT16             DestinationPort;
     75 } EFI_UDP4_SESSION_DATA;
     76 
     77 //************************************************
     78 //      EFI_UDP4_CONFIG_DATA                     *
     79 //************************************************
     80 typedef struct {
     81   //Receiving Filters
     82   BOOLEAN        AcceptBroadcast;
     83   BOOLEAN        AcceptPromiscuous;
     84   BOOLEAN        AcceptAnyPort;
     85   BOOLEAN        AllowDuplicatePort;
     86   //I/O parameters
     87   UINT8          TypeOfService;
     88   UINT8          TimeToLive;
     89   BOOLEAN        DoNotFragment;
     90   UINT32         ReceiveTimeout;
     91   UINT32         TransmitTimeout;
     92   //Access Point
     93   BOOLEAN           UseDefaultAddress;
     94   EFI_IPv4_ADDRESS  StationAddress;
     95   EFI_IPv4_ADDRESS  SubnetMask;
     96   UINT16            StationPort;
     97   EFI_IPv4_ADDRESS  RemoteAddress;
     98   UINT16            RemotePort;
     99 } EFI_UDP4_CONFIG_DATA;
    100 
    101 //*******************************************************
    102 //               EFI_UDP4_TRANSMIT_DATA                 *
    103 //*******************************************************
    104 typedef struct {
    105   EFI_UDP4_SESSION_DATA     *UdpSessionData;
    106   EFI_IPv4_ADDRESS          *GatewayAddress;
    107   UINT32                    DataLength;
    108   UINT32                    FragmentCount;
    109   EFI_UDP4_FRAGMENT_DATA    FragmentTable[1];
    110 } EFI_UDP4_TRANSMIT_DATA;
    111 
    112 //*******************************************************
    113 //           EFI_UDP4_RECEIVE_DATA                      *
    114 //*******************************************************
    115 typedef struct {
    116   EFI_TIME                  TimeStamp;
    117   EFI_EVENT                 RecycleSignal;
    118   EFI_UDP4_SESSION_DATA     UdpSession;
    119   UINT32                    DataLength;
    120   UINT32                    FragmentCount;
    121   EFI_UDP4_FRAGMENT_DATA    FragmentTable[1];
    122 } EFI_UDP4_RECEIVE_DATA;
    123 
    124 
    125 //*******************************************************
    126 //           EFI_UDP4_COMPLETION_TOKEN                  *
    127 //*******************************************************
    128 typedef struct {
    129   EFI_EVENT                             Event;
    130   EFI_STATUS                            Status;
    131   union {
    132     EFI_UDP4_RECEIVE_DATA               *RxData;
    133     EFI_UDP4_TRANSMIT_DATA              *TxData;
    134   }                                     Packet;
    135 } EFI_UDP4_COMPLETION_TOKEN;
    136 
    137 typedef
    138 EFI_STATUS
    139 (EFIAPI *EFI_UDP4_GET_MODE_DATA) (
    140   IN EFI_UDP4_PROTOCOL                 *This,
    141   OUT EFI_UDP4_CONFIG_DATA             *Udp4ConfigData OPTIONAL,
    142   OUT EFI_IP4_MODE_DATA                *Ip4ModeData    OPTIONAL,
    143   OUT EFI_MANAGED_NETWORK_CONFIG_DATA  *MnpConfigData  OPTIONAL,
    144   OUT EFI_SIMPLE_NETWORK_MODE          *SnpModeData    OPTIONAL
    145 );
    146 
    147 typedef
    148 EFI_STATUS
    149 (EFIAPI *EFI_UDP4_CONFIGURE) (
    150   IN EFI_UDP4_PROTOCOL     *This,
    151   IN EFI_UDP4_CONFIG_DATA  *UdpConfigData OPTIONAL
    152 );
    153 
    154 typedef
    155 EFI_STATUS
    156 (EFIAPI *EFI_UDP4_GROUPS) (
    157   IN EFI_UDP4_PROTOCOL  *This,
    158   IN BOOLEAN            JoinFlag,
    159   IN EFI_IPv4_ADDRESS   *MulticastAddress OPTIONAL
    160 );
    161 
    162 typedef
    163 EFI_STATUS
    164 (EFIAPI *EFI_UDP4_ROUTES) (
    165   IN EFI_UDP4_PROTOCOL  *This,
    166   IN BOOLEAN            DeleteRoute,
    167   IN EFI_IPv4_ADDRESS   *SubnetAddress,
    168   IN EFI_IPv4_ADDRESS   *SubnetMask,
    169   IN EFI_IPv4_ADDRESS   *GatewayAddress
    170 );
    171 
    172 typedef
    173 EFI_STATUS
    174 (EFIAPI *EFI_UDP4_TRANSMIT) (
    175   IN EFI_UDP4_PROTOCOL          *This,
    176   IN EFI_UDP4_COMPLETION_TOKEN  *Token
    177 );
    178 
    179 typedef
    180 EFI_STATUS
    181 (EFIAPI *EFI_UDP4_RECEIVE) (
    182   IN EFI_UDP4_PROTOCOL          *This,
    183   IN EFI_UDP4_COMPLETION_TOKEN  *Token
    184 );
    185 
    186 typedef
    187 EFI_STATUS
    188 (EFIAPI *EFI_UDP4_CANCEL)(
    189   IN EFI_UDP4_PROTOCOL          *This,
    190   IN EFI_UDP4_COMPLETION_TOKEN  *Token OPTIONAL
    191 );
    192 
    193 typedef
    194 EFI_STATUS
    195 (EFIAPI *EFI_UDP4_POLL) (
    196   IN EFI_UDP4_PROTOCOL  *This
    197 );
    198 
    199 struct _EFI_UDP4_PROTOCOL {
    200   EFI_UDP4_GET_MODE_DATA  GetModeData;
    201   EFI_UDP4_CONFIGURE      Configure;
    202   EFI_UDP4_GROUPS         Groups;
    203   EFI_UDP4_ROUTES         Routes;
    204   EFI_UDP4_TRANSMIT       Transmit;
    205   EFI_UDP4_RECEIVE        Receive;
    206   EFI_UDP4_CANCEL         Cancel;
    207   EFI_UDP4_POLL           Poll;
    208 };
    209 
    210 extern EFI_GUID gEfiUdp4ServiceBindingProtocolGuid;
    211 extern EFI_GUID gEfiUdp4ProtocolGuid;
    212 extern EFI_GUID gEfiUdp4RegistryDataGuid;
    213 
    214 #endif
    215