This is a brute force sweep through the the IEEE 802.11 MIB (which is probably overkill, being designed by committee) to see what net80211 in 5.2-RELEASE supports of it (or can be made to deliver going forward). Assumptions:- - Most stats are per-interface. - ifIndex maps onto if_index the way it does in net-snmp's mibII module for BSD-derived kernels. --ieee802dot11(1.2.840.10036) | +--dot11smt(1) | | | +--dot11StationConfigTable(1) | | | | | +--dot11StationConfigEntry(1) [ifIndex] | | | | | x-- rwn MacAddress dot11StationID(1) arpcom.ac_enaddr just like any other IEEE 802 interface. | | +-- rwn Integer32 dot11MediumOccupancyLimit(2) Undefined | | +-- r-n TruthValue dot11CFPollable(3) CAPABILITY: ic_caps IEEE80211_CAPINFO_CF_POLLABLE | | +-- rwn Integer32 dot11CFPPeriod(4) Undefined -- wrapped in #ifdef notyet in 5.2 code drop | | +-- rwn Integer32 dot11CFPMaxDuration(5) Undefined -- wrapped in #ifdef notyet in 5.2 code drop | | +-- rwn Integer32 dot11AuthenticationResponseTimeOut(6) ic_mgt_timer ? | | +-- r-n TruthValue dot11PrivacyOptionImplemented(7) Does this mean 'wep capable' or 'wep enabled' ? | | +-- rwn Enumeration dot11PowerManagementMode(8) SIOCG80211 IEEE80211_IOC_POWERSAVE | | +-- rwn OctetString dot11DesiredSSID(9) ic_des_essid or ic_des_bssid ? | | +-- rwn Enumeration dot11DesiredBSSType(10) IEEE80211_F_DESBSSID ? | | +-- rwn OctetString dot11OperationalRateSet(11) ieee80211_node.ni_rates | | +-- rwn Integer32 dot11BeaconPeriod(12) ieee80211_node.ni_intval | | +-- rwn Integer32 dot11DTIMPeriod(13) Undefined -- DTIM? ni_dtimperiod is notyet wrapped | | +-- rwn Integer32 dot11AssociationResponseTimeOut(14) Undefined -- I think this is a function of ic_mgt_timer | | +-- r-n Integer32 dot11DisassociateReason(15) Undefined HostAP only: flagged in ieee80211_input.c but not reported/retrievable | | +-- r-n MacAddress dot11DisassociateStation(16) Undefined HostAP only: flagged in ieee80211_input.c but not reported/retrievable | | +-- r-n Integer32 dot11DeauthenticateReason(17) Undefined HostAP only: flagged in ieee80211_input.c but not reported/retrievable | | +-- r-n MacAddress dot11DeauthenticateStation(18) Undefined HostAP only: flagged in ieee80211_input.c but not reported/retrievable | | +-- r-n Integer32 dot11AuthenticateFailStatus(19) Undefined HostAP only: flagged in ieee80211_input.c but not reported/retrievable | | +-- r-n MacAddress dot11AuthenticateFailStation(20) Undefined HostAP only: flagged in ieee80211_input.c but not reported/retrievable | +--dot11AuthenticationAlgorithmsTable(2) | | | | | +--dot11AuthenticationAlgorithmsEntry(1) [ifIndex,dot11AuthenticationAlg orithmsIndex] | | | | | +-- --- Integer32 dot11AuthenticationAlgorithmsIndex(1) | | +-- r-n Enumeration dot11AuthenticationAlgorithm(2) | | +-- rwn TruthValue dot11AuthenticationAlgorithmsEnable(3) Table of supported authentication algorithms for each interface. FreeBSD is able to emulate some of them in software. Currently I have no idea how to walk this list... | +--dot11WEPDefaultKeysTable(3) | | | | | +--dot11WEPDefaultKeysEntry(1) [ifIndex,dot11WEPDefaultKeyIndex] | | | | | +-- --- Integer32 dot11WEPDefaultKeyIndex(1) | | +-- rwn WEPKeytype dot11WEPDefaultKeyValue(2) WI_RID_DEFLT_CRYPT_KEYS | +--dot11WEPKeyMappingsTable(4) | | | | | +--dot11WEPKeyMappingsEntry(1) [ifIndex,dot11WEPKeyMappingIndex] | | | | | +-- --- Integer32 dot11WEPKeyMappingIndex(1) | | +-- rwn MacAddress dot11WEPKeyMappingAddress(2) | | +-- rwn TruthValue dot11WEPKeyMappingWEPOn(3) | | +-- rwn WEPKeytype dot11WEPKeyMappingValue(4) | | +-- rwn RowStatus dot11WEPKeyMappingStatus(5) Undefined -- FreeBSD doesn't support per-STA key mappings | +--dot11PrivacyTable(5) | | | | | +--dot11PrivacyEntry(1) [ifIndex] | | | | | +-- rwn TruthValue dot11PrivacyInvoked(1) SIOCG80211 IEEE80211_IOC_WEP IEEE80211_F_WEPON | | +-- rwn Integer32 dot11WEPDefaultKeyID(2) SIOCG80211 IEEE80211_IOC_WEPTXKEY index | | +-- rwn Integer32 dot11WEPKeyMappingLength(3) Constant IEEE80211_WEP_NKID | | +-- rwn TruthValue dot11ExcludeUnencrypted(4) Undefined: Not sure how to handle - note comment /* XXX some stations use the privacy bit for handling APs that suport both encrypted and unencrypted traffic */ | | +-- r-n Counter32 dot11WEPICVErrorCount(5) ieee80211_stats.is_rx_decryptcrc | | +-- r-n Counter32 dot11WEPExcludedCount(6) Undefined: see dot11ExcludeUnencrypted above | +--dot11SMTnotification(6) [We will skip trap generation for the time being] +--dot11mac(2) | | | +--dot11OperationTable(1) | | | | | +--dot11OperationEntry(1) [ifIndex] | | | | | +-- r-n MacAddress dot11MACAddress(1) arpcom.ac_enaddr just like any other IEEE 802 interface. | | +-- rwn Integer32 dot11RTSThreshold(2) IEEE80211_IOC_RTSTHRESHOLD | | +-- rwn Integer32 dot11ShortRetryLimit(3) ic_txmin | | +-- rwn Integer32 dot11LongRetryLimit(4) ic_txmax | | +-- rwn Integer32 dot11FragmentationThreshold(5) ic_fragthreshold | | +-- rwn Integer32 dot11MaxTransmitMSDULifetime(6) ic_txlifetime | | +-- rwn Integer32 dot11MaxReceiveLifetime(7) Undefined: ./ieee80211_input.c: /* TODO: fragment */ | | +-- r-n DisplayString dot11ManufacturerID(8) Constant "FreeBSD" ? Or card Manfuacturer ID from underlying driver? | | +-- r-n DisplayString dot11ProductID(9) Constant "net80211" ? Or card Product ID from underlying driver? | +--dot11CountersTable(2) | | | | | +--dot11CountersEntry(1) [ifIndex] | | | | | +-- r-n Counter32 dot11TransmittedFragmentCount(1) Undefined: /* TODO: fragment */ | | +-- r-n Counter32 dot11MulticastTransmittedFrameCount(2) Undefined: no special multicast handling at this layer | | +-- r-n Counter32 dot11FailedCount(3) Undefined: we don't maintain a counter for this yet | | +-- r-n Counter32 dot11RetryCount(4) Undefined: we don't maintain a counter for this yet | | +-- r-n Counter32 dot11MultipleRetryCount(5) Undefined: we don't maintain a counter for this yet | | +-- r-n Counter32 dot11FrameDuplicateCount(6) ieee80211_stats.is_rx_dup | | +-- r-n Counter32 dot11RTSSuccessCount(7) Undefined: we don't maintain a counter for this yet | | +-- r-n Counter32 dot11RTSFailureCount(8) Undefined: we don't maintain a counter for this yet | | +-- r-n Counter32 dot11ACKFailureCount(9) Undefined: we don't maintain a counter for this yet | | +-- r-n Counter32 dot11ReceivedFragmentCount(10) Undefined: /* TODO: fragment */ | | +-- r-n Counter32 dot11MulticastReceivedFrameCount(11) Undefined: we don't keep a counter for this at the 802.11 layer (ether_subr?) | | +-- r-n Counter32 dot11FCSErrorCount(12) Undefined: we don't keep a counter for this at the 802.11 layer (ether_subr?) | | +-- r-n Counter32 dot11TransmittedFrameCount(13) Undefined: we don't keep a counter for this at the 802.11 layer (ether_subr?) | | +-- r-n Counter32 dot11WEPUndecryptableCount(14) is_rx_wepfail -- or could be is_rx_decryptcrc ? | +--dot11GroupAddressesTable(3) | | | +--dot11GroupAddressesEntry(1) [ifIndex,dot11GroupAddressesIndex] | | | +-- --- Integer32 dot11GroupAddressesIndex(1) | +-- rwn MacAddress dot11Address(2) | +-- rwn RowStatus dot11GroupAddressesStatus(3) Actually maintained higher up in ether layer. duplicate? My recent commits for NET_RT_IFMALIST may be useful here. +--dot11res(3) Yet another way of saying 'Product ID'. Is this relevant... +--dot11phy(4) | | | +--dot11PhyOperationTable(1) | | | | | +--dot11PhyOperationEntry(1) [ifIndex] | | | | | +-- r-n Enumeration dot11PHYType(1) ieee80211com.ic_phytype -- Retrievable from userland?? | | +-- rwn Integer32 dot11CurrentRegDomain(2) ieee80211_node.ni_country -- userland?? | | +-- r-n Enumeration dot11TempType(3) Undefined by implementation ieee80211_node.ni_country -- userland?? | +--dot11PhyAntennaTable(2) | | | | | +--dot11PhyAntennaEntry(1) [ifIndex] | | | | | +-- rwn Integer32 dot11CurrentTxAntenna(1) | | +-- r-n Enumeration dot11DiversitySupport(2) | | +-- rwn Integer32 dot11CurrentRxAntenna(3) Undefined. We don't heed antenna diversity [yet]. | +--dot11PhyTxPowerTable(3) | | | | | +--dot11PhyTxPowerEntry(1) [ifIndex] | | | | | +-- r-n Integer32 dot11NumberSupportedPowerLevels(1) | | +-- r-n Integer32 dot11TxPowerLevel1(2) | | +-- r-n Integer32 dot11TxPowerLevel2(3) | | +-- r-n Integer32 dot11TxPowerLevel3(4) | | +-- r-n Integer32 dot11TxPowerLevel4(5) | | +-- r-n Integer32 dot11TxPowerLevel5(6) | | +-- r-n Integer32 dot11TxPowerLevel6(7) | | +-- r-n Integer32 dot11TxPowerLevel7(8) | | +-- r-n Integer32 dot11TxPowerLevel8(9) | | +-- rwn Integer32 dot11CurrentTxPowerLevel(10) Undefined. Some of our drivers have a limited means of manually setting the power level but net80211 doesn't grok it [yet]. | +--dot11PhyFHSSTable(4) | | | | | +--dot11PhyFHSSEntry(1) [ifIndex] | | | | | +-- r-n Integer32 dot11HopTime(1) IEEE80211_RADIOTAP_FHSS | | +-- rwn Integer32 dot11CurrentChannelNumber(2) SIOCG80211 IEEE80211_IOC_CHANNEL if FHSS! or IEEE80211_RADIOTAP_CHANNEL | | +-- r-n Integer32 dot11MaxDwellTime(3) Undefined | | +-- rwn Integer32 dot11CurrentDwellTime(4) Undefined | | +-- rwn Integer32 dot11CurrentSet(5) WI_RID_CHANNEL_LIST ??? | | +-- rwn Integer32 dot11CurrentPattern(6) IEEE80211_RADIOTAP_FHSS | | +-- rwn Integer32 dot11CurrentIndex(7) Undefined | | | +--dot11PhyDSSSTable(5) | | | | | +--dot11PhyDSSSEntry(1) [ifIndex] | | | | | +-- rwn Integer32 dot11CurrentChannel(1) SIOCG80211 IEEE80211_IOC_CHANNEL if DSSS! | | +-- r-n Integer32 dot11CCAModeSupported(2) Always set to CS_ONLY | | +-- rwn Enumeration dot11CurrentCCAMode(3) Always set to CS_ONLY | | +-- rwn Integer32 dot11EDThreshold(4) Undefined | +--dot11PhyIRTable(6) | | | | | +--dot11PhyIREntry(1) [ifIndex] | | | | | +-- rwn Integer32 dot11CCAWatchdogTimerMax(1) | | +-- rwn Integer32 dot11CCAWatchdogCountMax(2) | | +-- rwn Integer32 dot11CCAWatchdogTimerMin(3) | | +-- rwn Integer32 dot11CCAWatchdogCountMin(4) Undefined. We don't do 802.11 over IR. | | | +--dot11RegDomainsSupportedTable(7) | | | | | +--dot11RegDomainsSupportEntry(1) [ifIndex,dot11RegDomainsSupportIndex] | | | | | +-- --- Integer32 dot11RegDomainsSupportIndex(1) IEEE80211_ELEMID_COUNTRY index | | +-- r-n Enumeration dot11RegDomainsSupportValue(2) IEEE80211_ELEMID_COUNTRY value | +--dot11AntennasListTable(8) | | | | | +--dot11AntennasListEntry(1) [ifIndex,dot11AntennaListIndex] | | | | | +-- --- Integer32 dot11AntennaListIndex(1) | | +-- rwn TruthValue dot11SupportedTxAntenna(2) | | +-- rwn TruthValue dot11SupportedRxAntenna(3) | | +-- rwn TruthValue dot11DiversitySelectionRx(4) Undefined. No antenna diversity for bonzo. | +--dot11SupportedDataRatesTxTable(9) | | | | | +--dot11SupportedDataRatesTxEntry(1) [ifIndex,dot11SupportedDataRatesTxI ndex] | | | | | +-- --- Integer32 dot11SupportedDataRatesTxIndex(1) | | +-- r-n Integer32 dot11SupportedDataRatesTxValue(2) ieee80211_node.h: int ni_txrate; /* index to ni_rates[] */ | | | +--dot11SupportedDataRatesRxTable(10) | | | +--dot11SupportedDataRatesRxEntry(1) [ifIndex,dot11SupportedDataRatesRxI ndex] | | | +-- --- Integer32 dot11SupportedDataRatesRxIndex(1) | +-- r-n Integer32 dot11SupportedDataRatesRxValue(2) Overengineered. We assume same as ni_txrates[] table. +--dot11Conformance(5) Unsure about conformance MIBs -- refer to fenner.