int createSetupRequest(WifiRequest& request) { int result = request.create(GOOGLE_OUI, GSCAN_SUBCMD_SET_SIGNIFICANT_CHANGE_CONFIG); if (result < 0) { return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); result = request.put_u8(GSCAN_ATTRIBUTE_SIGNIFICANT_CHANGE_FLUSH, 1); if (result < 0) { return result; } result = request.put_u16(GSCAN_ATTRIBUTE_RSSI_SAMPLE_SIZE, mParams.rssi_sample_size); if (result < 0) { return result; } result = request.put_u16(GSCAN_ATTRIBUTE_LOST_AP_SAMPLE_SIZE, mParams.lost_ap_sample_size); if (result < 0) { return result; } result = request.put_u16(GSCAN_ATTRIBUTE_MIN_BREACHING, mParams.min_breaching); if (result < 0) { return result; } result = request.put_u16(GSCAN_ATTRIBUTE_NUM_AP, mParams.num_ap); if (result < 0) { return result; } struct nlattr * attr = request.attr_start(GSCAN_ATTRIBUTE_SIGNIFICANT_CHANGE_BSSIDS); for (int i = 0; i < mParams.num_ap; i++) { nlattr *attr2 = request.attr_start(i); if (attr2 == NULL) { return WIFI_ERROR_OUT_OF_MEMORY; } result = request.put_addr(GSCAN_ATTRIBUTE_BSSID, mParams.ap[i].bssid); if (result < 0) { return result; } result = request.put_u32(GSCAN_ATTRIBUTE_RSSI_HIGH, mParams.ap[i].high); if (result < 0) { return result; } result = request.put_u32(GSCAN_ATTRIBUTE_RSSI_LOW, mParams.ap[i].low); if (result < 0) { return result; } request.attr_end(attr2); } request.attr_end(attr); request.attr_end(data); return result; }
int createScanConfigRequest(WifiRequest& request) { int result = request.create(GOOGLE_OUI, GSCAN_SUBCMD_SET_SCAN_CONFIG); if (result < 0) { return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); result = request.put_u32(GSCAN_ATTRIBUTE_NUM_AP_PER_SCAN, mParams->max_ap_per_scan); if (result < 0) { return result; } result = request.put_u32(GSCAN_ATTRIBUTE_REPORT_THRESHOLD, mParams->report_threshold); if (result < 0) { return result; } int num_scans = 20; for (int i = 0; i < mParams->num_buckets; i++) { if (mParams->buckets[i].report_events == 1) { ALOGD("Setting num_scans to 1"); num_scans = 1; break; } } result = request.put_u32(GSCAN_ATTRIBUTE_NUM_SCANS_TO_CACHE, num_scans); if (result < 0) { return result; } request.attr_end(data); return WIFI_SUCCESS; }
int createMonitorPktFateRequest(WifiRequest& request) { int result = request.create(GOOGLE_OUI, LOGGER_START_PKT_FATE_MONITORING); if (result < 0) { return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); request.attr_end(data); return result; }
int createTeardownRequest(WifiRequest& request) { int result = request.create(GOOGLE_OUI, GSCAN_SUBCMD_SET_SIGNIFICANT_CHANGE_CONFIG); if (result < 0) { return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); result = request.put_u16(GSCAN_ATTRIBUTE_SIGNIFICANT_CHANGE_FLUSH, 1); if (result < 0) { return result; } request.attr_end(data); return result; }
int createRequest(WifiRequest& request, int subcmd, int enable) { int result = request.create(GOOGLE_OUI, subcmd); if (result < 0) { return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); result = request.put_u32(GSCAN_ENABLE_FULL_SCAN_RESULTS, enable); if (result < 0) { return result; } request.attr_end(data); return WIFI_SUCCESS; }
int createTeardownRequest(WifiRequest& request) { int result = request.create(GOOGLE_OUI, GSCAN_SUBCMD_SET_HOTLIST); if (result < 0) { return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); result = request.put_u8(GSCAN_ATTRIBUTE_HOTLIST_FLUSH, 1); if (result < 0) { return result; } struct nlattr * attr = request.attr_start(GSCAN_ATTRIBUTE_HOTLIST_BSSIDS); request.attr_end(attr); request.attr_end(data); return result; }
int createRxPktFateRequest(WifiRequest& request) { int result = request.create(GOOGLE_OUI, LOGGER_GET_RX_PKT_FATES); if (result < 0) { return result; } memset(mReportBufs, 0, (mNoReqFates * sizeof(wifi_rx_report))); nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); result = request.put_u32(LOGGER_ATTRIBUTE_PKT_FATE_NUM, mNoReqFates); if (result < 0) { return result; } result = request.put_u64(LOGGER_ATTRIBUTE_PKT_FATE_DATA, (uint64_t)mReportBufs); if (result < 0) { return result; } request.attr_end(data); return result; }
int createRequest(WifiRequest& request, int num, byte flush) { int result = request.create(GOOGLE_OUI, GSCAN_SUBCMD_GET_SCAN_RESULTS); if (result < 0) { return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); result = request.put_u32(GSCAN_ATTRIBUTE_NUM_OF_RESULTS, num); if (result < 0) { return result; } result = request.put_u8(GSCAN_ATTRIBUTE_FLUSH_RESULTS, flush); if (result < 0) { return result; } request.attr_end(data); return WIFI_SUCCESS; }
int createRingRequest(WifiRequest& request) { int result = request.create(GOOGLE_OUI, LOGGER_START_LOGGING); if (result != WIFI_SUCCESS) { ALOGE("Failed to create start ring logger request; result = %d", result); return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); result = request.put_u32(LOGGER_ATTRIBUTE_LOG_LEVEL, mVerboseLevel); if (result != WIFI_SUCCESS) { ALOGE("Failed to put log level; result = %d", result); return result; } result = request.put_u32(LOGGER_ATTRIBUTE_RING_FLAGS, mFlags); if (result != WIFI_SUCCESS) { ALOGE("Failed to put ring flags; result = %d", result); return result; } result = request.put_u32(LOGGER_ATTRIBUTE_LOG_TIME_INTVAL, mMaxIntervalSec); if (result != WIFI_SUCCESS) { ALOGE("Failed to put log time interval; result = %d", result); return result; } result = request.put_u32(LOGGER_ATTRIBUTE_LOG_MIN_DATA_SIZE, mMinDataSize); if (result != WIFI_SUCCESS) { ALOGE("Failed to put min data size; result = %d", result); return result; } result = request.put_string(LOGGER_ATTRIBUTE_RING_NAME, mRingName); if (result != WIFI_SUCCESS) { ALOGE("Failed to put ringbuffer name; result = %d", result); return result; } request.attr_end(data); return WIFI_SUCCESS; }
int createSetupRequest(WifiRequest& request) { int result = request.create(GOOGLE_OUI, GSCAN_SUBCMD_SET_CONFIG); if (result < 0) { return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); result = request.put_u32(GSCAN_ATTRIBUTE_BASE_PERIOD, mParams->base_period); if (result < 0) { return result; } result = request.put_u32(GSCAN_ATTRIBUTE_NUM_BUCKETS, mParams->num_buckets); if (result < 0) { return result; } for (int i = 0; i < mParams->num_buckets; i++) { nlattr * bucket = request.attr_start(i); // next bucket result = request.put_u32(GSCAN_ATTRIBUTE_BUCKET_ID, mParams->buckets[i].bucket); if (result < 0) { return result; } result = request.put_u32(GSCAN_ATTRIBUTE_BUCKET_PERIOD, mParams->buckets[i].period); if (result < 0) { return result; } result = request.put_u32(GSCAN_ATTRIBUTE_BUCKETS_BAND, mParams->buckets[i].band); if (result < 0) { return result; } result = request.put_u32(GSCAN_ATTRIBUTE_REPORT_EVENTS, mParams->buckets[i].report_events); if (result < 0) { return result; } result = request.put_u32(GSCAN_ATTRIBUTE_BUCKET_NUM_CHANNELS, mParams->buckets[i].num_channels); if (result < 0) { return result; } if (mParams->buckets[i].num_channels) { nlattr *channels = request.attr_start(GSCAN_ATTRIBUTE_BUCKET_CHANNELS); for (int j = 0; j < mParams->buckets[i].num_channels; j++) { result = request.put_u32(j, mParams->buckets[i].channels[j].channel); if (result < 0) { return result; } } request.attr_end(channels); } request.attr_end(bucket); } request.attr_end(data); return WIFI_SUCCESS; }
int createRequest(WifiRequest &request) { int result; switch (mType) { case START_MKEEP_ALIVE: { result = request.create(GOOGLE_OUI, WIFI_OFFLOAD_START_MKEEP_ALIVE); if (result != WIFI_SUCCESS) { ALOGE("Failed to create start keep alive request; result = %d", result); return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); result = request.put_u8(MKEEP_ALIVE_ATTRIBUTE_ID, mIndex); if (result < 0) { ALOGE("Failed to put id request; result = %d", result); return result; } result = request.put_u16(MKEEP_ALIVE_ATTRIBUTE_IP_PKT_LEN, mIpPktLen); if (result < 0) { ALOGE("Failed to put ip pkt len request; result = %d", result); return result; } result = request.put(MKEEP_ALIVE_ATTRIBUTE_IP_PKT, (u8*)mIpPkt, mIpPktLen); if (result < 0) { ALOGE("Failed to put ip pkt request; result = %d", result); return result; } result = request.put_addr(MKEEP_ALIVE_ATTRIBUTE_SRC_MAC_ADDR, mSrcMacAddr); if (result < 0) { ALOGE("Failed to put src mac address request; result = %d", result); return result; } result = request.put_addr(MKEEP_ALIVE_ATTRIBUTE_DST_MAC_ADDR, mDstMacAddr); if (result < 0) { ALOGE("Failed to put dst mac address request; result = %d", result); return result; } result = request.put_u32(MKEEP_ALIVE_ATTRIBUTE_PERIOD_MSEC, mPeriodMsec); if (result < 0) { ALOGE("Failed to put period request; result = %d", result); return result; } request.attr_end(data); break; } case STOP_MKEEP_ALIVE: { result = request.create(GOOGLE_OUI, WIFI_OFFLOAD_STOP_MKEEP_ALIVE); if (result != WIFI_SUCCESS) { ALOGE("Failed to create stop keep alive request; result = %d", result); return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); result = request.put_u8(MKEEP_ALIVE_ATTRIBUTE_ID, mIndex); if (result < 0) { ALOGE("Failed to put id request; result = %d", result); return result; } request.attr_end(data); break; } default: ALOGE("Unknown wifi keep alive command"); result = WIFI_ERROR_UNKNOWN; } return result; }
int createRequest(WifiRequest &request) { int result; switch (mType) { case GET_FW_VER: { result = request.create(GOOGLE_OUI, LOGGER_GET_VER); if (result != WIFI_SUCCESS) { ALOGE("Failed to create get fw version request; result = %d", result); return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); // Driver expecting only attribute type, passing mbuff as data with // length 0 to avoid undefined state result = request.put(LOGGER_ATTRIBUTE_FW_VER, mBuff, 0); if (result != WIFI_SUCCESS) { ALOGE("Failed to put get fw version request; result = %d", result); return result; } request.attr_end(data); break; } case GET_DRV_VER: { result = request.create(GOOGLE_OUI, LOGGER_GET_VER); if (result != WIFI_SUCCESS) { ALOGE("Failed to create get drv version request; result = %d", result); return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); // Driver expecting only attribute type, passing mbuff as data with // length 0 to avoid undefined state result = request.put(LOGGER_ATTRIBUTE_DRIVER_VER, mBuff, 0); if (result != WIFI_SUCCESS) { ALOGE("Failed to put get drv version request; result = %d", result); return result; } request.attr_end(data); break; } case GET_RING_DATA: { result = request.create(GOOGLE_OUI, LOGGER_GET_RING_DATA); if (result != WIFI_SUCCESS) { ALOGE("Failed to create get ring data request; result = %d", result); return result; } nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); result = request.put_string(LOGGER_ATTRIBUTE_RING_NAME, mRingName); if (result != WIFI_SUCCESS) { ALOGE("Failed to put ring data request; result = %d", result); return result; } request.attr_end(data); break; } case GET_RING_STATUS: { result = request.create(GOOGLE_OUI, LOGGER_GET_RING_STATUS); if (result != WIFI_SUCCESS) { ALOGE("Failed to create get ring status request; result = %d", result); return result; } break; } case GET_FEATURE: { result = request.create(GOOGLE_OUI, LOGGER_GET_FEATURE); if (result != WIFI_SUCCESS) { ALOGE("Failed to create get feature request; result = %d", result); return result; } break; } case START_RING_LOG: result = createRingRequest(request); break; default: ALOGE("Unknown Debug command"); result = WIFI_ERROR_UNKNOWN; } return result; }