Home | History | Annotate | Download | only in HttpBootDxe
      1 /** @file
      2   Functions declaration related with DHCPv6 for HTTP boot driver.
      3 
      4 Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
      5 This program and the accompanying materials are licensed and made available under
      6 the terms and conditions of the BSD License that accompanies this distribution.
      7 The full text of the license may be found at
      8 http://opensource.org/licenses/bsd-license.php.
      9 
     10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 
     16 #ifndef __EFI_HTTP_BOOT_DHCP6_H__
     17 #define __EFI_HTTP_BOOT_DHCP6_H__
     18 
     19 #define HTTP_BOOT_OFFER_MAX_NUM                16
     20 #define HTTP_BOOT_DHCP6_OPTION_MAX_NUM         16
     21 #define HTTP_BOOT_DHCP6_OPTION_MAX_SIZE        312
     22 #define HTTP_BOOT_DHCP6_PACKET_MAX_SIZE        1472
     23 #define HTTP_BOOT_IP6_ROUTE_TABLE_TIMEOUT      10
     24 #define HTTP_BOOT_DEFAULT_HOPLIMIT             64
     25 #define HTTP_BOOT_DEFAULT_LIFETIME             50000
     26 
     27 #define HTTP_BOOT_DHCP6_ENTERPRISE_NUM        343   // TODO: IANA TBD: temporarily using Intel's
     28 #define HTTP_BOOT_DHCP6_MAX_BOOT_FILE_SIZE    65535 //   It's a limitation of bit length, 65535*512 bytes.
     29 
     30 #define HTTP_BOOT_DHCP6_IDX_IA_NA             0
     31 #define HTTP_BOOT_DHCP6_IDX_BOOT_FILE_URL     1
     32 #define HTTP_BOOT_DHCP6_IDX_BOOT_FILE_PARAM   2
     33 #define HTTP_BOOT_DHCP6_IDX_VENDOR_CLASS      3
     34 #define HTTP_BOOT_DHCP6_IDX_DNS_SERVER        4
     35 #define HTTP_BOOT_DHCP6_IDX_MAX               5
     36 
     37 #pragma pack(1)
     38 typedef struct {
     39   UINT16 OpCode[256];
     40 } HTTP_BOOT_DHCP6_OPTION_ORO;
     41 
     42 typedef struct {
     43   UINT8 Type;
     44   UINT8 MajorVer;
     45   UINT8 MinorVer;
     46 } HTTP_BOOT_DHCP6_OPTION_UNDI;
     47 
     48 typedef struct {
     49   UINT16 Type;
     50 } HTTP_BOOT_DHCP6_OPTION_ARCH;
     51 
     52 typedef struct {
     53   UINT8 ClassIdentifier[11];
     54   UINT8 ArchitecturePrefix[5];
     55   UINT8 ArchitectureType[5];
     56   UINT8 Lit3[1];
     57   UINT8 InterfaceName[4];
     58   UINT8 Lit4[1];
     59   UINT8 UndiMajor[3];
     60   UINT8 UndiMinor[3];
     61 } HTTP_BOOT_CLASS_ID;
     62 
     63 typedef struct {
     64   UINT32             Vendor;
     65   UINT16             ClassLen;
     66   HTTP_BOOT_CLASS_ID ClassId;
     67 } HTTP_BOOT_DHCP6_OPTION_VENDOR_CLASS;
     68 
     69 #pragma pack()
     70 
     71 typedef union {
     72   HTTP_BOOT_DHCP6_OPTION_ORO            *Oro;
     73   HTTP_BOOT_DHCP6_OPTION_UNDI           *Undi;
     74   HTTP_BOOT_DHCP6_OPTION_ARCH           *Arch;
     75   HTTP_BOOT_DHCP6_OPTION_VENDOR_CLASS   *VendorClass;
     76 } HTTP_BOOT_DHCP6_OPTION_ENTRY;
     77 
     78 #define HTTP_CACHED_DHCP6_PACKET_MAX_SIZE  (OFFSET_OF (EFI_DHCP6_PACKET, Dhcp6) + HTTP_BOOT_DHCP6_PACKET_MAX_SIZE)
     79 
     80 typedef union {
     81   EFI_DHCP6_PACKET        Offer;
     82   EFI_DHCP6_PACKET        Ack;
     83   UINT8                   Buffer[HTTP_CACHED_DHCP6_PACKET_MAX_SIZE];
     84 } HTTP_BOOT_DHCP6_PACKET;
     85 
     86 typedef struct {
     87   HTTP_BOOT_DHCP6_PACKET      Packet;
     88   HTTP_BOOT_OFFER_TYPE        OfferType;
     89   EFI_DHCP6_PACKET_OPTION     *OptList[HTTP_BOOT_DHCP6_IDX_MAX];
     90   VOID                        *UriParser;
     91 } HTTP_BOOT_DHCP6_PACKET_CACHE;
     92 
     93 #define GET_NEXT_DHCP6_OPTION(Opt) \
     94   (EFI_DHCP6_PACKET_OPTION *) ((UINT8 *) (Opt) + \
     95   sizeof (EFI_DHCP6_PACKET_OPTION) + (NTOHS ((Opt)->OpLen)) - 1)
     96 
     97 #define GET_DHCP6_OPTION_SIZE(Pkt)  \
     98   ((Pkt)->Length - sizeof (EFI_DHCP6_HEADER))
     99 
    100 /**
    101   Start the S.A.R.R DHCPv6 process to acquire the IPv6 address and other Http boot information.
    102 
    103   @param[in]  Private           Pointer to HTTP_BOOT private data.
    104 
    105   @retval EFI_SUCCESS           The S.A.R.R process successfully finished.
    106   @retval Others                Failed to finish the S.A.R.R process.
    107 
    108 **/
    109 EFI_STATUS
    110 HttpBootDhcp6Sarr (
    111   IN HTTP_BOOT_PRIVATE_DATA         *Private
    112   );
    113 
    114 /**
    115   Set the IP6 policy to Automatic.
    116 
    117   @param[in]  Private             The pointer to HTTP_BOOT_PRIVATE_DATA.
    118 
    119   @retval     EFI_SUCCESS         Switch the IP policy succesfully.
    120   @retval     Others              Unexpect error happened.
    121 
    122 **/
    123 EFI_STATUS
    124 HttpBootSetIp6Policy (
    125   IN HTTP_BOOT_PRIVATE_DATA        *Private
    126   );
    127 
    128 /**
    129   This function will register the default DNS addresses to the network device.
    130 
    131   @param[in]  Private             The pointer to HTTP_BOOT_PRIVATE_DATA.
    132   @param[in]  DataLength          Size of the buffer pointed to by DnsServerData in bytes.
    133   @param[in]  DnsServerData       Point a list of DNS server address in an array
    134                                   of EFI_IPv6_ADDRESS instances.
    135 
    136   @retval     EFI_SUCCESS         The DNS configuration has been configured successfully.
    137   @retval     Others              Failed to configure the address.
    138 
    139 **/
    140 EFI_STATUS
    141 HttpBootSetIp6Dns (
    142   IN HTTP_BOOT_PRIVATE_DATA         *Private,
    143   IN UINTN                          DataLength,
    144   IN VOID                           *DnsServerData
    145   );
    146 
    147 /**
    148   This function will register the IPv6 gateway address to the network device.
    149 
    150   @param[in]  Private             The pointer to HTTP_BOOT_PRIVATE_DATA.
    151 
    152   @retval     EFI_SUCCESS         The new IP configuration has been configured successfully.
    153   @retval     Others              Failed to configure the address.
    154 
    155 **/
    156 EFI_STATUS
    157 HttpBootSetIp6Gateway (
    158   IN HTTP_BOOT_PRIVATE_DATA         *Private
    159   );
    160 
    161 /**
    162   This function will register the station IP address.
    163 
    164   @param[in]  Private             The pointer to HTTP_BOOT_PRIVATE_DATA.
    165 
    166   @retval     EFI_SUCCESS         The new IP address has been configured successfully.
    167   @retval     Others              Failed to configure the address.
    168 
    169 **/
    170 EFI_STATUS
    171 HttpBootSetIp6Address (
    172   IN HTTP_BOOT_PRIVATE_DATA         *Private
    173   );
    174 
    175 #endif
    176