// Copyright 2018 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.wlan.stats;

struct Counter {
    uint64 count;
    string name;
};

struct PacketCounter {
    Counter in;
    Counter out;
    Counter drop;
    Counter in_bytes;
    Counter out_bytes;
    Counter drop_bytes;
};

// LINT.IfChange
struct DispatcherStats {
    PacketCounter any_packet;
    PacketCounter mgmt_frame;
    PacketCounter ctrl_frame;
    PacketCounter data_frame;
};

const uint8 RSSI_BINS = 129;

// RssiStats count the occurrence of the RSSIs.
// RSSI value r's occurrence is counted in the bin[-r],
// where r is defined in [-128, 0] in dBm.
struct RssiStats {
    // TODO(alexandrew): Change this to array.
    vector<uint64>:RSSI_BINS hist;
};

struct ClientMlmeStats {
    PacketCounter svc_msg;
    PacketCounter data_frame;
    PacketCounter mgmt_frame;
    PacketCounter tx_frame;
    PacketCounter rx_frame;
    RssiStats assoc_data_rssi;
    RssiStats beacon_rssi;
};

struct ApMlmeStats {
    PacketCounter not_used;
};

// LINT.ThenChange(//src/connectivity/wlan/lib/common/cpp/include/wlan/common/stats.h)

union MlmeStats {
    ClientMlmeStats client_mlme_stats;
    ApMlmeStats ap_mlme_stats;
};

struct IfaceStats {
    DispatcherStats dispatcher_stats;
    MlmeStats? mlme_stats;
};
