// 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.minstrel;

struct Peers {
    vector<vector<uint8>:6> peers;
};

// LINT.IfChange
struct StatsEntry {
    uint16 tx_vector_idx;
    string tx_vec_desc;
    uint64 success_cur;
    uint64 attempts_cur;
    float32 probability;
    float32 cur_tp;
    uint64 success_total;
    uint64 attempts_total;
    uint64 probes_total;
    uint8 probe_cycles_skipped;
};

struct Peer {
    array<uint8>:6 mac_addr;
    uint16 max_tp;
    uint16 max_probability;
    uint16 basic_highest;
    uint16 basic_max_probability;
    uint64 probes;
    vector<StatsEntry> entries;
};
// LINT.ThenChange(//garnet/drivers/wlan/wlan/minstrel.h)
