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

using fuchsia.wlan.ieee80211 as ieee80211;

type Peers = struct {
    addrs vector<ieee80211.MacAddr>;
};

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

type Peer = struct {
    addr ieee80211.MacAddr;
    max_tp uint16;
    max_probability uint16;
    basic_highest uint16;
    basic_max_probability uint16;
    probes uint64;
    entries vector<StatsEntry>;
};
// LINT.ThenChange(//garnet/drivers/wlan/wlan/minstrel.h)
