Home | History | Annotate | Download | only in Ip4
      1 /*++
      2 
      3 Copyright (c) 2005 - 2010, 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   Ip4.h
     15 
     16 Abstract:
     17 
     18   EFI_IP4_PROTOCOL definition in UEFI 2.2 specification.
     19 
     20 --*/
     21 
     22 #ifndef _IP4_H_
     23 #define _IP4_H_
     24 
     25 #include EFI_PROTOCOL_DEFINITION (ManagedNetwork)
     26 #include EFI_PROTOCOL_DEFINITION (ServiceBinding)
     27 
     28 //
     29 //GUID definitions
     30 //
     31 #define EFI_IP4_SERVICE_BINDING_PROTOCOL_GUID \
     32    {0xc51711e7, 0xb4bf, 0x404a, {0xbf, 0xb8, 0x0a, 0x04, 0x8e, 0xf1, 0xff, 0xe4}}
     33 
     34 #define EFI_IP4_PROTOCOL_GUID \
     35    {0x41d94cd2, 0x35b6, 0x455a, {0x82, 0x58, 0xd4, 0xe5, 0x13, 0x34, 0xaa, 0xdd}}
     36 
     37 EFI_FORWARD_DECLARATION (EFI_IP4_PROTOCOL);
     38 
     39 typedef struct {
     40   EFI_HANDLE              InstanceHandle;
     41   EFI_IPv4_ADDRESS        Ip4Address;
     42   EFI_IPv4_ADDRESS        SubnetMask;
     43 } EFI_IP4_ADDRESS_PAIR;
     44 
     45 typedef struct {
     46   EFI_HANDLE              DriverHandle;
     47   UINT32                  AddressCount;
     48   EFI_IP4_ADDRESS_PAIR    AddressPairs[1];
     49 } EFI_IP4_VARIABLE_DATA;
     50 
     51 typedef struct {
     52   UINT8                   DefaultProtocol;
     53   BOOLEAN                 AcceptAnyProtocol;
     54   BOOLEAN                 AcceptIcmpErrors;
     55   BOOLEAN                 AcceptBroadcast;
     56   BOOLEAN                 AcceptPromiscuous;
     57   BOOLEAN                 UseDefaultAddress;
     58   EFI_IPv4_ADDRESS        StationAddress;
     59   EFI_IPv4_ADDRESS        SubnetMask;
     60   UINT8                   TypeOfService;
     61   UINT8                   TimeToLive;
     62   BOOLEAN                 DoNotFragment;
     63   BOOLEAN                 RawData;
     64   UINT32                  ReceiveTimeout;
     65   UINT32                  TransmitTimeout;
     66 } EFI_IP4_CONFIG_DATA;
     67 
     68 
     69 typedef struct _EFI_IP4_ROUTE_TABLE {
     70   EFI_IPv4_ADDRESS        SubnetAddress;
     71   EFI_IPv4_ADDRESS        SubnetMask;
     72   EFI_IPv4_ADDRESS        GatewayAddress;
     73 } EFI_IP4_ROUTE_TABLE;
     74 
     75 typedef struct _EFI_IP4_ICMP_TYPE {
     76   UINT8                   Type;
     77   UINT8                   Code;
     78 } EFI_IP4_ICMP_TYPE;
     79 
     80 typedef struct {
     81   BOOLEAN                 IsStarted;
     82   UINT32                  MaxPacketSize;
     83 
     84   EFI_IP4_CONFIG_DATA     ConfigData;
     85   BOOLEAN                 IsConfigured;
     86 
     87   UINT32                  GroupCount;
     88   EFI_IPv4_ADDRESS        *GroupTable;
     89 
     90   UINT32                  RouteCount;
     91   EFI_IP4_ROUTE_TABLE     *RouteTable;
     92 
     93   UINT32                  IcmpTypeCount;
     94   EFI_IP4_ICMP_TYPE       *IcmpTypeList;
     95 } EFI_IP4_MODE_DATA;
     96 
     97 #pragma pack(1)
     98 typedef struct _EFI_IP4_HEADER {
     99   UINT8                   HeaderLength:4;
    100   UINT8                   Version:4;
    101   UINT8                   TypeOfService;
    102   UINT16                  TotalLength;
    103   UINT16                  Identification;
    104   UINT16                  Fragmentation;
    105   UINT8                   TimeToLive;
    106   UINT8                   Protocol;
    107   UINT16                  Checksum;
    108   EFI_IPv4_ADDRESS        SourceAddress;
    109   EFI_IPv4_ADDRESS        DestinationAddress;
    110 } EFI_IP4_HEADER;
    111 #pragma pack()
    112 
    113 typedef struct _EFI_IP4_FRAGMENT_DATA {
    114   UINT32                  FragmentLength;
    115   VOID                    *FragmentBuffer;
    116 } EFI_IP4_FRAGMENT_DATA;
    117 
    118 
    119 typedef struct _EFI_IP4_OVERRIDE_DATA {
    120   EFI_IPv4_ADDRESS        SourceAddress;
    121   EFI_IPv4_ADDRESS        GatewayAddress;
    122 
    123   UINT8                   Protocol;
    124   UINT8                   TypeOfService;
    125   UINT8                   TimeToLive;
    126   BOOLEAN                 DoNotFragment;
    127 } EFI_IP4_OVERRIDE_DATA;
    128 
    129 typedef struct _EFI_IP4_TRANSMIT_DATA {
    130   EFI_IPv4_ADDRESS        DestinationAddress;
    131 
    132   EFI_IP4_OVERRIDE_DATA   *OverrideData;
    133   UINT32                  OptionsLength;
    134   VOID                    *OptionsBuffer;
    135 
    136   UINT32                  TotalDataLength;
    137   UINT32                  FragmentCount;
    138   EFI_IP4_FRAGMENT_DATA   FragmentTable[1];
    139 } EFI_IP4_TRANSMIT_DATA;
    140 
    141 typedef struct _EFI_IP4_RECEIVE_DATA {
    142   EFI_TIME                TimeStamp;
    143   EFI_EVENT               RecycleSignal;
    144 
    145   UINT32                  HeaderLength;
    146   EFI_IP4_HEADER          *Header;
    147 
    148   UINT32                  OptionsLength;
    149   VOID                    *Options;
    150 
    151   UINT32                  DataLength;
    152   UINT32                  FragmentCount;
    153   EFI_IP4_FRAGMENT_DATA   FragmentTable[1];
    154 } EFI_IP4_RECEIVE_DATA;
    155 
    156 typedef struct _EFI_IP4_COMPLETION_TOKEN {
    157   EFI_EVENT               Event;
    158   EFI_STATUS              Status;
    159 
    160   union {
    161     EFI_IP4_RECEIVE_DATA  *RxData;
    162     EFI_IP4_TRANSMIT_DATA *TxData;
    163   } Packet;
    164 } EFI_IP4_COMPLETION_TOKEN;
    165 
    166 typedef
    167 EFI_STATUS
    168 (EFIAPI *EFI_IP4_GET_MODE_DATA) (
    169   IN EFI_IP4_PROTOCOL                 *This,
    170   OUT EFI_IP4_MODE_DATA               *Ip4ModeData     OPTIONAL,
    171   OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData   OPTIONAL,
    172   OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData     OPTIONAL
    173   );
    174 
    175 typedef
    176 EFI_STATUS
    177 (EFIAPI *EFI_IP4_CONFIGURE) (
    178   IN EFI_IP4_PROTOCOL           *This,
    179   IN EFI_IP4_CONFIG_DATA        *IpConfigData  OPTIONAL
    180   );
    181 
    182 typedef
    183 EFI_STATUS
    184 (EFIAPI *EFI_IP4_GROUPS) (
    185   IN EFI_IP4_PROTOCOL           *This,
    186   IN BOOLEAN                    JoinFlag,
    187   IN EFI_IPv4_ADDRESS           *GroupAddress  OPTIONAL
    188   );
    189 
    190 typedef
    191 EFI_STATUS
    192 (EFIAPI *EFI_IP4_ROUTES) (
    193   IN EFI_IP4_PROTOCOL           *This,
    194   IN BOOLEAN                    DeleteRoute,
    195   IN EFI_IPv4_ADDRESS           *SubnetAddress,
    196   IN EFI_IPv4_ADDRESS           *SubnetMask,
    197   IN EFI_IPv4_ADDRESS           *GatewayAddress
    198   );
    199 
    200 typedef
    201 EFI_STATUS
    202 (EFIAPI *EFI_IP4_TRANSMIT) (
    203   IN EFI_IP4_PROTOCOL           *This,
    204   IN EFI_IP4_COMPLETION_TOKEN   *Token
    205   );
    206 
    207 typedef
    208 EFI_STATUS
    209 (EFIAPI *EFI_IP4_RECEIVE) (
    210   IN EFI_IP4_PROTOCOL           *This,
    211   IN EFI_IP4_COMPLETION_TOKEN   *Token
    212   );
    213 
    214 typedef
    215 EFI_STATUS
    216 (EFIAPI *EFI_IP4_CANCEL) (
    217   IN EFI_IP4_PROTOCOL           *This,
    218   IN EFI_IP4_COMPLETION_TOKEN   *Token OPTIONAL
    219   );
    220 
    221 typedef
    222 EFI_STATUS
    223 (EFIAPI *EFI_IP4_POLL) (
    224   IN EFI_IP4_PROTOCOL           *This
    225   );
    226 
    227 struct _EFI_IP4_PROTOCOL {
    228   EFI_IP4_GET_MODE_DATA         GetModeData;
    229   EFI_IP4_CONFIGURE             Configure;
    230   EFI_IP4_GROUPS                Groups;
    231   EFI_IP4_ROUTES                Routes;
    232   EFI_IP4_TRANSMIT              Transmit;
    233   EFI_IP4_RECEIVE               Receive;
    234   EFI_IP4_CANCEL                Cancel;
    235   EFI_IP4_POLL                  Poll;
    236 };
    237 
    238 
    239 extern EFI_GUID gEfiIp4ServiceBindingProtocolGuid;
    240 extern EFI_GUID gEfiIp4RegistryDataGuid;
    241 extern EFI_GUID gEfiIp4ProtocolGuid;
    242 #endif
    243