Home | History | Annotate | Download | only in Dhcp6Dxe
      1 /** @file
      2   Dhcp6 support functions declaration.
      3 
      4   Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
      5 
      6   This program and the accompanying materials
      7   are licensed and made available under the terms and conditions of the BSD License
      8   which accompanies this distribution.  The full text of the license may be found at
      9   http://opensource.org/licenses/bsd-license.php.
     10 
     11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #ifndef __EFI_DHCP6_UTILITY_H__
     17 #define __EFI_DHCP6_UTILITY_H__
     18 
     19 
     20 #define  DHCP6_10_BIT_MASK             0x3ff
     21 #define  DHCP6_DAD_ADDITIONAL_DELAY    30000000 // 3 seconds
     22 
     23 /**
     24   Generate client Duid in the format of Duid-llt.
     25 
     26   @param[in]  Mode          The pointer to the mode of SNP.
     27 
     28   @retval     NULL          if failed to generate client Id.
     29   @retval     Others        The pointer to the new client id.
     30 
     31 **/
     32 EFI_DHCP6_DUID *
     33 Dhcp6GenerateClientId (
     34   IN EFI_SIMPLE_NETWORK_MODE    *Mode
     35   );
     36 
     37 /**
     38   Copy the Dhcp6 configure data.
     39 
     40   @param[in]  DstCfg        The pointer to the destination configure data.
     41   @param[in]  SorCfg        The pointer to the source configure data.
     42 
     43   @retval EFI_SUCCESS           Copy the content from SorCfg from DstCfg successfully.
     44   @retval EFI_OUT_OF_RESOURCES  Required system resources could not be allocated.
     45 
     46 **/
     47 EFI_STATUS
     48 Dhcp6CopyConfigData (
     49   IN EFI_DHCP6_CONFIG_DATA     *DstCfg,
     50   IN EFI_DHCP6_CONFIG_DATA     *SorCfg
     51   );
     52 
     53 /**
     54   Clean up the configure data.
     55 
     56   @param[in, out]  CfgData       The pointer to the configure data.
     57 
     58 **/
     59 VOID
     60 Dhcp6CleanupConfigData (
     61   IN OUT EFI_DHCP6_CONFIG_DATA       *CfgData
     62   );
     63 
     64 /**
     65   Clean up the mode data.
     66 
     67   @param[in, out]  ModeData      The pointer to the mode data.
     68 
     69 **/
     70 VOID
     71 Dhcp6CleanupModeData (
     72   IN OUT EFI_DHCP6_MODE_DATA        *ModeData
     73   );
     74 
     75 /**
     76   Calculate the expire time by the algorithm defined in rfc.
     77 
     78   @param[in]  Base          The base value of the time.
     79   @param[in]  IsFirstRt     If TRUE, it is the first time to calculate expire time.
     80   @param[in]  NeedSigned    If TRUE, the the signed factor is needed.
     81 
     82   @return     Expire        The calculated result for the new expire time.
     83 
     84 **/
     85 UINT32
     86 Dhcp6CalculateExpireTime (
     87   IN UINT32                    Base,
     88   IN BOOLEAN                   IsFirstRt,
     89   IN BOOLEAN                   NeedSigned
     90   );
     91 
     92 /**
     93   Calculate the lease time by the algorithm defined in rfc.
     94 
     95   @param[in]  IaCb          The pointer to the Ia control block.
     96 
     97 **/
     98 VOID
     99 Dhcp6CalculateLeaseTime (
    100   IN DHCP6_IA_CB               *IaCb
    101   );
    102 
    103 /**
    104   Check whether the addresses are all included by the configured Ia.
    105 
    106   @param[in]  Ia            The pointer to the Ia.
    107   @param[in]  AddressCount  The number of addresses.
    108   @param[in]  Addresses     The pointer to the addresses buffer.
    109 
    110   @retval EFI_SUCCESS         The addresses are all included by the configured IA.
    111   @retval EFI_NOT_FOUND       The addresses are not included by the configured IA.
    112 
    113 **/
    114 EFI_STATUS
    115 Dhcp6CheckAddress (
    116   IN EFI_DHCP6_IA              *Ia,
    117   IN UINT32                    AddressCount,
    118   IN EFI_IPv6_ADDRESS          *Addresses
    119   );
    120 
    121 /**
    122   Deprive the addresses from current Ia, and generate another eliminated Ia.
    123 
    124   @param[in]  Ia            The pointer to the Ia.
    125   @param[in]  AddressCount  The number of addresses.
    126   @param[in]  Addresses     The pointer to the addresses buffer.
    127 
    128   @retval     NULL          If failed to generate the deprived Ia.
    129   @retval     others        The pointer to the deprived Ia.
    130 
    131 **/
    132 EFI_DHCP6_IA *
    133 Dhcp6DepriveAddress (
    134   IN EFI_DHCP6_IA              *Ia,
    135   IN UINT32                    AddressCount,
    136   IN EFI_IPv6_ADDRESS          *Addresses
    137   );
    138 
    139 /**
    140   The dummy ext buffer free callback routine.
    141 
    142   @param[in]  Arg           The pointer to the parameter.
    143 
    144 **/
    145 VOID
    146 EFIAPI
    147 Dhcp6DummyExtFree (
    148   IN VOID                      *Arg
    149   );
    150 
    151 /**
    152   The callback routine once message transmitted.
    153 
    154   @param[in]  Wrap          The pointer to the received net buffer.
    155   @param[in]  EndPoint      The pointer to the udp end point.
    156   @param[in]  IoStatus      The return status from udp io.
    157   @param[in]  Context       The opaque parameter to the function.
    158 
    159 **/
    160 VOID
    161 EFIAPI
    162 Dhcp6OnTransmitted (
    163   IN NET_BUF                   *Wrap,
    164   IN UDP_END_POINT             *EndPoint,
    165   IN EFI_STATUS                IoStatus,
    166   IN VOID                      *Context
    167   );
    168 
    169 /**
    170   Append the appointed option to the buf, and move the buf to the end.
    171 
    172   @param[in, out] Buf           The pointer to buffer.
    173   @param[in]      OptType       The option type.
    174   @param[in]      OptLen        The lenght of option content.s
    175   @param[in]      Data          The pointer to the option content.
    176 
    177   @return         Buf           The position to append the next option.
    178 
    179 **/
    180 UINT8 *
    181 Dhcp6AppendOption (
    182   IN OUT UINT8                 *Buf,
    183   IN     UINT16                OptType,
    184   IN     UINT16                OptLen,
    185   IN     UINT8                 *Data
    186   );
    187 
    188 /**
    189   Append the Ia option to Buf, and move Buf to the end.
    190 
    191   @param[in, out] Buf           The pointer to the position to append.
    192   @param[in]      Ia            The pointer to the Ia.
    193   @param[in]      T1            The time of T1.
    194   @param[in]      T2            The time of T2.
    195   @param[in]      MessageType   Message type of DHCP6 package.
    196 
    197   @return         Buf           The position to append the next Ia option.
    198 
    199 **/
    200 UINT8 *
    201 Dhcp6AppendIaOption (
    202   IN OUT UINT8                  *Buf,
    203   IN     EFI_DHCP6_IA           *Ia,
    204   IN     UINT32                 T1,
    205   IN     UINT32                 T2,
    206   IN     UINT32                 MessageType
    207   );
    208 
    209 /**
    210   Append the appointed Elapsed time option to Buf, and move Buf to the end.
    211 
    212   @param[in, out] Buf           The pointer to the position to append.
    213   @param[in]      Instance      The pointer to the Dhcp6 instance.
    214   @param[out]     Elapsed       The pointer to the elapsed time value in
    215                                   the generated packet.
    216 
    217   @return         Buf           The position to append the next Ia option.
    218 
    219 **/
    220 UINT8 *
    221 Dhcp6AppendETOption (
    222   IN OUT UINT8                  *Buf,
    223   IN     DHCP6_INSTANCE         *Instance,
    224   OUT    UINT16                 **Elapsed
    225   );
    226 
    227 /**
    228   Set the elapsed time based on the given instance and the pointer to the
    229   elapsed time option.
    230 
    231   @param[in]      Elapsed       The pointer to the position to append.
    232   @param[in]      Instance      The pointer to the Dhcp6 instance.
    233 **/
    234 VOID
    235 SetElapsedTime (
    236   IN     UINT16                 *Elapsed,
    237   IN     DHCP6_INSTANCE         *Instance
    238   );
    239 
    240 /**
    241   Seek the address of the first byte of the option header.
    242 
    243   @param[in]  Buf           The pointer to buffer.
    244   @param[in]  SeekLen       The length to seek.
    245   @param[in]  OptType       The option type.
    246 
    247   @retval     NULL          If failed to seek the option.
    248   @retval     others        The position to the option.
    249 
    250 **/
    251 UINT8 *
    252 Dhcp6SeekOption (
    253   IN UINT8                     *Buf,
    254   IN UINT32                    SeekLen,
    255   IN UINT16                    OptType
    256   );
    257 
    258 /**
    259   Seek the address of the first byte of the Ia option header.
    260 
    261   @param[in]  Buf           The pointer to the buffer.
    262   @param[in]  SeekLen       The length to seek.
    263   @param[in]  IaDesc        The pointer to the Ia descriptor.
    264 
    265   @retval     NULL          If failed to seek the Ia option.
    266   @retval     others        The position to the Ia option.
    267 
    268 **/
    269 UINT8 *
    270 Dhcp6SeekIaOption (
    271   IN UINT8                     *Buf,
    272   IN UINT32                    SeekLen,
    273   IN EFI_DHCP6_IA_DESCRIPTOR   *IaDesc
    274   );
    275 
    276 /**
    277   Parse the address option and update the address info.
    278 
    279   @param[in]      CurrentIa     The pointer to the Ia Address in control blcok.
    280   @param[in]      IaInnerOpt    The pointer to the buffer.
    281   @param[in]      IaInnerLen    The length to parse.
    282   @param[out]     AddrNum       The number of addresses.
    283   @param[in, out] AddrBuf       The pointer to the address buffer.
    284 
    285 **/
    286 VOID
    287 Dhcp6ParseAddrOption (
    288   IN     EFI_DHCP6_IA            *CurrentIa,
    289   IN     UINT8                   *IaInnerOpt,
    290   IN     UINT16                  IaInnerLen,
    291      OUT UINT32                  *AddrNum,
    292   IN OUT EFI_DHCP6_IA_ADDRESS    *AddrBuf
    293   );
    294 
    295 /**
    296   Create a control blcok for the Ia according to the corresponding options.
    297 
    298   @param[in]  Instance              The pointer to DHCP6 Instance.
    299   @param[in]  IaInnerOpt            The pointer to the inner options in the Ia option.
    300   @param[in]  IaInnerLen            The length of all the inner options in the Ia option.
    301   @param[in]  T1                    T1 time in the Ia option.
    302   @param[in]  T2                    T2 time in the Ia option.
    303 
    304   @retval     EFI_NOT_FOUND         No valid IA option is found.
    305   @retval     EFI_SUCCESS           Create an IA control block successfully.
    306   @retval     EFI_OUT_OF_RESOURCES  Required system resources could not be allocated.
    307   @retval     EFI_DEVICE_ERROR      An unexpected error.
    308 
    309 **/
    310 EFI_STATUS
    311 Dhcp6GenerateIaCb (
    312   IN  DHCP6_INSTANCE           *Instance,
    313   IN  UINT8                    *IaInnerOpt,
    314   IN  UINT16                   IaInnerLen,
    315   IN  UINT32                   T1,
    316   IN  UINT32                   T2
    317   );
    318 
    319 
    320 /**
    321   Cache the current IA configuration information.
    322 
    323   @param[in] Instance           The pointer to DHCP6 Instance.
    324 
    325   @retval EFI_SUCCESS           Cache the current IA successfully.
    326   @retval EFI_OUT_OF_RESOURCES  Required system resources could not be allocated.
    327 
    328 **/
    329 EFI_STATUS
    330 Dhcp6CacheIa (
    331   IN DHCP6_INSTANCE           *Instance
    332   );
    333 
    334 
    335 /**
    336   Append CacheIa to the currrent IA. Meanwhile, clear CacheIa.ValidLifetime to 0.
    337 
    338   @param[in]  Instance            The pointer to DHCP6 instance.
    339 
    340 **/
    341 VOID
    342 Dhcp6AppendCacheIa (
    343   IN DHCP6_INSTANCE           *Instance
    344   );
    345 
    346 /**
    347   Calculate the Dhcp6 get mapping timeout by adding additinal delay to the IP6 DAD transmits count.
    348 
    349   @param[in]   Ip6Cfg              The pointer to Ip6 config protocol.
    350   @param[out]  TimeOut             The time out value in 100ns units.
    351 
    352   @retval   EFI_INVALID_PARAMETER  Input parameters are invalid.
    353   @retval   EFI_SUCCESS            Calculate the time out value successfully.
    354 **/
    355 EFI_STATUS
    356 Dhcp6GetMappingTimeOut (
    357   IN  EFI_IP6_CONFIG_PROTOCOL       *Ip6Cfg,
    358   OUT UINTN                         *TimeOut
    359   );
    360 #endif
    361