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