summaryrefslogtreecommitdiffstats
path: root/vendor/r-efi/src/protocols/ip6.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/r-efi/src/protocols/ip6.rs')
-rw-r--r--vendor/r-efi/src/protocols/ip6.rs264
1 files changed, 264 insertions, 0 deletions
diff --git a/vendor/r-efi/src/protocols/ip6.rs b/vendor/r-efi/src/protocols/ip6.rs
new file mode 100644
index 000000000..ad03e8f1f
--- /dev/null
+++ b/vendor/r-efi/src/protocols/ip6.rs
@@ -0,0 +1,264 @@
+//! IPv6 Protocol
+//!
+//! It implements a simple packet-oriented interface that can be used by
+//! drivers, daemons, and applications to transmit and receive network packets.
+
+pub const PROTOCOL_GUID: crate::base::Guid = crate::base::Guid::from_fields(
+ 0x2c8759d5,
+ 0x5c2d,
+ 0x66ef,
+ 0x92,
+ 0x5f,
+ &[0xb6, 0x6c, 0x10, 0x19, 0x57, 0xe2],
+);
+
+pub const SERVICE_BINDING_PROTOCOL_GUID: crate::base::Guid = crate::base::Guid::from_fields(
+ 0xec835dd3,
+ 0xfe0f,
+ 0x617b,
+ 0xa6,
+ 0x21,
+ &[0xb3, 0x50, 0xc3, 0xe1, 0x33, 0x88],
+);
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug)]
+pub struct ModeData {
+ pub is_started: crate::base::Boolean,
+ pub max_packet_size: u32,
+ pub config_data: ConfigData,
+ pub is_configured: crate::base::Boolean,
+ pub address_count: u32,
+ pub address_list: *mut AddressInfo,
+ pub group_count: u32,
+ pub group_table: *mut crate::base::Ipv6Address,
+ pub route_count: u32,
+ pub route_table: *mut RouteTable,
+ pub neighbor_count: u32,
+ pub neighbor_cache: *mut NeighborCache,
+ pub prefix_count: u32,
+ pub prefix_table: *mut AddressInfo,
+ pub icmp_type_count: u32,
+ pub icmp_type_list: *mut IcmpType,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug)]
+pub struct ConfigData {
+ pub default_protocol: u8,
+ pub accept_any_protocol: crate::base::Boolean,
+ pub accept_icmp_errors: crate::base::Boolean,
+ pub accept_promiscuous: crate::base::Boolean,
+ pub destination_address: crate::base::Ipv6Address,
+ pub station_address: crate::base::Ipv6Address,
+ pub traffic_class: u8,
+ pub hop_limit: u8,
+ pub flow_lable: u32,
+ pub receive_timeout: u32,
+ pub transmit_timeout: u32,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug)]
+pub struct AddressInfo {
+ pub address: crate::base::Ipv6Address,
+ pub prefix_length: u8,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug)]
+pub struct RouteTable {
+ pub gateway: crate::base::Ipv6Address,
+ pub destination: crate::base::Ipv6Address,
+ pub prefix_length: u8,
+}
+
+pub type NeighborState = u32;
+
+pub const NEIGHBOR_IN_COMPLETE: NeighborState = 0x00000000;
+pub const NEIGHBOR_REACHABLE: NeighborState = 0x00000001;
+pub const NEIGHBOR_STATE: NeighborState = 0x00000002;
+pub const NEIGHBOR_DELAY: NeighborState = 0x00000003;
+pub const NEIGHBOR_PROBE: NeighborState = 0x00000004;
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug)]
+pub struct NeighborCache {
+ pub neighbor: crate::base::Ipv6Address,
+ pub link_address: crate::base::MacAddress,
+ pub state: NeighborState,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug)]
+pub struct IcmpType {
+ pub r#type: u8,
+ pub code: u8,
+}
+
+pub const ICMP_V6_DEST_UNREACHABLE: u8 = 0x01;
+pub const ICMP_V6_PACKET_TOO_BIG: u8 = 0x02;
+pub const ICMP_V6_TIME_EXCEEDED: u8 = 0x03;
+pub const ICMP_V6_PARAMETER_PROBLEM: u8 = 0x04;
+
+pub const ICMP_V6_ECHO_REQUEST: u8 = 0x80;
+pub const ICMP_V6_ECHO_REPLY: u8 = 0x81;
+pub const ICMP_V6_LISTENER_QUERY: u8 = 0x82;
+pub const ICMP_V6_LISTENER_REPORT: u8 = 0x83;
+pub const ICMP_V6_LISTENER_DONE: u8 = 0x84;
+pub const ICMP_V6_ROUTER_SOLICIT: u8 = 0x85;
+pub const ICMP_V6_ROUTER_ADVERTISE: u8 = 0x86;
+pub const ICMP_V6_NEIGHBOR_SOLICIT: u8 = 0x87;
+pub const ICMP_V6_NEIGHBOR_ADVERTISE: u8 = 0x88;
+pub const ICMP_V6_REDIRECT: u8 = 0x89;
+pub const ICMP_V6_LISTENER_REPORT_2: u8 = 0x8f;
+
+pub const ICMP_V6_NO_ROUTE_TO_DEST: u8 = 0x00;
+pub const ICMP_V6_COMM_PROHIBITED: u8 = 0x01;
+pub const ICMP_V6_BEYOND_SCOPE: u8 = 0x02;
+pub const ICMP_V6_ADDR_UNREACHABLE: u8 = 0x03;
+pub const ICMP_V6_PORT_UNREACHABLE: u8 = 0x04;
+pub const ICMP_V6_SOURCE_ADDR_FAILED: u8 = 0x05;
+pub const ICMP_V6_ROUTE_REJECTED: u8 = 0x06;
+
+pub const ICMP_V6_TIMEOUT_HOP_LIMIT: u8 = 0x00;
+pub const ICMP_V6_TIMEOUT_REASSEMBLE: u8 = 0x01;
+
+pub const ICMP_V6_ERRONEOUS_HEADER: u8 = 0x00;
+pub const ICMP_V6_UNRECOGNIZE_NEXT_HDR: u8 = 0x01;
+pub const ICMP_V6_UNRECOGNIZE_OPTION: u8 = 0x02;
+
+#[repr(C)]
+#[derive(Clone, Copy)]
+pub struct CompletionToken {
+ pub event: crate::base::Event,
+ pub status: crate::base::Status,
+ pub packet: CompletionTokenPacket,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy)]
+pub union CompletionTokenPacket {
+ pub rx_data: *mut ReceiveData,
+ pub tx_data: *mut TransmitData,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug)]
+pub struct ReceiveData<const N: usize = 0> {
+ pub time_stamp: crate::system::Time,
+ pub recycle_signal: crate::base::Event,
+ pub header_length: u32,
+ pub header: *mut Header,
+ pub data_length: u32,
+ pub fragment_count: u32,
+ pub fragment_table: [FragmentData; N],
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug)]
+pub struct Header {
+ pub traffic_class_h_version: u8,
+ pub flow_label_h_traffic_class_l: u8,
+ pub flow_label_l: u16,
+ pub payload_length: u16,
+ pub next_header: u8,
+ pub hop_limit: u8,
+ pub source_address: crate::base::Ipv6Address,
+ pub destination_address: crate::base::Ipv6Address,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug)]
+pub struct FragmentData {
+ pub fragment_length: u32,
+ pub fragment_buffer: *mut core::ffi::c_void,
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug)]
+pub struct TransmitData<const N: usize = 0> {
+ pub destination_address: *mut crate::base::Ipv6Address,
+ pub override_data: *mut OverrideData,
+ pub ext_hdrs_length: u32,
+ pub ext_hdrs: *mut core::ffi::c_void,
+ pub next_header: u8,
+ pub data_length: u32,
+ pub fragment_count: u32,
+ pub fragment_table: [FragmentData; N],
+}
+
+#[repr(C)]
+#[derive(Clone, Copy, Debug)]
+pub struct OverrideData {
+ pub protocol: u8,
+ pub hop_limit: u8,
+ pub flow_label: u32,
+}
+
+pub type ProtocolGetModeData = eficall! {fn(
+ *mut Protocol,
+ *mut ModeData,
+ *mut crate::protocols::managed_network::ConfigData,
+ *mut crate::protocols::simple_network::Mode,
+) -> crate::base::Status};
+
+pub type ProtocolConfigure = eficall! {fn(
+ *mut Protocol,
+ *mut ConfigData,
+) -> crate::base::Status};
+
+pub type ProtocolGroups = eficall! {fn(
+ *mut Protocol,
+ crate::base::Boolean,
+ *mut crate::base::Ipv6Address,
+) -> crate::base::Status};
+
+pub type ProtocolRoutes = eficall! {fn(
+ *mut Protocol,
+ crate::base::Boolean,
+ *mut crate::base::Ipv6Address,
+ u8,
+ *mut crate::base::Ipv6Address,
+) -> crate::base::Status};
+
+pub type ProtocolNeighbors = eficall! {fn(
+ *mut Protocol,
+ crate::base::Boolean,
+ *mut crate::base::Ipv6Address,
+ *mut crate::base::MacAddress,
+ u32,
+ crate::base::Boolean,
+) -> crate::base::Status};
+
+pub type ProtocolTransmit = eficall! {fn(
+ *mut Protocol,
+ *mut CompletionToken,
+) -> crate::base::Status};
+
+pub type ProtocolReceive = eficall! {fn(
+ *mut Protocol,
+ *mut CompletionToken,
+) -> crate::base::Status};
+
+pub type ProtocolCancel = eficall! {fn(
+ *mut Protocol,
+ *mut CompletionToken,
+) -> crate::base::Status};
+
+pub type ProtocolPoll = eficall! {fn(
+ *mut Protocol,
+) -> crate::base::Status};
+
+#[repr(C)]
+pub struct Protocol {
+ pub get_mode_data: ProtocolGetModeData,
+ pub configure: ProtocolConfigure,
+ pub groups: ProtocolGroups,
+ pub routes: ProtocolRoutes,
+ pub neighbors: ProtocolNeighbors,
+ pub transmit: ProtocolTransmit,
+ pub receive: ProtocolReceive,
+ pub cancel: ProtocolCancel,
+ pub poll: ProtocolPoll,
+}