Home | History | Annotate | Line # | Download | only in inc
      1 /*	$NetBSD: efiip.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $	*/
      2 
      3 #ifndef _EFI_IP_H
      4 #define _EFI_IP_H
      5 
      6 /*++
      7 Copyright (c) 2013  Intel Corporation
      8 
      9 --*/
     10 
     11 #define EFI_IP4_SERVICE_BINDING_PROTOCOL \
     12    {0xc51711e7,0xb4bf,0x404a,{0xbf,0xb8,0x0a,0x04, 0x8e,0xf1,0xff,0xe4}}
     13 
     14 #define EFI_IP4_PROTOCOL \
     15     {0x41d94cd2,0x35b6,0x455a,{0x82,0x58,0xd4,0xe5,0x13,0x34,0xaa,0xdd}}
     16 
     17 #define EFI_IP6_SERVICE_BINDING_PROTOCOL \
     18     {0xec835dd3,0xfe0f,0x617b,{0xa6,0x21,0xb3,0x50,0xc3,0xe1,0x33,0x88}}
     19 
     20 #define EFI_IP6_PROTOCOL \
     21     {0x2c8759d5,0x5c2d,0x66ef,{0x92,0x5f,0xb6,0x6c,0x10,0x19,0x57,0xe2}}
     22 
     23 INTERFACE_DECL(_EFI_IP4);
     24 INTERFACE_DECL(_EFI_IP6);
     25 
     26 typedef struct {
     27     EFI_HANDLE       InstanceHandle;
     28     EFI_IPv4_ADDRESS Ip4Address;
     29     EFI_IPv4_ADDRESS SubnetMask;
     30 } EFI_IP4_ADDRESS_PAIR;
     31 
     32 typedef struct {
     33     EFI_HANDLE           DriverHandle;
     34     UINT32               AddressCount;
     35     EFI_IP4_ADDRESS_PAIR AddressPairs[1];
     36 } EFI_IP4_VARIABLE_DATA;
     37 
     38 typedef struct {
     39     UINT8            DefaultProtocol;
     40     BOOLEAN          AcceptAnyProtocol;
     41     BOOLEAN          AcceptIcmpErrors;
     42     BOOLEAN          AcceptBroadcast;
     43     BOOLEAN          AcceptPromiscuous;
     44     BOOLEAN          UseDefaultAddress;
     45     EFI_IPv4_ADDRESS StationAddress;
     46     EFI_IPv4_ADDRESS SubnetMask;
     47     UINT8            TypeOfService;
     48     UINT8            TimeToLive;
     49     BOOLEAN          DoNotFragment;
     50     BOOLEAN          RawData;
     51     UINT32           ReceiveTimeout;
     52     UINT32           TransmitTimeout;
     53 } EFI_IP4_CONFIG_DATA;
     54 
     55 typedef struct {
     56     EFI_IPv4_ADDRESS SubnetAddress;
     57     EFI_IPv4_ADDRESS SubnetMask;
     58     EFI_IPv4_ADDRESS GatewayAddress;
     59 } EFI_IP4_ROUTE_TABLE;
     60 
     61 typedef struct {
     62     UINT8 Type;
     63     UINT8 Code;
     64 } EFI_IP4_ICMP_TYPE;
     65 
     66 typedef struct {
     67     BOOLEAN             IsStarted;
     68     UINT32              MaxPacketSize;
     69     EFI_IP4_CONFIG_DATA ConfigData;
     70     BOOLEAN             IsConfigured;
     71     UINT32              GroupCount;
     72     EFI_IPv4_ADDRESS    *GroupTable;
     73     UINT32              RouteCount;
     74     EFI_IP4_ROUTE_TABLE *RouteTable;
     75     UINT32              IcmpTypeCount;
     76     EFI_IP4_ICMP_TYPE   *IcmpTypeList;
     77 } EFI_IP4_MODE_DATA;
     78 
     79 typedef
     80 EFI_STATUS
     81 (EFIAPI *EFI_IP4_GET_MODE_DATA) (
     82     IN struct _EFI_IP4                  *This,
     83     OUT EFI_IP4_MODE_DATA               *Ip4ModeData   OPTIONAL,
     84     OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
     85     OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData   OPTIONAL
     86     );
     87 
     88 typedef
     89 EFI_STATUS
     90 (EFIAPI *EFI_IP4_CONFIGURE) (
     91     IN struct _EFI_IP4     *This,
     92     IN EFI_IP4_CONFIG_DATA *IpConfigData OPTIONAL
     93     );
     94 
     95 typedef
     96 EFI_STATUS
     97 (EFIAPI *EFI_IP4_GROUPS) (
     98     IN struct _EFI_IP4  *This,
     99     IN BOOLEAN          JoinFlag,
    100     IN EFI_IPv4_ADDRESS *GroupAddress OPTIONAL
    101     );
    102 
    103 typedef
    104 EFI_STATUS
    105 (EFIAPI *EFI_IP4_ROUTES) (
    106     IN struct _EFI_IP4  *This,
    107     IN BOOLEAN          DeleteRoute,
    108     IN EFI_IPv4_ADDRESS *SubnetAddress,
    109     IN EFI_IPv4_ADDRESS *SubnetMask,
    110     IN EFI_IPv4_ADDRESS *GatewayAddress
    111     );
    112 
    113 #pragma pack(1)
    114 typedef struct {
    115     UINT8            HeaderLength:4;
    116     UINT8            Version:4;
    117     UINT8            TypeOfService;
    118     UINT16           TotalLength;
    119     UINT16           Identification;
    120     UINT16           Fragmentation;
    121     UINT8            TimeToLive;
    122     UINT8            Protocol;
    123     UINT16           Checksum;
    124     EFI_IPv4_ADDRESS SourceAddress;
    125     EFI_IPv4_ADDRESS DestinationAddress;
    126 } EFI_IP4_HEADER;
    127 #pragma pack()
    128 
    129 typedef struct {
    130     UINT32 FragmentLength;
    131     VOID   *FragmentBuffer;
    132 } EFI_IP4_FRAGMENT_DATA;
    133 
    134 typedef struct {
    135     EFI_TIME              TimeStamp;
    136     EFI_EVENT             RecycleSignal;
    137     UINT32                HeaderLength;
    138     EFI_IP4_HEADER        *Header;
    139     UINT32                OptionsLength;
    140     VOID                  *Options;
    141     UINT32                DataLength;
    142     UINT32                FragmentCount;
    143     EFI_IP4_FRAGMENT_DATA FragmentTable[1];
    144 } EFI_IP4_RECEIVE_DATA;
    145 
    146 typedef struct {
    147     EFI_IPv4_ADDRESS SourceAddress;
    148     EFI_IPv4_ADDRESS GatewayAddress;
    149     UINT8            Protocol;
    150     UINT8            TypeOfService;
    151     UINT8            TimeToLive;
    152     BOOLEAN          DoNotFragment;
    153 } EFI_IP4_OVERRIDE_DATA;
    154 
    155 typedef struct {
    156     EFI_IPv4_ADDRESS      DestinationAddress;
    157     EFI_IP4_OVERRIDE_DATA *OverrideData;
    158     UINT32                OptionsLength;
    159     VOID                  *OptionsBuffer;
    160     UINT32                TotalDataLength;
    161     UINT32                FragmentCount;
    162     EFI_IP4_FRAGMENT_DATA FragmentTable[1];
    163 } EFI_IP4_TRANSMIT_DATA;
    164 
    165 typedef struct {
    166     EFI_EVENT                 Event;
    167     EFI_STATUS                Status;
    168     union {
    169         EFI_IP4_RECEIVE_DATA  *RxData;
    170         EFI_IP4_TRANSMIT_DATA *TxData;
    171     } Packet;
    172 } EFI_IP4_COMPLETION_TOKEN;
    173 
    174 typedef
    175 EFI_STATUS
    176 (EFIAPI *EFI_IP4_TRANSMIT) (
    177     IN struct _EFI_IP4          *This,
    178     IN EFI_IP4_COMPLETION_TOKEN *Token
    179     );
    180 
    181 typedef
    182 EFI_STATUS
    183 (EFIAPI *EFI_IP4_RECEIVE) (
    184     IN struct _EFI_IP4          *This,
    185     IN EFI_IP4_COMPLETION_TOKEN *Token
    186     );
    187 
    188 typedef
    189 EFI_STATUS
    190 (EFIAPI *EFI_IP4_CANCEL)(
    191     IN struct _EFI_IP4          *This,
    192     IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL
    193     );
    194 
    195 typedef
    196 EFI_STATUS
    197 (EFIAPI *EFI_IP4_POLL) (
    198     IN struct _EFI_IP4 *This
    199     );
    200 
    201 typedef struct _EFI_IP4 {
    202     EFI_IP4_GET_MODE_DATA GetModeData;
    203     EFI_IP4_CONFIGURE     Configure;
    204     EFI_IP4_GROUPS        Groups;
    205     EFI_IP4_ROUTES        Routes;
    206     EFI_IP4_TRANSMIT      Transmit;
    207     EFI_IP4_RECEIVE       Receive;
    208     EFI_IP4_CANCEL        Cancel;
    209     EFI_IP4_POLL          Poll;
    210 } EFI_IP4;
    211 
    212 typedef struct {
    213     UINT8            DefaultProtocol;
    214     BOOLEAN          AcceptAnyProtocol;
    215     BOOLEAN          AcceptIcmpErrors;
    216     BOOLEAN          AcceptPromiscuous;
    217     EFI_IPv6_ADDRESS DestinationAddress;
    218     EFI_IPv6_ADDRESS StationAddress;
    219     UINT8            TrafficClass;
    220     UINT8            HopLimit;
    221     UINT32           FlowLabel;
    222     UINT32           ReceiveTimeout;
    223     UINT32           TransmitTimeout;
    224 } EFI_IP6_CONFIG_DATA;
    225 
    226 typedef struct {
    227     EFI_IPv6_ADDRESS Address;
    228     UINT8            PrefixLength;
    229 } EFI_IP6_ADDRESS_INFO;
    230 
    231 typedef struct {
    232     EFI_IPv6_ADDRESS Gateway;
    233     EFI_IPv6_ADDRESS Destination;
    234     UINT8            PrefixLength;
    235 } EFI_IP6_ROUTE_TABLE;
    236 
    237 typedef enum {
    238     EfiNeighborInComplete,
    239     EfiNeighborReachable,
    240     EfiNeighborStale,
    241     EfiNeighborDelay,
    242     EfiNeighborProbe
    243 } EFI_IP6_NEIGHBOR_STATE;
    244 
    245 typedef struct {
    246     EFI_IPv6_ADDRESS       Neighbor;
    247     EFI_MAC_ADDRESS        LinkAddress;
    248     EFI_IP6_NEIGHBOR_STATE State;
    249 } EFI_IP6_NEIGHBOR_CACHE;
    250 
    251 typedef struct {
    252     UINT8 Type;
    253     UINT8 Code;
    254 } EFI_IP6_ICMP_TYPE;
    255 
    256 //***********************************************************
    257 // ICMPv6 type definitions for error messages
    258 //***********************************************************
    259 #define ICMP_V6_DEST_UNREACHABLE     0x1
    260 #define ICMP_V6_PACKET_TOO_BIG       0x2
    261 #define ICMP_V6_TIME_EXCEEDED        0x3
    262 #define ICMP_V6_PARAMETER_PROBLEM    0x4
    263 
    264 //***********************************************************
    265 // ICMPv6 type definition for informational messages
    266 //***********************************************************
    267 #define ICMP_V6_ECHO_REQUEST         0x80
    268 #define ICMP_V6_ECHO_REPLY           0x81
    269 #define ICMP_V6_LISTENER_QUERY       0x82
    270 #define ICMP_V6_LISTENER_REPORT      0x83
    271 #define ICMP_V6_LISTENER_DONE        0x84
    272 #define ICMP_V6_ROUTER_SOLICIT       0x85
    273 #define ICMP_V6_ROUTER_ADVERTISE     0x86
    274 #define ICMP_V6_NEIGHBOR_SOLICIT     0x87
    275 #define ICMP_V6_NEIGHBOR_ADVERTISE   0x88
    276 #define ICMP_V6_REDIRECT             0x89
    277 #define ICMP_V6_LISTENER_REPORT_2    0x8F
    278 
    279 //***********************************************************
    280 // ICMPv6 code definitions for ICMP_V6_DEST_UNREACHABLE
    281 //***********************************************************
    282 #define ICMP_V6_NO_ROUTE_TO_DEST     0x0
    283 #define ICMP_V6_COMM_PROHIBITED      0x1
    284 #define ICMP_V6_BEYOND_SCOPE         0x2
    285 #define ICMP_V6_ADDR_UNREACHABLE     0x3
    286 #define ICMP_V6_PORT_UNREACHABLE     0x4
    287 #define ICMP_V6_SOURCE_ADDR_FAILED   0x5
    288 #define ICMP_V6_ROUTE_REJECTED       0x6
    289 
    290 //***********************************************************
    291 // ICMPv6 code definitions for ICMP_V6_TIME_EXCEEDED
    292 //***********************************************************
    293 #define ICMP_V6_TIMEOUT_HOP_LIMIT    0x0
    294 #define ICMP_V6_TIMEOUT_REASSEMBLE   0x1
    295 
    296 //***********************************************************
    297 // ICMPv6 code definitions for ICMP_V6_PARAMETER_PROBLEM
    298 //***********************************************************
    299 #define ICMP_V6_ERRONEOUS_HEADER     0x0
    300 #define ICMP_V6_UNRECOGNIZE_NEXT_HDR 0x1
    301 #define ICMP_V6_UNRECOGNIZE_OPTION   0x2
    302 
    303 typedef struct {
    304     BOOLEAN                IsStarted;
    305     UINT32                 MaxPacketSize;
    306     EFI_IP6_CONFIG_DATA    ConfigData;
    307     BOOLEAN                IsConfigured;
    308     UINT32                 AddressCount;
    309     EFI_IP6_ADDRESS_INFO   *AddressList;
    310     UINT32                 GroupCount;
    311     EFI_IPv6_ADDRESS       *GroupTable;
    312     UINT32                 RouteCount;
    313     EFI_IP6_ROUTE_TABLE    *RouteTable;
    314     UINT32                 NeighborCount;
    315     EFI_IP6_NEIGHBOR_CACHE *NeighborCache;
    316     UINT32                 PrefixCount;
    317     EFI_IP6_ADDRESS_INFO   *PrefixTable;
    318     UINT32                 IcmpTypeCount;
    319     EFI_IP6_ICMP_TYPE      *IcmpTypeList;
    320 } EFI_IP6_MODE_DATA;
    321 
    322 typedef
    323 EFI_STATUS
    324 (EFIAPI *EFI_IP6_GET_MODE_DATA) (
    325     IN struct _EFI_IP6                  *This,
    326     OUT EFI_IP6_MODE_DATA               *Ip6ModeData   OPTIONAL,
    327     OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
    328     OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData   OPTIONAL
    329     );
    330 
    331 typedef
    332 EFI_STATUS
    333 (EFIAPI *EFI_IP6_CONFIGURE) (
    334     IN struct _EFI_IP6     *This,
    335     IN EFI_IP6_CONFIG_DATA *Ip6ConfigData OPTIONAL
    336     );
    337 typedef
    338 EFI_STATUS
    339 (EFIAPI *EFI_IP6_GROUPS) (
    340     IN struct _EFI_IP6  *This,
    341     IN BOOLEAN          JoinFlag,
    342     IN EFI_IPv6_ADDRESS *GroupAddress OPTIONAL
    343     );
    344 
    345 typedef
    346 EFI_STATUS
    347 (EFIAPI *EFI_IP6_ROUTES) (
    348     IN struct _EFI_IP6  *This,
    349     IN BOOLEAN          DeleteRoute,
    350     IN EFI_IPv6_ADDRESS *Destination    OPTIONAL,
    351     IN UINT8            PrefixLength,
    352     IN EFI_IPv6_ADDRESS *GatewayAddress OPTIONAL
    353     );
    354 
    355 typedef
    356 EFI_STATUS
    357 (EFIAPI *EFI_IP6_NEIGHBORS) (
    358     IN struct _EFI_IP6  *This,
    359     IN BOOLEAN          DeleteFlag,
    360     IN EFI_IPv6_ADDRESS *TargetIp6Address,
    361     IN EFI_MAC_ADDRESS  *TargetLinkAddress OPTIONAL,
    362     IN UINT32           Timeout,
    363     IN BOOLEAN          Override
    364     );
    365 
    366 typedef struct _EFI_IP6_FRAGMENT_DATA {
    367     UINT32 FragmentLength;
    368     VOID   *FragmentBuffer;
    369 } EFI_IP6_FRAGMENT_DATA;
    370 
    371 typedef struct _EFI_IP6_OVERRIDE_DATA {
    372     UINT8  Protocol;
    373     UINT8  HopLimit;
    374     UINT32 FlowLabel;
    375 } EFI_IP6_OVERRIDE_DATA;
    376 
    377 typedef struct _EFI_IP6_TRANSMIT_DATA {
    378     EFI_IPv6_ADDRESS      DestinationAddress;
    379     EFI_IP6_OVERRIDE_DATA *OverrideData;
    380     UINT32                ExtHdrsLength;
    381     VOID                  *ExtHdrs;
    382     UINT8                 NextHeader;
    383     UINT32                DataLength;
    384     UINT32                FragmentCount;
    385     EFI_IP6_FRAGMENT_DATA FragmentTable[1];
    386 } EFI_IP6_TRANSMIT_DATA;
    387 
    388 #pragma pack(1)
    389 typedef struct _EFI_IP6_HEADER {
    390     UINT8            TrafficClassH:4;
    391     UINT8            Version:4;
    392     UINT8            FlowLabelH:4;
    393     UINT8            TrafficClassL:4;
    394     UINT16           FlowLabelL;
    395     UINT16           PayloadLength;
    396     UINT8            NextHeader;
    397     UINT8            HopLimit;
    398     EFI_IPv6_ADDRESS SourceAddress;
    399     EFI_IPv6_ADDRESS DestinationAddress;
    400 } EFI_IP6_HEADER;
    401 #pragma pack()
    402 
    403 typedef struct _EFI_IP6_RECEIVE_DATA {
    404     EFI_TIME              TimeStamp;
    405     EFI_EVENT             RecycleSignal;
    406     UINT32                HeaderLength;
    407     EFI_IP6_HEADER        *Header;
    408     UINT32                DataLength;
    409     UINT32                FragmentCount;
    410     EFI_IP6_FRAGMENT_DATA FragmentTable[1];
    411 } EFI_IP6_RECEIVE_DATA;
    412 
    413 typedef struct {
    414     EFI_EVENT                 Event;
    415     EFI_STATUS                Status;
    416     union {
    417 	EFI_IP6_RECEIVE_DATA  *RxData;
    418 	EFI_IP6_TRANSMIT_DATA *TxData;
    419     }                         Packet;
    420 } EFI_IP6_COMPLETION_TOKEN;
    421 
    422 typedef
    423 EFI_STATUS
    424 (EFIAPI *EFI_IP6_TRANSMIT) (
    425     IN struct _EFI_IP6          *This,
    426     IN EFI_IP6_COMPLETION_TOKEN *Token
    427     );
    428 
    429 typedef
    430 EFI_STATUS
    431 (EFIAPI *EFI_IP6_RECEIVE) (
    432     IN struct _EFI_IP6          *This,
    433     IN EFI_IP6_COMPLETION_TOKEN *Token
    434     );
    435 
    436 typedef
    437 EFI_STATUS
    438 (EFIAPI *EFI_IP6_CANCEL)(
    439     IN struct _EFI_IP6          *This,
    440     IN EFI_IP6_COMPLETION_TOKEN *Token OPTIONAL
    441     );
    442 
    443 typedef
    444 EFI_STATUS
    445 (EFIAPI *EFI_IP6_POLL) (
    446     IN struct _EFI_IP6 *This
    447     );
    448 
    449 typedef struct _EFI_IP6 {
    450     EFI_IP6_GET_MODE_DATA GetModeData;
    451     EFI_IP6_CONFIGURE     Configure;
    452     EFI_IP6_GROUPS        Groups;
    453     EFI_IP6_ROUTES        Routes;
    454     EFI_IP6_NEIGHBORS     Neighbors;
    455     EFI_IP6_TRANSMIT      Transmit;
    456     EFI_IP6_RECEIVE       Receive;
    457     EFI_IP6_CANCEL        Cancel;
    458     EFI_IP6_POLL          Poll;
    459 } EFI_IP6;
    460 
    461 #endif /* _EFI_IP_H */
    462