| // Copyright 2021 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_PROTOCOL_TCP6_H_ |
| #define ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_PROTOCOL_TCP6_H_ |
| |
| #include <stdbool.h> |
| #include <zircon/compiler.h> |
| |
| #include <efi/protocol/ip6.h> |
| #include <efi/protocol/managed-network.h> |
| #include <efi/protocol/simple-network.h> |
| #include <efi/types.h> |
| |
| __BEGIN_CDECLS |
| |
| #define EFI_TCP6_SERVICE_BINDING_PROTOCOL_GUID \ |
| { \ |
| 0xec20eb79, 0x6c1a, 0x4664, { 0x9a, 0x0d, 0xd2, 0xe4, 0xcc, 0x16, 0xd6, 0x64 } \ |
| } |
| |
| #define EFI_TCP6_PROTOCOL_GUID \ |
| { \ |
| 0x46e44855, 0xbd60, 0x4ab7, { 0xab, 0x0d, 0xa6, 0x79, 0xb9, 0x44, 0x7d, 0x77 } \ |
| } |
| |
| typedef struct { |
| efi_ipv6_addr StationAddress; |
| uint16_t StationPort; |
| efi_ipv6_addr RemoteAddress; |
| uint16_t RemotePort; |
| bool ActiveFlag; |
| } efi_tcp6_access_point; |
| |
| typedef struct { |
| uint32_t ReceiveBufferSize; |
| uint32_t SendBufferSize; |
| uint32_t MaxSynBackLog; |
| uint32_t ConnectionTimeout; |
| uint32_t DataRetries; |
| uint32_t FinTimeout; |
| uint32_t TimeWaitTimeout; |
| uint32_t KeepAliveProbes; |
| uint32_t KeepAliveTime; |
| uint32_t KeepAliveInterval; |
| bool EnableNagle; |
| bool EnableTimeStamp; |
| bool EnableWindowScaling; |
| bool EnableSelectiveAck; |
| bool EnablePathMtuDiscovery; |
| } efi_tcp6_option; |
| |
| typedef struct { |
| uint8_t TrafficClass; |
| uint8_t HopLimit; |
| efi_tcp6_access_point AccessPoint; |
| efi_tcp6_option* ControlOption; |
| } efi_tcp6_config_data; |
| |
| typedef enum { |
| Tcp6StateClosed = 0, |
| Tcp6StateListen = 1, |
| Tcp6StateSynSent = 2, |
| Tcp6StateSynReceived = 3, |
| Tcp6StateEstablished = 4, |
| Tcp6StateFinWait1 = 5, |
| Tcp6StateFinWait2 = 6, |
| Tcp6StateClosing = 7, |
| Tcp6StateTimeWait = 8, |
| Tcp6StateCloseWait = 9, |
| Tcp6StateLastAck = 10 |
| } efi_tcp6_connection_state; |
| |
| typedef struct { |
| efi_event Event; |
| efi_status Status; |
| } efi_tcp6_completion_token; |
| |
| typedef struct { |
| efi_tcp6_completion_token CompletionToken; |
| } efi_tcp6_connection_token; |
| |
| typedef struct { |
| efi_tcp6_completion_token CompletionToken; |
| efi_handle NewChildHandle; |
| } efi_tcp6_listen_token; |
| |
| typedef struct { |
| uint32_t FragmentLength; |
| void* FragmentBuffer; |
| } efi_tcp6_fragment_data; |
| |
| typedef struct { |
| bool UrgentFlag; |
| uint32_t DataLength; |
| uint32_t FragmentCount; |
| efi_tcp6_fragment_data FragmentTable[1]; |
| } efi_tcp6_receive_data; |
| |
| typedef struct { |
| bool Push; |
| bool Urgent; |
| uint32_t DataLength; |
| uint32_t FragmentCount; |
| efi_tcp6_fragment_data FragmentTable[1]; |
| } efi_tcp6_transmit_data; |
| |
| typedef struct { |
| efi_tcp6_completion_token CompletionToken; |
| union { |
| efi_tcp6_receive_data* RxData; |
| efi_tcp6_transmit_data* TxData; |
| } Packet; |
| } efi_tcp6_io_token; |
| |
| typedef struct { |
| efi_tcp6_completion_token CompletionToken; |
| bool AbortOnClose; |
| } efi_tcp6_close_token; |
| |
| typedef struct efi_tcp6_protocol { |
| efi_status (*GetModeData)(struct efi_tcp6_protocol* self, efi_tcp6_connection_state* tcp6_state, |
| efi_tcp6_config_data* tcp6_config_data, |
| efi_ip6_mode_data* ip6_mode_data, |
| efi_managed_network_config_data* mnp_config_data, |
| efi_simple_network_mode* snp_mode_data) EFIAPI; |
| |
| efi_status (*Configure)(struct efi_tcp6_protocol* self, |
| efi_tcp6_config_data* tcp6_config_data) EFIAPI; |
| |
| efi_status (*Connect)(struct efi_tcp6_protocol* self, |
| efi_tcp6_connection_token* connection_token) EFIAPI; |
| |
| efi_status (*Accept)(struct efi_tcp6_protocol* self, efi_tcp6_listen_token* listen_token) EFIAPI; |
| |
| efi_status (*Transmit)(struct efi_tcp6_protocol* self, efi_tcp6_io_token* token) EFIAPI; |
| |
| efi_status (*Receive)(struct efi_tcp6_protocol* self, efi_tcp6_io_token* token) EFIAPI; |
| |
| efi_status (*Close)(struct efi_tcp6_protocol* self, efi_tcp6_close_token* close_token) EFIAPI; |
| |
| efi_status (*Cancel)(struct efi_tcp6_protocol* self, efi_tcp6_completion_token* token) EFIAPI; |
| |
| efi_status (*Poll)(struct efi_tcp6_protocol* self) EFIAPI; |
| } efi_tcp6_protocol; |
| |
| __END_CDECLS |
| |
| #endif // ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_PROTOCOL_TCP6_H_ |