| // Copyright 2022 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. |
| library fuchsia.lowpan.experimental; |
| |
| using fuchsia.lowpan; |
| using zx; |
| |
| /// Protocol for connecting to [`TelemetryProvider`] on a LoWPAN interface. |
| @discoverable |
| closed protocol TelemetryProviderConnector { |
| /// Connects to the [`TelemetryProvider`] protocol on the named LoWPAN interface. |
| /// |
| /// The name of the interface can be learned by calling [`fuchsia.lowpan/Lookup.GetDevices`]. |
| /// |
| /// If there is an error in processing this request the given channel is closed and an epitaph |
| /// code used to describe the reason for the failure: |
| /// |
| /// * `ZX_ERR_INVALID_ARGUMENT`: The given interface name was not formatted correctly or |
| /// otherwise invalid. |
| /// * `ZX_ERR_NOT_FOUND`: No interface was found with the given name. |
| /// * `ZX_ERR_NOT_SUPPORTED`: The interface exists but does not support this protocol. |
| strict Connect(resource struct { |
| name fuchsia.lowpan.InterfaceName; |
| server_end server_end:TelemetryProvider; |
| }); |
| }; |
| |
| /// Provides telemetry data for an individual interface to the LoWPAN service. |
| closed protocol TelemetryProvider { |
| /// Returns a snapshot the telemetry information table. |
| strict GetTelemetry() -> (struct { |
| telemetry Telemetry; |
| }); |
| }; |
| |
| /// Counters associated with border routing. |
| type BorderRoutingCounters = table { |
| /// The number of packets associated with inbound unicast messages. |
| /// |
| /// Required. |
| 1: inbound_unicast_packets uint64; |
| |
| /// The number of bytes associated with inbound unicast messages. |
| /// |
| /// Required. |
| 2: inbound_unicast_bytes uint64; |
| |
| /// The number of packets associated with inbound multicast messages. |
| /// |
| /// Required. |
| 3: inbound_multicast_packets uint64; |
| |
| /// The number of bytes associated with inbound multicast messages. |
| /// |
| /// Required. |
| 4: inbound_multicast_bytes uint64; |
| |
| /// The number of packets associated with outbound unicast messages. |
| /// |
| /// Required. |
| 5: outbound_unicast_packets uint64; |
| |
| /// The number of bytes associated with outbound unicast messages. |
| /// |
| /// Required. |
| 6: outbound_unicast_bytes uint64; |
| |
| /// The number of packets associated with outbound multicast messages. |
| /// |
| /// Required. |
| 7: outbound_multicast_packets uint64; |
| |
| /// The number of bytes associated with outbound multicast messages. |
| /// |
| /// Required. |
| 8: outbound_multicast_bytes uint64; |
| |
| /// The number of received RA packets. |
| /// |
| /// Required. |
| 9: ra_rx uint32; |
| |
| /// The number of RA packets successfully transmitted. |
| /// |
| /// Required. |
| 10: ra_tx_success uint32; |
| |
| /// The number of RA packets failed to transmit. |
| /// |
| /// Required. |
| 11: ra_tx_failure uint32; |
| |
| /// The number of received RS packets. |
| /// |
| /// Required. |
| 12: rs_rx uint32; |
| |
| /// The number of RS packets successfully transmitted. |
| /// |
| /// Required. |
| 13: rs_tx_success uint32; |
| |
| /// The number of RS packets failed to transmit. |
| /// |
| /// Required. |
| 14: rs_tx_failure uint32; |
| |
| /// Inbound Internet packets when DHCPv6 PD enabled. |
| /// |
| /// Optional. |
| 15: inbound_internet_packets uint64; |
| |
| /// Inbound Internet bytes when DHCPv6 PD enabled. |
| /// |
| /// Optional. |
| 16: inbound_internet_bytes uint64; |
| |
| /// Outbound Internet packets when DHCPv6 PD enabled. |
| /// |
| /// Optional. |
| 17: outbound_internet_packets uint64; |
| |
| /// Outbound Internet bytes when DHCPv6 PD enabled. |
| /// |
| /// Optional. |
| 18: outbound_internet_bytes uint64; |
| }; |
| |
| /// Represents the count of queries, responses, failures handled by upstream DNS server |
| /// |
| /// Derived from `otUpstreamDnsCounters`(https://openthread.io/reference/group/api-dnssd-server) |
| type UpstreamDnsCounters = table { |
| /// The number of queries forwarded |
| /// |
| /// Required. |
| 1: queries uint32; |
| |
| /// The number of responses forwarded |
| /// |
| /// Required. |
| 2: responses uint32; |
| |
| /// The number of upstream DNS failures |
| /// |
| /// Required. |
| 3: failures uint32; |
| }; |
| |
| /// Counters associated with the DNS-SD server. |
| type DnssdCounters = table { |
| /// The number of successful responses. |
| /// |
| /// Required. |
| 1: success_response uint32; |
| |
| /// The number of 'server failure' responses. |
| /// |
| /// Required. |
| 2: server_failure_response uint32; |
| |
| /// The number of 'format error' responses. |
| /// |
| /// Required. |
| 3: format_error_response uint32; |
| |
| /// The number of 'name error' responses. |
| /// |
| /// Required. |
| 4: name_error_response uint32; |
| |
| /// The number of 'not implemented' responses. |
| /// |
| /// Required. |
| 5: not_implemented_response uint32; |
| |
| /// The number of 'other' responses. |
| /// |
| /// Required. |
| 6: other_response uint32; |
| |
| /// The number of queries completely resolved by the local SRP server. |
| /// |
| /// Required. |
| 7: resolved_by_srp uint32; |
| |
| /// The counters of upstream DNS feature. |
| /// |
| /// Optional. |
| 8: upstream_dns_counters UpstreamDnsCounters; |
| }; |
| |
| /// Registration information about the SRP server. |
| type SrpServerRegistration = table { |
| /// Number of hosts/services that have not been deleted. |
| /// |
| /// Required. |
| 1: fresh_count uint32; |
| |
| /// Number of hosts/services that have been deleted. |
| /// |
| /// Required. |
| 2: deleted_count uint32; |
| |
| /// Total lease time. |
| /// |
| /// Required. |
| 3: lease_time_total zx.Duration; |
| |
| /// Total key lease time. |
| /// |
| /// Required. |
| 4: key_lease_time_total zx.Duration; |
| |
| /// Total remaining lease time. |
| /// |
| /// Required. |
| 5: remaining_lease_time_total zx.Duration; |
| |
| /// Total remaining key lease time. |
| /// |
| /// Required. |
| 6: remaining_key_lease_time_total zx.Duration; |
| }; |
| |
| /// State information about the SRP server. |
| type SrpServerInfo = table { |
| /// The operational state of the SRP server. |
| /// |
| /// Required. |
| 1: state @generated_name("SrpServerState") strict enum { |
| /// The server is disabled. |
| DISABLED = 1; |
| /// The server is enabled and running. |
| RUNNING = 2; |
| /// The server is enabled, but stopped. |
| STOPPED = 3; |
| }; |
| |
| /// The port the SRP server is listening to. |
| /// |
| /// Optional. The port may be omitted when `state` is `DISABLED`. |
| 2: port uint16; |
| |
| /// The address mode of the SRP server. |
| /// |
| /// Required. |
| 3: address_mode @generated_name("SrpServerAddressMode") strict enum { |
| /// Thread network data is published as unicast addresses. |
| UNICAST = 1; |
| /// Thread network data is published as anycast addresses. |
| ANYCAST = 2; |
| }; |
| |
| /// The response counters of the SRP server. |
| /// |
| /// Required. |
| 4: response_counters @generated_name("SrpServerResponseCounters") table { |
| /// The number of successful responses. |
| /// |
| /// Required. |
| 1: success_response uint32; |
| |
| /// The number of 'server failure' responses. |
| /// |
| /// Required. |
| 2: server_failure_response uint32; |
| |
| /// The number of 'format error' responses. |
| /// |
| /// Required. |
| 3: format_error_response uint32; |
| |
| /// The number of 'name exists' responses. |
| /// |
| /// Required. |
| 4: name_exists_response uint32; |
| |
| /// The number of 'refused' responses. |
| /// |
| /// Required. |
| 5: refused_response uint32; |
| |
| /// The number of 'other' responses. |
| /// |
| /// Required. |
| 6: other_response uint32; |
| }; |
| |
| /// The registration information of SRP hosts. |
| /// |
| /// Required. |
| 5: hosts_registration SrpServerRegistration; |
| |
| /// The registration information of SRP services. |
| /// |
| /// Required. |
| 6: services_registration SrpServerRegistration; |
| }; |
| |
| |
| /// Node information for Thread network leaders. |
| type LeaderData = table { |
| /// The network partition ID of the leader. |
| /// |
| /// Required. |
| 1: partition_id uint32; |
| |
| /// The weight of this leader on the network. |
| /// |
| /// Required. |
| 2: weight uint8; |
| |
| /// The full network data version. |
| /// |
| /// Required. |
| 3: network_data_version uint8; |
| |
| /// The stable network data version. |
| /// |
| /// Required. |
| 4: stable_network_data_version uint8; |
| |
| /// The router ID of the leader. |
| /// |
| /// Required. |
| 5: router_id uint8; |
| }; |
| |
| type Nat64State = flexible enum { |
| NAT64_STATE_UNSPECIFIED = 0; |
| NAT64_STATE_DISABLED = 1; |
| NAT64_STATE_NOT_RUNNING = 2; |
| NAT64_STATE_IDLE = 3; |
| NAT64_STATE_ACTIVE = 4; |
| }; |
| |
| /// Information about the state of components of NAT64 |
| type BorderRoutingNat64State = table { |
| /// prefix manager state |
| 1: prefix_manager_state Nat64State; |
| /// translator state |
| 2: translator_state Nat64State; |
| }; |
| |
| type Nat64TrafficCounters = table { |
| /// Number of packets translated from IPv4 to IPv6 |
| 1: ipv4_to_ipv6_packets uint64; |
| /// Sum of size of packets translated from IPv4 to IPv6 |
| 2: ipv4_to_ipv6_bytes uint64; |
| /// Number of packets translated from IPv6 to IPv4 |
| 3: ipv6_to_ipv4_packets uint64; |
| /// Sum of size of packets translated from IPv6 to IPv4 |
| 4: ipv6_to_ipv4_bytes uint64; |
| }; |
| |
| type Nat64ProtocolCounters = table { |
| /// TCP counters |
| 1: tcp Nat64TrafficCounters; |
| /// UDP counters |
| 2: udp Nat64TrafficCounters; |
| /// ICMP counters |
| 3: icmp Nat64TrafficCounters; |
| /// Total counters |
| 4: total Nat64TrafficCounters; |
| }; |
| |
| /// Information about the mappings of NAT64 translator |
| type Nat64Mapping = table { |
| /// The unique id for a mapping session |
| 1: mapping_id uint64; |
| /// The IPv4 address of the mapping |
| 2: ip4_addr vector<uint8>:MAX; |
| /// The IPv6 address of the mapping |
| 3: ip6_addr vector<uint8>:MAX; |
| /// Remaining time before expiry in milliseconds |
| 4: remaining_time_ms uint32; |
| /// Nat64 Counters |
| 5: counters Nat64ProtocolCounters; |
| }; |
| |
| type Nat64PacketCounters = table { |
| /// Number of packets translated from IPv4 to IPv6 |
| 1: ipv4_to_ipv6_packets uint64; |
| /// Number of packets translated from IPv6 to IPv4 |
| 2: ipv6_to_ipv4_packets uint64; |
| }; |
| |
| type Nat64ErrorCounters = table { |
| /// Packet drop for unknown reasons |
| 1: unknown Nat64PacketCounters; |
| /// Packet drop due to failed to parse the datagram |
| 2: illegal_packet Nat64PacketCounters; |
| /// Packet drop due to unsupported IP protocol |
| 3: unsupported_protocol Nat64PacketCounters; |
| /// Packet drop due to no mappings found or mapping pool exhausted |
| 4: no_mapping Nat64PacketCounters; |
| }; |
| |
| type Nat64Info = table { |
| /// NAT64 border routing state |
| 1: nat64_state BorderRoutingNat64State; |
| /// NAT64 mapping |
| 2: nat64_mappings vector<Nat64Mapping>:MAX; |
| /// NAT64 error counters |
| 3: nat64_error_counters Nat64ErrorCounters; |
| /// NAT64 protocol counters |
| 4: nat64_protocol_counters Nat64ProtocolCounters; |
| }; |
| |
| /// Represents a group of TREL related counters in the platform layer. |
| /// |
| /// Derived from [`otPlatTrelCounters`](https://openthread.io/reference/struct/ot-plat-trel-counters). |
| type TrelCounters = table { |
| /// Sum of size of packets received through TREL. |
| 1: rx_bytes uint64; |
| |
| /// Number of packets received through TREL. |
| 2: rx_packets uint64; |
| |
| /// Sum of size of packets successfully transmitted through TREL. |
| 3: tx_bytes uint64; |
| |
| /// Number of packet transmission failures through TREL. |
| 4: tx_failure uint64; |
| |
| /// Number of packets successfully transmitted through TREL. |
| 5: tx_packets uint64; |
| }; |
| |
| /// Represents the TREL peer related info. |
| /// |
| /// The info is available in OpenThread via https://openthread.io/reference/group/api-trel |
| /// More fields may be added per request. |
| type TrelPeersInfo = table { |
| /// Number of TREL peers for this Thread Border Router. |
| /// |
| /// Required. |
| 1: num_trel_peers uint16; |
| }; |
| |
| /// Represents the Upstream DNS state |
| type UpstreamDnsQueryState = flexible enum { |
| UPSTREAMDNS_QUERY_STATE_UNSPECIFIED = 0; |
| UPSTREAMDNS_QUERY_STATE_ENABLED = 1; |
| UPSTREAMDNS_QUERY_STATE_DISABLED = 2; |
| }; |
| |
| /// Represents the Upstream DNS related info. |
| /// |
| /// The info is available in OpenThread via https://openthread.io/reference/group/api-dnssd-server |
| /// More fields may be added per request. |
| type UpstreamDnsInfo = table { |
| /// State of upstream DNS query. |
| /// |
| /// Required. |
| 1: upstream_dns_query_state UpstreamDnsQueryState; |
| }; |
| |
| /// Platform counters related to processed RA info when DHCPv6 PD is enabled. |
| type PdProcessedRaInfo = table { |
| /// The number of platform generated RA handled by ApplyPlatformGeneratedRa. |
| /// |
| /// Required. |
| 1: num_platform_ra_received uint32; |
| |
| /// The number of PIO processed for adding OMR prefixes. |
| /// |
| /// Required. |
| 2: num_platform_pio_processed uint32; |
| |
| /// The duration since the last processed RA message. |
| /// |
| /// Required. |
| 3: last_platform_ra_msec uint32; |
| }; |
| |
| /// Represents the DHCPv6 PD state. |
| type Dhcp6PdState = flexible enum { |
| DHCP6_PD_STATE_UNSPECIFIED = 0; |
| |
| /// DHCPv6 PD is disabled on the border router. |
| DHCP6_PD_STATE_DISABLED = 1; |
| |
| /// DHCPv6 PD is enabled but won't try to request and publish a prefix. |
| DHCP6_PD_STATE_STOPPED = 2; |
| |
| /// DHCPv6 PD is enabled and will try to request and publish a prefix. |
| DHCP6_PD_STATE_RUNNING = 3; |
| }; |
| |
| /// DHCPv6 PD related info. |
| type Dhcp6PdInfo = table { |
| /// DHCPv6 PD state. |
| /// |
| /// Required. |
| 1: dhcp6pd_state Dhcp6PdState; |
| |
| /// DHCPv6 PD processed RA Info. |
| /// |
| /// Optional. |
| 2: pd_processed_ra_info PdProcessedRaInfo; |
| |
| /// DHCPv6 PD prefix. |
| /// |
| /// Optional. |
| // Choose the 32 bytes as SHA256 is used. |
| // Reference: https://github.com/openthread/ot-br-posix/pull/2110 |
| 3: hashed_pd_prefix vector<uint8>:32; |
| }; |
| |
| /// Link Metrics info of the neighbors. |
| type LinkMetricsEntry = table { |
| /// Link Margin value of the neighbor |
| 1: link_margin uint8; |
| /// RSSI value of the neighbor |
| 2: rssi int8; |
| }; |
| |
| /// LoWPAN Interface Telemetry Information. |
| /// |
| /// The fields in this table are used for providing low-level telemetry and information about the |
| /// LoWPAN interface for debugging and statistics purposes. |
| /// |
| /// All fields are optional. |
| type Telemetry = table { |
| /// The current RSSI of the radio. |
| 1: rssi fuchsia.lowpan.PowerDbm; |
| |
| /// The configured transmit power of the radio. |
| 2: tx_power fuchsia.lowpan.PowerDbm; |
| |
| /// The current channel index of the radio. |
| 3: channel_index fuchsia.lowpan.ChannelIndex; |
| |
| /// The partition ID of the currently associated network partition. |
| 4: partition_id uint32; |
| |
| /// The version string describing the underlying mesh stack. |
| 5: stack_version string:256; |
| |
| /// The version string describing the underlying radio control firmware. |
| 6: rcp_version string:256; |
| |
| /// Thread link mode byte. |
| /// |
| /// Only present on Thread networks. |
| /// |
| /// Defined by section 4.5.2 of the Thread 1.1.1 specification ("Mode TLV"). |
| 7: thread_link_mode uint8; |
| |
| /// The router ID of this device in the currently associated network. |
| /// |
| /// Only present on Thread networks. |
| 8: thread_router_id uint8; |
| |
| /// The current RLOC16 address of this node. |
| /// |
| /// Only present on Thread networks. |
| 9: thread_rloc uint16; |
| |
| /// The full network data version. |
| /// |
| /// Only present on Thread networks. |
| 10: thread_network_data_version uint8; |
| |
| /// The stable network data version. |
| /// |
| /// Only present on Thread networks. |
| 11: thread_stable_network_data_version uint8; |
| |
| /// The current Thread network data, in raw binary form, as defined in section 5.13 of |
| /// the Thread 1.1.1 specification. |
| /// |
| /// Only present on Thread networks. |
| 12: thread_network_data vector<uint8>:255; |
| |
| /// The current Thread stable network data, in raw binary form, as defined in section 5.13 of |
| /// the Thread 1.1.1 specification. |
| /// |
| /// Only present on Thread networks. |
| 13: thread_stable_network_data vector<uint8>:255; |
| |
| /// The counters associated with border routing messages. |
| /// |
| /// Only present on Thread networks. |
| 14: thread_border_routing_counters BorderRoutingCounters; |
| |
| /// The SRP server information. |
| /// |
| /// Only present on Thread networks. |
| 15: srp_server_info SrpServerInfo; |
| |
| /// The DNS-SD server counters. |
| /// |
| /// Only present on Thread networks. |
| 16: dnssd_counters DnssdCounters; |
| |
| /// The data associated with the leader of the currently associated Thread network. |
| /// |
| /// Only present on Thread networks. |
| 17: leader_data LeaderData; |
| |
| /// The uptime of the current instance. |
| /// |
| /// Required. |
| 18: uptime zx.Duration; |
| |
| /// Information about the NAT64 |
| /// |
| /// Only present on Thread networks. |
| 19: nat64_info Nat64Info; |
| |
| /// Information about the TREL interface, if available. |
| /// |
| /// Only present on Thread networks. |
| 20: trel_counters TrelCounters; |
| |
| /// Information about the TREL peers, if available. |
| /// |
| /// Only present on Thread networks. |
| 21: trel_peers_info TrelPeersInfo; |
| |
| /// Information about the Upstream DNS feature, if available. |
| /// |
| /// Only present on Thread networks. |
| 22: upstream_dns_info UpstreamDnsInfo; |
| |
| /// Information about the DHCPv6 PD feature, if available. |
| /// |
| /// Only present on Thread networks. |
| 23: dhcp6pd_info Dhcp6PdInfo; |
| |
| /// Link Metrics Manager related info, if available. |
| /// |
| /// Only present on Thread networks. |
| 24: link_metrics_entries vector<LinkMetricsEntry>:64; |
| }; |