netlink 1.0.0.4 → 1.1.0.0
raw patch · 5 files changed
+381/−38 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- System.Linux.Netlink.GeNetlink.NL80211: getWifiEIDs :: Get Attributes
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: Signal :: [Word8] -> Signal
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: StaInfo :: Maybe Word32 -> Maybe Word32 -> Maybe Word64 -> Maybe Word64 -> Maybe Word16 -> Maybe Word16 -> Maybe Word8 -> Maybe Word64 -> Maybe Word8 -> Maybe Word8 -> Maybe Signal -> Maybe Signal -> Maybe StaRate -> Maybe StaRate -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Word32 -> Maybe Attributes -> Maybe ByteString -> Maybe Word64 -> Maybe Word64 -> Maybe Word64 -> Maybe Word8 -> Maybe Attributes -> Maybe Attributes -> Attributes -> StaInfo
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: StaRate :: Maybe Word32 -> SignalWidth -> Maybe Word8 -> Bool -> Maybe Word8 -> Maybe Word8 -> Attributes -> StaRate
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: Width10MHz :: SignalWidth
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: Width160MHz :: SignalWidth
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: Width20MHz :: SignalWidth
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: Width40MHz :: SignalWidth
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: Width5MHz :: SignalWidth
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: Width80MHz :: SignalWidth
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [rateBitrate] :: StaRate -> Maybe Word32
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [rateMCS] :: StaRate -> Maybe Word8
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [rateSelf] :: StaRate -> Attributes
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [rateShortGI] :: StaRate -> Bool
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [rateVHTMCS] :: StaRate -> Maybe Word8
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [rateVHTNSS] :: StaRate -> Maybe Word8
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [rateWidthFlag] :: StaRate -> SignalWidth
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staAssocIES] :: StaInfo -> Maybe Attributes
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staBSignalAvg] :: StaInfo -> Maybe Word8
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staBeaconLoss] :: StaInfo -> Maybe Word32
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staBeaconRX] :: StaInfo -> Maybe Word64
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staBssAttrs] :: StaInfo -> Maybe Attributes
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staConTime] :: StaInfo -> Maybe Word32
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staExpectTP] :: StaInfo -> Maybe Word32
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staInaTime] :: StaInfo -> Maybe Word32
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staInfoFlags] :: StaInfo -> Maybe ByteString
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staLLID] :: StaInfo -> Maybe Word16
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staLocalPM] :: StaInfo -> Maybe Word32
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staNonPeerPM] :: StaInfo -> Maybe Word32
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staPLID] :: StaInfo -> Maybe Word16
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staPLState] :: StaInfo -> Maybe Word8
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staPeerPM] :: StaInfo -> Maybe Word32
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staRXBytes] :: StaInfo -> Maybe Word64
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staRXDropMisc] :: StaInfo -> Maybe Word64
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staRXDur] :: StaInfo -> Maybe Word64
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staRXPackets] :: StaInfo -> Maybe Word32
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staRXRate] :: StaInfo -> Maybe StaRate
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staSelf] :: StaInfo -> Attributes
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staSignalAvg] :: StaInfo -> Maybe Signal
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staSignalMBMA] :: StaInfo -> Maybe Word8
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staSignalMBM] :: StaInfo -> Maybe Word8
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staSignal] :: StaInfo -> Maybe Signal
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staTOffset] :: StaInfo -> Maybe Word64
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staTXBytes] :: StaInfo -> Maybe Word64
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staTXFailed] :: StaInfo -> Maybe Word32
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staTXPackets] :: StaInfo -> Maybe Word32
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staTXRate] :: StaInfo -> Maybe StaRate
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staTXRetries] :: StaInfo -> Maybe Word32
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: [staTidStats] :: StaInfo -> Maybe Attributes
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: data SignalWidth
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: data StaInfo
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: data StaRate
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: getStaInfo :: Get StaInfo
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.NL80211.StaInfo.Signal
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.NL80211.StaInfo.SignalWidth
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.NL80211.StaInfo.StaInfo
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: instance GHC.Classes.Eq System.Linux.Netlink.GeNetlink.NL80211.StaInfo.StaRate
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: instance GHC.Read.Read System.Linux.Netlink.GeNetlink.NL80211.StaInfo.Signal
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: instance GHC.Read.Read System.Linux.Netlink.GeNetlink.NL80211.StaInfo.SignalWidth
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: instance GHC.Read.Read System.Linux.Netlink.GeNetlink.NL80211.StaInfo.StaInfo
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: instance GHC.Read.Read System.Linux.Netlink.GeNetlink.NL80211.StaInfo.StaRate
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: instance GHC.Show.Show System.Linux.Netlink.GeNetlink.NL80211.StaInfo.Signal
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: instance GHC.Show.Show System.Linux.Netlink.GeNetlink.NL80211.StaInfo.SignalWidth
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: instance GHC.Show.Show System.Linux.Netlink.GeNetlink.NL80211.StaInfo.StaInfo
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: instance GHC.Show.Show System.Linux.Netlink.GeNetlink.NL80211.StaInfo.StaRate
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: newtype Signal
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: signalFromAttributes :: Attributes -> Signal
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: staInfoFromAttributes :: Attributes -> StaInfo
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: staInfoFromPacket :: Packet a -> Maybe StaInfo
+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo: staRateFromAttributes :: Attributes -> StaRate
+ System.Linux.Netlink.GeNetlink.NL80211.WifiEI: getWifiEIDs :: Get Attributes
+ System.Linux.Netlink.GeNetlink.NL80211.WifiEI: showWifiEid :: ByteString -> String
Files
- System/Linux/Netlink/GeNetlink/NL80211.hs +6/−24
- System/Linux/Netlink/GeNetlink/NL80211/Constants.hs +81/−13
- System/Linux/Netlink/GeNetlink/NL80211/StaInfo.hs +239/−0
- System/Linux/Netlink/GeNetlink/NL80211/WifiEI.hs +52/−0
- netlink.cabal +3/−1
System/Linux/Netlink/GeNetlink/NL80211.hs view
@@ -14,7 +14,6 @@ module System.Linux.Netlink.GeNetlink.NL80211 ( NL80211Socket , NL80211Packet- , getWifiEIDs , makeNL80211Socket , joinMulticastByName@@ -35,12 +34,11 @@ import Control.Applicative ((<$>)) #endif -import Control.Monad.Loops (whileM) import Data.Bits ((.|.)) import Data.ByteString.Char8 (unpack) import Data.List (intercalate) import Data.Maybe (mapMaybe)-import Data.Serialize.Get (runGet, getByteString, getWord8 ,getWord32host, isEmpty, Get)+import Data.Serialize.Get (runGet, getWord32host) import Data.Serialize.Put (runPut, putWord32host) import Data.Word (Word32, Word16, Word8) @@ -56,6 +54,8 @@ import System.Linux.Netlink.GeNetlink.Control hiding (getMulticastGroups) import qualified System.Linux.Netlink.GeNetlink.Control as C import System.Linux.Netlink.GeNetlink.NL80211.Constants+import System.Linux.Netlink.GeNetlink.NL80211.StaInfo+import System.Linux.Netlink.GeNetlink.NL80211.WifiEI import System.Linux.Netlink hiding (makeSocket, queryOne, query, recvOne, getPacket) import qualified System.Linux.Netlink as I (queryOne, query, recvOne) @@ -93,13 +93,8 @@ showStaInfo :: ByteString -> String showStaInfo bs = let attrs = getRight $ runGet getAttributes bs in- "NL80211_ATTR_STA_INFO: " ++ show (BS.length bs) ++ "\n" ++- (indent $showAttrs showNl80211StaInfo attrs)--showWifiEid :: ByteString -> String-showWifiEid bs = let attrs = getRight $ runGet getWifiEIDs bs in- "WifiEIDs:\n" ++- (indent $showAttrs showIEEE80211EID attrs)+ "NL80211_ATTR_STA_INFO: " ++ show (BS.length bs) ++ "\n" +++ (indent . show . staInfoFromAttributes $ attrs) showAttrBss :: ByteString -> String showAttrBss bs = let attrs = getRight $ runGet getAttributes bs in@@ -116,18 +111,6 @@ getFd :: NL80211Socket -> Fd getFd (NLS s _) = getNetlinkFd s --- |'Get' the EID Attributes from a buffer-getWifiEIDs :: Get Attributes-getWifiEIDs = M.fromList <$> whileM (not <$> isEmpty) getWifiEID---- |'Get' an EID attribute from a buffer-getWifiEID :: Get (Int, ByteString)-getWifiEID = do- ty <- fromIntegral <$> getWord8- len <- fromIntegral <$> getWord8- val <- getByteString len- return (ty, val)- getRight :: Show a => Either a b -> b getRight (Right x) = x getRight (Left err) = error $show err@@ -240,8 +223,7 @@ -- |Get the EID attributes from a 'NL80211Packet' (for example from 'getConnectedWifi' getWifiAttributes :: NL80211Packet -> Maybe Attributes-getWifiAttributes (Packet _ _ attrs) =- getRight <$> runGet getWifiEIDs <$> eids+getWifiAttributes (Packet _ _ attrs) = getRight <$> runGet getWifiEIDs <$> eids where bssattrs = getRight . runGet getAttributes <$> M.lookup eNL80211_ATTR_BSS attrs eids = M.lookup eNL80211_BSS_INFORMATION_ELEMENTS =<< bssattrs getWifiAttributes x@(ErrorMsg{}) = error ("Something stupid happened" ++ show x)
System/Linux/Netlink/GeNetlink/NL80211/Constants.hs view
@@ -1,6 +1,6 @@ {-# OPTIONS_HADDOCK hide, prune, ignore-exports #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-module System.Linux.Netlink.GeNetlink.NL80211.Constants (NL80211Commands, showNL80211Commands, eNL80211_CMD_UNSPEC, eNL80211_CMD_GET_WIPHY, eNL80211_CMD_SET_WIPHY, eNL80211_CMD_NEW_WIPHY, eNL80211_CMD_DEL_WIPHY, eNL80211_CMD_GET_INTERFACE, eNL80211_CMD_SET_INTERFACE, eNL80211_CMD_NEW_INTERFACE, eNL80211_CMD_DEL_INTERFACE, eNL80211_CMD_GET_KEY, eNL80211_CMD_SET_KEY, eNL80211_CMD_NEW_KEY, eNL80211_CMD_DEL_KEY, eNL80211_CMD_GET_BEACON, eNL80211_CMD_SET_BEACON, eNL80211_CMD_NEW_BEACON, eNL80211_CMD_START_AP, eNL80211_CMD_DEL_BEACON, eNL80211_CMD_STOP_AP, eNL80211_CMD_GET_STATION, eNL80211_CMD_SET_STATION, eNL80211_CMD_NEW_STATION, eNL80211_CMD_DEL_STATION, eNL80211_CMD_GET_MPATH, eNL80211_CMD_SET_MPATH, eNL80211_CMD_NEW_MPATH, eNL80211_CMD_DEL_MPATH, eNL80211_CMD_SET_BSS, eNL80211_CMD_SET_REG, eNL80211_CMD_REQ_SET_REG, eNL80211_CMD_GET_MESH_CONFIG, eNL80211_CMD_SET_MESH_CONFIG, eNL80211_CMD_SET_MGMT_EXTRA_IE, eNL80211_CMD_GET_REG, eNL80211_CMD_GET_SCAN, eNL80211_CMD_TRIGGER_SCAN, eNL80211_CMD_NEW_SCAN_RESULTS, eNL80211_CMD_SCAN_ABORTED, eNL80211_CMD_REG_CHANGE, eNL80211_CMD_AUTHENTICATE, eNL80211_CMD_ASSOCIATE, eNL80211_CMD_DEAUTHENTICATE, eNL80211_CMD_DISASSOCIATE, eNL80211_CMD_MICHAEL_MIC_FAILURE, eNL80211_CMD_REG_BEACON_HINT, eNL80211_CMD_JOIN_IBSS, eNL80211_CMD_LEAVE_IBSS, eNL80211_CMD_TESTMODE, eNL80211_CMD_CONNECT, eNL80211_CMD_ROAM, eNL80211_CMD_DISCONNECT, eNL80211_CMD_SET_WIPHY_NETNS, eNL80211_CMD_GET_SURVEY, eNL80211_CMD_NEW_SURVEY_RESULTS, eNL80211_CMD_SET_PMKSA, eNL80211_CMD_DEL_PMKSA, eNL80211_CMD_FLUSH_PMKSA, eNL80211_CMD_REMAIN_ON_CHANNEL, eNL80211_CMD_CANCEL_REMAIN_ON_CHANNEL, eNL80211_CMD_SET_TX_BITRATE_MASK, eNL80211_CMD_REGISTER_ACTION, eNL80211_CMD_REGISTER_FRAME, eNL80211_CMD_ACTION, eNL80211_CMD_FRAME, eNL80211_CMD_ACTION_TX_STATUS, eNL80211_CMD_FRAME_TX_STATUS, eNL80211_CMD_SET_POWER_SAVE, eNL80211_CMD_GET_POWER_SAVE, eNL80211_CMD_SET_CQM, eNL80211_CMD_NOTIFY_CQM, eNL80211_CMD_SET_CHANNEL, eNL80211_CMD_SET_WDS_PEER, eNL80211_CMD_FRAME_WAIT_CANCEL, eNL80211_CMD_JOIN_MESH, eNL80211_CMD_LEAVE_MESH, eNL80211_CMD_UNPROT_DEAUTHENTICATE, eNL80211_CMD_UNPROT_DISASSOCIATE, eNL80211_CMD_NEW_PEER_CANDIDATE, eNL80211_CMD_GET_WOWLAN, eNL80211_CMD_SET_WOWLAN, eNL80211_CMD_START_SCHED_SCAN, eNL80211_CMD_STOP_SCHED_SCAN, eNL80211_CMD_SCHED_SCAN_RESULTS, eNL80211_CMD_SCHED_SCAN_STOPPED, eNL80211_CMD_SET_REKEY_OFFLOAD, eNL80211_CMD_PMKSA_CANDIDATE, eNL80211_CMD_TDLS_OPER, eNL80211_CMD_TDLS_MGMT, eNL80211_CMD_UNEXPECTED_FRAME, eNL80211_CMD_PROBE_CLIENT, eNL80211_CMD_REGISTER_BEACONS, eNL80211_CMD_UNEXPECTED_4ADDR_FRAME, eNL80211_CMD_SET_NOACK_MAP, eNL80211_CMD_CH_SWITCH_NOTIFY, eNL80211_CMD_START_P2P_DEVICE, eNL80211_CMD_STOP_P2P_DEVICE, eNL80211_CMD_CONN_FAILED, eNL80211_CMD_SET_MCAST_RATE, eNL80211_CMD_SET_MAC_ACL, eNL80211_CMD_RADAR_DETECT, eNL80211_CMD_GET_PROTOCOL_FEATURES, eNL80211_CMD_UPDATE_FT_IES, eNL80211_CMD_FT_EVENT, eNL80211_CMD_CRIT_PROTOCOL_START, eNL80211_CMD_CRIT_PROTOCOL_STOP, eNL80211_CMD_GET_COALESCE, eNL80211_CMD_SET_COALESCE, eNL80211_CMD_CHANNEL_SWITCH, eNL80211_CMD_VENDOR, eNL80211_CMD_SET_QOS_MAP, eNL80211_CMD_ADD_TX_TS, eNL80211_CMD_DEL_TX_TS, eNL80211_CMD_GET_MPP, eNL80211_CMD_JOIN_OCB, eNL80211_CMD_LEAVE_OCB, eNL80211_CMD_CH_SWITCH_STARTED_NOTIFY, eNL80211_CMD_TDLS_CHANNEL_SWITCH, eNL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH, eNL80211_CMD_MAX, eNL80211_CMD_WIPHY_REG_CHANGE, NL80211Attrs, showNL80211Attrs, eNL80211_ATTR_UNSPEC, eNL80211_ATTR_WIPHY, eNL80211_ATTR_WIPHY_NAME, eNL80211_ATTR_IFINDEX, eNL80211_ATTR_IFNAME, eNL80211_ATTR_IFTYPE, eNL80211_ATTR_MAC, eNL80211_ATTR_KEY_DATA, eNL80211_ATTR_KEY_IDX, eNL80211_ATTR_KEY_CIPHER, eNL80211_ATTR_KEY_SEQ, eNL80211_ATTR_KEY_DEFAULT, eNL80211_ATTR_BEACON_INTERVAL, eNL80211_ATTR_DTIM_PERIOD, eNL80211_ATTR_BEACON_HEAD, eNL80211_ATTR_BEACON_TAIL, eNL80211_ATTR_STA_AID, eNL80211_ATTR_STA_FLAGS, eNL80211_ATTR_STA_LISTEN_INTERVAL, eNL80211_ATTR_STA_SUPPORTED_RATES, eNL80211_ATTR_STA_VLAN, eNL80211_ATTR_STA_INFO, eNL80211_ATTR_WIPHY_BANDS, eNL80211_ATTR_MNTR_FLAGS, eNL80211_ATTR_MESH_ID, eNL80211_ATTR_STA_PLINK_ACTION, eNL80211_ATTR_MPATH_NEXT_HOP, eNL80211_ATTR_MPATH_INFO, eNL80211_ATTR_BSS_CTS_PROT, eNL80211_ATTR_BSS_SHORT_PREAMBLE, eNL80211_ATTR_BSS_SHORT_SLOT_TIME, eNL80211_ATTR_HT_CAPABILITY, eNL80211_ATTR_SUPPORTED_IFTYPES, eNL80211_ATTR_REG_ALPHA2, eNL80211_ATTR_REG_RULES, eNL80211_ATTR_MESH_CONFIG, eNL80211_ATTR_BSS_BASIC_RATES, eNL80211_ATTR_WIPHY_TXQ_PARAMS, eNL80211_ATTR_WIPHY_FREQ, eNL80211_ATTR_WIPHY_CHANNEL_TYPE, eNL80211_ATTR_KEY_DEFAULT_MGMT, eNL80211_ATTR_MGMT_SUBTYPE, eNL80211_ATTR_IE, eNL80211_ATTR_MAX_NUM_SCAN_SSIDS, eNL80211_ATTR_SCAN_FREQUENCIES, eNL80211_ATTR_SCAN_SSIDS, eNL80211_ATTR_GENERATION, eNL80211_ATTR_BSS, eNL80211_ATTR_REG_INITIATOR, eNL80211_ATTR_REG_TYPE, eNL80211_ATTR_SUPPORTED_COMMANDS, eNL80211_ATTR_FRAME, eNL80211_ATTR_SSID, eNL80211_ATTR_AUTH_TYPE, eNL80211_ATTR_REASON_CODE, eNL80211_ATTR_KEY_TYPE, eNL80211_ATTR_MAX_SCAN_IE_LEN, eNL80211_ATTR_CIPHER_SUITES, eNL80211_ATTR_FREQ_BEFORE, eNL80211_ATTR_FREQ_AFTER, eNL80211_ATTR_FREQ_FIXED, eNL80211_ATTR_WIPHY_RETRY_SHORT, eNL80211_ATTR_WIPHY_RETRY_LONG, eNL80211_ATTR_WIPHY_FRAG_THRESHOLD, eNL80211_ATTR_WIPHY_RTS_THRESHOLD, eNL80211_ATTR_TIMED_OUT, eNL80211_ATTR_USE_MFP, eNL80211_ATTR_STA_FLAGS2, eNL80211_ATTR_CONTROL_PORT, eNL80211_ATTR_TESTDATA, eNL80211_ATTR_PRIVACY, eNL80211_ATTR_DISCONNECTED_BY_AP, eNL80211_ATTR_STATUS_CODE, eNL80211_ATTR_CIPHER_SUITES_PAIRWISE, eNL80211_ATTR_CIPHER_SUITE_GROUP, eNL80211_ATTR_WPA_VERSIONS, eNL80211_ATTR_AKM_SUITES, eNL80211_ATTR_REQ_IE, eNL80211_ATTR_RESP_IE, eNL80211_ATTR_PREV_BSSID, eNL80211_ATTR_KEY, eNL80211_ATTR_KEYS, eNL80211_ATTR_PID, eNL80211_ATTR_4ADDR, eNL80211_ATTR_SURVEY_INFO, eNL80211_ATTR_PMKID, eNL80211_ATTR_MAX_NUM_PMKIDS, eNL80211_ATTR_DURATION, eNL80211_ATTR_COOKIE, eNL80211_ATTR_WIPHY_COVERAGE_CLASS, eNL80211_ATTR_TX_RATES, eNL80211_ATTR_FRAME_MATCH, eNL80211_ATTR_ACK, eNL80211_ATTR_PS_STATE, eNL80211_ATTR_CQM, eNL80211_ATTR_LOCAL_STATE_CHANGE, eNL80211_ATTR_AP_ISOLATE, eNL80211_ATTR_WIPHY_TX_POWER_SETTING, eNL80211_ATTR_WIPHY_TX_POWER_LEVEL, eNL80211_ATTR_TX_FRAME_TYPES, eNL80211_ATTR_RX_FRAME_TYPES, eNL80211_ATTR_FRAME_TYPE, eNL80211_ATTR_CONTROL_PORT_ETHERTYPE, eNL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, eNL80211_ATTR_SUPPORT_IBSS_RSN, eNL80211_ATTR_WIPHY_ANTENNA_TX, eNL80211_ATTR_WIPHY_ANTENNA_RX, eNL80211_ATTR_MCAST_RATE, eNL80211_ATTR_OFFCHANNEL_TX_OK, eNL80211_ATTR_BSS_HT_OPMODE, eNL80211_ATTR_KEY_DEFAULT_TYPES, eNL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION, eNL80211_ATTR_MESH_SETUP, eNL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX, eNL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX, eNL80211_ATTR_SUPPORT_MESH_AUTH, eNL80211_ATTR_STA_PLINK_STATE, eNL80211_ATTR_WOWLAN_TRIGGERS, eNL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, eNL80211_ATTR_SCHED_SCAN_INTERVAL, eNL80211_ATTR_INTERFACE_COMBINATIONS, eNL80211_ATTR_SOFTWARE_IFTYPES, eNL80211_ATTR_REKEY_DATA, eNL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS, eNL80211_ATTR_MAX_SCHED_SCAN_IE_LEN, eNL80211_ATTR_SCAN_SUPP_RATES, eNL80211_ATTR_HIDDEN_SSID, eNL80211_ATTR_IE_PROBE_RESP, eNL80211_ATTR_IE_ASSOC_RESP, eNL80211_ATTR_STA_WME, eNL80211_ATTR_SUPPORT_AP_UAPSD, eNL80211_ATTR_ROAM_SUPPORT, eNL80211_ATTR_SCHED_SCAN_MATCH, eNL80211_ATTR_MAX_MATCH_SETS, eNL80211_ATTR_PMKSA_CANDIDATE, eNL80211_ATTR_TX_NO_CCK_RATE, eNL80211_ATTR_TDLS_ACTION, eNL80211_ATTR_TDLS_DIALOG_TOKEN, eNL80211_ATTR_TDLS_OPERATION, eNL80211_ATTR_TDLS_SUPPORT, eNL80211_ATTR_TDLS_EXTERNAL_SETUP, eNL80211_ATTR_DEVICE_AP_SME, eNL80211_ATTR_DONT_WAIT_FOR_ACK, eNL80211_ATTR_FEATURE_FLAGS, eNL80211_ATTR_PROBE_RESP_OFFLOAD, eNL80211_ATTR_PROBE_RESP, eNL80211_ATTR_DFS_REGION, eNL80211_ATTR_DISABLE_HT, eNL80211_ATTR_HT_CAPABILITY_MASK, eNL80211_ATTR_NOACK_MAP, eNL80211_ATTR_INACTIVITY_TIMEOUT, eNL80211_ATTR_RX_SIGNAL_DBM, eNL80211_ATTR_BG_SCAN_PERIOD, eNL80211_ATTR_WDEV, eNL80211_ATTR_USER_REG_HINT_TYPE, eNL80211_ATTR_CONN_FAILED_REASON, eNL80211_ATTR_SAE_DATA, eNL80211_ATTR_VHT_CAPABILITY, eNL80211_ATTR_SCAN_FLAGS, eNL80211_ATTR_CHANNEL_WIDTH, eNL80211_ATTR_CENTER_FREQ1, eNL80211_ATTR_CENTER_FREQ2, eNL80211_ATTR_P2P_CTWINDOW, eNL80211_ATTR_P2P_OPPPS, eNL80211_ATTR_LOCAL_MESH_POWER_MODE, eNL80211_ATTR_ACL_POLICY, eNL80211_ATTR_MAC_ADDRS, eNL80211_ATTR_MAC_ACL_MAX, eNL80211_ATTR_RADAR_EVENT, eNL80211_ATTR_EXT_CAPA, eNL80211_ATTR_EXT_CAPA_MASK, eNL80211_ATTR_STA_CAPABILITY, eNL80211_ATTR_STA_EXT_CAPABILITY, eNL80211_ATTR_PROTOCOL_FEATURES, eNL80211_ATTR_SPLIT_WIPHY_DUMP, eNL80211_ATTR_DISABLE_VHT, eNL80211_ATTR_VHT_CAPABILITY_MASK, eNL80211_ATTR_MDID, eNL80211_ATTR_IE_RIC, eNL80211_ATTR_CRIT_PROT_ID, eNL80211_ATTR_MAX_CRIT_PROT_DURATION, eNL80211_ATTR_PEER_AID, eNL80211_ATTR_COALESCE_RULE, eNL80211_ATTR_CH_SWITCH_COUNT, eNL80211_ATTR_CH_SWITCH_BLOCK_TX, eNL80211_ATTR_CSA_IES, eNL80211_ATTR_CSA_C_OFF_BEACON, eNL80211_ATTR_CSA_C_OFF_PRESP, eNL80211_ATTR_RXMGMT_FLAGS, eNL80211_ATTR_STA_SUPPORTED_CHANNELS, eNL80211_ATTR_STA_SUPPORTED_OPER_CLASSES, eNL80211_ATTR_HANDLE_DFS, eNL80211_ATTR_SUPPORT_5_MHZ, eNL80211_ATTR_SUPPORT_10_MHZ, eNL80211_ATTR_OPMODE_NOTIF, eNL80211_ATTR_VENDOR_ID, eNL80211_ATTR_VENDOR_SUBCMD, eNL80211_ATTR_VENDOR_DATA, eNL80211_ATTR_VENDOR_EVENTS, eNL80211_ATTR_QOS_MAP, eNL80211_ATTR_MAC_HINT, eNL80211_ATTR_WIPHY_FREQ_HINT, eNL80211_ATTR_MAX_AP_ASSOC_STA, eNL80211_ATTR_TDLS_PEER_CAPABILITY, eNL80211_ATTR_SOCKET_OWNER, eNL80211_ATTR_CSA_C_OFFSETS_TX, eNL80211_ATTR_MAX_CSA_COUNTERS, eNL80211_ATTR_TDLS_INITIATOR, eNL80211_ATTR_USE_RRM, eNL80211_ATTR_WIPHY_DYN_ACK, eNL80211_ATTR_TSID, eNL80211_ATTR_USER_PRIO, eNL80211_ATTR_ADMITTED_TIME, eNL80211_ATTR_SMPS_MODE, eNL80211_ATTR_OPER_CLASS, eNL80211_ATTR_MAC_MASK, eNL80211_ATTR_WIPHY_SELF_MANAGED_REG, eNL80211_ATTR_EXT_FEATURES, eNL80211_ATTR_SURVEY_RADIO_STATS, eNL80211_ATTR_NETNS_FD, eNL80211_ATTR_SCHED_SCAN_DELAY, eNL80211_ATTR_REG_INDOOR, eNL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS, eNL80211_ATTR_MAX_SCAN_PLAN_INTERVAL, eNL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS, eNL80211_ATTR_MAX, eNL80211_ATTR_SCHED_SCAN_PLANS, eNUM_NL80211_ATTR, NL80211Bss, showNL80211Bss, eNL80211_BSS_BSSID, eNL80211_BSS_FREQUENCY, eNL80211_BSS_TSF, eNL80211_BSS_BEACON_INTERVAL, eNL80211_BSS_CAPABILITY, eNL80211_BSS_INFORMATION_ELEMENTS, eNL80211_BSS_SIGNAL_MBM, eNL80211_BSS_SIGNAL_UNSPEC, eNL80211_BSS_STATUS, eNL80211_BSS_SEEN_MS_AGO, eNL80211_BSS_BEACON_IES, eNL80211_BSS_CHAN_WIDTH, eNL80211_BSS_BEACON_TSF, eNL80211_BSS_PRESP_DATA, eNL80211_BSS_LAST_SEEN_BOOTTIME, eNL80211_BSS_MAX, Nl80211StaInfo, showNl80211StaInfo, eNL80211_STA_INFO_INACTIVE_TIME, eNL80211_STA_INFO_RX_BYTES, eNL80211_STA_INFO_TX_BYTES, eNL80211_STA_INFO_LLID, eNL80211_STA_INFO_PLID, eNL80211_STA_INFO_PLINK_STATE, eNL80211_STA_INFO_SIGNAL, eNL80211_STA_INFO_TX_BITRATE, eNL80211_STA_INFO_RX_PACKETS, eNL80211_STA_INFO_TX_PACKETS, eNL80211_STA_INFO_TX_RETRIES, eNL80211_STA_INFO_TX_FAILED, eNL80211_STA_INFO_SIGNAL_AVG, eNL80211_STA_INFO_RX_BITRATE, eNL80211_STA_INFO_BSS_PARAM, eNL80211_STA_INFO_CONNECTED_TIME, eNL80211_STA_INFO_STA_FLAGS, eNL80211_STA_INFO_BEACON_LOSS, eNL80211_STA_INFO_T_OFFSET, eNL80211_STA_INFO_LOCAL_PM, eNL80211_STA_INFO_PEER_PM, eNL80211_STA_INFO_NONPEER_PM, eNL80211_STA_INFO_RX_BYTES64, eNL80211_STA_INFO_TX_BYTES64, eNL80211_STA_INFO_CHAIN_SIGNAL, eNL80211_STA_INFO_CHAIN_SIGNAL_AVG, eNL80211_STA_INFO_EXPECTED_THROUGHPUT, eNL80211_STA_INFO_RX_DROP_MISC, eNL80211_STA_INFO_BEACON_RX, eNL80211_STA_INFO_BEACON_SIGNAL_AVG, eNL80211_STA_INFO_MAX, eNL80211_STA_INFO_TID_STATS, IEEE80211EID, showIEEE80211EID, eWLAN_EID_SSID, eWLAN_EID_SUPP_RATES, eWLAN_EID_FH_PARAMS, eWLAN_EID_DS_PARAMS, eWLAN_EID_CF_PARAMS, eWLAN_EID_TIM, eWLAN_EID_IBSS_PARAMS, eWLAN_EID_COUNTRY, eWLAN_EID_REQUEST, eWLAN_EID_QBSS_LOAD, eWLAN_EID_EDCA_PARAM_SET, eWLAN_EID_TSPEC, eWLAN_EID_TCLAS, eWLAN_EID_SCHEDULE, eWLAN_EID_CHALLENGE, eWLAN_EID_PWR_CONSTRAINT, eWLAN_EID_PWR_CAPABILITY, eWLAN_EID_TPC_REQUEST, eWLAN_EID_TPC_REPORT, eWLAN_EID_SUPPORTED_CHANNELS, eWLAN_EID_CHANNEL_SWITCH, eWLAN_EID_MEASURE_REQUEST, eWLAN_EID_MEASURE_REPORT, eWLAN_EID_QUIET, eWLAN_EID_IBSS_DFS, eWLAN_EID_ERP_INFO, eWLAN_EID_TS_DELAY, eWLAN_EID_TCLAS_PROCESSING, eWLAN_EID_HT_CAPABILITY, eWLAN_EID_QOS_CAPA, eWLAN_EID_RSN, eWLAN_EID_802_15_COEX, eWLAN_EID_EXT_SUPP_RATES, eWLAN_EID_AP_CHAN_REPORT, eWLAN_EID_NEIGHBOR_REPORT, eWLAN_EID_RCPI, eWLAN_EID_MOBILITY_DOMAIN, eWLAN_EID_FAST_BSS_TRANSITION, eWLAN_EID_TIMEOUT_INTERVAL, eWLAN_EID_RIC_DATA, eWLAN_EID_DSE_REGISTERED_LOCATION, eWLAN_EID_SUPPORTED_REGULATORY_CLASSES, eWLAN_EID_EXT_CHANSWITCH_ANN, eWLAN_EID_HT_OPERATION, eWLAN_EID_SECONDARY_CHANNEL_OFFSET, eWLAN_EID_BSS_AVG_ACCESS_DELAY, eWLAN_EID_ANTENNA_INFO, eWLAN_EID_RSNI, eWLAN_EID_MEASUREMENT_PILOT_TX_INFO, eWLAN_EID_BSS_AVAILABLE_CAPACITY, eWLAN_EID_BSS_AC_ACCESS_DELAY, eWLAN_EID_TIME_ADVERTISEMENT, eWLAN_EID_RRM_ENABLED_CAPABILITIES, eWLAN_EID_MULTIPLE_BSSID, eWLAN_EID_BSS_COEX_2040, eWLAN_EID_BSS_INTOLERANT_CHL_REPORT, eWLAN_EID_OVERLAP_BSS_SCAN_PARAM, eWLAN_EID_RIC_DESCRIPTOR, eWLAN_EID_MMIE, eWLAN_EID_ASSOC_COMEBACK_TIME, eWLAN_EID_EVENT_REQUEST, eWLAN_EID_EVENT_REPORT, eWLAN_EID_DIAGNOSTIC_REQUEST, eWLAN_EID_DIAGNOSTIC_REPORT, eWLAN_EID_LOCATION_PARAMS, eWLAN_EID_NON_TX_BSSID_CAP, eWLAN_EID_SSID_LIST, eWLAN_EID_MULTI_BSSID_IDX, eWLAN_EID_FMS_DESCRIPTOR, eWLAN_EID_FMS_REQUEST, eWLAN_EID_FMS_RESPONSE, eWLAN_EID_QOS_TRAFFIC_CAPA, eWLAN_EID_BSS_MAX_IDLE_PERIOD, eWLAN_EID_TSF_REQUEST, eWLAN_EID_TSF_RESPOSNE, eWLAN_EID_WNM_SLEEP_MODE, eWLAN_EID_TIM_BCAST_REQ, eWLAN_EID_TIM_BCAST_RESP, eWLAN_EID_COLL_IF_REPORT, eWLAN_EID_CHANNEL_USAGE, eWLAN_EID_TIME_ZONE, eWLAN_EID_DMS_REQUEST, eWLAN_EID_DMS_RESPONSE, eWLAN_EID_LINK_ID, eWLAN_EID_WAKEUP_SCHEDUL, eWLAN_EID_CHAN_SWITCH_TIMING, eWLAN_EID_PTI_CONTROL, eWLAN_EID_PU_BUFFER_STATUS, eWLAN_EID_INTERWORKING, eWLAN_EID_ADVERTISEMENT_PROTOCOL, eWLAN_EID_EXPEDITED_BW_REQ, eWLAN_EID_QOS_MAP_SET, eWLAN_EID_ROAMING_CONSORTIUM, eWLAN_EID_EMERGENCY_ALERT, eWLAN_EID_MESH_CONFIG, eWLAN_EID_MESH_ID, eWLAN_EID_LINK_METRIC_REPORT, eWLAN_EID_CONGESTION_NOTIFICATION, eWLAN_EID_PEER_MGMT, eWLAN_EID_CHAN_SWITCH_PARAM, eWLAN_EID_MESH_AWAKE_WINDOW, eWLAN_EID_BEACON_TIMING, eWLAN_EID_MCCAOP_SETUP_REQ, eWLAN_EID_MCCAOP_SETUP_RESP, eWLAN_EID_MCCAOP_ADVERT, eWLAN_EID_MCCAOP_TEARDOWN, eWLAN_EID_GANN, eWLAN_EID_RANN, eWLAN_EID_EXT_CAPABILITY, eWLAN_EID_PREQ, eWLAN_EID_PREP, eWLAN_EID_PERR, eWLAN_EID_PXU, eWLAN_EID_PXUC, eWLAN_EID_AUTH_MESH_PEER_EXCH, eWLAN_EID_MIC, eWLAN_EID_DESTINATION_URI, eWLAN_EID_UAPSD_COEX, eWLAN_EID_WAKEUP_SCHEDULE, eWLAN_EID_EXT_SCHEDULE, eWLAN_EID_STA_AVAILABILITY, eWLAN_EID_DMG_TSPEC, eWLAN_EID_DMG_AT, eWLAN_EID_DMG_CAP, eWLAN_EID_CISCO_VENDOR_SPECIFIC, eWLAN_EID_DMG_OPERATION, eWLAN_EID_DMG_BSS_PARAM_CHANGE, eWLAN_EID_DMG_BEAM_REFINEMENT, eWLAN_EID_CHANNEL_MEASURE_FEEDBACK, eWLAN_EID_AWAKE_WINDOW, eWLAN_EID_MULTI_BAND, eWLAN_EID_ADDBA_EXT, eWLAN_EID_NEXT_PCP_LIST, eWLAN_EID_PCP_HANDOVER, eWLAN_EID_DMG_LINK_MARGIN, eWLAN_EID_SWITCHING_STREAM, eWLAN_EID_SESSION_TRANSITION, eWLAN_EID_DYN_TONE_PAIRING_REPORT, eWLAN_EID_CLUSTER_REPORT, eWLAN_EID_RELAY_CAP, eWLAN_EID_RELAY_XFER_PARAM_SET, eWLAN_EID_BEAM_LINK_MAINT, eWLAN_EID_MULTIPLE_MAC_ADDR, eWLAN_EID_U_PID, eWLAN_EID_DMG_LINK_ADAPT_ACK, eWLAN_EID_MCCAOP_ADV_OVERVIEW, eWLAN_EID_QUIET_PERIOD_REQ, eWLAN_EID_QUIET_PERIOD_RESP, eWLAN_EID_EPAC_POLICY, eWLAN_EID_CLISTER_TIME_OFF, eWLAN_EID_INTER_AC_PRIO, eWLAN_EID_SCS_DESCRIPTOR, eWLAN_EID_QLOAD_REPORT, eWLAN_EID_HCCA_TXOP_UPDATE_COUNT, eWLAN_EID_HL_STREAM_ID, eWLAN_EID_GCR_GROUP_ADDR, eWLAN_EID_ANTENNA_SECTOR_ID_PATTERN, eWLAN_EID_VHT_CAPABILITY, eWLAN_EID_VHT_OPERATION, eWLAN_EID_EXTENDED_BSS_LOAD, eWLAN_EID_WIDE_BW_CHANNEL_SWITCH, eWLAN_EID_VHT_TX_POWER_ENVELOPE, eWLAN_EID_CHANNEL_SWITCH_WRAPPER, eWLAN_EID_AID, eWLAN_EID_QUIET_CHANNEL, eWLAN_EID_OPMODE_NOTIF, eWLAN_EID_VENDOR_SPECIFIC, eWLAN_EID_QOS_PARAMETER) where+module System.Linux.Netlink.GeNetlink.NL80211.Constants (NL80211Commands, showNL80211Commands, eNL80211_CMD_UNSPEC, eNL80211_CMD_GET_WIPHY, eNL80211_CMD_SET_WIPHY, eNL80211_CMD_NEW_WIPHY, eNL80211_CMD_DEL_WIPHY, eNL80211_CMD_GET_INTERFACE, eNL80211_CMD_SET_INTERFACE, eNL80211_CMD_NEW_INTERFACE, eNL80211_CMD_DEL_INTERFACE, eNL80211_CMD_GET_KEY, eNL80211_CMD_SET_KEY, eNL80211_CMD_NEW_KEY, eNL80211_CMD_DEL_KEY, eNL80211_CMD_GET_BEACON, eNL80211_CMD_SET_BEACON, eNL80211_CMD_NEW_BEACON, eNL80211_CMD_START_AP, eNL80211_CMD_DEL_BEACON, eNL80211_CMD_STOP_AP, eNL80211_CMD_GET_STATION, eNL80211_CMD_SET_STATION, eNL80211_CMD_NEW_STATION, eNL80211_CMD_DEL_STATION, eNL80211_CMD_GET_MPATH, eNL80211_CMD_SET_MPATH, eNL80211_CMD_NEW_MPATH, eNL80211_CMD_DEL_MPATH, eNL80211_CMD_SET_BSS, eNL80211_CMD_SET_REG, eNL80211_CMD_REQ_SET_REG, eNL80211_CMD_GET_MESH_CONFIG, eNL80211_CMD_SET_MESH_CONFIG, eNL80211_CMD_SET_MGMT_EXTRA_IE, eNL80211_CMD_GET_REG, eNL80211_CMD_GET_SCAN, eNL80211_CMD_TRIGGER_SCAN, eNL80211_CMD_NEW_SCAN_RESULTS, eNL80211_CMD_SCAN_ABORTED, eNL80211_CMD_REG_CHANGE, eNL80211_CMD_AUTHENTICATE, eNL80211_CMD_ASSOCIATE, eNL80211_CMD_DEAUTHENTICATE, eNL80211_CMD_DISASSOCIATE, eNL80211_CMD_MICHAEL_MIC_FAILURE, eNL80211_CMD_REG_BEACON_HINT, eNL80211_CMD_JOIN_IBSS, eNL80211_CMD_LEAVE_IBSS, eNL80211_CMD_TESTMODE, eNL80211_CMD_CONNECT, eNL80211_CMD_ROAM, eNL80211_CMD_DISCONNECT, eNL80211_CMD_SET_WIPHY_NETNS, eNL80211_CMD_GET_SURVEY, eNL80211_CMD_NEW_SURVEY_RESULTS, eNL80211_CMD_SET_PMKSA, eNL80211_CMD_DEL_PMKSA, eNL80211_CMD_FLUSH_PMKSA, eNL80211_CMD_REMAIN_ON_CHANNEL, eNL80211_CMD_CANCEL_REMAIN_ON_CHANNEL, eNL80211_CMD_SET_TX_BITRATE_MASK, eNL80211_CMD_REGISTER_ACTION, eNL80211_CMD_REGISTER_FRAME, eNL80211_CMD_ACTION, eNL80211_CMD_FRAME, eNL80211_CMD_ACTION_TX_STATUS, eNL80211_CMD_FRAME_TX_STATUS, eNL80211_CMD_SET_POWER_SAVE, eNL80211_CMD_GET_POWER_SAVE, eNL80211_CMD_SET_CQM, eNL80211_CMD_NOTIFY_CQM, eNL80211_CMD_SET_CHANNEL, eNL80211_CMD_SET_WDS_PEER, eNL80211_CMD_FRAME_WAIT_CANCEL, eNL80211_CMD_JOIN_MESH, eNL80211_CMD_LEAVE_MESH, eNL80211_CMD_UNPROT_DEAUTHENTICATE, eNL80211_CMD_UNPROT_DISASSOCIATE, eNL80211_CMD_NEW_PEER_CANDIDATE, eNL80211_CMD_GET_WOWLAN, eNL80211_CMD_SET_WOWLAN, eNL80211_CMD_START_SCHED_SCAN, eNL80211_CMD_STOP_SCHED_SCAN, eNL80211_CMD_SCHED_SCAN_RESULTS, eNL80211_CMD_SCHED_SCAN_STOPPED, eNL80211_CMD_SET_REKEY_OFFLOAD, eNL80211_CMD_PMKSA_CANDIDATE, eNL80211_CMD_TDLS_OPER, eNL80211_CMD_TDLS_MGMT, eNL80211_CMD_UNEXPECTED_FRAME, eNL80211_CMD_PROBE_CLIENT, eNL80211_CMD_REGISTER_BEACONS, eNL80211_CMD_UNEXPECTED_4ADDR_FRAME, eNL80211_CMD_SET_NOACK_MAP, eNL80211_CMD_CH_SWITCH_NOTIFY, eNL80211_CMD_START_P2P_DEVICE, eNL80211_CMD_STOP_P2P_DEVICE, eNL80211_CMD_CONN_FAILED, eNL80211_CMD_SET_MCAST_RATE, eNL80211_CMD_SET_MAC_ACL, eNL80211_CMD_RADAR_DETECT, eNL80211_CMD_GET_PROTOCOL_FEATURES, eNL80211_CMD_UPDATE_FT_IES, eNL80211_CMD_FT_EVENT, eNL80211_CMD_CRIT_PROTOCOL_START, eNL80211_CMD_CRIT_PROTOCOL_STOP, eNL80211_CMD_GET_COALESCE, eNL80211_CMD_SET_COALESCE, eNL80211_CMD_CHANNEL_SWITCH, eNL80211_CMD_VENDOR, eNL80211_CMD_SET_QOS_MAP, eNL80211_CMD_ADD_TX_TS, eNL80211_CMD_DEL_TX_TS, eNL80211_CMD_GET_MPP, eNL80211_CMD_JOIN_OCB, eNL80211_CMD_LEAVE_OCB, eNL80211_CMD_CH_SWITCH_STARTED_NOTIFY, eNL80211_CMD_TDLS_CHANNEL_SWITCH, eNL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH, eNL80211_CMD_WIPHY_REG_CHANGE, eNL80211_CMD_ABORT_SCAN, eNL80211_CMD_MAX, NL80211Attrs, showNL80211Attrs, eNL80211_ATTR_UNSPEC, eNL80211_ATTR_WIPHY, eNL80211_ATTR_WIPHY_NAME, eNL80211_ATTR_IFINDEX, eNL80211_ATTR_IFNAME, eNL80211_ATTR_IFTYPE, eNL80211_ATTR_MAC, eNL80211_ATTR_KEY_DATA, eNL80211_ATTR_KEY_IDX, eNL80211_ATTR_KEY_CIPHER, eNL80211_ATTR_KEY_SEQ, eNL80211_ATTR_KEY_DEFAULT, eNL80211_ATTR_BEACON_INTERVAL, eNL80211_ATTR_DTIM_PERIOD, eNL80211_ATTR_BEACON_HEAD, eNL80211_ATTR_BEACON_TAIL, eNL80211_ATTR_STA_AID, eNL80211_ATTR_STA_FLAGS, eNL80211_ATTR_STA_LISTEN_INTERVAL, eNL80211_ATTR_STA_SUPPORTED_RATES, eNL80211_ATTR_STA_VLAN, eNL80211_ATTR_STA_INFO, eNL80211_ATTR_WIPHY_BANDS, eNL80211_ATTR_MNTR_FLAGS, eNL80211_ATTR_MESH_ID, eNL80211_ATTR_STA_PLINK_ACTION, eNL80211_ATTR_MPATH_NEXT_HOP, eNL80211_ATTR_MPATH_INFO, eNL80211_ATTR_BSS_CTS_PROT, eNL80211_ATTR_BSS_SHORT_PREAMBLE, eNL80211_ATTR_BSS_SHORT_SLOT_TIME, eNL80211_ATTR_HT_CAPABILITY, eNL80211_ATTR_SUPPORTED_IFTYPES, eNL80211_ATTR_REG_ALPHA2, eNL80211_ATTR_REG_RULES, eNL80211_ATTR_MESH_CONFIG, eNL80211_ATTR_BSS_BASIC_RATES, eNL80211_ATTR_WIPHY_TXQ_PARAMS, eNL80211_ATTR_WIPHY_FREQ, eNL80211_ATTR_WIPHY_CHANNEL_TYPE, eNL80211_ATTR_KEY_DEFAULT_MGMT, eNL80211_ATTR_MGMT_SUBTYPE, eNL80211_ATTR_IE, eNL80211_ATTR_MAX_NUM_SCAN_SSIDS, eNL80211_ATTR_SCAN_FREQUENCIES, eNL80211_ATTR_SCAN_SSIDS, eNL80211_ATTR_GENERATION, eNL80211_ATTR_BSS, eNL80211_ATTR_REG_INITIATOR, eNL80211_ATTR_REG_TYPE, eNL80211_ATTR_SUPPORTED_COMMANDS, eNL80211_ATTR_FRAME, eNL80211_ATTR_SSID, eNL80211_ATTR_AUTH_TYPE, eNL80211_ATTR_REASON_CODE, eNL80211_ATTR_KEY_TYPE, eNL80211_ATTR_MAX_SCAN_IE_LEN, eNL80211_ATTR_CIPHER_SUITES, eNL80211_ATTR_FREQ_BEFORE, eNL80211_ATTR_FREQ_AFTER, eNL80211_ATTR_FREQ_FIXED, eNL80211_ATTR_WIPHY_RETRY_SHORT, eNL80211_ATTR_WIPHY_RETRY_LONG, eNL80211_ATTR_WIPHY_FRAG_THRESHOLD, eNL80211_ATTR_WIPHY_RTS_THRESHOLD, eNL80211_ATTR_TIMED_OUT, eNL80211_ATTR_USE_MFP, eNL80211_ATTR_STA_FLAGS2, eNL80211_ATTR_CONTROL_PORT, eNL80211_ATTR_TESTDATA, eNL80211_ATTR_PRIVACY, eNL80211_ATTR_DISCONNECTED_BY_AP, eNL80211_ATTR_STATUS_CODE, eNL80211_ATTR_CIPHER_SUITES_PAIRWISE, eNL80211_ATTR_CIPHER_SUITE_GROUP, eNL80211_ATTR_WPA_VERSIONS, eNL80211_ATTR_AKM_SUITES, eNL80211_ATTR_REQ_IE, eNL80211_ATTR_RESP_IE, eNL80211_ATTR_PREV_BSSID, eNL80211_ATTR_KEY, eNL80211_ATTR_KEYS, eNL80211_ATTR_PID, eNL80211_ATTR_4ADDR, eNL80211_ATTR_SURVEY_INFO, eNL80211_ATTR_PMKID, eNL80211_ATTR_MAX_NUM_PMKIDS, eNL80211_ATTR_DURATION, eNL80211_ATTR_COOKIE, eNL80211_ATTR_WIPHY_COVERAGE_CLASS, eNL80211_ATTR_TX_RATES, eNL80211_ATTR_FRAME_MATCH, eNL80211_ATTR_ACK, eNL80211_ATTR_PS_STATE, eNL80211_ATTR_CQM, eNL80211_ATTR_LOCAL_STATE_CHANGE, eNL80211_ATTR_AP_ISOLATE, eNL80211_ATTR_WIPHY_TX_POWER_SETTING, eNL80211_ATTR_WIPHY_TX_POWER_LEVEL, eNL80211_ATTR_TX_FRAME_TYPES, eNL80211_ATTR_RX_FRAME_TYPES, eNL80211_ATTR_FRAME_TYPE, eNL80211_ATTR_CONTROL_PORT_ETHERTYPE, eNL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, eNL80211_ATTR_SUPPORT_IBSS_RSN, eNL80211_ATTR_WIPHY_ANTENNA_TX, eNL80211_ATTR_WIPHY_ANTENNA_RX, eNL80211_ATTR_MCAST_RATE, eNL80211_ATTR_OFFCHANNEL_TX_OK, eNL80211_ATTR_BSS_HT_OPMODE, eNL80211_ATTR_KEY_DEFAULT_TYPES, eNL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION, eNL80211_ATTR_MESH_SETUP, eNL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX, eNL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX, eNL80211_ATTR_SUPPORT_MESH_AUTH, eNL80211_ATTR_STA_PLINK_STATE, eNL80211_ATTR_WOWLAN_TRIGGERS, eNL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, eNL80211_ATTR_SCHED_SCAN_INTERVAL, eNL80211_ATTR_INTERFACE_COMBINATIONS, eNL80211_ATTR_SOFTWARE_IFTYPES, eNL80211_ATTR_REKEY_DATA, eNL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS, eNL80211_ATTR_MAX_SCHED_SCAN_IE_LEN, eNL80211_ATTR_SCAN_SUPP_RATES, eNL80211_ATTR_HIDDEN_SSID, eNL80211_ATTR_IE_PROBE_RESP, eNL80211_ATTR_IE_ASSOC_RESP, eNL80211_ATTR_STA_WME, eNL80211_ATTR_SUPPORT_AP_UAPSD, eNL80211_ATTR_ROAM_SUPPORT, eNL80211_ATTR_SCHED_SCAN_MATCH, eNL80211_ATTR_MAX_MATCH_SETS, eNL80211_ATTR_PMKSA_CANDIDATE, eNL80211_ATTR_TX_NO_CCK_RATE, eNL80211_ATTR_TDLS_ACTION, eNL80211_ATTR_TDLS_DIALOG_TOKEN, eNL80211_ATTR_TDLS_OPERATION, eNL80211_ATTR_TDLS_SUPPORT, eNL80211_ATTR_TDLS_EXTERNAL_SETUP, eNL80211_ATTR_DEVICE_AP_SME, eNL80211_ATTR_DONT_WAIT_FOR_ACK, eNL80211_ATTR_FEATURE_FLAGS, eNL80211_ATTR_PROBE_RESP_OFFLOAD, eNL80211_ATTR_PROBE_RESP, eNL80211_ATTR_DFS_REGION, eNL80211_ATTR_DISABLE_HT, eNL80211_ATTR_HT_CAPABILITY_MASK, eNL80211_ATTR_NOACK_MAP, eNL80211_ATTR_INACTIVITY_TIMEOUT, eNL80211_ATTR_RX_SIGNAL_DBM, eNL80211_ATTR_BG_SCAN_PERIOD, eNL80211_ATTR_WDEV, eNL80211_ATTR_USER_REG_HINT_TYPE, eNL80211_ATTR_CONN_FAILED_REASON, eNL80211_ATTR_SAE_DATA, eNL80211_ATTR_VHT_CAPABILITY, eNL80211_ATTR_SCAN_FLAGS, eNL80211_ATTR_CHANNEL_WIDTH, eNL80211_ATTR_CENTER_FREQ1, eNL80211_ATTR_CENTER_FREQ2, eNL80211_ATTR_P2P_CTWINDOW, eNL80211_ATTR_P2P_OPPPS, eNL80211_ATTR_LOCAL_MESH_POWER_MODE, eNL80211_ATTR_ACL_POLICY, eNL80211_ATTR_MAC_ADDRS, eNL80211_ATTR_MAC_ACL_MAX, eNL80211_ATTR_RADAR_EVENT, eNL80211_ATTR_EXT_CAPA, eNL80211_ATTR_EXT_CAPA_MASK, eNL80211_ATTR_STA_CAPABILITY, eNL80211_ATTR_STA_EXT_CAPABILITY, eNL80211_ATTR_PROTOCOL_FEATURES, eNL80211_ATTR_SPLIT_WIPHY_DUMP, eNL80211_ATTR_DISABLE_VHT, eNL80211_ATTR_VHT_CAPABILITY_MASK, eNL80211_ATTR_MDID, eNL80211_ATTR_IE_RIC, eNL80211_ATTR_CRIT_PROT_ID, eNL80211_ATTR_MAX_CRIT_PROT_DURATION, eNL80211_ATTR_PEER_AID, eNL80211_ATTR_COALESCE_RULE, eNL80211_ATTR_CH_SWITCH_COUNT, eNL80211_ATTR_CH_SWITCH_BLOCK_TX, eNL80211_ATTR_CSA_IES, eNL80211_ATTR_CSA_C_OFF_BEACON, eNL80211_ATTR_CSA_C_OFF_PRESP, eNL80211_ATTR_RXMGMT_FLAGS, eNL80211_ATTR_STA_SUPPORTED_CHANNELS, eNL80211_ATTR_STA_SUPPORTED_OPER_CLASSES, eNL80211_ATTR_HANDLE_DFS, eNL80211_ATTR_SUPPORT_5_MHZ, eNL80211_ATTR_SUPPORT_10_MHZ, eNL80211_ATTR_OPMODE_NOTIF, eNL80211_ATTR_VENDOR_ID, eNL80211_ATTR_VENDOR_SUBCMD, eNL80211_ATTR_VENDOR_DATA, eNL80211_ATTR_VENDOR_EVENTS, eNL80211_ATTR_QOS_MAP, eNL80211_ATTR_MAC_HINT, eNL80211_ATTR_WIPHY_FREQ_HINT, eNL80211_ATTR_MAX_AP_ASSOC_STA, eNL80211_ATTR_TDLS_PEER_CAPABILITY, eNL80211_ATTR_SOCKET_OWNER, eNL80211_ATTR_CSA_C_OFFSETS_TX, eNL80211_ATTR_MAX_CSA_COUNTERS, eNL80211_ATTR_TDLS_INITIATOR, eNL80211_ATTR_USE_RRM, eNL80211_ATTR_WIPHY_DYN_ACK, eNL80211_ATTR_TSID, eNL80211_ATTR_USER_PRIO, eNL80211_ATTR_ADMITTED_TIME, eNL80211_ATTR_SMPS_MODE, eNL80211_ATTR_OPER_CLASS, eNL80211_ATTR_MAC_MASK, eNL80211_ATTR_WIPHY_SELF_MANAGED_REG, eNL80211_ATTR_EXT_FEATURES, eNL80211_ATTR_SURVEY_RADIO_STATS, eNL80211_ATTR_NETNS_FD, eNL80211_ATTR_SCHED_SCAN_DELAY, eNL80211_ATTR_REG_INDOOR, eNL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS, eNL80211_ATTR_MAX_SCAN_PLAN_INTERVAL, eNL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS, eNL80211_ATTR_SCHED_SCAN_PLANS, eNL80211_ATTR_PBSS, eNL80211_ATTR_BSS_SELECT, eNL80211_ATTR_STA_SUPPORT_P2P_PS, eNL80211_ATTR_MAX, eNL80211_ATTR_PAD, eNUM_NL80211_ATTR, NL80211Bss, showNL80211Bss, eNL80211_BSS_BSSID, eNL80211_BSS_FREQUENCY, eNL80211_BSS_TSF, eNL80211_BSS_BEACON_INTERVAL, eNL80211_BSS_CAPABILITY, eNL80211_BSS_INFORMATION_ELEMENTS, eNL80211_BSS_SIGNAL_MBM, eNL80211_BSS_SIGNAL_UNSPEC, eNL80211_BSS_STATUS, eNL80211_BSS_SEEN_MS_AGO, eNL80211_BSS_BEACON_IES, eNL80211_BSS_CHAN_WIDTH, eNL80211_BSS_BEACON_TSF, eNL80211_BSS_PRESP_DATA, eNL80211_BSS_LAST_SEEN_BOOTTIME, eNL80211_BSS_MAX, eNL80211_BSS_PAD, Nl80211StaInfo, showNl80211StaInfo, eNL80211_STA_INFO_INACTIVE_TIME, eNL80211_STA_INFO_RX_BYTES, eNL80211_STA_INFO_TX_BYTES, eNL80211_STA_INFO_LLID, eNL80211_STA_INFO_PLID, eNL80211_STA_INFO_PLINK_STATE, eNL80211_STA_INFO_SIGNAL, eNL80211_STA_INFO_TX_BITRATE, eNL80211_STA_INFO_RX_PACKETS, eNL80211_STA_INFO_TX_PACKETS, eNL80211_STA_INFO_TX_RETRIES, eNL80211_STA_INFO_TX_FAILED, eNL80211_STA_INFO_SIGNAL_AVG, eNL80211_STA_INFO_RX_BITRATE, eNL80211_STA_INFO_BSS_PARAM, eNL80211_STA_INFO_CONNECTED_TIME, eNL80211_STA_INFO_STA_FLAGS, eNL80211_STA_INFO_BEACON_LOSS, eNL80211_STA_INFO_T_OFFSET, eNL80211_STA_INFO_LOCAL_PM, eNL80211_STA_INFO_PEER_PM, eNL80211_STA_INFO_NONPEER_PM, eNL80211_STA_INFO_RX_BYTES64, eNL80211_STA_INFO_TX_BYTES64, eNL80211_STA_INFO_CHAIN_SIGNAL, eNL80211_STA_INFO_CHAIN_SIGNAL_AVG, eNL80211_STA_INFO_EXPECTED_THROUGHPUT, eNL80211_STA_INFO_RX_DROP_MISC, eNL80211_STA_INFO_BEACON_RX, eNL80211_STA_INFO_BEACON_SIGNAL_AVG, eNL80211_STA_INFO_TID_STATS, eNL80211_STA_INFO_RX_DURATION, eNL80211_STA_INFO_MAX, eNL80211_STA_INFO_PAD, IEEE80211EID, showIEEE80211EID, eWLAN_EID_SSID, eWLAN_EID_SUPP_RATES, eWLAN_EID_FH_PARAMS, eWLAN_EID_DS_PARAMS, eWLAN_EID_CF_PARAMS, eWLAN_EID_TIM, eWLAN_EID_IBSS_PARAMS, eWLAN_EID_COUNTRY, eWLAN_EID_REQUEST, eWLAN_EID_QBSS_LOAD, eWLAN_EID_EDCA_PARAM_SET, eWLAN_EID_TSPEC, eWLAN_EID_TCLAS, eWLAN_EID_SCHEDULE, eWLAN_EID_CHALLENGE, eWLAN_EID_PWR_CONSTRAINT, eWLAN_EID_PWR_CAPABILITY, eWLAN_EID_TPC_REQUEST, eWLAN_EID_TPC_REPORT, eWLAN_EID_SUPPORTED_CHANNELS, eWLAN_EID_CHANNEL_SWITCH, eWLAN_EID_MEASURE_REQUEST, eWLAN_EID_MEASURE_REPORT, eWLAN_EID_QUIET, eWLAN_EID_IBSS_DFS, eWLAN_EID_ERP_INFO, eWLAN_EID_TS_DELAY, eWLAN_EID_TCLAS_PROCESSING, eWLAN_EID_HT_CAPABILITY, eWLAN_EID_QOS_CAPA, eWLAN_EID_RSN, eWLAN_EID_802_15_COEX, eWLAN_EID_EXT_SUPP_RATES, eWLAN_EID_AP_CHAN_REPORT, eWLAN_EID_NEIGHBOR_REPORT, eWLAN_EID_RCPI, eWLAN_EID_MOBILITY_DOMAIN, eWLAN_EID_FAST_BSS_TRANSITION, eWLAN_EID_TIMEOUT_INTERVAL, eWLAN_EID_RIC_DATA, eWLAN_EID_DSE_REGISTERED_LOCATION, eWLAN_EID_SUPPORTED_REGULATORY_CLASSES, eWLAN_EID_EXT_CHANSWITCH_ANN, eWLAN_EID_HT_OPERATION, eWLAN_EID_SECONDARY_CHANNEL_OFFSET, eWLAN_EID_BSS_AVG_ACCESS_DELAY, eWLAN_EID_ANTENNA_INFO, eWLAN_EID_RSNI, eWLAN_EID_MEASUREMENT_PILOT_TX_INFO, eWLAN_EID_BSS_AVAILABLE_CAPACITY, eWLAN_EID_BSS_AC_ACCESS_DELAY, eWLAN_EID_TIME_ADVERTISEMENT, eWLAN_EID_RRM_ENABLED_CAPABILITIES, eWLAN_EID_MULTIPLE_BSSID, eWLAN_EID_BSS_COEX_2040, eWLAN_EID_BSS_INTOLERANT_CHL_REPORT, eWLAN_EID_OVERLAP_BSS_SCAN_PARAM, eWLAN_EID_RIC_DESCRIPTOR, eWLAN_EID_MMIE, eWLAN_EID_ASSOC_COMEBACK_TIME, eWLAN_EID_EVENT_REQUEST, eWLAN_EID_EVENT_REPORT, eWLAN_EID_DIAGNOSTIC_REQUEST, eWLAN_EID_DIAGNOSTIC_REPORT, eWLAN_EID_LOCATION_PARAMS, eWLAN_EID_NON_TX_BSSID_CAP, eWLAN_EID_SSID_LIST, eWLAN_EID_MULTI_BSSID_IDX, eWLAN_EID_FMS_DESCRIPTOR, eWLAN_EID_FMS_REQUEST, eWLAN_EID_FMS_RESPONSE, eWLAN_EID_QOS_TRAFFIC_CAPA, eWLAN_EID_BSS_MAX_IDLE_PERIOD, eWLAN_EID_TSF_REQUEST, eWLAN_EID_TSF_RESPOSNE, eWLAN_EID_WNM_SLEEP_MODE, eWLAN_EID_TIM_BCAST_REQ, eWLAN_EID_TIM_BCAST_RESP, eWLAN_EID_COLL_IF_REPORT, eWLAN_EID_CHANNEL_USAGE, eWLAN_EID_TIME_ZONE, eWLAN_EID_DMS_REQUEST, eWLAN_EID_DMS_RESPONSE, eWLAN_EID_LINK_ID, eWLAN_EID_WAKEUP_SCHEDUL, eWLAN_EID_CHAN_SWITCH_TIMING, eWLAN_EID_PTI_CONTROL, eWLAN_EID_PU_BUFFER_STATUS, eWLAN_EID_INTERWORKING, eWLAN_EID_ADVERTISEMENT_PROTOCOL, eWLAN_EID_EXPEDITED_BW_REQ, eWLAN_EID_QOS_MAP_SET, eWLAN_EID_ROAMING_CONSORTIUM, eWLAN_EID_EMERGENCY_ALERT, eWLAN_EID_MESH_CONFIG, eWLAN_EID_MESH_ID, eWLAN_EID_LINK_METRIC_REPORT, eWLAN_EID_CONGESTION_NOTIFICATION, eWLAN_EID_PEER_MGMT, eWLAN_EID_CHAN_SWITCH_PARAM, eWLAN_EID_MESH_AWAKE_WINDOW, eWLAN_EID_BEACON_TIMING, eWLAN_EID_MCCAOP_SETUP_REQ, eWLAN_EID_MCCAOP_SETUP_RESP, eWLAN_EID_MCCAOP_ADVERT, eWLAN_EID_MCCAOP_TEARDOWN, eWLAN_EID_GANN, eWLAN_EID_RANN, eWLAN_EID_EXT_CAPABILITY, eWLAN_EID_PREQ, eWLAN_EID_PREP, eWLAN_EID_PERR, eWLAN_EID_PXU, eWLAN_EID_PXUC, eWLAN_EID_AUTH_MESH_PEER_EXCH, eWLAN_EID_MIC, eWLAN_EID_DESTINATION_URI, eWLAN_EID_UAPSD_COEX, eWLAN_EID_WAKEUP_SCHEDULE, eWLAN_EID_EXT_SCHEDULE, eWLAN_EID_STA_AVAILABILITY, eWLAN_EID_DMG_TSPEC, eWLAN_EID_DMG_AT, eWLAN_EID_DMG_CAP, eWLAN_EID_CISCO_VENDOR_SPECIFIC, eWLAN_EID_DMG_OPERATION, eWLAN_EID_DMG_BSS_PARAM_CHANGE, eWLAN_EID_DMG_BEAM_REFINEMENT, eWLAN_EID_CHANNEL_MEASURE_FEEDBACK, eWLAN_EID_AWAKE_WINDOW, eWLAN_EID_MULTI_BAND, eWLAN_EID_ADDBA_EXT, eWLAN_EID_NEXT_PCP_LIST, eWLAN_EID_PCP_HANDOVER, eWLAN_EID_DMG_LINK_MARGIN, eWLAN_EID_SWITCHING_STREAM, eWLAN_EID_SESSION_TRANSITION, eWLAN_EID_DYN_TONE_PAIRING_REPORT, eWLAN_EID_CLUSTER_REPORT, eWLAN_EID_RELAY_CAP, eWLAN_EID_RELAY_XFER_PARAM_SET, eWLAN_EID_BEAM_LINK_MAINT, eWLAN_EID_MULTIPLE_MAC_ADDR, eWLAN_EID_U_PID, eWLAN_EID_DMG_LINK_ADAPT_ACK, eWLAN_EID_MCCAOP_ADV_OVERVIEW, eWLAN_EID_QUIET_PERIOD_REQ, eWLAN_EID_QUIET_PERIOD_RESP, eWLAN_EID_EPAC_POLICY, eWLAN_EID_CLISTER_TIME_OFF, eWLAN_EID_INTER_AC_PRIO, eWLAN_EID_SCS_DESCRIPTOR, eWLAN_EID_QLOAD_REPORT, eWLAN_EID_HCCA_TXOP_UPDATE_COUNT, eWLAN_EID_HL_STREAM_ID, eWLAN_EID_GCR_GROUP_ADDR, eWLAN_EID_ANTENNA_SECTOR_ID_PATTERN, eWLAN_EID_VHT_CAPABILITY, eWLAN_EID_VHT_OPERATION, eWLAN_EID_EXTENDED_BSS_LOAD, eWLAN_EID_WIDE_BW_CHANNEL_SWITCH, eWLAN_EID_VHT_TX_POWER_ENVELOPE, eWLAN_EID_CHANNEL_SWITCH_WRAPPER, eWLAN_EID_AID, eWLAN_EID_QUIET_CHANNEL, eWLAN_EID_OPMODE_NOTIF, eWLAN_EID_VENDOR_SPECIFIC, eWLAN_EID_QOS_PARAMETER, NL80211RateInfo, showNL80211RateInfo, eNL80211_RATE_INFO_BITRATE, eNL80211_RATE_INFO_MCS, eNL80211_RATE_INFO_40_MHZ_WIDTH, eNL80211_RATE_INFO_SHORT_GI, eNL80211_RATE_INFO_BITRATE32, eNL80211_RATE_INFO_VHT_MCS, eNL80211_RATE_INFO_VHT_NSS, eNL80211_RATE_INFO_80_MHZ_WIDTH, eNL80211_RATE_INFO_80P80_MHZ_WIDTH, eNL80211_RATE_INFO_160_MHZ_WIDTH, eNL80211_RATE_INFO_10_MHZ_WIDTH, eNL80211_RATE_INFO_5_MHZ_WIDTH, eNL80211_RATE_INFO_MAX) where newtype NL80211Commands = NL80211Commands Int deriving (Eq, Enum, Integral, Num, Ord, Real, Show) @@ -118,7 +118,8 @@ showNL80211Commands 110 = "NL80211_CMD_CH_SWITCH_STARTED_NOTIFY" showNL80211Commands 111 = "NL80211_CMD_TDLS_CHANNEL_SWITCH" showNL80211Commands 112 = "NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH"-showNL80211Commands 113 = "NL80211_CMD_MAX"+showNL80211Commands 113 = "NL80211_CMD_WIPHY_REG_CHANGE"+showNL80211Commands 114 = "NL80211_CMD_ABORT_SCAN" showNL80211Commands i = "NL80211Commands #" ++ (show i) @@ -358,10 +359,12 @@ eNL80211_CMD_TDLS_CHANNEL_SWITCH = 111 eNL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH :: (Num a) => a eNL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH = 112-eNL80211_CMD_MAX :: (Num a) => a-eNL80211_CMD_MAX = 113 eNL80211_CMD_WIPHY_REG_CHANGE :: (Num a) => a eNL80211_CMD_WIPHY_REG_CHANGE = 113+eNL80211_CMD_ABORT_SCAN :: (Num a) => a+eNL80211_CMD_ABORT_SCAN = 114+eNL80211_CMD_MAX :: (Num a) => a+eNL80211_CMD_MAX = 114 newtype NL80211Attrs = NL80211Attrs Int deriving (Eq, Enum, Integral, Num, Ord, Real, Show) showNL80211Attrs :: (Num a) => (Show a) => (Eq a) => a -> String@@ -590,8 +593,12 @@ showNL80211Attrs 222 = "NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS" showNL80211Attrs 223 = "NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL" showNL80211Attrs 224 = "NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS"-showNL80211Attrs 225 = "NL80211_ATTR_MAX"-showNL80211Attrs 226 = "NUM_NL80211_ATTR"+showNL80211Attrs 225 = "NL80211_ATTR_SCHED_SCAN_PLANS"+showNL80211Attrs 226 = "NL80211_ATTR_PBSS"+showNL80211Attrs 227 = "NL80211_ATTR_BSS_SELECT"+showNL80211Attrs 228 = "NL80211_ATTR_STA_SUPPORT_P2P_PS"+showNL80211Attrs 229 = "NL80211_ATTR_MAX"+showNL80211Attrs 230 = "NUM_NL80211_ATTR" showNL80211Attrs i = "NL80211Attrs #" ++ (show i) @@ -1045,12 +1052,20 @@ eNL80211_ATTR_MAX_SCAN_PLAN_INTERVAL = 223 eNL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS :: (Num a) => a eNL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS = 224-eNL80211_ATTR_MAX :: (Num a) => a-eNL80211_ATTR_MAX = 225 eNL80211_ATTR_SCHED_SCAN_PLANS :: (Num a) => a eNL80211_ATTR_SCHED_SCAN_PLANS = 225+eNL80211_ATTR_PBSS :: (Num a) => a+eNL80211_ATTR_PBSS = 226+eNL80211_ATTR_BSS_SELECT :: (Num a) => a+eNL80211_ATTR_BSS_SELECT = 227+eNL80211_ATTR_STA_SUPPORT_P2P_PS :: (Num a) => a+eNL80211_ATTR_STA_SUPPORT_P2P_PS = 228+eNL80211_ATTR_MAX :: (Num a) => a+eNL80211_ATTR_MAX = 229+eNL80211_ATTR_PAD :: (Num a) => a+eNL80211_ATTR_PAD = 229 eNUM_NL80211_ATTR :: (Num a) => a-eNUM_NL80211_ATTR = 226+eNUM_NL80211_ATTR = 230 newtype NL80211Bss = NL80211Bss Int deriving (Eq, Enum, Integral, Num, Ord, Real, Show) showNL80211Bss :: (Num a) => (Show a) => (Eq a) => a -> String@@ -1069,6 +1084,7 @@ showNL80211Bss 13 = "NL80211_BSS_BEACON_TSF" showNL80211Bss 14 = "NL80211_BSS_PRESP_DATA" showNL80211Bss 15 = "NL80211_BSS_LAST_SEEN_BOOTTIME"+showNL80211Bss 16 = "NL80211_BSS_MAX" showNL80211Bss i = "NL80211Bss #" ++ (show i) @@ -1103,7 +1119,9 @@ eNL80211_BSS_LAST_SEEN_BOOTTIME :: (Num a) => a eNL80211_BSS_LAST_SEEN_BOOTTIME = 15 eNL80211_BSS_MAX :: (Num a) => a-eNL80211_BSS_MAX = 15+eNL80211_BSS_MAX = 16+eNL80211_BSS_PAD :: (Num a) => a+eNL80211_BSS_PAD = 16 newtype Nl80211StaInfo = Nl80211StaInfo Int deriving (Eq, Enum, Integral, Num, Ord, Real, Show) showNl80211StaInfo :: (Num a) => (Show a) => (Eq a) => a -> String@@ -1137,7 +1155,9 @@ showNl80211StaInfo 28 = "NL80211_STA_INFO_RX_DROP_MISC" showNl80211StaInfo 29 = "NL80211_STA_INFO_BEACON_RX" showNl80211StaInfo 30 = "NL80211_STA_INFO_BEACON_SIGNAL_AVG"-showNl80211StaInfo 31 = "NL80211_STA_INFO_MAX"+showNl80211StaInfo 31 = "NL80211_STA_INFO_TID_STATS"+showNl80211StaInfo 32 = "NL80211_STA_INFO_RX_DURATION"+showNl80211StaInfo 33 = "NL80211_STA_INFO_MAX" showNl80211StaInfo i = "Nl80211StaInfo #" ++ (show i) @@ -1201,10 +1221,14 @@ eNL80211_STA_INFO_BEACON_RX = 29 eNL80211_STA_INFO_BEACON_SIGNAL_AVG :: (Num a) => a eNL80211_STA_INFO_BEACON_SIGNAL_AVG = 30-eNL80211_STA_INFO_MAX :: (Num a) => a-eNL80211_STA_INFO_MAX = 31 eNL80211_STA_INFO_TID_STATS :: (Num a) => a eNL80211_STA_INFO_TID_STATS = 31+eNL80211_STA_INFO_RX_DURATION :: (Num a) => a+eNL80211_STA_INFO_RX_DURATION = 32+eNL80211_STA_INFO_MAX :: (Num a) => a+eNL80211_STA_INFO_MAX = 33+eNL80211_STA_INFO_PAD :: (Num a) => a+eNL80211_STA_INFO_PAD = 33 newtype IEEE80211EID = IEEE80211EID Int deriving (Eq, Enum, Integral, Num, Ord, Real, Show) showIEEE80211EID :: (Num a) => (Show a) => (Eq a) => a -> String@@ -1715,3 +1739,47 @@ eWLAN_EID_VENDOR_SPECIFIC = 221 eWLAN_EID_QOS_PARAMETER :: (Num a) => a eWLAN_EID_QOS_PARAMETER = 222+newtype NL80211RateInfo = NL80211RateInfo Int deriving (Eq, Enum, Integral, Num, Ord, Real, Show)++showNL80211RateInfo :: (Num a) => (Show a) => (Eq a) => a -> String+showNL80211RateInfo 1 = "NL80211_RATE_INFO_BITRATE"+showNL80211RateInfo 2 = "NL80211_RATE_INFO_MCS"+showNL80211RateInfo 3 = "NL80211_RATE_INFO_40_MHZ_WIDTH"+showNL80211RateInfo 4 = "NL80211_RATE_INFO_SHORT_GI"+showNL80211RateInfo 5 = "NL80211_RATE_INFO_BITRATE32"+showNL80211RateInfo 6 = "NL80211_RATE_INFO_VHT_MCS"+showNL80211RateInfo 7 = "NL80211_RATE_INFO_VHT_NSS"+showNL80211RateInfo 8 = "NL80211_RATE_INFO_80_MHZ_WIDTH"+showNL80211RateInfo 9 = "NL80211_RATE_INFO_80P80_MHZ_WIDTH"+showNL80211RateInfo 10 = "NL80211_RATE_INFO_160_MHZ_WIDTH"+showNL80211RateInfo 11 = "NL80211_RATE_INFO_10_MHZ_WIDTH"+showNL80211RateInfo 12 = "NL80211_RATE_INFO_5_MHZ_WIDTH"+showNL80211RateInfo i = "NL80211RateInfo #" ++ (show i)+++eNL80211_RATE_INFO_BITRATE :: (Num a) => a+eNL80211_RATE_INFO_BITRATE = 1+eNL80211_RATE_INFO_MCS :: (Num a) => a+eNL80211_RATE_INFO_MCS = 2+eNL80211_RATE_INFO_40_MHZ_WIDTH :: (Num a) => a+eNL80211_RATE_INFO_40_MHZ_WIDTH = 3+eNL80211_RATE_INFO_SHORT_GI :: (Num a) => a+eNL80211_RATE_INFO_SHORT_GI = 4+eNL80211_RATE_INFO_BITRATE32 :: (Num a) => a+eNL80211_RATE_INFO_BITRATE32 = 5+eNL80211_RATE_INFO_VHT_MCS :: (Num a) => a+eNL80211_RATE_INFO_VHT_MCS = 6+eNL80211_RATE_INFO_VHT_NSS :: (Num a) => a+eNL80211_RATE_INFO_VHT_NSS = 7+eNL80211_RATE_INFO_80_MHZ_WIDTH :: (Num a) => a+eNL80211_RATE_INFO_80_MHZ_WIDTH = 8+eNL80211_RATE_INFO_80P80_MHZ_WIDTH :: (Num a) => a+eNL80211_RATE_INFO_80P80_MHZ_WIDTH = 9+eNL80211_RATE_INFO_160_MHZ_WIDTH :: (Num a) => a+eNL80211_RATE_INFO_160_MHZ_WIDTH = 10+eNL80211_RATE_INFO_10_MHZ_WIDTH :: (Num a) => a+eNL80211_RATE_INFO_10_MHZ_WIDTH = 11+eNL80211_RATE_INFO_5_MHZ_WIDTH :: (Num a) => a+eNL80211_RATE_INFO_5_MHZ_WIDTH = 12+eNL80211_RATE_INFO_MAX :: (Num a) => a+eNL80211_RATE_INFO_MAX = 12
+ System/Linux/Netlink/GeNetlink/NL80211/StaInfo.hs view
@@ -0,0 +1,239 @@+{-# LANGUAGE CPP #-}+{-|+Module : System.Linux.Netlink.GeNetlink.NL80211.StaInfo+Description : Implementation of NL80211+Maintainer : ongy+Stability : testing+Portability : Linux++This module providis utility functions for NL80211 subsystem.+In particular the NL80211_ATTR_STA_INFO part of NL80211.+For more information see /usr/include/linux/nl80211.h+-}+module System.Linux.Netlink.GeNetlink.NL80211.StaInfo+ ( StaInfo (..)+ , SignalWidth (..)+ , Signal (..)+ , StaRate (..)++ , signalFromAttributes+ , staRateFromAttributes+ , staInfoFromAttributes+ , getStaInfo+ , staInfoFromPacket+ )+where++import Data.ByteString (ByteString)+import Data.Serialize.Get (Get, runGet)+import Data.Maybe (fromMaybe)+import qualified Data.Map as M+import Control.Applicative ((<|>))++import System.Linux.Netlink+import System.Linux.Netlink.GeNetlink.NL80211.WifiEI+import System.Linux.Netlink.GeNetlink.NL80211.Constants+import Data.Word++import Data.Serialize.Get++#if MIN_VERSION_base(4,8,0)+#else+import Control.Applicative ((<$>))+#endif++-- |Type for "chain signal"+newtype Signal = Signal [Word8] deriving (Show, Eq, Read)++-- |Get a Signal from the nested attributes.+signalFromAttributes :: Attributes -> Signal+signalFromAttributes attrs =+ let bss = map snd . M.toList $ attrs+ eth = map (runGet getWord8) bss+ in Signal . map getRight $ eth+ where getRight (Right x) = x+ getRight (Left x) = error $ "Failed to decode signal: " ++ x+++{- | Type for the signal width reported by the kernel.++ The nl80211 header defines more than this, but nl80211.c only uses the widths defined here.+-}+data SignalWidth+ = Width5MHz+ | Width10MHz+ | Width20MHz+ | Width40MHz+ | Width80MHz+ | Width160MHz+ deriving (Show, Eq, Read)++-- |Get the signal width from attributes that contain the flag.+widthFromAttributes :: Attributes -> SignalWidth+widthFromAttributes attrs =+ let five = opt Width5MHz eNL80211_RATE_INFO_5_MHZ_WIDTH+ ten = opt Width10MHz eNL80211_RATE_INFO_10_MHZ_WIDTH+ forty = opt Width40MHz eNL80211_RATE_INFO_40_MHZ_WIDTH+ eighty = opt Width80MHz eNL80211_RATE_INFO_80_MHZ_WIDTH+ osixty = opt Width160MHz eNL80211_RATE_INFO_160_MHZ_WIDTH+ alls = [five, ten, forty, eighty, osixty]+ in fromMaybe Width20MHz $ foldr1 (<|>) alls+ where opt :: SignalWidth -> Int -> Maybe SignalWidth+ opt c e = fmap (const c) . M.lookup e $ attrs++-- |Type for the rate attributes in StaInfo+data StaRate = StaRate+ { -- |This will be reported as Word16/Word32 from the kernel. We read it into one value.+ -- |If this is Nothing, mcs is >= 32 looking at the code, so it *should*+ -- |never be Nothing.+ rateBitrate :: Maybe Word32+ , rateWidthFlag :: SignalWidth+ , rateMCS :: Maybe Word8+ , rateShortGI :: Bool++ , rateVHTMCS :: Maybe Word8+ , rateVHTNSS :: Maybe Word8++ , rateSelf :: Attributes+ } deriving (Show, Eq, Read)++-- |Get the StaRate from a parsed nested Attribute+staRateFromAttributes :: Attributes -> StaRate+staRateFromAttributes attrs =+ let rate16 = getField getWord16host eNL80211_RATE_INFO_BITRATE+ rate32 = getField getWord32host eNL80211_RATE_INFO_BITRATE32+ -- this locks us into Word32 for now, but that's ok.+ rate = rate32 <|> fmap fromIntegral rate16+ -- The rate width flag is "inline" in the rate.+ width = widthFromAttributes attrs+ mcs = getField getWord8 eNL80211_RATE_INFO_MCS+ shortGI = M.member eNL80211_RATE_INFO_SHORT_GI attrs+ vhtmcs = getField getWord8 eNL80211_RATE_INFO_VHT_MCS+ vhtnss = getField getWord8 eNL80211_RATE_INFO_VHT_NSS+ in StaRate rate width mcs shortGI vhtmcs vhtnss attrs+ where getField :: Get a -> Int -> Maybe a+ getField g e = fmap (getRight . runGet g) . M.lookup e $ attrs+ getRight :: Either String a -> a+ getRight (Right x) = x+ getRight (Left x) = error $ "Failed to parse something in StaRate: " ++ x++-- |Structure for wifi station information.+data StaInfo = StaInfo+ { -- |For how long we are connected.+ staConTime :: Maybe Word32+ -- |Time since the last time we saw the station send something.+ , staInaTime :: Maybe Word32+ -- |Bytes received. This will be transmitted twice if 64bit in kernel. Will be parsed into this either way.+ , staRXBytes :: Maybe Word64+ -- |Bytes received. This will be transmitted twice if 64bit in kernel. Will be parsed into this either way.+ , staTXBytes :: Maybe Word64+ , staLLID :: Maybe Word16+ , staPLID :: Maybe Word16+ , staPLState :: Maybe Word8+ , staRXDur :: Maybe Word64+ , staSignalMBM :: Maybe Word8+ , staSignalMBMA :: Maybe Word8+ , staSignal :: Maybe Signal+ , staSignalAvg :: Maybe Signal+ , staTXRate :: Maybe StaRate+ , staRXRate :: Maybe StaRate++ , staRXPackets :: Maybe Word32+ , staTXPackets :: Maybe Word32+ , staTXRetries :: Maybe Word32+ , staTXFailed :: Maybe Word32+ , staExpectTP :: Maybe Word32+ , staBeaconLoss :: Maybe Word32++ -- |PM: STA link specific Power Mode+ , staLocalPM :: Maybe Word32+ , staPeerPM :: Maybe Word32+ , staNonPeerPM :: Maybe Word32++ -- |This field is a bit weird in the code :(+ , staBssAttrs :: Maybe Attributes+ , staInfoFlags :: Maybe ByteString+ , staTOffset :: Maybe Word64+ , staRXDropMisc :: Maybe Word64+ , staBeaconRX :: Maybe Word64+ , staBSignalAvg :: Maybe Word8++ , staTidStats :: Maybe Attributes+ , staAssocIES :: Maybe Attributes++ -- |Pointer to the Attributes map used to build this struct. This is purely+ -- |for forward compat, please file a feature report if you have to use this.+ , staSelf :: Attributes+ } deriving (Show, Eq, Read)++-- |Parse the nested Netlink Attributes into an StaInfo+staInfoFromAttributes :: Attributes -> StaInfo+staInfoFromAttributes attrs =+ let conTime = getField getWord32host eNL80211_STA_INFO_CONNECTED_TIME+ inaTime = getField getWord32host eNL80211_STA_INFO_INACTIVE_TIME+ rxB32 = getField getWord32host eNL80211_STA_INFO_RX_BYTES+ txB32 = getField getWord32host eNL80211_STA_INFO_TX_BYTES+ rxB64 = getField getWord64host eNL80211_STA_INFO_RX_BYTES64+ txB64 = getField getWord64host eNL80211_STA_INFO_TX_BYTES64+ rxBytes = rxB64 <|> fmap fromIntegral rxB32+ txBytes = txB64 <|> fmap fromIntegral txB32+ llid = getField getWord16host eNL80211_STA_INFO_LLID+ plid = getField getWord16host eNL80211_STA_INFO_PLID+ lstate = getField getWord8 eNL80211_STA_INFO_PLINK_STATE+ rxDur = getField getWord64host eNL80211_STA_INFO_RX_DURATION+ sigMBM = getField getWord8 eNL80211_STA_INFO_SIGNAL+ sigMBMA = getField getWord8 eNL80211_STA_INFO_SIGNAL_AVG+ sigBS = getField getAttributes eNL80211_STA_INFO_CHAIN_SIGNAL+ sigBSA = getField getAttributes eNL80211_STA_INFO_CHAIN_SIGNAL_AVG+ txr = getField getAttributes eNL80211_STA_INFO_TX_BITRATE+ rxr = getField getAttributes eNL80211_STA_INFO_RX_BITRATE++ rxpack = getField getWord32host eNL80211_STA_INFO_RX_PACKETS+ txpack = getField getWord32host eNL80211_STA_INFO_TX_PACKETS+ txretr = getField getWord32host eNL80211_STA_INFO_TX_RETRIES+ txfail = getField getWord32host eNL80211_STA_INFO_TX_FAILED++ exptp = getField getWord32host eNL80211_STA_INFO_EXPECTED_THROUGHPUT+ beloss = getField getWord32host eNL80211_STA_INFO_BEACON_LOSS+ localpm = getField getWord32host eNL80211_STA_INFO_LOCAL_PM+ peerpm = getField getWord32host eNL80211_STA_INFO_PEER_PM+ npeerpm = getField getWord32host eNL80211_STA_INFO_NONPEER_PM++ bsspar = getField getAttributes eNL80211_STA_INFO_BSS_PARAM+ flags = M.lookup eNL80211_STA_INFO_STA_FLAGS attrs+ toff = getField getWord64host eNL80211_STA_INFO_T_OFFSET+ rxdrop = getField getWord64host eNL80211_STA_INFO_RX_DROP_MISC+ beacr = getField getWord64host eNL80211_STA_INFO_BEACON_RX+ beacsa = getField getWord8 eNL80211_STA_INFO_BEACON_SIGNAL_AVG++ tidStat = getField getAttributes eNL80211_STA_INFO_TID_STATS+ associe = getField getWifiEIDs eNL80211_ATTR_IE+ in StaInfo+ conTime inaTime rxBytes txBytes llid plid+ lstate rxDur sigMBM sigMBMA+ (signalFromAttributes <$> sigBS)+ (signalFromAttributes <$> sigBSA)+ (staRateFromAttributes <$> txr)+ (staRateFromAttributes <$> rxr)+ rxpack txpack txretr txfail exptp beloss localpm peerpm+ npeerpm bsspar flags toff rxdrop beacr beacsa tidStat associe+ attrs+ where getField :: Get a -> Int -> Maybe a+ getField g e = fmap (getRight . runGet g) . M.lookup e $ attrs+ getRight :: Either String a -> a+ getRight (Right x) = x+ getRight (Left x) = error $ "Failed to parse something in StaInfo: " ++ x++-- |'Get' an StaInfo from a Bytestring+getStaInfo :: Get StaInfo+getStaInfo = fmap staInfoFromAttributes getAttributes++-- |extract the StaInfo from a Packet. Use with caution.+staInfoFromPacket :: Packet a -> Maybe StaInfo+staInfoFromPacket (Packet _ _ attrs) =+ let y = runGet getStaInfo <$> M.lookup eNL80211_ATTR_STA_INFO attrs+ in fmap getRight y+ where getRight (Right x) = x+ getRight (Left x) = error $ "Failed to decode staInfo: " ++ x+staInfoFromPacket _ = Nothing+-- TODO:This eats error packets, fix?
+ System/Linux/Netlink/GeNetlink/NL80211/WifiEI.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE CPP #-}+{-|+Module : System.Linux.Netlink.GeNetlink.NL80211.WifiEI+Description : Implementation of NL80211+Maintainer : ongy+Stability : testing+Portability : Linux++This module providis utility functions for NL80211 subsystem.+In particular the IEEE80211 WifiEI part of NL80211.+-}+module System.Linux.Netlink.GeNetlink.NL80211.WifiEI+ ( showWifiEid+ , getWifiEIDs+ )+where++import qualified Data.Map as M+import Data.ByteString (ByteString)+import System.Linux.Netlink+import System.Linux.Netlink.Helpers (indent)+import Data.Serialize.Get (runGet, getByteString, getWord8, isEmpty, Get)+import Control.Monad.Loops (whileM)++import System.Linux.Netlink.GeNetlink.NL80211.Constants++#if MIN_VERSION_base(4,8,0)+#else+import Control.Applicative ((<$>))+#endif++getRight :: Show a => Either a b -> b+getRight (Right x) = x+getRight (Left err) = error $show err++-- |Prettyprint the WifiEid map+showWifiEid :: ByteString -> String+showWifiEid bs = let attrs = getRight $ runGet getWifiEIDs bs in+ "WifiEIDs:\n" +++ (indent $showAttrs showIEEE80211EID attrs)++-- |'Get' the EID Attributes from a buffer+getWifiEIDs :: Get Attributes+getWifiEIDs = M.fromList <$> whileM (not <$> isEmpty) getWifiEID++-- |'Get' an EID attribute from a buffer+getWifiEID :: Get (Int, ByteString)+getWifiEID = do+ ty <- fromIntegral <$> getWord8+ len <- fromIntegral <$> getWord8+ val <- getByteString len+ return (ty, val)
netlink.cabal view
@@ -1,5 +1,5 @@ Name: netlink-Version: 1.0.0.4+Version: 1.1.0.0 Synopsis: Netlink communication for Haskell Description: Library to comminicate with Linux kernel via Netlink Homepage: https://github.com/Ongy/netlink-hs@@ -53,6 +53,8 @@ System.Linux.Netlink.GeNetlink.Control System.Linux.Netlink.GeNetlink.NL80211 System.Linux.Netlink.GeNetlink.NL80211.Constants+ System.Linux.Netlink.GeNetlink.NL80211.StaInfo+ System.Linux.Netlink.GeNetlink.NL80211.WifiEI Other-modules: System.Linux.Netlink.C default-language: Haskell2010 Build-depends: base >=4 && <5,