blob: 260939c6c62a3f5dd090acc919bae730b568a65a [file] [log] [blame]
// 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_IP6_H_
#define ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_PROTOCOL_IP6_H_
#include <stdbool.h>
#include <zircon/compiler.h>
#include <efi/types.h>
__BEGIN_CDECLS
typedef struct {
uint8_t DefaultProtocol;
bool AcceptAnyProtocol;
bool AcceptIcmpErrors;
bool AcceptPromiscuous;
efi_ipv6_addr DestinationAddress;
efi_ipv6_addr StationAddress;
uint8_t TrafficClass;
uint8_t HopLimit;
uint32_t FlowLabel;
uint32_t ReceiveTimeout;
uint32_t TransmitTimeout;
} efi_ip6_config_data;
typedef struct {
efi_ipv6_addr Address;
uint8_t PrefixLength;
} efi_ip6_address_info;
typedef struct {
efi_ipv6_addr Gateway;
efi_ipv6_addr Destination;
uint8_t PrefixLength;
} efi_ip6_route_table;
typedef enum {
EfiNeighborInComplete,
EfiNeighborReachable,
EfiNeighborStale,
EfiNeighborDelay,
EfiNeighborProbe
} efi_ip6_neighbor_state;
typedef struct {
efi_ipv6_addr Neighbor;
efi_mac_addr LinkAddress;
efi_ip6_neighbor_state State;
} efi_ip6_neighbor_cache;
typedef struct {
uint8_t Type;
uint8_t Code;
} efi_ip6_icmp_type;
typedef struct {
bool IsStarted;
uint32_t MaxPacketSize;
efi_ip6_config_data ConfigData;
bool IsConfigured;
uint32_t AddressCount;
efi_ip6_address_info* AddressList;
uint32_t GroupCount;
efi_ipv6_addr* GroupTable;
uint32_t RouteCount;
efi_ip6_route_table* RouteTable;
uint32_t NeighborCount;
efi_ip6_neighbor_cache* NeighborCache;
uint32_t PrefixCount;
efi_ip6_address_info* PrefixTable;
uint32_t IcmpTypeCount;
efi_ip6_icmp_type* IcmpTypeList;
} efi_ip6_mode_data;
__END_CDECLS
#endif // ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_PROTOCOL_IP6_H_