// 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<bytes: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)
