Home | History | Annotate | Download | only in Ip4Dxe
      1 /** @file
      2   IP4 option support routines.
      3 
      4 Copyright (c) 2005 - 2009, Intel Corporation. All rights reserved.<BR>
      5 This program and the accompanying materials
      6 are licensed and made available under the terms and conditions of the BSD License
      7 which accompanies this distribution.  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 #ifndef __EFI_IP4_OPTION_H__
     16 #define __EFI_IP4_OPTION_H__
     17 
     18 #define IP4_OPTION_EOP        0
     19 #define IP4_OPTION_NOP        1
     20 #define IP4_OPTION_LSRR       131  // Loss source and record routing,   10000011
     21 #define IP4_OPTION_SSRR       137  // Strict source and record routing, 10001001
     22 #define IP4_OPTION_RR         7    // Record routing, 00000111
     23 
     24 #define IP4_OPTION_COPY_MASK  0x80
     25 
     26 /**
     27   Validate the IP4 option format for both the packets we received
     28   and will transmit. It will compute the ICMP error message fields
     29   if the option is mal-formated. But this information isn't used.
     30 
     31   @param[in]  Option            The first byte of the option
     32   @param[in]  OptionLen         The length of the whole option
     33   @param[in]  Rcvd              The option is from the packet we received if TRUE,
     34                                 otherwise the option we wants to transmit.
     35 
     36   @retval TRUE     The option is properly formatted
     37   @retval FALSE    The option is mal-formated
     38 
     39 **/
     40 BOOLEAN
     41 Ip4OptionIsValid (
     42   IN UINT8                  *Option,
     43   IN UINT32                 OptionLen,
     44   IN BOOLEAN                Rcvd
     45   );
     46 
     47 /**
     48   Copy the option from the original option to buffer. It
     49   handles the details such as:
     50   1. whether copy the single IP4 option to the first/non-first
     51      fragments.
     52   2. Pad the options copied over to aligned to 4 bytes.
     53 
     54   @param[in]       Option            The original option to copy from
     55   @param[in]       OptionLen         The length of the original option
     56   @param[in]       FirstFragment     Whether it is the first fragment
     57   @param[in, out]  Buf               The buffer to copy options to. NULL
     58   @param[in, out]  BufLen            The length of the buffer
     59 
     60   @retval EFI_SUCCESS           The options are copied over
     61   @retval EFI_BUFFER_TOO_SMALL  Buf is NULL or BufLen provided is too small.
     62 
     63 **/
     64 EFI_STATUS
     65 Ip4CopyOption (
     66   IN     UINT8              *Option,
     67   IN     UINT32             OptionLen,
     68   IN     BOOLEAN            FirstFragment,
     69   IN OUT UINT8              *Buf,           OPTIONAL
     70   IN OUT UINT32             *BufLen
     71   );
     72 #endif
     73