645 lines
31 KiB
Go
645 lines
31 KiB
Go
package unifi
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// UAP represents all the data from the Ubiquiti Controller for a Unifi Access Point.
|
|
// This was auto generated then edited by hand to get all the data types right.
|
|
type UAP struct {
|
|
site *Site
|
|
SourceName string `json:"-"`
|
|
ID string `json:"_id"`
|
|
Adopted FlexBool `json:"adopted"`
|
|
AntennaTable []struct {
|
|
Default FlexBool `json:"default"`
|
|
ID FlexInt `json:"id"`
|
|
Name string `json:"name"`
|
|
Wifi0Gain FlexInt `json:"wifi0_gain"`
|
|
Wifi1Gain FlexInt `json:"wifi1_gain"`
|
|
} `json:"antenna_table"`
|
|
BandsteeringMode string `json:"bandsteering_mode,omitempty"`
|
|
BoardRev int `json:"board_rev"`
|
|
Cfgversion string `json:"cfgversion"`
|
|
ConfigNetwork struct {
|
|
Type string `json:"type"`
|
|
IP string `json:"ip"`
|
|
} `json:"config_network"`
|
|
CountrycodeTable []int `json:"countrycode_table"`
|
|
EthernetTable []struct {
|
|
Mac string `json:"mac"`
|
|
NumPort FlexInt `json:"num_port"`
|
|
Name string `json:"name"`
|
|
} `json:"ethernet_table"`
|
|
FwCaps int `json:"fw_caps"`
|
|
HasEth1 FlexBool `json:"has_eth1"`
|
|
HasSpeaker FlexBool `json:"has_speaker"`
|
|
InformIP string `json:"inform_ip"`
|
|
InformURL string `json:"inform_url"`
|
|
IP string `json:"ip"`
|
|
LedOverride string `json:"led_override"`
|
|
Mac string `json:"mac"`
|
|
MeshStaVapEnabled FlexBool `json:"mesh_sta_vap_enabled"`
|
|
Model string `json:"model"`
|
|
Name string `json:"name"`
|
|
OutdoorModeOverride string `json:"outdoor_mode_override"`
|
|
PortTable []Port `json:"port_table"`
|
|
RadioTable RadioTable `json:"radio_table"`
|
|
ScanRadioTable []interface{} `json:"scan_radio_table"`
|
|
Serial string `json:"serial"`
|
|
SiteID string `json:"site_id"`
|
|
SiteName string `json:"-"`
|
|
Type string `json:"type"`
|
|
Version string `json:"version"`
|
|
VwireTable []interface{} `json:"vwire_table"`
|
|
WifiCaps int `json:"wifi_caps"`
|
|
WlangroupIDNa string `json:"wlangroup_id_na"`
|
|
WlangroupIDNg string `json:"wlangroup_id_ng"`
|
|
RequiredVersion string `json:"required_version"`
|
|
HwCaps int `json:"hw_caps"`
|
|
Unsupported FlexBool `json:"unsupported"`
|
|
UnsupportedReason FlexInt `json:"unsupported_reason"`
|
|
SysErrorCaps int `json:"sys_error_caps"`
|
|
HasFan FlexBool `json:"has_fan"`
|
|
HasTemperature FlexBool `json:"has_temperature"`
|
|
DeviceID string `json:"device_id"`
|
|
State FlexInt `json:"state"`
|
|
LastSeen FlexInt `json:"last_seen"`
|
|
Upgradable FlexBool `json:"upgradable"`
|
|
AdoptableWhenUpgraded FlexBool `json:"adoptable_when_upgraded"`
|
|
Rollupgrade FlexBool `json:"rollupgrade"`
|
|
KnownCfgversion string `json:"known_cfgversion"`
|
|
Uptime FlexInt `json:"uptime"`
|
|
UUptime FlexInt `json:"_uptime"`
|
|
Locating FlexBool `json:"locating"`
|
|
ConnectRequestIP string `json:"connect_request_ip"`
|
|
ConnectRequestPort string `json:"connect_request_port"`
|
|
SysStats SysStats `json:"sys_stats"`
|
|
SystemStats SystemStats `json:"system-stats"`
|
|
SSHSessionTable []interface{} `json:"ssh_session_table"`
|
|
Scanning FlexBool `json:"scanning"`
|
|
SpectrumScanning FlexBool `json:"spectrum_scanning"`
|
|
GuestToken string `json:"guest_token"`
|
|
Meshv3PeerMac string `json:"meshv3_peer_mac"`
|
|
Satisfaction FlexInt `json:"satisfaction"`
|
|
Isolated FlexBool `json:"isolated"`
|
|
RadioTableStats RadioTableStats `json:"radio_table_stats"`
|
|
Uplink struct {
|
|
FullDuplex FlexBool `json:"full_duplex"`
|
|
IP string `json:"ip"`
|
|
Mac string `json:"mac"`
|
|
MaxVlan int `json:"max_vlan"`
|
|
Name string `json:"name"`
|
|
Netmask string `json:"netmask"`
|
|
NumPort int `json:"num_port"`
|
|
RxBytes FlexInt `json:"rx_bytes"`
|
|
RxDropped FlexInt `json:"rx_dropped"`
|
|
RxErrors FlexInt `json:"rx_errors"`
|
|
RxMulticast FlexInt `json:"rx_multicast"`
|
|
RxPackets FlexInt `json:"rx_packets"`
|
|
Speed FlexInt `json:"speed"`
|
|
TxBytes FlexInt `json:"tx_bytes"`
|
|
TxDropped FlexInt `json:"tx_dropped"`
|
|
TxErrors FlexInt `json:"tx_errors"`
|
|
TxPackets FlexInt `json:"tx_packets"`
|
|
Up FlexBool `json:"up"`
|
|
MaxSpeed FlexInt `json:"max_speed"`
|
|
Type string `json:"type"`
|
|
TxBytesR FlexInt `json:"tx_bytes-r"`
|
|
RxBytesR FlexInt `json:"rx_bytes-r"`
|
|
UplinkMac string `json:"uplink_mac"`
|
|
UplinkRemotePort int `json:"uplink_remote_port"`
|
|
} `json:"uplink"`
|
|
VapTable VapTable `json:"vap_table"`
|
|
DownlinkTable []struct {
|
|
PortIdx int `json:"port_idx"`
|
|
Speed int `json:"speed"`
|
|
FullDuplex bool `json:"full_duplex"`
|
|
Mac string `json:"mac"`
|
|
} `json:"downlink_table,omitempty"`
|
|
VwireVapTable []interface{} `json:"vwire_vap_table"`
|
|
BytesD FlexInt `json:"bytes-d"`
|
|
TxBytesD FlexInt `json:"tx_bytes-d"`
|
|
RxBytesD FlexInt `json:"rx_bytes-d"`
|
|
BytesR FlexInt `json:"bytes-r"`
|
|
LastUplink struct {
|
|
UplinkMac string `json:"uplink_mac"`
|
|
UplinkRemotePort int `json:"uplink_remote_port"`
|
|
} `json:"last_uplink"`
|
|
Stat UAPStat `json:"stat"`
|
|
TxBytes FlexInt `json:"tx_bytes"`
|
|
RxBytes FlexInt `json:"rx_bytes"`
|
|
Bytes FlexInt `json:"bytes"`
|
|
VwireEnabled FlexBool `json:"vwireEnabled"`
|
|
UplinkTable []interface{} `json:"uplink_table"`
|
|
NumSta FlexInt `json:"num_sta"`
|
|
UserNumSta FlexInt `json:"user-num_sta"`
|
|
GuestNumSta FlexInt `json:"guest-num_sta"`
|
|
TwoPhaseAdopt FlexBool `json:"two_phase_adopt,omitempty"`
|
|
}
|
|
|
|
// UAPStat holds the "stat" data for an access point.
|
|
// This is split out because of a JSON data format change from 5.10 to 5.11.
|
|
type UAPStat struct {
|
|
*Ap
|
|
}
|
|
|
|
// Ap is a subtype of UAPStat to make unmarshalling of different controller versions possible.
|
|
type Ap struct {
|
|
SiteID string `json:"site_id"`
|
|
O string `json:"o"`
|
|
Oid string `json:"oid"`
|
|
Ap string `json:"ap"`
|
|
Time FlexInt `json:"time"`
|
|
Datetime time.Time `json:"datetime"`
|
|
Bytes FlexInt `json:"bytes"`
|
|
Duration FlexInt `json:"duration"`
|
|
WifiTxDropped FlexInt `json:"wifi_tx_dropped"`
|
|
RxErrors FlexInt `json:"rx_errors"`
|
|
RxDropped FlexInt `json:"rx_dropped"`
|
|
RxFrags FlexInt `json:"rx_frags"`
|
|
RxCrypts FlexInt `json:"rx_crypts"`
|
|
TxPackets FlexInt `json:"tx_packets"`
|
|
TxBytes FlexInt `json:"tx_bytes"`
|
|
TxErrors FlexInt `json:"tx_errors"`
|
|
TxDropped FlexInt `json:"tx_dropped"`
|
|
TxRetries FlexInt `json:"tx_retries"`
|
|
RxPackets FlexInt `json:"rx_packets"`
|
|
RxBytes FlexInt `json:"rx_bytes"`
|
|
UserRxDropped FlexInt `json:"user-rx_dropped"`
|
|
GuestRxDropped FlexInt `json:"guest-rx_dropped"`
|
|
UserRxErrors FlexInt `json:"user-rx_errors"`
|
|
GuestRxErrors FlexInt `json:"guest-rx_errors"`
|
|
UserRxPackets FlexInt `json:"user-rx_packets"`
|
|
GuestRxPackets FlexInt `json:"guest-rx_packets"`
|
|
UserRxBytes FlexInt `json:"user-rx_bytes"`
|
|
GuestRxBytes FlexInt `json:"guest-rx_bytes"`
|
|
UserRxCrypts FlexInt `json:"user-rx_crypts"`
|
|
GuestRxCrypts FlexInt `json:"guest-rx_crypts"`
|
|
UserRxFrags FlexInt `json:"user-rx_frags"`
|
|
GuestRxFrags FlexInt `json:"guest-rx_frags"`
|
|
UserTxPackets FlexInt `json:"user-tx_packets"`
|
|
GuestTxPackets FlexInt `json:"guest-tx_packets"`
|
|
UserTxBytes FlexInt `json:"user-tx_bytes"`
|
|
GuestTxBytes FlexInt `json:"guest-tx_bytes"`
|
|
UserTxErrors FlexInt `json:"user-tx_errors"`
|
|
GuestTxErrors FlexInt `json:"guest-tx_errors"`
|
|
UserTxDropped FlexInt `json:"user-tx_dropped"`
|
|
GuestTxDropped FlexInt `json:"guest-tx_dropped"`
|
|
UserTxRetries FlexInt `json:"user-tx_retries"`
|
|
GuestTxRetries FlexInt `json:"guest-tx_retries"`
|
|
MacFilterRejections FlexInt `json:"mac_filter_rejections"`
|
|
UserMacFilterRejections FlexInt `json:"user-mac_filter_rejections"`
|
|
GuestMacFilterRejections FlexInt `json:"guest-mac_filter_rejections"`
|
|
WifiTxAttempts FlexInt `json:"wifi_tx_attempts"`
|
|
UserWifiTxDropped FlexInt `json:"user-wifi_tx_dropped"`
|
|
GuestWifiTxDropped FlexInt `json:"guest-wifi_tx_dropped"`
|
|
UserWifiTxAttempts FlexInt `json:"user-wifi_tx_attempts"`
|
|
GuestWifiTxAttempts FlexInt `json:"guest-wifi_tx_attempts"`
|
|
|
|
// UAP-AC-PRO names, others may differ.
|
|
/* These are all in VAP TABLE */
|
|
/*
|
|
GuestWifi0RxPackets FlexInt `json:"guest-wifi0-rx_packets"`
|
|
GuestWifi1RxPackets FlexInt `json:"guest-wifi1-rx_packets"`
|
|
UserWifi1RxPackets FlexInt `json:"user-wifi1-rx_packets"`
|
|
UserWifi0RxPackets FlexInt `json:"user-wifi0-rx_packets"`
|
|
Wifi0RxPackets FlexInt `json:"wifi0-rx_packets"`
|
|
Wifi1RxPackets FlexInt `json:"wifi1-rx_packets"`
|
|
GuestWifi0RxBytes FlexInt `json:"guest-wifi0-rx_bytes"`
|
|
GuestWifi1RxBytes FlexInt `json:"guest-wifi1-rx_bytes"`
|
|
UserWifi1RxBytes FlexInt `json:"user-wifi1-rx_bytes"`
|
|
UserWifi0RxBytes FlexInt `json:"user-wifi0-rx_bytes"`
|
|
Wifi0RxBytes FlexInt `json:"wifi0-rx_bytes"`
|
|
Wifi1RxBytes FlexInt `json:"wifi1-rx_bytes"`
|
|
GuestWifi0RxErrors FlexInt `json:"guest-wifi0-rx_errors"`
|
|
GuestWifi1RxErrors FlexInt `json:"guest-wifi1-rx_errors"`
|
|
UserWifi1RxErrors FlexInt `json:"user-wifi1-rx_errors"`
|
|
UserWifi0RxErrors FlexInt `json:"user-wifi0-rx_errors"`
|
|
Wifi0RxErrors FlexInt `json:"wifi0-rx_errors"`
|
|
Wifi1RxErrors FlexInt `json:"wifi1-rx_errors"`
|
|
GuestWifi0RxDropped FlexInt `json:"guest-wifi0-rx_dropped"`
|
|
GuestWifi1RxDropped FlexInt `json:"guest-wifi1-rx_dropped"`
|
|
UserWifi1RxDropped FlexInt `json:"user-wifi1-rx_dropped"`
|
|
UserWifi0RxDropped FlexInt `json:"user-wifi0-rx_dropped"`
|
|
Wifi0RxDropped FlexInt `json:"wifi0-rx_dropped"`
|
|
Wifi1RxDropped FlexInt `json:"wifi1-rx_dropped"`
|
|
GuestWifi0RxCrypts FlexInt `json:"guest-wifi0-rx_crypts"`
|
|
GuestWifi1RxCrypts FlexInt `json:"guest-wifi1-rx_crypts"`
|
|
UserWifi1RxCrypts FlexInt `json:"user-wifi1-rx_crypts"`
|
|
UserWifi0RxCrypts FlexInt `json:"user-wifi0-rx_crypts"`
|
|
Wifi0RxCrypts FlexInt `json:"wifi0-rx_crypts"`
|
|
Wifi1RxCrypts FlexInt `json:"wifi1-rx_crypts"`
|
|
GuestWifi0RxFrags FlexInt `json:"guest-wifi0-rx_frags"`
|
|
GuestWifi1RxFrags FlexInt `json:"guest-wifi1-rx_frags"`
|
|
UserWifi1RxFrags FlexInt `json:"user-wifi1-rx_frags"`
|
|
UserWifi0RxFrags FlexInt `json:"user-wifi0-rx_frags"`
|
|
Wifi0RxFrags FlexInt `json:"wifi0-rx_frags"`
|
|
Wifi1RxFrags FlexInt `json:"wifi1-rx_frags"`
|
|
GuestWifi0TxPackets FlexInt `json:"guest-wifi0-tx_packets"`
|
|
GuestWifi1TxPackets FlexInt `json:"guest-wifi1-tx_packets"`
|
|
UserWifi1TxPackets FlexInt `json:"user-wifi1-tx_packets"`
|
|
UserWifi0TxPackets FlexInt `json:"user-wifi0-tx_packets"`
|
|
Wifi0TxPackets FlexInt `json:"wifi0-tx_packets"`
|
|
Wifi1TxPackets FlexInt `json:"wifi1-tx_packets"`
|
|
GuestWifi0TxBytes FlexInt `json:"guest-wifi0-tx_bytes"`
|
|
GuestWifi1TxBytes FlexInt `json:"guest-wifi1-tx_bytes"`
|
|
UserWifi1TxBytes FlexInt `json:"user-wifi1-tx_bytes"`
|
|
UserWifi0TxBytes FlexInt `json:"user-wifi0-tx_bytes"`
|
|
Wifi0TxBytes FlexInt `json:"wifi0-tx_bytes"`
|
|
Wifi1TxBytes FlexInt `json:"wifi1-tx_bytes"`
|
|
GuestWifi0TxErrors FlexInt `json:"guest-wifi0-tx_errors"`
|
|
GuestWifi1TxErrors FlexInt `json:"guest-wifi1-tx_errors"`
|
|
UserWifi1TxErrors FlexInt `json:"user-wifi1-tx_errors"`
|
|
UserWifi0TxErrors FlexInt `json:"user-wifi0-tx_errors"`
|
|
Wifi0TxErrors FlexInt `json:"wifi0-tx_errors"`
|
|
Wifi1TxErrors FlexInt `json:"wifi1-tx_errors"`
|
|
GuestWifi0TxDropped FlexInt `json:"guest-wifi0-tx_dropped"`
|
|
GuestWifi1TxDropped FlexInt `json:"guest-wifi1-tx_dropped"`
|
|
UserWifi1TxDropped FlexInt `json:"user-wifi1-tx_dropped"`
|
|
UserWifi0TxDropped FlexInt `json:"user-wifi0-tx_dropped"`
|
|
Wifi0TxDropped FlexInt `json:"wifi0-tx_dropped"`
|
|
Wifi1TxDropped FlexInt `json:"wifi1-tx_dropped"`
|
|
GuestWifi0TxRetries FlexInt `json:"guest-wifi0-tx_retries"`
|
|
GuestWifi1TxRetries FlexInt `json:"guest-wifi1-tx_retries"`
|
|
UserWifi1TxRetries FlexInt `json:"user-wifi1-tx_retries"`
|
|
UserWifi0TxRetries FlexInt `json:"user-wifi0-tx_retries"`
|
|
Wifi0TxRetries FlexInt `json:"wifi0-tx_retries"`
|
|
Wifi1TxRetries FlexInt `json:"wifi1-tx_retries"`
|
|
GuestWifi0MacFilterRejections FlexInt `json:"guest-wifi0-mac_filter_rejections"`
|
|
GuestWifi1MacFilterRejections FlexInt `json:"guest-wifi1-mac_filter_rejections"`
|
|
UserWifi1MacFilterRejections FlexInt `json:"user-wifi1-mac_filter_rejections"`
|
|
UserWifi0MacFilterRejections FlexInt `json:"user-wifi0-mac_filter_rejections"`
|
|
Wifi0MacFilterRejections FlexInt `json:"wifi0-mac_filter_rejections"`
|
|
Wifi1MacFilterRejections FlexInt `json:"wifi1-mac_filter_rejections"`
|
|
GuestWifi0WifiTxAttempts FlexInt `json:"guest-wifi0-wifi_tx_attempts"`
|
|
GuestWifi1WifiTxAttempts FlexInt `json:"guest-wifi1-wifi_tx_attempts"`
|
|
UserWifi1WifiTxAttempts FlexInt `json:"user-wifi1-wifi_tx_attempts"`
|
|
UserWifi0WifiTxAttempts FlexInt `json:"user-wifi0-wifi_tx_attempts"`
|
|
Wifi0WifiTxAttempts FlexInt `json:"wifi0-wifi_tx_attempts"`
|
|
Wifi1WifiTxAttempts FlexInt `json:"wifi1-wifi_tx_attempts"`
|
|
GuestWifi0WifiTxDropped FlexInt `json:"guest-wifi0-wifi_tx_dropped"`
|
|
GuestWifi1WifiTxDropped FlexInt `json:"guest-wifi1-wifi_tx_dropped"`
|
|
UserWifi1WifiTxDropped FlexInt `json:"user-wifi1-wifi_tx_dropped"`
|
|
UserWifi0WifiTxDropped FlexInt `json:"user-wifi0-wifi_tx_dropped"`
|
|
Wifi0WifiTxDropped FlexInt `json:"wifi0-wifi_tx_dropped"`
|
|
Wifi1WifiTxDropped FlexInt `json:"wifi1-wifi_tx_dropped"`
|
|
// UDM Names
|
|
GuestRa0RxPackets FlexInt `json:"guest-ra0-rx_packets"`
|
|
UserRa0RxPackets FlexInt `json:"user-ra0-rx_packets"`
|
|
Ra0RxPackets FlexInt `json:"ra0-rx_packets"`
|
|
GuestRa0RxBytes FlexInt `json:"guest-ra0-rx_bytes"`
|
|
UserRa0RxBytes FlexInt `json:"user-ra0-rx_bytes"`
|
|
Ra0RxBytes FlexInt `json:"ra0-rx_bytes"`
|
|
GuestRa0RxErrors FlexInt `json:"guest-ra0-rx_errors"`
|
|
UserRa0RxErrors FlexInt `json:"user-ra0-rx_errors"`
|
|
Ra0RxErrors FlexInt `json:"ra0-rx_errors"`
|
|
GuestRa0RxDropped FlexInt `json:"guest-ra0-rx_dropped"`
|
|
UserRa0RxDropped FlexInt `json:"user-ra0-rx_dropped"`
|
|
Ra0RxDropped FlexInt `json:"ra0-rx_dropped"`
|
|
GuestRa0RxCrypts FlexInt `json:"guest-ra0-rx_crypts"`
|
|
UserRa0RxCrypts FlexInt `json:"user-ra0-rx_crypts"`
|
|
Ra0RxCrypts FlexInt `json:"ra0-rx_crypts"`
|
|
GuestRa0RxFrags FlexInt `json:"guest-ra0-rx_frags"`
|
|
UserRa0RxFrags FlexInt `json:"user-ra0-rx_frags"`
|
|
Ra0RxFrags FlexInt `json:"ra0-rx_frags"`
|
|
GuestRa0TxPackets FlexInt `json:"guest-ra0-tx_packets"`
|
|
UserRa0TxPackets FlexInt `json:"user-ra0-tx_packets"`
|
|
Ra0TxPackets FlexInt `json:"ra0-tx_packets"`
|
|
GuestRa0TxBytes FlexInt `json:"guest-ra0-tx_bytes"`
|
|
UserRa0TxBytes FlexInt `json:"user-ra0-tx_bytes"`
|
|
Ra0TxBytes FlexInt `json:"ra0-tx_bytes"`
|
|
GuestRa0TxErrors FlexInt `json:"guest-ra0-tx_errors"`
|
|
UserRa0TxErrors FlexInt `json:"user-ra0-tx_errors"`
|
|
Ra0TxErrors FlexInt `json:"ra0-tx_errors"`
|
|
GuestRa0TxDropped FlexInt `json:"guest-ra0-tx_dropped"`
|
|
UserRa0TxDropped FlexInt `json:"user-ra0-tx_dropped"`
|
|
Ra0TxDropped FlexInt `json:"ra0-tx_dropped"`
|
|
GuestRa0TxRetries FlexInt `json:"guest-ra0-tx_retries"`
|
|
UserRa0TxRetries FlexInt `json:"user-ra0-tx_retries"`
|
|
Ra0TxRetries FlexInt `json:"ra0-tx_retries"`
|
|
GuestRa0MacFilterRejections FlexInt `json:"guest-ra0-mac_filter_rejections"`
|
|
UserRa0MacFilterRejections FlexInt `json:"user-ra0-mac_filter_rejections"`
|
|
Ra0MacFilterRejections FlexInt `json:"ra0-mac_filter_rejections"`
|
|
GuestRa0WifiTxAttempts FlexInt `json:"guest-ra0-wifi_tx_attempts"`
|
|
UserRa0WifiTxAttempts FlexInt `json:"user-ra0-wifi_tx_attempts"`
|
|
Ra0WifiTxAttempts FlexInt `json:"ra0-wifi_tx_attempts"`
|
|
GuestRa0WifiTxDropped FlexInt `json:"guest-ra0-wifi_tx_dropped"`
|
|
UserRa0WifiTxDropped FlexInt `json:"user-ra0-wifi_tx_dropped"`
|
|
Ra0WifiTxDropped FlexInt `json:"ra0-wifi_tx_dropped"`
|
|
GuestRai0RxPackets FlexInt `json:"guest-rai0-rx_packets"`
|
|
UserRai0RxPackets FlexInt `json:"user-rai0-rx_packets"`
|
|
Rai0RxPackets FlexInt `json:"rai0-rx_packets"`
|
|
GuestRai0RxBytes FlexInt `json:"guest-rai0-rx_bytes"`
|
|
UserRai0RxBytes FlexInt `json:"user-rai0-rx_bytes"`
|
|
Rai0RxBytes FlexInt `json:"rai0-rx_bytes"`
|
|
GuestRai0RxErrors FlexInt `json:"guest-rai0-rx_errors"`
|
|
UserRai0RxErrors FlexInt `json:"user-rai0-rx_errors"`
|
|
Rai0RxErrors FlexInt `json:"rai0-rx_errors"`
|
|
GuestRai0RxDropped FlexInt `json:"guest-rai0-rx_dropped"`
|
|
UserRai0RxDropped FlexInt `json:"user-rai0-rx_dropped"`
|
|
Rai0RxDropped FlexInt `json:"rai0-rx_dropped"`
|
|
GuestRai0RxCrypts FlexInt `json:"guest-rai0-rx_crypts"`
|
|
UserRai0RxCrypts FlexInt `json:"user-rai0-rx_crypts"`
|
|
Rai0RxCrypts FlexInt `json:"rai0-rx_crypts"`
|
|
GuestRai0RxFrags FlexInt `json:"guest-rai0-rx_frags"`
|
|
UserRai0RxFrags FlexInt `json:"user-rai0-rx_frags"`
|
|
Rai0RxFrags FlexInt `json:"rai0-rx_frags"`
|
|
GuestRai0TxPackets FlexInt `json:"guest-rai0-tx_packets"`
|
|
UserRai0TxPackets FlexInt `json:"user-rai0-tx_packets"`
|
|
Rai0TxPackets FlexInt `json:"rai0-tx_packets"`
|
|
GuestRai0TxBytes FlexInt `json:"guest-rai0-tx_bytes"`
|
|
UserRai0TxBytes FlexInt `json:"user-rai0-tx_bytes"`
|
|
Rai0TxBytes FlexInt `json:"rai0-tx_bytes"`
|
|
GuestRai0TxErrors FlexInt `json:"guest-rai0-tx_errors"`
|
|
UserRai0TxErrors FlexInt `json:"user-rai0-tx_errors"`
|
|
Rai0TxErrors FlexInt `json:"rai0-tx_errors"`
|
|
GuestRai0TxDropped FlexInt `json:"guest-rai0-tx_dropped"`
|
|
UserRai0TxDropped FlexInt `json:"user-rai0-tx_dropped"`
|
|
Rai0TxDropped FlexInt `json:"rai0-tx_dropped"`
|
|
GuestRai0TxRetries FlexInt `json:"guest-rai0-tx_retries"`
|
|
UserRai0TxRetries FlexInt `json:"user-rai0-tx_retries"`
|
|
Rai0TxRetries FlexInt `json:"rai0-tx_retries"`
|
|
GuestRai0MacFilterRejections FlexInt `json:"guest-rai0-mac_filter_rejections"`
|
|
UserRai0MacFilterRejections FlexInt `json:"user-rai0-mac_filter_rejections"`
|
|
Rai0MacFilterRejections FlexInt `json:"rai0-mac_filter_rejections"`
|
|
GuestRai0WifiTxAttempts FlexInt `json:"guest-rai0-wifi_tx_attempts"`
|
|
UserRai0WifiTxAttempts FlexInt `json:"user-rai0-wifi_tx_attempts"`
|
|
Rai0WifiTxAttempts FlexInt `json:"rai0-wifi_tx_attempts"`
|
|
GuestRai0WifiTxDropped FlexInt `json:"guest-rai0-wifi_tx_dropped"`
|
|
UserRai0WifiTxDropped FlexInt `json:"user-rai0-wifi_tx_dropped"`
|
|
Rai0WifiTxDropped FlexInt `json:"rai0-wifi_tx_dropped"`
|
|
*/
|
|
}
|
|
|
|
// RadioTable is part of the data for UAPs and UDMs.
|
|
type RadioTable []struct {
|
|
AntennaGain FlexInt `json:"antenna_gain"`
|
|
BuiltinAntGain FlexInt `json:"builtin_ant_gain"`
|
|
BuiltinAntenna FlexBool `json:"builtin_antenna"`
|
|
Channel FlexInt `json:"channel"`
|
|
CurrentAntennaGain FlexInt `json:"current_antenna_gain"`
|
|
HasDfs FlexBool `json:"has_dfs"`
|
|
HasFccdfs FlexBool `json:"has_fccdfs"`
|
|
HasHt160 FlexBool `json:"has_ht160"`
|
|
Ht FlexInt `json:"ht"`
|
|
Is11Ac FlexBool `json:"is_11ac"`
|
|
MaxTxpower FlexInt `json:"max_txpower"`
|
|
MinRssi FlexInt `json:"min_rssi,omitempty"`
|
|
MinRssiEnabled FlexBool `json:"min_rssi_enabled"`
|
|
MinTxpower FlexInt `json:"min_txpower"`
|
|
Name string `json:"name"`
|
|
Nss FlexInt `json:"nss"`
|
|
Radio string `json:"radio"`
|
|
RadioCaps FlexInt `json:"radio_caps"`
|
|
SensLevelEnabled FlexBool `json:"sens_level_enabled"`
|
|
TxPower FlexInt `json:"tx_power"`
|
|
TxPowerMode string `json:"tx_power_mode"`
|
|
VwireEnabled FlexBool `json:"vwire_enabled"`
|
|
WlangroupID string `json:"wlangroup_id"`
|
|
}
|
|
|
|
// RadioTableStats is part of the data shared between UAP and UDM.
|
|
type RadioTableStats []struct {
|
|
Name string `json:"name"`
|
|
Channel FlexInt `json:"channel"`
|
|
Radio string `json:"radio"`
|
|
AstTxto interface{} `json:"ast_txto"`
|
|
AstCst interface{} `json:"ast_cst"`
|
|
AstBeXmit FlexInt `json:"ast_be_xmit"`
|
|
CuTotal FlexInt `json:"cu_total"`
|
|
CuSelfRx FlexInt `json:"cu_self_rx"`
|
|
CuSelfTx FlexInt `json:"cu_self_tx"`
|
|
Gain FlexInt `json:"gain"`
|
|
Satisfaction FlexInt `json:"satisfaction"`
|
|
State string `json:"state"`
|
|
Extchannel FlexInt `json:"extchannel"`
|
|
TxPower FlexInt `json:"tx_power"`
|
|
TxPackets FlexInt `json:"tx_packets"`
|
|
TxRetries FlexInt `json:"tx_retries"`
|
|
NumSta FlexInt `json:"num_sta"`
|
|
GuestNumSta FlexInt `json:"guest-num_sta"`
|
|
UserNumSta FlexInt `json:"user-num_sta"`
|
|
}
|
|
|
|
// VapTable holds much of the UAP wireless data. Shared by UDM.
|
|
type VapTable []struct {
|
|
AnomaliesBarChart struct {
|
|
HighDNSLatency FlexInt `json:"high_dns_latency"`
|
|
HighTCPLatency FlexInt `json:"high_tcp_latency"`
|
|
HighTCPPacketLoss FlexInt `json:"high_tcp_packet_loss"`
|
|
HighWifiLatency FlexInt `json:"high_wifi_latency"`
|
|
HighWifiRetries FlexInt `json:"high_wifi_retries"`
|
|
LowPhyRate FlexInt `json:"low_phy_rate"`
|
|
PoorStreamEff FlexInt `json:"poor_stream_eff"`
|
|
SleepyClient FlexInt `json:"sleepy_client"`
|
|
StaArpTimeout FlexInt `json:"sta_arp_timeout"`
|
|
StaDNSTimeout FlexInt `json:"sta_dns_timeout"`
|
|
StaIPTimeout FlexInt `json:"sta_ip_timeout"`
|
|
WeakSignal FlexInt `json:"weak_signal"`
|
|
} `json:"anomalies_bar_chart"`
|
|
AnomaliesBarChartNow struct {
|
|
HighDNSLatency FlexInt `json:"high_dns_latency"`
|
|
HighTCPLatency FlexInt `json:"high_tcp_latency"`
|
|
HighTCPPacketLoss FlexInt `json:"high_tcp_packet_loss"`
|
|
HighWifiLatency FlexInt `json:"high_wifi_latency"`
|
|
HighWifiRetries FlexInt `json:"high_wifi_retries"`
|
|
LowPhyRate FlexInt `json:"low_phy_rate"`
|
|
PoorStreamEff FlexInt `json:"poor_stream_eff"`
|
|
SleepyClient FlexInt `json:"sleepy_client"`
|
|
StaArpTimeout FlexInt `json:"sta_arp_timeout"`
|
|
StaDNSTimeout FlexInt `json:"sta_dns_timeout"`
|
|
StaIPTimeout FlexInt `json:"sta_ip_timeout"`
|
|
WeakSignal FlexInt `json:"weak_signal"`
|
|
} `json:"anomalies_bar_chart_now"`
|
|
ReasonsBarChart struct {
|
|
PhyRate FlexInt `json:"phy_rate"`
|
|
Signal FlexInt `json:"signal"`
|
|
SleepyClient FlexInt `json:"sleepy_client"`
|
|
StaArpTimeout FlexInt `json:"sta_arp_timeout"`
|
|
StaDNSLatency FlexInt `json:"sta_dns_latency"`
|
|
StaDNSTimeout FlexInt `json:"sta_dns_timeout"`
|
|
StaIPTimeout FlexInt `json:"sta_ip_timeout"`
|
|
StreamEff FlexInt `json:"stream_eff"`
|
|
TCPLatency FlexInt `json:"tcp_latency"`
|
|
TCPPacketLoss FlexInt `json:"tcp_packet_loss"`
|
|
WifiLatency FlexInt `json:"wifi_latency"`
|
|
WifiRetries FlexInt `json:"wifi_retries"`
|
|
} `json:"reasons_bar_chart"`
|
|
ReasonsBarChartNow struct {
|
|
PhyRate FlexInt `json:"phy_rate"`
|
|
Signal FlexInt `json:"signal"`
|
|
SleepyClient FlexInt `json:"sleepy_client"`
|
|
StaArpTimeout FlexInt `json:"sta_arp_timeout"`
|
|
StaDNSLatency FlexInt `json:"sta_dns_latency"`
|
|
StaDNSTimeout FlexInt `json:"sta_dns_timeout"`
|
|
StaIPTimeout FlexInt `json:"sta_ip_timeout"`
|
|
StreamEff FlexInt `json:"stream_eff"`
|
|
TCPLatency FlexInt `json:"tcp_latency"`
|
|
TCPPacketLoss FlexInt `json:"tcp_packet_loss"`
|
|
WifiLatency FlexInt `json:"wifi_latency"`
|
|
WifiRetries FlexInt `json:"wifi_retries"`
|
|
} `json:"reasons_bar_chart_now"`
|
|
RxTCPStats struct {
|
|
Goodbytes FlexInt `json:"goodbytes"`
|
|
LatAvg FlexInt `json:"lat_avg"`
|
|
LatMax FlexInt `json:"lat_max"`
|
|
LatMin FlexInt `json:"lat_min"`
|
|
Stalls FlexInt `json:"stalls"`
|
|
} `json:"rx_tcp_stats"`
|
|
TxTCPStats struct {
|
|
Goodbytes FlexInt `json:"goodbytes"`
|
|
LatAvg FlexInt `json:"lat_avg"`
|
|
LatMax FlexInt `json:"lat_max"`
|
|
LatMin FlexInt `json:"lat_min"`
|
|
Stalls FlexInt `json:"stalls"`
|
|
} `json:"tx_tcp_stats"`
|
|
WifiTxLatencyMov struct {
|
|
Avg FlexInt `json:"avg"`
|
|
Max FlexInt `json:"max"`
|
|
Min FlexInt `json:"min"`
|
|
Total FlexInt `json:"total"`
|
|
TotalCount FlexInt `json:"total_count"`
|
|
} `json:"wifi_tx_latency_mov"`
|
|
ApMac string `json:"ap_mac"`
|
|
AvgClientSignal FlexInt `json:"avg_client_signal"`
|
|
Bssid string `json:"bssid"`
|
|
Ccq int `json:"ccq"`
|
|
Channel FlexInt `json:"channel"`
|
|
DNSAvgLatency FlexInt `json:"dns_avg_latency"`
|
|
Essid string `json:"essid"`
|
|
Extchannel int `json:"extchannel"`
|
|
ID string `json:"id"`
|
|
IsGuest FlexBool `json:"is_guest"`
|
|
IsWep FlexBool `json:"is_wep"`
|
|
MacFilterRejections int `json:"mac_filter_rejections"`
|
|
MapID interface{} `json:"map_id"`
|
|
Name string `json:"name"`
|
|
NumSatisfactionSta FlexInt `json:"num_satisfaction_sta"`
|
|
NumSta int `json:"num_sta"`
|
|
Radio string `json:"radio"`
|
|
RadioName string `json:"radio_name"`
|
|
RxBytes FlexInt `json:"rx_bytes"`
|
|
RxCrypts FlexInt `json:"rx_crypts"`
|
|
RxDropped FlexInt `json:"rx_dropped"`
|
|
RxErrors FlexInt `json:"rx_errors"`
|
|
RxFrags FlexInt `json:"rx_frags"`
|
|
RxNwids FlexInt `json:"rx_nwids"`
|
|
RxPackets FlexInt `json:"rx_packets"`
|
|
Satisfaction FlexInt `json:"satisfaction"`
|
|
SatisfactionNow FlexInt `json:"satisfaction_now"`
|
|
SiteID string `json:"site_id"`
|
|
State string `json:"state"`
|
|
T string `json:"t"`
|
|
TxBytes FlexInt `json:"tx_bytes"`
|
|
TxCombinedRetries FlexInt `json:"tx_combined_retries"`
|
|
TxDataMpduBytes FlexInt `json:"tx_data_mpdu_bytes"`
|
|
TxDropped FlexInt `json:"tx_dropped"`
|
|
TxErrors FlexInt `json:"tx_errors"`
|
|
TxPackets FlexInt `json:"tx_packets"`
|
|
TxPower FlexInt `json:"tx_power"`
|
|
TxRetries FlexInt `json:"tx_retries"`
|
|
TxRtsRetries FlexInt `json:"tx_rts_retries"`
|
|
TxSuccess FlexInt `json:"tx_success"`
|
|
TxTotal FlexInt `json:"tx_total"`
|
|
Up FlexBool `json:"up"`
|
|
Usage string `json:"usage"`
|
|
WifiTxAttempts FlexInt `json:"wifi_tx_attempts"`
|
|
WifiTxDropped FlexInt `json:"wifi_tx_dropped"`
|
|
WlanconfID string `json:"wlanconf_id"`
|
|
}
|
|
|
|
// RogueAP are your neighbors access points.
|
|
type RogueAP struct {
|
|
SourceName string `json:"-"`
|
|
SiteName string `json:"-"`
|
|
ID string `json:"_id"`
|
|
ApMac string `json:"ap_mac"`
|
|
Bssid string `json:"bssid"`
|
|
SiteID string `json:"site_id"`
|
|
Age FlexInt `json:"age"`
|
|
Band string `json:"band"`
|
|
Bw FlexInt `json:"bw"`
|
|
CenterFreq FlexInt `json:"center_freq"`
|
|
Channel int `json:"channel"`
|
|
Essid string `json:"essid"`
|
|
Freq FlexInt `json:"freq"`
|
|
IsAdhoc FlexBool `json:"is_adhoc"`
|
|
IsRogue FlexBool `json:"is_rogue"`
|
|
IsUbnt FlexBool `json:"is_ubnt"`
|
|
LastSeen FlexInt `json:"last_seen"`
|
|
Noise FlexInt `json:"noise"`
|
|
Radio string `json:"radio"`
|
|
RadioName string `json:"radio_name"`
|
|
ReportTime FlexInt `json:"report_time"`
|
|
Rssi FlexInt `json:"rssi"`
|
|
RssiAge FlexInt `json:"rssi_age"`
|
|
Security string `json:"security"`
|
|
Signal FlexInt `json:"signal"`
|
|
Oui string `json:"oui"`
|
|
}
|
|
|
|
// GetRogueAPs returns RogueAPs for a list of Sites.
|
|
// Use GetRogueAPsSite if you want more control.
|
|
func (u *Unifi) GetRogueAPs(sites []*Site) ([]*RogueAP, error) {
|
|
data := []*RogueAP{}
|
|
|
|
for _, site := range sites {
|
|
response, err := u.GetRogueAPsSite(site)
|
|
if err != nil {
|
|
return data, err
|
|
}
|
|
|
|
data = append(data, response...)
|
|
}
|
|
|
|
return data, nil
|
|
}
|
|
|
|
// GetRogueAPsSite returns RogueAPs for a single Site.
|
|
func (u *Unifi) GetRogueAPsSite(site *Site) ([]*RogueAP, error) {
|
|
if site == nil || site.Name == "" {
|
|
return nil, ErrNoSiteProvided
|
|
}
|
|
|
|
u.DebugLog("Polling Controller for RogueAPs, site %s (%s)", site.SiteName, site.Desc)
|
|
|
|
var (
|
|
path = fmt.Sprintf(APIRogueAP, site.Name)
|
|
rogueaps struct {
|
|
Data []*RogueAP `json:"data"`
|
|
}
|
|
)
|
|
|
|
if err := u.GetData(path, &rogueaps, ""); err != nil {
|
|
return rogueaps.Data, err
|
|
}
|
|
|
|
for i := range rogueaps.Data {
|
|
// Add special SourceName value.
|
|
rogueaps.Data[i].SourceName = u.URL
|
|
// Add the special "Site Name" to each event. This becomes a Grafana filter somewhere.
|
|
rogueaps.Data[i].SiteName = site.SiteName
|
|
}
|
|
|
|
return rogueaps.Data, nil
|
|
}
|
|
|
|
// UnmarshalJSON unmarshalls 5.10 or 5.11 formatted Access Point Stat data.
|
|
func (v *UAPStat) UnmarshalJSON(data []byte) error {
|
|
var n struct {
|
|
Ap `json:"ap"`
|
|
}
|
|
|
|
v.Ap = &n.Ap
|
|
|
|
err := json.Unmarshal(data, v.Ap) // controller version 5.10.
|
|
if err != nil {
|
|
return json.Unmarshal(data, &n) // controller version 5.11.
|
|
}
|
|
|
|
return nil
|
|
}
|