REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			218 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			218 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   EFI IPSEC Protocol Definition
 | |
|   The EFI_IPSEC_PROTOCOL is used to abstract the ability to deal with the individual
 | |
|   packets sent and received by the host and provide packet-level security for IP
 | |
|   datagram.
 | |
|   The EFI_IPSEC2_PROTOCOL is used to abstract the ability to deal with the individual
 | |
|   packets sent and received by the host and provide packet-level security for IP
 | |
|   datagram. In addition, it supports the Option (extension header) processing in
 | |
|   IPsec which doesn't support in EFI_IPSEC_PROTOCOL. It is also recommended to
 | |
|   use EFI_IPSEC2_PROTOCOL instead of EFI_IPSEC_PROTOCOL especially for IPsec Tunnel
 | |
|   Mode.
 | |
| 
 | |
|   Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
|   @par Revision Reference:
 | |
|   The EFI_IPSEC2_PROTOCOL is introduced in UEFI Specification 2.3D.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __EFI_IPSEC_PROTOCOL_H__
 | |
| #define __EFI_IPSEC_PROTOCOL_H__
 | |
| 
 | |
| #include <Protocol/IpSecConfig.h>
 | |
| 
 | |
| #define EFI_IPSEC_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0xdfb386f7, 0xe100, 0x43ad, {0x9c, 0x9a, 0xed, 0x90, 0xd0, 0x8a, 0x5e, 0x12 } \
 | |
|   }
 | |
| 
 | |
| #define EFI_IPSEC2_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0xa3979e64, 0xace8, 0x4ddc, {0xbc, 0x7, 0x4d, 0x66, 0xb8, 0xfd, 0x9, 0x77 } \
 | |
|   }
 | |
| 
 | |
| typedef struct _EFI_IPSEC_PROTOCOL   EFI_IPSEC_PROTOCOL;
 | |
| typedef struct _EFI_IPSEC2_PROTOCOL  EFI_IPSEC2_PROTOCOL;
 | |
| 
 | |
| ///
 | |
| /// EFI_IPSEC_FRAGMENT_DATA
 | |
| /// defines the instances of packet fragments.
 | |
| ///
 | |
| typedef struct _EFI_IPSEC_FRAGMENT_DATA {
 | |
|   UINT32    FragmentLength;
 | |
|   VOID      *FragmentBuffer;
 | |
| } EFI_IPSEC_FRAGMENT_DATA;
 | |
| 
 | |
| /**
 | |
|   Handles IPsec packet processing for inbound and outbound IP packets.
 | |
| 
 | |
|   The EFI_IPSEC_PROCESS process routine handles each inbound or outbound packet.
 | |
|   The behavior is that it can perform one of the following actions:
 | |
|   bypass the packet, discard the packet, or protect the packet.
 | |
| 
 | |
|   @param[in]      This             Pointer to the EFI_IPSEC_PROTOCOL instance.
 | |
|   @param[in]      NicHandle        Instance of the network interface.
 | |
|   @param[in]      IpVer            IPV4 or IPV6.
 | |
|   @param[in, out] IpHead           Pointer to the IP Header.
 | |
|   @param[in]      LastHead         The protocol of the next layer to be processed by IPsec.
 | |
|   @param[in]      OptionsBuffer    Pointer to the options buffer.
 | |
|   @param[in]      OptionsLength    Length of the options buffer.
 | |
|   @param[in, out] FragmentTable    Pointer to a list of fragments.
 | |
|   @param[in]      FragmentCount    Number of fragments.
 | |
|   @param[in]      TrafficDirection Traffic direction.
 | |
|   @param[out]     RecycleSignal    Event for recycling of resources.
 | |
| 
 | |
|   @retval EFI_SUCCESS              The packet was bypassed and all buffers remain the same.
 | |
|   @retval EFI_SUCCESS              The packet was protected.
 | |
|   @retval EFI_ACCESS_DENIED        The packet was discarded.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI  *EFI_IPSEC_PROCESS)(
 | |
|   IN     EFI_IPSEC_PROTOCOL      *This,
 | |
|   IN     EFI_HANDLE              NicHandle,
 | |
|   IN     UINT8                   IpVer,
 | |
|   IN OUT VOID                    *IpHead,
 | |
|   IN     UINT8                   *LastHead,
 | |
|   IN     VOID                    *OptionsBuffer,
 | |
|   IN     UINT32                  OptionsLength,
 | |
|   IN OUT EFI_IPSEC_FRAGMENT_DATA **FragmentTable,
 | |
|   IN     UINT32                  *FragmentCount,
 | |
|   IN     EFI_IPSEC_TRAFFIC_DIR   TrafficDirection,
 | |
|   OUT EFI_EVENT               *RecycleSignal
 | |
|   );
 | |
| 
 | |
| ///
 | |
| /// EFI_IPSEC_PROTOCOL
 | |
| /// provides the ability for  securing IP communications by authenticating
 | |
| /// and/or encrypting each IP packet in a data stream.
 | |
| //  EFI_IPSEC_PROTOCOL can be consumed by both the IPv4 and IPv6 stack.
 | |
| //  A user can employ this protocol for IPsec package handling in both IPv4
 | |
| //  and IPv6 environment.
 | |
| ///
 | |
| struct _EFI_IPSEC_PROTOCOL {
 | |
|   EFI_IPSEC_PROCESS    Process;             ///< Handle the IPsec message.
 | |
|   EFI_EVENT            DisabledEvent;       ///< Event signaled when the interface is disabled.
 | |
|   BOOLEAN              DisabledFlag;        ///< State of the interface.
 | |
| };
 | |
| 
 | |
| /**
 | |
|   Handles IPsec processing for both inbound and outbound IP packets. Compare with
 | |
|   Process() in EFI_IPSEC_PROTOCOL, this interface has the capability to process
 | |
|   Option(Extension Header).
 | |
| 
 | |
|   The EFI_IPSEC2_PROCESS process routine handles each inbound or outbound packet.
 | |
|   The behavior is that it can perform one of the following actions:
 | |
|   bypass the packet, discard the packet, or protect the packet.
 | |
| 
 | |
|   @param[in]       This               Pointer to the EFI_IPSEC2_PROTOCOL instance.
 | |
|   @param[in]       NicHandle          Instance of the network interface.
 | |
|   @param[in]       IpVer              IP version.IPv4 or IPv6.
 | |
|   @param[in, out]  IpHead             Pointer to the IP Header it is either
 | |
|                                       the EFI_IP4_HEADER or EFI_IP6_HEADER.
 | |
|                                       On input, it contains the IP header.
 | |
|                                       On output, 1) in tunnel mode and the
 | |
|                                       traffic direction is inbound, the buffer
 | |
|                                       will be reset to zero by IPsec; 2) in
 | |
|                                       tunnel mode and the traffic direction
 | |
|                                       is outbound, the buffer will reset to
 | |
|                                       be the tunnel IP header.3) in transport
 | |
|                                       mode, the related fielders (like payload
 | |
|                                       length, Next header) in IP header will
 | |
|                                       be modified according to the condition.
 | |
|   @param[in, out]  LastHead           For IP4, it is the next protocol in IP
 | |
|                                       header. For IP6 it is the Next Header
 | |
|                                       of the last extension header.
 | |
|   @param[in, out]  OptionsBuffer      On input, it contains the options
 | |
|                                       (extensions header) to be processed by
 | |
|                                       IPsec. On output, 1) in tunnel mode and
 | |
|                                       the traffic direction is outbound, it
 | |
|                                       will be set to NULL, and that means this
 | |
|                                       contents was wrapped after inner header
 | |
|                                       and should not be concatenated after
 | |
|                                       tunnel header again; 2) in transport
 | |
|                                       mode and the traffic direction is inbound,
 | |
|                                       if there are IP options (extension headers)
 | |
|                                       protected by IPsec, IPsec will concatenate
 | |
|                                       the those options after the input options
 | |
|                                       (extension headers); 3) on other situations,
 | |
|                                       the output of contents of OptionsBuffer
 | |
|                                       might be same with input's. The caller
 | |
|                                       should take the responsibility to free
 | |
|                                       the buffer both on input and on output.
 | |
|   @param[in, out]  OptionsLength      On input, the input length of the options
 | |
|                                       buffer. On output, the output length of
 | |
|                                       the options buffer.
 | |
|   @param[in, out]  FragmentTable      Pointer to a list of fragments. On input,
 | |
|                                       these fragments contain the IP payload.
 | |
|                                       On output, 1) in tunnel mode and the traffic
 | |
|                                       direction is inbound, the fragments contain
 | |
|                                       the whole IP payload which is from the
 | |
|                                       IP inner header to the last byte of the
 | |
|                                       packet; 2) in tunnel mode and the traffic
 | |
|                                       direction is the outbound, the fragments
 | |
|                                       contains the whole encapsulated payload
 | |
|                                       which encapsulates the whole IP payload
 | |
|                                       between the encapsulated header and
 | |
|                                       encapsulated trailer fields. 3) in transport
 | |
|                                       mode and the traffic direction is inbound,
 | |
|                                       the fragments contains the IP payload
 | |
|                                       which is from the next layer protocol to
 | |
|                                       the last byte of the packet; 4) in transport
 | |
|                                       mode and the traffic direction is outbound,
 | |
|                                       the fragments contains the whole encapsulated
 | |
|                                       payload which encapsulates the next layer
 | |
|                                       protocol information between the encapsulated
 | |
|                                       header and encapsulated trailer fields.
 | |
|   @param[in, out]  FragmentCount      Number of fragments.
 | |
|   @param[in]       TrafficDirection   Traffic direction.
 | |
|   @param[out]      RecycleSignal      Event for recycling of resources.
 | |
| 
 | |
|   @retval      EFI_SUCCESS           The packet was processed by IPsec successfully.
 | |
|   @retval      EFI_ACCESS_DENIED     The packet was discarded.
 | |
|   @retval      EFI_NOT_READY         The IKE negotiation is invoked and the packet
 | |
|                                      was discarded.
 | |
|   @retval      EFI_INVALID_PARAMETER One or more of following are TRUE:
 | |
|                                      If OptionsBuffer is NULL;
 | |
|                                      If OptionsLength is NULL;
 | |
|                                      If FragmentTable is NULL;
 | |
|                                      If FragmentCount is NULL.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_IPSEC_PROCESSEXT)(
 | |
|   IN EFI_IPSEC2_PROTOCOL         *This,
 | |
|   IN EFI_HANDLE                  NicHandle,
 | |
|   IN UINT8                       IpVer,
 | |
|   IN OUT VOID                    *IpHead,
 | |
|   IN OUT UINT8                   *LastHead,
 | |
|   IN OUT VOID                    **OptionsBuffer,
 | |
|   IN OUT UINT32                  *OptionsLength,
 | |
|   IN OUT EFI_IPSEC_FRAGMENT_DATA **FragmentTable,
 | |
|   IN OUT UINT32                  *FragmentCount,
 | |
|   IN EFI_IPSEC_TRAFFIC_DIR       TrafficDirection,
 | |
|   OUT EFI_EVENT               *RecycleSignal
 | |
|   );
 | |
| 
 | |
| ///
 | |
| /// EFI_IPSEC2_PROTOCOL
 | |
| /// supports the Option (extension header) processing in IPsec which doesn't support
 | |
| /// in EFI_IPSEC_PROTOCOL. It is also recommended to use EFI_IPSEC2_PROTOCOL instead
 | |
| /// of EFI_IPSEC_PROTOCOL especially for IPsec Tunnel Mode.
 | |
| /// provides the ability for securing IP communications by authenticating and/or
 | |
| /// encrypting each IP packet in a data stream.
 | |
| ///
 | |
| struct _EFI_IPSEC2_PROTOCOL {
 | |
|   EFI_IPSEC_PROCESSEXT    ProcessExt;
 | |
|   EFI_EVENT               DisabledEvent;
 | |
|   BOOLEAN                 DisabledFlag;
 | |
| };
 | |
| 
 | |
| extern EFI_GUID  gEfiIpSecProtocolGuid;
 | |
| extern EFI_GUID  gEfiIpSec2ProtocolGuid;
 | |
| #endif
 |