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