| // 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. |
| library fuchsia.lowpan.device; |
| |
| using fuchsia.lowpan; |
| |
| /// Protocol for connecting to [`Counters`] on a LoWPAN |
| /// interface. |
| @discoverable |
| protocol CountersConnector { |
| /// Connects to the [`DeviceCounters`] 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. |
| Connect(resource struct { |
| name fuchsia.lowpan.InterfaceName; |
| server_end server_end:Counters; |
| }); |
| }; |
| |
| protocol Counters { |
| /// Returns a snapshot of the counters without resetting the counters. |
| Get() -> (struct { |
| counters AllCounters; |
| }); |
| |
| /// Resets all of the counters to zero returning the counter values |
| /// immediately prior. |
| Reset() -> (struct { |
| counters AllCounters; |
| }); |
| }; |
| |
| /// Describes all counters. |
| /// |
| /// May be empty if no counters are supported. |
| type AllCounters = table { |
| /// MAC Counters for TX |
| 1: mac_tx MacCounters; |
| |
| /// MAC Counters for RX |
| 2: mac_rx MacCounters; |
| |
| /// Coex Counters for TX |
| 3: coex_tx CoexCounters; |
| |
| /// Coex Counters for RX |
| 4: coex_rx CoexCounters; |
| |
| /// Coex stats may be incorrect due to internal counter overflow. |
| /// |
| /// Reset the counters to clear this flag. |
| 5: coex_saturated bool; |
| |
| /// IP Counters for TX. |
| @available(added=8) |
| 6: ip_tx IpCounters; |
| |
| /// IP Counters for RX. |
| @available(added=8) |
| 7: ip_rx IpCounters; |
| }; |
| |
| /// Counters associated with the MAC layer. |
| /// |
| /// Some counters are only valid for RX or TX. |
| type MacCounters = table { |
| /// The total number of frames |
| 1: total uint32; |
| |
| /// The total number of unicast frames |
| 2: unicast uint32; |
| |
| /// The total number of broadcast frames |
| 3: broadcast uint32; |
| |
| /// The number of frames with ack request |
| 4: ack_requested uint32; |
| |
| /// The number of frames that were acked |
| 5: acked uint32; |
| |
| /// The number of frames without ack request |
| 6: no_ack_requested uint32; |
| |
| /// The number of data frames |
| 7: data uint32; |
| |
| /// The number of data poll frames |
| 8: data_poll uint32; |
| |
| /// The number of beacon frames |
| 9: beacon uint32; |
| |
| /// The number of beacon request frames |
| 10: beacon_request uint32; |
| |
| /// The number of other types of frames |
| 11: other uint32; |
| |
| /// The number of frames filtered by address filter (allowlist |
| /// or denylist). |
| 12: address_filtered uint32; |
| |
| /// The number of retransmission attempts. |
| /// TX only. |
| 13: retries uint32; |
| |
| /// The number of expired retransmission retries for direct message. |
| /// TX only. |
| 14: direct_max_retry_expiry uint32; |
| |
| /// The number of expired retransmission retries for indirect message |
| /// TX only. |
| 15: indirect_max_retry_expiry uint32; |
| |
| /// The number of received frames filtered by destination check. |
| /// RX only. |
| 16: dest_addr_filtered uint32; |
| |
| /// The number of received duplicated frames. |
| /// RX only. |
| 17: duplicated uint32; |
| |
| /// The number of received frames with no or malformed content. |
| /// RX only. |
| 18: err_no_frame uint32; |
| |
| /// The number of received frames from unknown neighbor. |
| /// RX only. |
| 19: err_unknown_neighbor uint32; |
| |
| /// The number of received frames whose source address is invalid. |
| /// RX only. |
| 20: err_invalid_src_addr uint32; |
| |
| /// The number of received frames with security error. |
| /// RX only. |
| 21: err_sec uint32; |
| |
| /// The number of received frames with FCS error. |
| /// RX only. |
| 22: err_fcs uint32; |
| |
| /// The number of CCA failures. |
| /// TX only. |
| 23: err_cca uint32; |
| |
| /// The number of frame transmission failures due to abort error. |
| /// TX only. |
| 24: err_abort uint32; |
| |
| /// The number of frames that were dropped due to a busy channel. |
| /// TX only. |
| 25: err_busy_channel uint32; |
| |
| /// The number of frames that encountered some other error. |
| 26: err_other uint32; |
| }; |
| |
| /// Counters associated with RF Coexistance. |
| /// |
| /// Some counters are only valid for RX or TX. See [this][1] for more info. |
| /// |
| /// [1]: https://github.com/openthread/wpantund/blob/4ae4619/third_party/openthread/src/ncp/spinel.h#L1738-L1775 |
| type CoexCounters = table { |
| /// The number of requests |
| 1: requests uint64; |
| |
| /// The number of requests while grant was active |
| 2: grant_immediate uint64; |
| |
| /// The number of requests while grant was inactive |
| 3: grant_wait uint64; |
| |
| /// The number of requests while grant was inactive that were |
| /// ultimately granted |
| 4: grant_wait_activated uint64; |
| |
| /// The number of requests while grant was inactive that timed out |
| 5: grant_wait_timeout uint64; |
| |
| /// The number of requests that were in progress when grant was |
| /// deactivated |
| 6: grant_deactivated_during_request uint64; |
| |
| /// The number of requests that were not granted within 50µs |
| 7: delayed_grant uint64; |
| |
| /// The average time in µsec from request to grant |
| 8: avg_delay_request_to_grant_usec uint32; |
| |
| /// The number of requests that completed without receiving grant. |
| /// |
| /// Receive only. |
| 9: grant_none uint64; |
| }; |
| |
| /// Counters associated with the IP layer. |
| @available(added=8) |
| type IpCounters = table { |
| /// The number of IPv6 packets successfully transmitted/received. |
| 1: success uint32; |
| |
| /// The number of IPv6 packets failed to transmit/receive. |
| 2: failure uint32; |
| }; |