1a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam/* 2a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam * Copyright (C) 2014 The Android Open Source Project 3a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam * 4a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam * Licensed under the Apache License, Version 2.0 (the "License"); 5a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam * you may not use this file except in compliance with the License. 6a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam * You may obtain a copy of the License at 7a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam * 8a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam * http://www.apache.org/licenses/LICENSE-2.0 9a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam * 10a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam * Unless required by applicable law or agreed to in writing, software 11a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam * distributed under the License is distributed on an "AS IS" BASIS, 12a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam * See the License for the specific language governing permissions and 14a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam * limitations under the License. 15a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam */ 16b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 17b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <stdint.h> 18b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <fcntl.h> 19b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <sys/socket.h> 20b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <netlink/genl/genl.h> 21b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <netlink/genl/family.h> 22b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <netlink/genl/ctrl.h> 23b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <linux/rtnetlink.h> 24b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <netpacket/packet.h> 25b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <linux/filter.h> 26b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <linux/errqueue.h> 27b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 28b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <linux/pkt_sched.h> 29b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <netlink/object-api.h> 30b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <netlink/netlink.h> 31b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <netlink/socket.h> 32a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam#include <net/if.h> 33b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 34b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include "nl80211_copy.h" 35b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include <ctype.h> 36b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 37b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include "wifi_hal.h" 38b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include "common.h" 39b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#include "cpp_bindings.h" 40f5f75323a871f475ce62d2c002e600f59cc67134Steve Pfetsch#include "vendor_definitions.h" 41b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 424af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamvoid appendFmt(char *buf, size_t buf_len, int &offset, const char *fmt, ...) 43b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde{ 44b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde va_list params; 45b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde va_start(params, fmt); 464af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam offset += vsnprintf(buf + offset, buf_len - offset, fmt, params); 47b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde va_end(params); 48b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 49b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 50b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde#define C2S(x) case x: return #x; 51b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 52b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndestatic const char *cmdToString(int cmd) 53b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde{ 548abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam switch (cmd) { 558abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_UNSPEC) 568abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_WIPHY) 578abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_WIPHY) 588abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_NEW_WIPHY) 598abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_DEL_WIPHY) 608abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_INTERFACE) 618abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_INTERFACE) 628abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_NEW_INTERFACE) 638abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_DEL_INTERFACE) 648abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_KEY) 658abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_KEY) 668abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_NEW_KEY) 678abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_DEL_KEY) 688abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_BEACON) 698abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_BEACON) 708abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_START_AP) 718abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_STOP_AP) 728abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_STATION) 738abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_STATION) 748abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_NEW_STATION) 758abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_DEL_STATION) 768abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_MPATH) 778abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_MPATH) 788abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_NEW_MPATH) 798abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_DEL_MPATH) 808abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_BSS) 818abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_REG) 828abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_REQ_SET_REG) 838abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_MESH_CONFIG) 848abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_MESH_CONFIG) 858abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_MGMT_EXTRA_IE) 868abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_REG) 878abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_SCAN) 888abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_TRIGGER_SCAN) 898abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_NEW_SCAN_RESULTS) 908abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SCAN_ABORTED) 918abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_REG_CHANGE) 928abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_AUTHENTICATE) 938abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_ASSOCIATE) 948abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_DEAUTHENTICATE) 958abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_DISASSOCIATE) 968abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_MICHAEL_MIC_FAILURE) 978abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_REG_BEACON_HINT) 988abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_JOIN_IBSS) 998abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_LEAVE_IBSS) 1008abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_TESTMODE) 1018abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_CONNECT) 1028abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_ROAM) 1038abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_DISCONNECT) 1048abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_WIPHY_NETNS) 1058abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_SURVEY) 1068abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_NEW_SURVEY_RESULTS) 1078abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_PMKSA) 1088abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_DEL_PMKSA) 1098abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_FLUSH_PMKSA) 1108abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_REMAIN_ON_CHANNEL) 1118abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL) 1128abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_TX_BITRATE_MASK) 1138abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_REGISTER_FRAME) 1148abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_FRAME) 1158abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_FRAME_TX_STATUS) 1168abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_POWER_SAVE) 1178abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_POWER_SAVE) 1188abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_CQM) 1198abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_NOTIFY_CQM) 1208abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_CHANNEL) 1218abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_WDS_PEER) 1228abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_FRAME_WAIT_CANCEL) 1238abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_JOIN_MESH) 1248abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_LEAVE_MESH) 1258abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_UNPROT_DEAUTHENTICATE) 1268abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_UNPROT_DISASSOCIATE) 1278abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_NEW_PEER_CANDIDATE) 1288abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_WOWLAN) 1298abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_WOWLAN) 1308abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_START_SCHED_SCAN) 1318abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_STOP_SCHED_SCAN) 1328abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SCHED_SCAN_RESULTS) 1338abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SCHED_SCAN_STOPPED) 1348abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_REKEY_OFFLOAD) 1358abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_PMKSA_CANDIDATE) 1368abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_TDLS_OPER) 1378abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_TDLS_MGMT) 1388abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_UNEXPECTED_FRAME) 1398abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_PROBE_CLIENT) 1408abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_REGISTER_BEACONS) 1418abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_UNEXPECTED_4ADDR_FRAME) 1428abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_NOACK_MAP) 1438abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_CH_SWITCH_NOTIFY) 1448abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_START_P2P_DEVICE) 1458abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_STOP_P2P_DEVICE) 1468abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_CONN_FAILED) 1478abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_MCAST_RATE) 1488abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_MAC_ACL) 1498abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_RADAR_DETECT) 1508abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_PROTOCOL_FEATURES) 1518abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_UPDATE_FT_IES) 1528abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_FT_EVENT) 1538abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_CRIT_PROTOCOL_START) 1548abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_CRIT_PROTOCOL_STOP) 1558abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_GET_COALESCE) 1568abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_COALESCE) 1578abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_CHANNEL_SWITCH) 1588abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_VENDOR) 1598abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_CMD_SET_QOS_MAP) 1608abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam default: 1618abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam return "NL80211_CMD_UNKNOWN"; 1628abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam } 163b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 164b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 165b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeconst char *attributeToString(int attribute) 166b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde{ 167b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde switch (attribute) { 1688abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_UNSPEC) 169b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 1708abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY) 1718abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_NAME) 172b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 1738abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_IFINDEX) 1748abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_IFNAME) 1758abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_IFTYPE) 176b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 1778abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MAC) 178b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 1798abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_KEY_DATA) 1808abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_KEY_IDX) 1818abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_KEY_CIPHER) 1828abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_KEY_SEQ) 1838abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_KEY_DEFAULT) 184b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 1858abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_BEACON_INTERVAL) 1868abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_DTIM_PERIOD) 1878abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_BEACON_HEAD) 1888abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_BEACON_TAIL) 189b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 1908abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_AID) 1918abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_FLAGS) 1928abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_LISTEN_INTERVAL) 1938abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_SUPPORTED_RATES) 1948abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_VLAN) 1958abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_INFO) 196b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 1978abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_BANDS) 198b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 1998abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MNTR_FLAGS) 200b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2018abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MESH_ID) 2028abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_PLINK_ACTION) 2038abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MPATH_NEXT_HOP) 2048abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MPATH_INFO) 205b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2068abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_BSS_CTS_PROT) 2078abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_BSS_SHORT_PREAMBLE) 2088abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_BSS_SHORT_SLOT_TIME) 209b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2108abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_HT_CAPABILITY) 211b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2128abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SUPPORTED_IFTYPES) 213b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2148abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_REG_ALPHA2) 2158abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_REG_RULES) 216b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2178abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MESH_CONFIG) 218b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2198abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_BSS_BASIC_RATES) 220b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2218abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_TXQ_PARAMS) 2228abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_FREQ) 2238abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_CHANNEL_TYPE) 224b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2258abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_KEY_DEFAULT_MGMT) 226b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2278abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MGMT_SUBTYPE) 2288abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_IE) 229b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2308abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MAX_NUM_SCAN_SSIDS) 231b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2328abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SCAN_FREQUENCIES) 2338abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SCAN_SSIDS) 2348abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_GENERATION) /* replaces old SCAN_GENERATION */ 2358abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_BSS) 236b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2378abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_REG_INITIATOR) 2388abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_REG_TYPE) 239b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2408abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SUPPORTED_COMMANDS) 241b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2428abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_FRAME) 2438abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SSID) 2448abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_AUTH_TYPE) 2458abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_REASON_CODE) 246b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2478abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_KEY_TYPE) 248b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2498abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MAX_SCAN_IE_LEN) 2508abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CIPHER_SUITES) 251b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2528abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_FREQ_BEFORE) 2538abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_FREQ_AFTER) 254b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2558abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_FREQ_FIXED) 256b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 257b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2588abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_RETRY_SHORT) 2598abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_RETRY_LONG) 2608abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_FRAG_THRESHOLD) 2618abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_RTS_THRESHOLD) 262b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2638abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_TIMED_OUT) 264b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2658abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_USE_MFP) 266b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2678abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_FLAGS2) 268b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2698abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CONTROL_PORT) 270b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2718abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_TESTDATA) 272b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2738abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_PRIVACY) 274b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2758abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_DISCONNECTED_BY_AP) 2768abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STATUS_CODE) 277b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2788abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CIPHER_SUITES_PAIRWISE) 2798abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CIPHER_SUITE_GROUP) 2808abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WPA_VERSIONS) 2818abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_AKM_SUITES) 282b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2838abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_REQ_IE) 2848abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_RESP_IE) 285b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2868abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_PREV_BSSID) 287b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2888abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_KEY) 2898abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_KEYS) 290b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2918abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_PID) 292b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2938abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_4ADDR) 294b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2958abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SURVEY_INFO) 296b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 2978abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_PMKID) 2988abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MAX_NUM_PMKIDS) 299b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3008abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_DURATION) 301b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3028abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_COOKIE) 303b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3048abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_COVERAGE_CLASS) 305b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3068abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_TX_RATES) 307b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3088abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_FRAME_MATCH) 309b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3108abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_ACK) 311b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3128abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_PS_STATE) 313b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3148abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CQM) 315b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3168abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_LOCAL_STATE_CHANGE) 317b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3188abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_AP_ISOLATE) 319b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3208abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_TX_POWER_SETTING) 3218abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_TX_POWER_LEVEL) 322b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3238abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_TX_FRAME_TYPES) 3248abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_RX_FRAME_TYPES) 3258abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_FRAME_TYPE) 326b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3278abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CONTROL_PORT_ETHERTYPE) 3288abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT) 329b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3308abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SUPPORT_IBSS_RSN) 331b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3328abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_ANTENNA_TX) 3338abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_ANTENNA_RX) 334b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3358abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MCAST_RATE) 336b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3378abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_OFFCHANNEL_TX_OK) 338b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3398abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_BSS_HT_OPMODE) 340b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3418abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_KEY_DEFAULT_TYPES) 342b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3438abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION) 344b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3458abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MESH_SETUP) 346b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3478abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX) 3488abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX) 349b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3508abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SUPPORT_MESH_AUTH) 3518abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_PLINK_STATE) 352b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3538abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WOWLAN_TRIGGERS) 3548abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED) 355b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3568abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SCHED_SCAN_INTERVAL) 357b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3588abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_INTERFACE_COMBINATIONS) 3598abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SOFTWARE_IFTYPES) 360b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3618abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_REKEY_DATA) 362b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3638abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS) 3648abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN) 365b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3668abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SCAN_SUPP_RATES) 367b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3688abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_HIDDEN_SSID) 369b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3708abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_IE_PROBE_RESP) 3718abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_IE_ASSOC_RESP) 372b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3738abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_WME) 3748abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SUPPORT_AP_UAPSD) 375b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3768abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_ROAM_SUPPORT) 377b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3788abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SCHED_SCAN_MATCH) 3798abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MAX_MATCH_SETS) 380b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3818abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_PMKSA_CANDIDATE) 382b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3838abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_TX_NO_CCK_RATE) 384b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3858abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_TDLS_ACTION) 3868abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_TDLS_DIALOG_TOKEN) 3878abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_TDLS_OPERATION) 3888abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_TDLS_SUPPORT) 3898abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_TDLS_EXTERNAL_SETUP) 390b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3918abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_DEVICE_AP_SME) 392b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3938abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_DONT_WAIT_FOR_ACK) 394b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3958abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_FEATURE_FLAGS) 396b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3978abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_PROBE_RESP_OFFLOAD) 398b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 3998abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_PROBE_RESP) 400b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4018abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_DFS_REGION) 402b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4038abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_DISABLE_HT) 4048abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_HT_CAPABILITY_MASK) 405b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4068abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_NOACK_MAP) 407b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4088abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_INACTIVITY_TIMEOUT) 409b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4108abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_RX_SIGNAL_DBM) 411b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4128abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_BG_SCAN_PERIOD) 413b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4148abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_WDEV) 415b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4168abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_USER_REG_HINT_TYPE) 417b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4188abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CONN_FAILED_REASON) 419b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4208abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SAE_DATA) 421b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4228abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_VHT_CAPABILITY) 423b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4248abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SCAN_FLAGS) 425b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4268abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CHANNEL_WIDTH) 4278abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CENTER_FREQ1) 4288abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CENTER_FREQ2) 429b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4308abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_P2P_CTWINDOW) 4318abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_P2P_OPPPS) 432b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4338abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_LOCAL_MESH_POWER_MODE) 434b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4358abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_ACL_POLICY) 436b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4378abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MAC_ADDRS) 438b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4398abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MAC_ACL_MAX) 440b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4418abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_RADAR_EVENT) 442b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4438abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_EXT_CAPA) 4448abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_EXT_CAPA_MASK) 445b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4468abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_CAPABILITY) 4478abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_EXT_CAPABILITY) 448b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4498abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_PROTOCOL_FEATURES) 4508abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SPLIT_WIPHY_DUMP) 451b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4528abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_DISABLE_VHT) 4538abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_VHT_CAPABILITY_MASK) 454b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4558abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MDID) 4568abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_IE_RIC) 457b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4588abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CRIT_PROT_ID) 4598abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_MAX_CRIT_PROT_DURATION) 460b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4618abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_PEER_AID) 462b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4638abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_COALESCE_RULE) 464b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4658abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CH_SWITCH_COUNT) 4668abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CH_SWITCH_BLOCK_TX) 4678abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CSA_IES) 4688abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CSA_C_OFF_BEACON) 4698abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_CSA_C_OFF_PRESP) 470b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4718abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_RXMGMT_FLAGS) 472b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4738abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_SUPPORTED_CHANNELS) 474b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4758abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES) 476b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4778abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_HANDLE_DFS) 478b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4798abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SUPPORT_5_MHZ) 4808abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_SUPPORT_10_MHZ) 481b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4828abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_OPMODE_NOTIF) 483b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4848abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_VENDOR_ID) 4858abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_VENDOR_SUBCMD) 4868abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_VENDOR_DATA) 4878abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_VENDOR_EVENTS) 488b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 4898abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam C2S(NL80211_ATTR_QOS_MAP) 490b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde default: 491b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return "NL80211_ATTR_UNKNOWN"; 492b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 493b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 494b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 495b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndevoid WifiEvent::log() { 496b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde parse(); 497b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 498b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde byte *data = (byte *)genlmsg_attrdata(mHeader, 0); 499b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int len = genlmsg_attrlen(mHeader, 0); 500b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 501b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde for (int i = 0; i < len; i += 16) { 502b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde char line[81]; 503b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int linelen = min(16, len - i); 504b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int offset = 0; 5054af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam appendFmt(line, sizeof(line), offset, "%02x", data[i]); 506b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde for (int j = 1; j < linelen; j++) { 5074af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam appendFmt(line, sizeof(line), offset, " %02x", data[i+j]); 508b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 509b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 510b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde for (int j = linelen; j < 16; j++) { 5114af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam appendFmt(line, sizeof(line), offset, " "); 512b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 513b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 514b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde line[23] = '-'; 515b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 5164af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam appendFmt(line, sizeof(line), offset, " "); 517b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 518b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde for (int j = 0; j < linelen; j++) { 519b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (isprint(data[i+j])) { 5204af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam appendFmt(line, sizeof(line), offset, "%c", data[i+j]); 521b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } else { 5224af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam appendFmt(line, sizeof(line), offset, "-"); 523b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 524b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 525b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 526b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 527b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 528b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 529b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 530b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeconst char *WifiEvent::get_cmdString() { 531b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return cmdToString(get_cmd()); 532b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 533b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 534b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 535b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeint WifiEvent::parse() { 536b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (mHeader != NULL) { 537b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return WIFI_SUCCESS; 538b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 539b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde mHeader = (genlmsghdr *)nlmsg_data(nlmsg_hdr(mMsg)); 540b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int result = nla_parse(mAttributes, NL80211_ATTR_MAX_INTERNAL, genlmsg_attrdata(mHeader, 0), 541b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde genlmsg_attrlen(mHeader, 0), NULL); 542b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 543b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return result; 544b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 545b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 546b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeint WifiRequest::create(int family, uint8_t cmd, int flags, int hdrlen) { 547f0c9628714bda31e58149bdc1d229a55df063121Vinit Deshpande 548f0c9628714bda31e58149bdc1d229a55df063121Vinit Deshpande destroy(); 549f0c9628714bda31e58149bdc1d229a55df063121Vinit Deshpande 550b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde mMsg = nlmsg_alloc(); 551b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (mMsg != NULL) { 552b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde genlmsg_put(mMsg, /* pid = */ 0, /* seq = */ 0, family, 553b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde hdrlen, flags, cmd, /* version = */ 0); 554b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return WIFI_SUCCESS; 555b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } else { 556b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return WIFI_ERROR_OUT_OF_MEMORY; 557b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 558b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 559b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 560b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeint WifiRequest::create(uint32_t id, int subcmd) { 561b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int res = create(NL80211_CMD_VENDOR); 562b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res < 0) { 563b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return res; 564b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 565b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 566b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde res = put_u32(NL80211_ATTR_VENDOR_ID, id); 567b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res < 0) { 568b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return res; 569b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 570b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 571b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde res = put_u32(NL80211_ATTR_VENDOR_SUBCMD, subcmd); 572b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res < 0) { 573b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return res; 574b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 575b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 576b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (mIface != -1) { 577b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde res = set_iface_id(mIface); 578b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 579b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 580b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return res; 581b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 582b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 583b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 584b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndestatic int no_seq_check(struct nl_msg *msg, void *arg) 585b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde{ 5868abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam return NL_OK; 587b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 588b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 589b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeint WifiCommand::requestResponse() { 590b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int err = create(); /* create the message */ 591b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (err < 0) { 592b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return err; 593b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 594b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 595b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return requestResponse(mMsg); 596b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 597b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 598b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeint WifiCommand::requestResponse(WifiRequest& request) { 599b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int err = 0; 600b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 601b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde struct nl_cb *cb = nl_cb_alloc(NL_CB_DEFAULT); 602b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (!cb) 603b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde goto out; 604b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 605b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde err = nl_send_auto_complete(mInfo->cmd_sock, request.getMessage()); /* send message */ 606b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (err < 0) 607b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde goto out; 608b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 609b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde err = 1; 610b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 611b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde nl_cb_set(cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL); 612b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde nl_cb_err(cb, NL_CB_CUSTOM, error_handler, &err); 613b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, finish_handler, &err); 614b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde nl_cb_set(cb, NL_CB_ACK, NL_CB_CUSTOM, ack_handler, &err); 615b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, response_handler, this); 616b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 617b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde while (err > 0) { /* wait for reply */ 618b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int res = nl_recvmsgs(mInfo->cmd_sock, cb); 619b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res) { 6205ce8c15e2d505392f9fa7933101fe3a89b129cfcSubhani Shaik ALOGE("nl80211: %s->nl_recvmsgs failed: %d", __FUNCTION__, res); 621b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 622b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 623b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeout: 624b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde nl_cb_put(cb); 625c19f715ece840e705749d2dfd1857210d7e31897Srinivas Dasari mMsg.destroy(); 626b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return err; 627b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 628b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 629b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeint WifiCommand::requestEvent(int cmd) { 630b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 631b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int res = wifi_register_handler(wifiHandle(), cmd, event_handler, this); 632b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res < 0) { 633b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return res; 634b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 635b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 636b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde res = create(); /* create the message */ 637b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res < 0) 638b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde goto out; 639b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 640b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde res = nl_send_auto_complete(mInfo->cmd_sock, mMsg.getMessage()); /* send message */ 641b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res < 0) 642b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde goto out; 643b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 644b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde res = mCondition.wait(); 645b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res < 0) 646b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde goto out; 647b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 648b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeout: 649b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde wifi_unregister_handler(wifiHandle(), cmd); 650b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return res; 651b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 652b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 653b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeint WifiCommand::requestVendorEvent(uint32_t id, int subcmd) { 654b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 655b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int res = wifi_register_vendor_handler(wifiHandle(), id, subcmd, event_handler, this); 656b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res < 0) { 657b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return res; 658b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 659b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 660b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde res = create(); /* create the message */ 661b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res < 0) 662b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde goto out; 663b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 664b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde res = nl_send_auto_complete(mInfo->cmd_sock, mMsg.getMessage()); /* send message */ 665b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res < 0) 666b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde goto out; 667b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 668b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde res = mCondition.wait(); 669b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res < 0) 670b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde goto out; 671b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 672b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeout: 673b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde wifi_unregister_vendor_handler(wifiHandle(), id, subcmd); 674b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return res; 675b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 676b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 677b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde/* Event handlers */ 678b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeint WifiCommand::response_handler(struct nl_msg *msg, void *arg) { 679b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde WifiCommand *cmd = (WifiCommand *)arg; 680b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde WifiEvent reply(msg); 681b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int res = reply.parse(); 682b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res < 0) { 683b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde ALOGE("Failed to parse reply message = %d", res); 684b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return NL_SKIP; 685b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } else { 6864af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam // reply.log(); /* Don't call log() to avoid excess WiFi HAL logging */ 687b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return cmd->handleResponse(reply); 688b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 689b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 690b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 691b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeint WifiCommand::event_handler(struct nl_msg *msg, void *arg) { 692b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde WifiCommand *cmd = (WifiCommand *)arg; 693b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde WifiEvent event(msg); 694b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int res = event.parse(); 695b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde if (res < 0) { 696b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde ALOGE("Failed to parse event = %d", res); 697b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde res = NL_SKIP; 698b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } else { 699b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde res = cmd->handleEvent(event); 700b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde } 701b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 702b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde cmd->mCondition.signal(); 703b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return res; 704b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 705b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 706b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde/* Other event handlers */ 707b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeint WifiCommand::valid_handler(struct nl_msg *msg, void *arg) { 7088abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam int *err = (int *)arg; 709b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde *err = 0; 710b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return NL_SKIP; 711b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 712b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 713b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeint WifiCommand::ack_handler(struct nl_msg *msg, void *arg) { 714b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int *err = (int *)arg; 715b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde *err = 0; 716b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return NL_STOP; 717b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 718b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 719b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeint WifiCommand::finish_handler(struct nl_msg *msg, void *arg) { 720b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int *ret = (int *)arg; 721b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde *ret = 0; 722b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return NL_SKIP; 723b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 724b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 725b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapndeint WifiCommand::error_handler(struct sockaddr_nl *nla, struct nlmsgerr *err, void *arg) { 726b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde int *ret = (int *)arg; 727b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde *ret = err->error; 728b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde 729b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde return NL_SKIP; 730b573b879161949728b9cbdb0ef2dc8db32a47bfcVinit Deshapnde} 731a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 732a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 733a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur SubramanyamWifiVendorCommand::WifiVendorCommand(wifi_handle handle, 734a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam wifi_request_id id, 735a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam u32 vendor_id, 736a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam u32 subcmd) 737a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam : WifiCommand(handle, id), mVendor_id(vendor_id), mSubcmd(subcmd), 738a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam mVendorData(NULL), mDataLen(0) 739a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 740a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam ALOGV("WifiVendorCommand %p created vendor_id:0x%x subcmd:%u", 741a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam this, mVendor_id, mSubcmd); 742a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 743a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 744a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur SubramanyamWifiVendorCommand::~WifiVendorCommand() 745a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 746e060f85e8b3ff335ce2d2e87adb389f46d0e0a09mukesh agrawal //ALOGV("~WifiVendorCommand %p destroyed", this); 747a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam //mVendorData is not destroyed here. Assumption 748a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam //is that VendorData is specific to each Vendor and they 749a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam //are responsible for owning the same. 750a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 751a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 752a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam// Override this method to parse reply and dig out data; save it 753a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam// in the corresponding object 754a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamint WifiVendorCommand::handleResponse(WifiEvent &reply) 755a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 756a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam struct nlattr **tb = reply.attributes(); 757a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam struct genlmsghdr *gnlh = reply.header(); 758a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 759a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam if (gnlh->cmd == NL80211_CMD_VENDOR) { 760a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam if (tb[NL80211_ATTR_VENDOR_DATA]) { 761a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam mVendorData = (char *)nla_data(tb[NL80211_ATTR_VENDOR_DATA]); 762a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam mDataLen = nla_len(tb[NL80211_ATTR_VENDOR_DATA]); 763a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam } 764a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam } 765a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return NL_SKIP; 766a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 767a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 768a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam// Override this method to parse event and dig out data; 769a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam// save it in the object 770a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamint WifiVendorCommand::handleEvent(WifiEvent &event) 771a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 772a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam struct nlattr **tb = event.attributes(); 773a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam struct genlmsghdr *gnlh = event.header(); 774a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 775a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam if (gnlh->cmd == NL80211_CMD_VENDOR) { 776a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam /* Vendor Event */ 777a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam if (!tb[NL80211_ATTR_VENDOR_ID] || 778a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam !tb[NL80211_ATTR_VENDOR_SUBCMD]) 779a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return NL_SKIP; 780a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 781a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam mVendor_id = nla_get_u32(tb[NL80211_ATTR_VENDOR_ID]); 782a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam mSubcmd = nla_get_u32(tb[NL80211_ATTR_VENDOR_SUBCMD]); 783a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 784a17d2d4b21620c36ca81b7fde5cd511ca372d484mukesh agrawal ALOGV("%s: Vendor event: vendor_id=0x%x subcmd=%u", 7855ce8c15e2d505392f9fa7933101fe3a89b129cfcSubhani Shaik __FUNCTION__, mVendor_id, mSubcmd); 786a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 787a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam if (tb[NL80211_ATTR_VENDOR_DATA]) { 788a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam mVendorData = (char *)nla_data(tb[NL80211_ATTR_VENDOR_DATA]); 789a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam mDataLen = nla_len(tb[NL80211_ATTR_VENDOR_DATA]); 790a17d2d4b21620c36ca81b7fde5cd511ca372d484mukesh agrawal ALOGV("%s: Vendor data len received:%d", __FUNCTION__, mDataLen); 791a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam hexdump(mVendorData, mDataLen); 792a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam } 793a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam } 794a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return NL_SKIP; 795a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 796a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 797a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamint WifiVendorCommand::create() { 798a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam int ifindex; 799a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam int ret = mMsg.create(NL80211_CMD_VENDOR, 0, 0); 800a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam if (ret < 0) { 801a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return ret; 802a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam } 803a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam // insert the oui in the msg 804a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam ret = mMsg.put_u32(NL80211_ATTR_VENDOR_ID, mVendor_id); 805a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam if (ret < 0) 806a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam goto out; 807a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 808a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam // insert the subcmd in the msg 809a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam ret = mMsg.put_u32(NL80211_ATTR_VENDOR_SUBCMD, mSubcmd); 810a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam if (ret < 0) 811a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam goto out; 812a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 813a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam //Insert the vendor specific data 814a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam ret = mMsg.put_bytes(NL80211_ATTR_VENDOR_DATA, mVendorData, mDataLen); 815a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam hexdump(mVendorData, mDataLen); 816a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 817a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam //insert the iface id to be "wlan0" 818a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam ifindex = if_nametoindex("wlan0"); 819a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam mMsg.set_iface_id(ifindex); 820a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamout: 821a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return ret; 822a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 823a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 824a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 8254af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamint WifiVendorCommand::requestResponse() 8264af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{ 8274af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam return WifiCommand::requestResponse(mMsg); 8284af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam} 8294af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam 830a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamint WifiVendorCommand::requestEvent() 831a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 832a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam int res = requestVendorEvent(mVendor_id, mSubcmd); 833a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return res; 834a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 835a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 836a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 837a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamint WifiVendorCommand::put_u8(int attribute, uint8_t value) 838a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 839a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return mMsg.put_u8(attribute, value); 840a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 841a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 842a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamint WifiVendorCommand::put_u16(int attribute, uint16_t value) 843a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 844a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return mMsg.put_u16(attribute, value); 845a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 846a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 847a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamint WifiVendorCommand::put_u32(int attribute, uint32_t value) 848a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 849a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return mMsg.put_u32(attribute, value); 850a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 851a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 8524af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamint WifiVendorCommand::put_u64(int attribute, uint64_t value) 8534af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{ 8544af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam return mMsg.put_u64(attribute, value); 8554af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam} 8564af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam 8574af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamint WifiVendorCommand::put_s8(int attribute, s8 value) 8584af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{ 8594af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam return mMsg.put_s8(attribute, value); 8604af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam} 8614af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam 8624af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamint WifiVendorCommand::put_s16(int attribute, s16 value) 8634af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{ 8644af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam return mMsg.put_s16(attribute, value); 8654af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam} 8664af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam 8674af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamint WifiVendorCommand::put_s32(int attribute, s32 value) { 8688abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam return mMsg.put_s32(attribute, value); 8698abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam} 8708abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 8714af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamint WifiVendorCommand::put_s64(int attribute, s64 value) 872a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 8734af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam return mMsg.put_s64(attribute, value); 8744af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam} 8754af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam 8764af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamu8 WifiVendorCommand::get_u8(const struct nlattr *nla) 8774af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{ 8784af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam return mMsg.get_u8(nla); 8794af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam} 8804af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam 8814af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamu16 WifiVendorCommand::get_u16(const struct nlattr *nla) 8824af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{ 8834af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam return mMsg.get_u16(nla); 8844af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam} 8854af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam 8864af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamu32 WifiVendorCommand::get_u32(const struct nlattr *nla) 8874af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{ 8884af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam return mMsg.get_u32(nla); 8894af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam} 8904af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam 8914af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamu64 WifiVendorCommand::get_u64(const struct nlattr *nla) 8924af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{ 8934af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam return mMsg.get_u64(nla); 8944af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam} 8954af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam 8964af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyams8 WifiVendorCommand::get_s8(const struct nlattr *nla) 8974af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{ 8984af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam return mMsg.get_s8(nla); 8994af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam} 9004af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam 9014af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyams16 WifiVendorCommand::get_s16(const struct nlattr *nla) 9024af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{ 9034af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam return mMsg.get_s16(nla); 9044af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam} 9054af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam 9064af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyams32 WifiVendorCommand::get_s32(const struct nlattr *nla) 9074af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{ 9084af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam return mMsg.get_s32(nla); 9094af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam} 9104af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam 9114af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyams64 WifiVendorCommand::get_s64(const struct nlattr *nla) 9124af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{ 9134af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam return mMsg.get_s64(nla); 914a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 915a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 916a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamint WifiVendorCommand::put_string(int attribute, const char *value) 917a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 918a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return mMsg.put_string(attribute, value); 919a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 920a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 921a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamint WifiVendorCommand::put_addr(int attribute, mac_addr value) 922a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 923a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return mMsg.put_addr(attribute, value); 924a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 925a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 926a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamstruct nlattr * WifiVendorCommand::attr_start(int attribute) 927a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 928a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return mMsg.attr_start(attribute); 929a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 930a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 931a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamvoid WifiVendorCommand::attr_end(struct nlattr *attribute) 932a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 933a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return mMsg.attr_end(attribute); 934a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 935a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 936a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamint WifiVendorCommand::set_iface_id(const char* name) 937a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 938a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam unsigned ifindex = if_nametoindex(name); 939a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return mMsg.set_iface_id(ifindex); 940a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 941a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam 942a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyamint WifiVendorCommand::put_bytes(int attribute, const char *data, int len) 943a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam{ 944a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam return mMsg.put_bytes(attribute, data, len); 945a779e36f603bbb1b3cd82afeeb4d519d69f6c9fcAmarnath Hullur Subramanyam} 946ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam 947ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyamwifi_error WifiVendorCommand::get_mac_addr(struct nlattr **tb_vendor, 948ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam int attribute, 949ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam mac_addr addr) 950ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam{ 951ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam if (!tb_vendor[attribute]) { 952ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam ALOGE("Failed to get attribute : %d", attribute); 953ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam return WIFI_ERROR_INVALID_ARGS; 954ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam } 955ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam if (!addr) { 956ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam ALOGE("addr is NULL"); 957ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam return WIFI_ERROR_INVALID_ARGS; 958ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam } 959ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam 960c19f715ece840e705749d2dfd1857210d7e31897Srinivas Dasari if (nla_len(tb_vendor[attribute]) != sizeof(mac_addr)) { 961c19f715ece840e705749d2dfd1857210d7e31897Srinivas Dasari ALOGE("Invalid mac addr lenght\n"); 962c19f715ece840e705749d2dfd1857210d7e31897Srinivas Dasari return WIFI_ERROR_INVALID_ARGS; 963c19f715ece840e705749d2dfd1857210d7e31897Srinivas Dasari } 964c19f715ece840e705749d2dfd1857210d7e31897Srinivas Dasari 965ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam memcpy(addr, (u8 *)nla_data(tb_vendor[attribute]), 966f5f75323a871f475ce62d2c002e600f59cc67134Steve Pfetsch nla_len(tb_vendor[attribute])); 967f5f75323a871f475ce62d2c002e600f59cc67134Steve Pfetsch 968ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam return WIFI_SUCCESS; 969ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam} 970ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam 971ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyamwifi_error initialize_vendor_cmd(wifi_interface_handle iface, 972d0d336f8cfaa370fc8f9ff7426ffba0036063c61Amarnath Hullur Subramanyam wifi_request_id id, 973ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam u32 subcmd, 974ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam WifiVendorCommand **vCommand) 975ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam{ 976ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam int ret = 0; 977ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam interface_info *ifaceInfo = getIfaceInfo(iface); 978ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam wifi_handle wifiHandle = getWifiHandle(iface); 979ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam 980ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam if (vCommand == NULL) { 981ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam ALOGE("%s: Error vCommand NULL", __FUNCTION__); 982ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam return WIFI_ERROR_INVALID_ARGS; 983ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam } 984ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam 985d0d336f8cfaa370fc8f9ff7426ffba0036063c61Amarnath Hullur Subramanyam *vCommand = new WifiVendorCommand(wifiHandle, id, 986ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam OUI_QCA, 987ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam subcmd); 988ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam if (*vCommand == NULL) { 989ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam ALOGE("%s: Object creation failed", __FUNCTION__); 990ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam return WIFI_ERROR_OUT_OF_MEMORY; 991ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam } 992ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam 993ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam /* Create the message */ 994ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam ret = (*vCommand)->create(); 995ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam if (ret < 0) 996ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam goto cleanup; 997ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam 998ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam ret = (*vCommand)->set_iface_id(ifaceInfo->name); 999ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam if (ret < 0) 1000ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam goto cleanup; 1001ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam 1002ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam return WIFI_SUCCESS; 1003ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam 1004ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyamcleanup: 1005ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam delete *vCommand; 1006ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam return (wifi_error)ret; 1007ddae66e0dd0f0b30e8f8a7c8dc84a205f8a98f98Amarnath Hullur Subramanyam} 1008