Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
488 lines (450 sloc) 20.3 KB
// Copyright (c) 2015, Plume Design Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// 3. Neither the name of the Plume Design Inc. nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL Plume Design Inc. BE LIABLE FOR ANY
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package sts;
enum RadioBandType {
BAND2G = 0;
BAND5G = 1;
BAND5GL = 2;
BAND5GU = 3;
}
enum SurveyType {
ON_CHANNEL = 0;
OFF_CHANNEL = 1;
FULL = 2;
}
enum NeighborType {
ONCHAN_SCAN = 0;
OFFCHAN_SCAN = 1;
FULL_SCAN = 2;
}
enum ChanWidth {
CHAN_WIDTH_UNKNOWN = 0;
CHAN_WIDTH_20MHZ = 1;
CHAN_WIDTH_40MHZ = 2;
CHAN_WIDTH_40MHZ_ABOVE = 3;
CHAN_WIDTH_40MHZ_BELOW = 4;
CHAN_WIDTH_80MHZ = 5;
CHAN_WIDTH_160MHZ = 6;
CHAN_WIDTH_80_PLUS_80MHZ = 7;
}
enum WmmAc {
WMM_AC_VO = 1;
WMM_AC_VI = 2;
WMM_AC_BE = 3;
WMM_AC_BK = 4;
}
enum BSEventType {
PROBE = 0;
CONNECT = 1;
DISCONNECT = 2;
BACKOFF = 3;
ACTIVITY = 4;
OVERRUN = 5;
BAND_STEERING_ATTEMPT = 6;
CLIENT_STEERING_ATTEMPT = 7;
CLIENT_STEERING_STARTED = 8;
CLIENT_STEERING_DISABLED = 9;
CLIENT_STEERING_EXPIRED = 10;
CLIENT_STEERING_FAILED = 11;
AUTH_BLOCK = 12;
CLIENT_KICKED = 13;
CLIENT_BS_BTM = 14;
CLIENT_STICKY_BTM = 15;
CLIENT_BTM = 16;
CLIENT_CAPABILITIES = 17;
CLIENT_BS_BTM_RETRY = 18;
CLIENT_STICKY_BTM_RETRY = 19;
CLIENT_BTM_RETRY = 20;
CLIENT_RRM_BCN_RPT = 21;
CLIENT_BS_KICK = 22;
CLIENT_STICKY_KICK = 23;
CLIENT_SPECULATIVE_KICK = 24;
CLIENT_DIRECTED_KICK = 25;
CLIENT_GHOST_DEVICE_KICK = 26;
}
enum DisconnectSrc {
LOCAL = 0;
REMOTE = 1;
}
enum DisconnectType {
DISASSOC = 0;
DEAUTH = 1;
}
// If optional ReportType is not present assume RAW
enum ReportType {
RAW = 0;
AVERAGE = 1;
HISTOGRAM = 2;
PERCENTILE = 3;
DIFF = 4;
}
enum FsType {
FS_TYPE_ROOTFS = 0;
FS_TYPE_TMPFS = 1;
}
message AvgType {
required uint32 avg = 1;
optional uint32 min = 2;
optional uint32 max = 3;
optional uint32 num = 4;
}
enum DiffType {
ADDED = 0;
REMOVED = 1;
}
////////////////////////////////////////////////////////////////////////////////
//
// Neighbor report: Report contains OBSS neighbor nodes/beacons retreived from
// scanning:
//
// - off-chan : neighbors retreived from scanning foreingh selected channels
// - on-chan : neighbors retreived from home channel
// - full : neighbors retreived from all channels current regulatory domain
//
////////////////////////////////////////////////////////////////////////////////
message Neighbor {
message NeighborBss {
required string bssid = 1;
optional string ssid = 2;
optional uint32 rssi = 3;
optional uint64 tsf = 4;
optional ChanWidth chan_width = 5;
required uint32 channel = 6;
optional DiffType status = 7;
}
required RadioBandType band = 1;
required NeighborType scan_type = 2;
optional uint64 timestamp_ms = 3;
repeated NeighborBss bss_list = 4;
optional ReportType report_type = 5;
}
////////////////////////////////////////////////////////////////////////////////
//
// Client report: Report contains rx and tx stats for a single station
//
// - Average stats : Averaged rx and tx stats
// - Extended stats : Detailed MCS, NSS and BW stats for tx and rx
//
////////////////////////////////////////////////////////////////////////////////
message Client {
message Stats {
optional uint64 rx_bytes = 1;
optional uint64 tx_bytes = 2;
optional uint64 rx_frames = 3;
optional uint64 tx_frames = 4;
optional uint64 rx_retries = 5;
optional uint64 tx_retries = 6;
optional uint64 rx_errors = 7;
optional uint64 tx_errors = 8;
optional double rx_rate = 9;
optional double tx_rate = 10;
optional uint32 rssi = 11;
}
message RxStats {
message ChainRSSI {
required uint32 chain = 1;
required uint32 ht = 2; /* pri20(20MHz), sec20(40MHz), sec40(80MHz), sec80(160MHz) */
optional uint32 rssi = 3;
}
required uint32 mcs = 1;
required uint32 nss = 2;
required uint32 bw = 3;
optional uint64 bytes = 4;
optional uint64 msdus = 5;
optional uint64 mpdus = 6;
optional uint64 ppdus = 7;
optional uint64 retries = 8;
optional uint64 errors = 9;
optional uint32 rssi = 10;
repeated ChainRSSI chain_rssi = 11;
}
message TxStats {
required uint32 mcs = 1;
required uint32 nss = 2;
required uint32 bw = 3;
optional uint64 bytes = 4;
optional uint64 msdus = 5;
optional uint64 mpdus = 6;
optional uint64 ppdus = 7;
optional uint64 retries = 8;
optional uint64 errors = 9;
}
message TidStats {
message Sojourn {
required WmmAc ac = 1; /* Acess category */
required uint32 tid = 2; /* Traffic identifier queue number */
optional uint32 ewma_time_ms = 3; /* Moving average value based on last couple of transmitted msdus */
optional uint32 sum_time_ms = 4; /* Delta of cumulative msdus times over interval */
optional uint32 num_msdus = 5; /* Number of msdus in given interval */
}
repeated Sojourn sojourn = 4;
optional uint32 offset_ms = 5;
}
required string mac_address = 1;
optional string ssid = 2;
optional bool connected = 3;
optional uint32 connect_count = 4;
optional uint32 disconnect_count = 5;
optional uint32 connect_offset_ms = 6;
optional uint32 disconnect_offset_ms = 7;
optional uint32 duration_ms = 8;
optional Stats stats = 9;
repeated RxStats rx_stats = 10;
repeated TxStats tx_stats = 11;
repeated TidStats tid_stats = 12;
optional uint32 uapsd = 13;
}
message ClientReport {
required RadioBandType band = 1;
optional uint64 timestamp_ms = 2;
repeated Client client_list = 3;
required uint32 channel = 4;
}
////////////////////////////////////////////////////////////////////////////////
//
// Survey report : Chanel utilization. Report contains samples
//
// error rxbusy and obssbussy represent rx samples that were errorenous where:
// - rxbusy is rx time with decoded BSSIS
// - obssbusy is the time from the undecoded rx error samples
//
////////////////////////////////////////////////////////////////////////////////
message Survey {
message SurveySample {
required uint32 channel = 1;
optional uint32 duration_ms = 2;
optional uint32 total_count = 3;
optional uint32 sample_count = 4;
optional uint32 busy = 5; /* Busy = Rx + Tx + Interference */
optional uint32 busy_tx = 6; /* Tx */
optional uint32 busy_rx = 7; /* Rx = Rx_obss + Rx_errr (self and obss errors) */
optional uint32 busy_self = 8; /* Rx_self (derived from succesful Rx frames)*/
optional uint32 offset_ms = 9;
optional uint32 busy_ext = 10; /* 40MHz extention channel busy */
}
message SurveyAvg {
required uint32 channel = 1;
optional AvgType busy = 2; /* Busy = Rx + Tx + Interference */
optional AvgType busy_tx = 3; /* Tx */
optional AvgType busy_rx = 4; /* Rx = Rx_obss + Rx_errr (self and obss errors) */
optional AvgType busy_self = 5; /* Rx_self (derived from succesful Rx frames)*/
optional AvgType busy_ext = 6; /* 40MHz extention channel busy */
}
required RadioBandType band = 1;
required SurveyType survey_type = 2;
optional uint64 timestamp_ms = 3;
repeated SurveySample survey_list = 4;
repeated SurveyAvg survey_avg = 5;
optional ReportType report_type = 6;
}
////////////////////////////////////////////////////////////////////////////////
//
// Capacity report : Tx sampling of queues (MAC) and survey (PHY) samples
//
////////////////////////////////////////////////////////////////////////////////
message Capacity {
message QueueSample {
optional uint32 busy_tx = 1;
optional uint32 bytes_tx = 2;
optional uint32 sample_count = 3;
optional uint32 Vo_count = 4; /* Video */
optional uint32 Vi_count = 5; /* Voice */
optional uint32 Be_count = 6; /* Best Effort */
optional uint32 Bk_count = 7; /* Background */
optional uint32 Bcn_count = 8; /* Beacon */
optional uint32 Cab_count = 9; /* Content After Beacon */
optional uint32 offset_ms = 10;
}
required RadioBandType band = 1;
optional uint64 timestamp_ms = 2;
repeated QueueSample queue_list = 3;
}
////////////////////////////////////////////////////////////////////////////////
//
// Device status report
//
////////////////////////////////////////////////////////////////////////////////
message Device {
message LoadAvg {
optional double one = 1;
optional double five = 2;
optional double fifteen = 3;
}
message RadioTemp {
optional RadioBandType band = 1;
optional int32 value = 2;
}
optional LoadAvg load = 1;
repeated RadioTemp radio_temp = 2;
optional uint64 timestamp_ms = 3;
optional uint32 uptime = 4;
message Thermal {
message RadioTxChainMask{
optional RadioBandType band = 1;
optional uint32 value = 2;
}
repeated RadioTxChainMask txchainmask = 1;
optional uint32 fan_rpm = 2;
optional uint64 timestamp_ms = 3;
}
repeated Thermal thermal_stats = 5;
// Memory utilization: [kB]
message MemUtil {
required uint32 mem_total = 1;
required uint32 mem_used = 2;
optional uint32 swap_total = 3;
optional uint32 swap_used = 4;
}
optional MemUtil mem_util = 6;
// Filesystem utilization per FS-type: [kB]
message FsUtil {
required FsType fs_type = 1;
required uint32 fs_total = 2;
required uint32 fs_used = 3;
}
repeated FsUtil fs_util = 7;
// CPU utilization: [percent]:
message CpuUtil {
optional uint32 cpu_util = 1;
}
optional CpuUtil cpuUtil = 8;
// Per-process CPU/MEM utilization:
message PerProcessUtil {
required uint32 pid = 1;
required string cmd = 2;
/* for cpu: [%CPU] [0..100]; for mem: [kB] */
required uint32 util = 3;
}
// top / most CPU/MEM consuming processes:
repeated PerProcessUtil ps_cpu_util = 9;
repeated PerProcessUtil ps_mem_util = 10;
}
////////////////////////////////////////////////////////////////////////////////
//
// Band Steering Client report
//
// - Contains band steering stats per client per station
//
////////////////////////////////////////////////////////////////////////////////
message BSClient {
message BSEvent {
required BSEventType type = 1;
required uint32 offset_ms = 2;
optional uint32 rssi = 3;
optional bool probe_bcast = 4;
optional bool probe_blocked = 5;
optional DisconnectSrc disconnect_src = 6;
optional DisconnectType disconnect_type = 7;
optional uint32 disconnect_reason = 8;
optional bool backoff_enabled = 9;
optional bool active = 10;
optional bool rejected = 11;
optional bool is_BTM_supported = 12;
optional bool is_RRM_supported = 13;
optional uint32 max_chwidth = 14;
optional uint32 max_streams = 15;
optional uint32 phy_mode = 16;
optional uint32 max_mcs = 17;
optional uint32 max_txpower = 18;
optional bool is_static_smps = 19;
optional bool is_mu_mimo_supported = 20;
optional bool band_cap_2G = 21;
optional bool band_cap_5G = 22;
optional bool rrm_caps_link_meas = 23;
optional bool rrm_caps_neigh_rpt = 24;
optional bool rrm_caps_bcn_rpt_passive = 25;
optional bool rrm_caps_bcn_rpt_active = 26;
optional bool rrm_caps_bcn_rpt_table = 27;
optional bool rrm_caps_lci_meas = 28;
optional bool rrm_caps_ftm_range_rpt = 29;
}
message BSBandReport {
required RadioBandType band = 1;
optional bool connected = 2;
optional uint32 rejects = 3;
optional uint32 connects = 4;
optional uint32 disconnects = 5;
optional uint32 activity_changes = 6;
optional uint32 steering_success_cnt = 7;
optional uint32 steering_fail_cnt = 8;
optional uint32 steering_kick_cnt = 9;
optional uint32 sticky_kick_cnt = 10;
optional uint32 probe_bcast_cnt = 11;
optional uint32 probe_bcast_blocked = 12;
optional uint32 probe_direct_cnt = 13;
optional uint32 probe_direct_blocked = 14;
repeated BSEvent event_list = 15;
}
required string mac_address = 1;
repeated BSBandReport bs_band_report = 2;
}
message BSReport {
required uint64 timestamp_ms = 1;
repeated BSClient clients = 2;
}
////////////////////////////////////////////////////////////////////////////////
//
// Band Steering Client report
//
// - Contains band steering stats per client per station
//
////////////////////////////////////////////////////////////////////////////////
message RssiPeer {
enum RssiSource {
CLIENT = 0;
PROBE = 1;
NEIGHBOR = 2;
}
message RssiSample {
required uint32 rssi = 1;
optional uint32 offset_ms = 2;
}
required string mac_address = 1;
optional RssiSource rssi_source = 2;
repeated RssiSample rssi_list = 3;
optional AvgType rssi_avg = 4;
optional uint64 rx_ppdus = 5;
optional uint64 tx_ppdus = 6;
}
message RssiReport {
required RadioBandType band = 1;
required ReportType report_type = 2;
optional uint64 timestamp_ms = 3;
repeated RssiPeer peer_list = 4;
}
////////////////////////////////////////////////////////////////////////////////
//
// Overall report that might contain all individual stats reports
//
////////////////////////////////////////////////////////////////////////////////
message Report {
required string nodeID = 1;
repeated Survey survey = 2;
repeated Capacity capacity = 3;
repeated Neighbor neighbors = 4;
repeated ClientReport clients = 5;
repeated Device device = 6;
repeated BSReport bs_report = 7;
repeated RssiReport rssi_report = 8;
}
You can’t perform that action at this time.