static void hostap_report_scan_complete(local_info_t *local) { union iwreq_data wrqu; /* Inform user space about new scan results (just empty event, * SIOCGIWSCAN can be used to fetch data */ wrqu.data.length = 0; wrqu.data.flags = 0; wireless_send_event(local->dev, SIOCGIWSCAN, &wrqu, NULL); /* Allow SIOCGIWSCAN handling to occur since we have received * scanning result */ local->scan_timestamp = 0; }
/** * @brief * * @param sc * @param data * * @return */ static a_status_t acfg_iwevent_leave_ap(__adf_softc_t *sc, acfg_ev_data_t *data) { union iwreq_data wreq = {{0}}; wreq.addr.sa_family = ARPHRD_ETHER; adf_os_mem_copy(wreq.addr.sa_data, data->leave_ap.mac, ETH_ALEN); adf_trace(ADF_DEBUG_FUNCTRACE, "ADF_EVENT: LEAVE AP\n"); wireless_send_event(hdl_to_netdev(sc), IWEVEXPIRED, &wreq, NULL); return A_STATUS_OK; }
/** * @brief * * @param sc * @param data * * @return */ static a_status_t acfg_iwevent_chan_end(__adf_softc_t *sc, acfg_ev_data_t *data) { union iwreq_data wreq = {{0}}; wreq.data.flags = IEEE80211_EV_CHAN_END; wreq.data.length = sizeof(acfg_chan_end_t); adf_trace(ADF_DEBUG_FUNCTRACE, "ADF_EVENT: CHAN END\n"); wireless_send_event(hdl_to_netdev(sc), IWEVCUSTOM, &wreq, (void *)&data->chan_end); return A_STATUS_OK; }
static eHalStatus hdd_ScanRequestCallback(tHalHandle halHandle, void *pContext, tANI_U32 scanId, eCsrScanStatus status) { struct net_device *dev = (struct net_device *) pContext; hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev) ; union iwreq_data wrqu; int we_event; char *msg; ENTER(); hddLog(LOGW,"%s called with halHandle = %p, pContext = %p, scanID = %d," " returned status = %d", __FUNCTION__, halHandle, pContext, (int) scanId, (int) status); /* if there is a scan request pending when the wlan driver is unloaded we may be invoked as SME flushes its pending queue. If that is the case, the underlying net_device may have already been destroyed, so do some quick sanity before proceeding */ if (pAdapter->dev != dev) { hddLog(LOGW, "%s: device mismatch %p vs %p", __FUNCTION__, pAdapter->dev, dev); return eHAL_STATUS_SUCCESS; } /* Check the scanId */ if (pAdapter->scan_info.scanId != scanId) { hddLog(LOGW, "%s called with mismatched scanId pAdapter->scan_info.scanId = %d " "scanId = %d ", __FUNCTION__, (int) pAdapter->scan_info.scanId, (int) scanId); } /* Scan is no longer pending */ pAdapter->scan_info.mScanPending = VOS_FALSE; // notify any applications that may be interested memset(&wrqu, '\0', sizeof(wrqu)); we_event = SIOCGIWSCAN; msg = NULL; wireless_send_event(dev, we_event, &wrqu, msg); EXIT(); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: exit !!!",__func__); return eHAL_STATUS_SUCCESS; }
/* ========================================================================== Description: IRQL = DISPATCH_LEVEL ========================================================================== */ VOID PeerDeauthAction( IN PRTMP_ADAPTER pAd, IN PMLME_QUEUE_ELEM Elem) { UCHAR Addr2[MAC_ADDR_LEN]; USHORT Reason; if (PeerDeauthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Reason)) { if (INFRA_ON(pAd) && MAC_ADDR_EQUAL(Addr2, pAd->CommonCfg.Bssid)) { DBGPRINT(RT_DEBUG_TRACE,("AUTH_RSP - receive DE-AUTH from our AP (Reason=%d)\n", Reason)); #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT { union iwreq_data wrqu; memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); } #endif // NATIVE_WPA_SUPPLICANT_SUPPORT // // send wireless event - for deauthentication if (pAd->CommonCfg.bWirelessEvent) RTMPSendWirelessEvent(pAd, IW_DEAUTH_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); LinkDown(pAd, TRUE); // Authentication Mode Cisco_LEAP has start a timer // We should cancel it if using LEAP #ifdef LEAP_SUPPORT if (pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP) { RTMPCancelTimer(&pAd->StaCfg.LeapAuthTimer, &TimerCancelled); //Check is it mach the LEAP Authentication failed as possible a Rogue AP //on it's PortSecured not equal to WPA_802_1X_PORT_SECURED while process the Authenticaton. if ((pAd->StaCfg.PortSecured != WPA_802_1X_PORT_SECURED) && (pAd->Mlme.LeapMachine.CurrState != LEAP_IDLE)) { RogueApTableSetEntry(pAd, &pAd->StaCfg.RogueApTab, Addr2, LEAP_REASON_AUTH_TIMEOUT); } } #endif // LEAP_SUPPORT // } } else { DBGPRINT(RT_DEBUG_TRACE,("AUTH_RSP - PeerDeauthAction() sanity check fail\n")); } }
/** * @brief Send MIC Failure event through IW * * @param sc * @param data * * @return */ static a_status_t acfg_iwevent_mic_fail(__adf_softc_t *sc, acfg_ev_data_t *data) { union iwreq_data wreq = {{0}}; char buf[200]; acfg_wsupp_custom_message_t *custom = (acfg_wsupp_custom_message_t *)data; memcpy(buf, custom->raw_message, strlen(custom->raw_message)); wreq.data.length = strlen(buf); /* dispatch wireless event indicating MIC Failure */ wireless_send_event(hdl_to_netdev(sc), IWEVCUSTOM, &wreq, buf); return A_STATUS_OK; }
/*----------------------------------------------------------------------------*/ VOID kalP2PSetState(IN P_GLUE_INFO_T prGlueInfo, IN ENUM_PARAM_MEDIA_STATE_T eState, IN PARAM_MAC_ADDRESS rPeerAddr, IN UINT_8 ucRole) { union iwreq_data evt; UINT_8 aucBuffer[IW_CUSTOM_MAX]; ASSERT(prGlueInfo); memset(&evt, 0, sizeof(evt)); if (eState == PARAM_MEDIA_STATE_CONNECTED) { prGlueInfo->prP2PInfo->eState = PARAM_MEDIA_STATE_CONNECTED; snprintf(aucBuffer, IW_CUSTOM_MAX - 1, "P2P_STA_CONNECT=" MACSTR, MAC2STR(rPeerAddr)); evt.data.length = strlen(aucBuffer); /* indicate in IWECUSTOM event */ wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, IWEVCUSTOM, &evt, aucBuffer); } else if (eState == PARAM_MEDIA_STATE_DISCONNECTED) { snprintf(aucBuffer, IW_CUSTOM_MAX - 1, "P2P_STA_DISCONNECT=" MACSTR, MAC2STR(rPeerAddr)); evt.data.length = strlen(aucBuffer); /* indicate in IWECUSTOM event */ wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, IWEVCUSTOM, &evt, aucBuffer); } else { ASSERT(0); } return; } /* end of kalP2PSetState() */
/** * @brief Send Sta join through IW * * @param sc * @param data * * @return */ static a_status_t acfg_iwevent_assoc_sta(__adf_softc_t *sc, acfg_ev_data_t *data) { union iwreq_data wreq = {{0}}; memcpy(wreq.addr.sa_data, data->assoc_sta.bssid, ACFG_MACADDR_LEN); wreq.addr.sa_family = ARPHRD_ETHER; adf_trace(ADF_DEBUG_FUNCTRACE, "ADF_EVENT: Associated to AP = %s\n", __adf_net_ether_sprintf(wreq.addr.sa_data)); wireless_send_event(hdl_to_netdev(sc), SIOCGIWAP, &wreq, NULL); return A_STATUS_OK; }
void report_sec_ie(_adapter *adapter,u8 authmode,u8 *sec_ie) { uint len; u8 *buff,*p,i; union iwreq_data wrqu; _func_enter_; RT_TRACE(_module_mlme_osdep_c_,_drv_info_,("+report_sec_ie, authmode=%d\n", authmode)); buff = NULL; if(authmode==_WPA_IE_ID_) { RT_TRACE(_module_mlme_osdep_c_,_drv_info_,("report_sec_ie, authmode=%d\n", authmode)); buff = _malloc(IW_CUSTOM_MAX); _memset(buff,0,IW_CUSTOM_MAX); p=buff; p+=sprintf(p,"ASSOCINFO(ReqIEs="); len = sec_ie[1]+2; len = (len < IW_CUSTOM_MAX) ? len:IW_CUSTOM_MAX; for(i=0;i<len;i++){ p+=sprintf(p,"%02x",sec_ie[i]); } p+=sprintf(p,")"); _memset(&wrqu,0,sizeof(wrqu)); wrqu.data.length=p-buff; wrqu.data.length = (wrqu.data.length<IW_CUSTOM_MAX) ? wrqu.data.length:IW_CUSTOM_MAX; wireless_send_event(adapter->pnetdev,IWEVCUSTOM,&wrqu,buff); if(buff) _mfree(buff, IW_CUSTOM_MAX); } _func_exit_; }
a_status_t __adf_send_custom_wireless_event(adf_net_handle_t hdl, void *event) { struct net_device *dev = NULL; union iwreq_data wreq = {{0}}; char buf[200]; if(hdl != NULL) { dev = hdl_to_netdev(hdl); } memcpy(buf, (char *)event, strlen(event)); wreq.data.length = strlen(buf); wireless_send_event(dev, IWEVCUSTOM, &wreq, buf); return A_STATUS_OK; }
/*----------------------------------------------------------------------------*/ VOID kalP2PIndicateTXDone(IN P_GLUE_INFO_T prGlueInfo, IN UINT_8 ucSeqNum, IN UINT_8 ucStatus) { union iwreq_data evt; UINT_8 aucBuffer[IW_CUSTOM_MAX]; ASSERT(prGlueInfo); memset(&evt, 0, sizeof(evt)); snprintf(aucBuffer, IW_CUSTOM_MAX - 1, "P2P_SD_XMITTED: %d %d", ucSeqNum, ucStatus); evt.data.length = strlen(aucBuffer); /* indicate IWEVP2PSDREQ event */ wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, IWEVCUSTOM, &evt, aucBuffer); } /* end of kalP2PIndicateSDResponse() */
/*----------------------------------------------------------------------------*/ void kalP2PIndicateSDResponse(IN P_GLUE_INFO_T prGlueInfo, IN PARAM_MAC_ADDRESS rPeerAddr, IN UINT_8 ucSeqNum) { union iwreq_data evt; UINT_8 aucBuffer[IW_CUSTOM_MAX]; ASSERT(prGlueInfo); memset(&evt, 0, sizeof(evt)); snprintf(aucBuffer, IW_CUSTOM_MAX - 1, "P2P_SD_RESP %d", ucSeqNum); evt.data.length = strlen(aucBuffer); /* indicate IWEVP2PSDREQ event */ wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, IWEVCUSTOM, &evt, aucBuffer); } /* end of kalP2PIndicateSDResponse() */
static void handle_info_queue_linkstatus(local_info_t *local) { int val = local->prev_link_status; int connected; union iwreq_data wrqu; DECLARE_MAC_BUF(mac); connected = val == HFA384X_LINKSTATUS_CONNECTED || val == HFA384X_LINKSTATUS_AP_CHANGE || val == HFA384X_LINKSTATUS_AP_IN_RANGE; if (local->func->get_rid(local->dev, HFA384X_RID_CURRENTBSSID, local->bssid, ETH_ALEN, 1) < 0) { printk(KERN_DEBUG "%s: could not read CURRENTBSSID after " "LinkStatus event\n", local->dev->name); } else { PDEBUG(DEBUG_EXTRA, "%s: LinkStatus: BSSID=" "%s\n", local->dev->name, print_mac(mac, (unsigned char *) local->bssid)); if (local->wds_type & HOSTAP_WDS_AP_CLIENT) hostap_add_sta(local->ap, local->bssid); } /* Get BSSID if we have a valid AP address */ if (connected) { netif_carrier_on(local->dev); netif_carrier_on(local->ddev); memcpy(wrqu.ap_addr.sa_data, local->bssid, ETH_ALEN); } else { netif_carrier_off(local->dev); netif_carrier_off(local->ddev); memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN); } wrqu.ap_addr.sa_family = ARPHRD_ETHER; /* * Filter out sequential disconnect events in order not to cause a * flood of SIOCGIWAP events that have a race condition with EAPOL * frames and can confuse wpa_supplicant about the current association * status. */ if (connected || local->prev_linkstatus_connected) wireless_send_event(local->dev, SIOCGIWAP, &wrqu, NULL); local->prev_linkstatus_connected = connected; }
void rtw_report_sec_ie(_adapter *adapter,u8 authmode,u8 *sec_ie) { uint len; u8 *buff,*p,i; union iwreq_data wrqu; RT_TRACE(_module_mlme_osdep_c_,_drv_info_,("+rtw_report_sec_ie, authmode=%d\n", authmode)); buff = NULL; if(authmode==_WPA_IE_ID_) { RT_TRACE(_module_mlme_osdep_c_,_drv_info_,("rtw_report_sec_ie, authmode=%d\n", authmode)); buff = rtw_zmalloc(IW_CUSTOM_MAX); if (NULL == buff) { DBG_871X(FUNC_ADPT_FMT ": alloc memory FAIL!!\n", FUNC_ADPT_ARG(adapter)); return; } p = buff; p+=sprintf(p,"ASSOCINFO(ReqIEs="); len = sec_ie[1]+2; len = (len < IW_CUSTOM_MAX) ? len:IW_CUSTOM_MAX; for(i=0;i<len;i++){ p+=sprintf(p,"%02x",sec_ie[i]); } p+=sprintf(p,")"); _rtw_memset(&wrqu,0,sizeof(wrqu)); wrqu.data.length=p-buff; wrqu.data.length = (wrqu.data.length<IW_CUSTOM_MAX) ? wrqu.data.length:IW_CUSTOM_MAX; #ifndef CONFIG_IOCTL_CFG80211 wireless_send_event(adapter->pnetdev,IWEVCUSTOM,&wrqu,buff); #endif rtw_mfree(buff, IW_CUSTOM_MAX); } }
static eHalStatus hdd_CscanRequestCallback(tHalHandle halHandle, void *pContext, tANI_U32 scanId, eCsrScanStatus status) { struct net_device *dev = (struct net_device *) pContext; hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev) ; hdd_wext_state_t *pwextBuf = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); union iwreq_data wrqu; int we_event; char *msg; VOS_STATUS vos_status = VOS_STATUS_SUCCESS; ENTER(); hddLog(LOG1,"%s called with halHandle = %p, pContext = %p, scanID = %d," " returned status = %d", __func__, halHandle, pContext, (int) scanId, (int) status); if (pwextBuf->scanId != scanId) { hddLog(LOGW, "%s called with mismatched scanId pWextState->scanId = %d " "scanId = %d ", __func__, (int) pwextBuf->scanId, (int) scanId); } pwextBuf->mScanPending = VOS_FALSE; memset(&wrqu, '\0', sizeof(wrqu)); we_event = SIOCGIWSCAN; msg = NULL; wireless_send_event(dev, we_event, &wrqu, msg); vos_status = vos_event_set(&pwextBuf->vosevent); if (!VOS_IS_STATUS_SUCCESS(vos_status)) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("ERROR: HDD vos_event_set failed!!")); return VOS_STATUS_E_FAILURE; } EXIT(); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: exit !!!",__func__); return eHAL_STATUS_SUCCESS; }
static eHalStatus hdd_ScanRequestCallback(tHalHandle halHandle, void *pContext, tANI_U32 scanId, eCsrScanStatus status) { struct net_device *dev = (struct net_device *) pContext; hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev) ; hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); union iwreq_data wrqu; int we_event; char *msg; ENTER(); hddLog(LOGW,"%s called with halHandle = %p, pContext = %p, scanID = %d," " returned status = %d", __func__, halHandle, pContext, (int) scanId, (int) status); if (pAdapter->dev != dev) { hddLog(LOGW, "%s: device mismatch %p vs %p", __func__, pAdapter->dev, dev); return eHAL_STATUS_SUCCESS; } if (pHddCtx->scan_info.scanId != scanId) { hddLog(LOGW, "%s called with mismatched scanId pHddCtx->scan_info.scanId = %d " "scanId = %d ", __func__, (int) pHddCtx->scan_info.scanId, (int) scanId); } pHddCtx->scan_info.mScanPending = VOS_FALSE; memset(&wrqu, '\0', sizeof(wrqu)); we_event = SIOCGIWSCAN; msg = NULL; wireless_send_event(dev, we_event, &wrqu, msg); EXIT(); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: exit !!!",__func__); return eHAL_STATUS_SUCCESS; }
void r8712_handle_tkip_mic_err(struct _adapter *padapter, u8 bgroup) { union iwreq_data wrqu; struct iw_michaelmicfailure ev; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; memset(&ev, 0x00, sizeof(ev)); if (bgroup) ev.flags |= IW_MICFAILURE_GROUP; else ev.flags |= IW_MICFAILURE_PAIRWISE; ev.src_addr.sa_family = ARPHRD_ETHER; memcpy(ev.src_addr.sa_data, &pmlmepriv->assoc_bssid[0], ETH_ALEN); memset(&wrqu, 0x00, sizeof(wrqu)); wrqu.data.length = sizeof(ev); wireless_send_event(padapter->pnetdev, IWEVMICHAELMICFAILURE, &wrqu, (char *)&ev); }
static void send_custom_event(struct net_device *dev, const char *prefix, const char *suffix, void *buf, size_t len) { union iwreq_data wrqu; char custom[IW_CUSTOM_MAX]; size_t cend = 0; snprintf(custom, sizeof(custom), "%s", prefix); cend = strlen(custom); cend += format_hex(custom + cend, sizeof(custom) - cend, buf, len); cend += snprintf(custom + cend, sizeof(custom) - cend, "%s", suffix); wrqu.data.length = strlen(custom); wrqu.data.flags = 0; wrqu.data.pointer = (caddr_t)0xdeadbeef; wireless_send_event(dev, IWEVCUSTOM, &wrqu, custom); }
void handle_tkip_mic_err(_adapter *padapter,u8 bgroup) { #ifdef CONFIG_IOCTL_CFG80211 enum nl80211_key_type key_type; #endif //CONFIG_IOCTL_CFG80211 union iwreq_data wrqu; struct iw_michaelmicfailure ev; struct mlme_priv* pmlmepriv = &padapter->mlmepriv; _memset( &ev, 0x00, sizeof( ev ) ); #ifdef CONFIG_IOCTL_CFG80211 if ( bgroup ) { key_type |= NL80211_KEYTYPE_GROUP; } else { key_type |= NL80211_KEYTYPE_PAIRWISE; } cfg80211_michael_mic_failure(padapter->pnetdev, (u8 *)&pmlmepriv->assoc_bssid[ 0 ], key_type, -1, NULL, GFP_ATOMIC); #endif if ( bgroup ) { ev.flags |= IW_MICFAILURE_GROUP; } else { ev.flags |= IW_MICFAILURE_PAIRWISE; } ev.src_addr.sa_family = ARPHRD_ETHER; _memcpy( ev.src_addr.sa_data, &pmlmepriv->assoc_bssid[ 0 ], ETH_ALEN ); _memset( &wrqu, 0x00, sizeof( wrqu ) ); wrqu.data.length = sizeof( ev ); wireless_send_event( padapter->pnetdev, IWEVMICHAELMICFAILURE, &wrqu, (char*) &ev ); }
/*----------------------------------------------------------------------------*/ VOID kalP2PIndicateSecCheckRsp(IN P_GLUE_INFO_T prGlueInfo, IN PUINT_8 pucRsp, IN UINT_16 u2RspLen) { union iwreq_data evt; UINT_8 aucBuffer[IW_CUSTOM_MAX]; ASSERT(prGlueInfo); memset(&evt, 0, sizeof(evt)); snprintf(aucBuffer, IW_CUSTOM_MAX - 1, "P2P_SEC_CHECK_RSP="); kalMemCopy(prGlueInfo->prP2PInfo->aucSecCheckRsp, pucRsp, u2RspLen); evt.data.length = strlen(aucBuffer); #if DBG DBGLOG_MEM8(SEC, LOUD, prGlueInfo->prP2PInfo->aucSecCheckRsp, u2RspLen); #endif /* indicate in IWECUSTOM event */ wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, IWEVCUSTOM, &evt, aucBuffer); } /* p2pFsmRunEventRxDisassociation */
/* void zfwMicFailureNotify(zdev_t *dev, u8_t *message, u16_t event) */ void zfLnxMicFailureNotify(zdev_t *dev, u16_t *addr, u16_t status) { static const char *tag = "MLME-MICHAELMICFAILURE.indication"; union iwreq_data wrqu; char buf[128]; /* TODO: needed parameters: count, type, src address */ /* * snprintf(buf, sizeof(buf), "%s(%scast addr=%s)", tag, * (status == ZM_MIC_GROUP_ERROR) ? "broad" : "uni", * ether_sprintf((u8_t *)addr)); */ if (zfiWlanQueryWlanMode(dev) == ZM_MODE_INFRASTRUCTURE) strcpy(buf, tag); memset(&wrqu, 0, sizeof(wrqu)); wrqu.data.length = strlen(buf); wireless_send_event(dev, IWEVCUSTOM, &wrqu, buf); }
/*----------------------------------------------------------------------------*/ VOID kalP2PInvitationStatus(IN P_GLUE_INFO_T prGlueInfo, IN UINT_32 u4InvStatus) { union iwreq_data evt; UINT_8 aucBuffer[IW_CUSTOM_MAX]; ASSERT(prGlueInfo); /* buffer peer information for later IOC_P2P_GET_STRUCT access */ prGlueInfo->prP2PInfo->u4InvStatus = u4InvStatus; /* prepare event structure */ memset(&evt, 0, sizeof(evt)); snprintf(aucBuffer, IW_CUSTOM_MAX - 1, "P2P_INV_STATUS"); evt.data.length = strlen(aucBuffer); /* indicate in IWEVCUSTOM event */ wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, IWEVCUSTOM, &evt, aucBuffer); } /* kalP2PInvitationStatus */
void __cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, struct ieee80211_channel *channel) { struct wireless_dev *wdev = dev->ieee80211_ptr; struct cfg80211_bss *bss; #ifdef CONFIG_CFG80211_WEXT union iwreq_data wrqu; #endif if (WARN_ON(wdev->iftype != NL80211_IFTYPE_ADHOC)) return; if (!wdev->ssid_len) return; bss = cfg80211_get_bss(wdev->wiphy, channel, bssid, NULL, 0, IEEE80211_BSS_TYPE_IBSS, IEEE80211_PRIVACY_ANY); if (WARN_ON(!bss)) return; if (wdev->current_bss) { cfg80211_unhold_bss(wdev->current_bss); cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub); } cfg80211_hold_bss(bss_from_pub(bss)); wdev->current_bss = bss_from_pub(bss); if (!(wdev->wiphy->flags & WIPHY_FLAG_HAS_STATIC_WEP)) cfg80211_upload_connect_keys(wdev); nl80211_send_ibss_bssid(wiphy_to_rdev(wdev->wiphy), dev, bssid, GFP_KERNEL); #ifdef CONFIG_CFG80211_WEXT memset(&wrqu, 0, sizeof(wrqu)); memcpy(wrqu.ap_addr.sa_data, bssid, ETH_ALEN); wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL); #endif }
/*----------------------------------------------------------------------------*/ VOID kalP2PIndicateConnReq( IN P_GLUE_INFO_T prGlueInfo, IN PUINT_8 pucDevName, IN INT_32 u4NameLength, IN PARAM_MAC_ADDRESS rPeerAddr, IN UINT_8 ucDevType, /* 0: P2P Device / 1: GC / 2: GO */ IN INT_32 i4ConfigMethod, IN INT_32 i4ActiveConfigMethod ) { union iwreq_data evt; UINT_8 aucBuffer[IW_CUSTOM_MAX]; ASSERT(prGlueInfo); /* buffer peer information for later IOC_P2P_GET_REQ_DEVICE_INFO access */ prGlueInfo->prP2PInfo->u4ConnReqNameLength = u4NameLength > 32 ? 32 : u4NameLength; kalMemCopy(prGlueInfo->prP2PInfo->aucConnReqDevName, pucDevName, prGlueInfo->prP2PInfo->u4ConnReqNameLength); COPY_MAC_ADDR(prGlueInfo->prP2PInfo->rConnReqPeerAddr, rPeerAddr); prGlueInfo->prP2PInfo->ucConnReqDevType = ucDevType; prGlueInfo->prP2PInfo->i4ConnReqConfigMethod = i4ConfigMethod; prGlueInfo->prP2PInfo->i4ConnReqActiveConfigMethod = i4ActiveConfigMethod; // prepare event structure memset(&evt, 0, sizeof(evt)); snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_DVC_REQ"); evt.data.length = strlen(aucBuffer); /* indicate in IWEVCUSTOM event */ wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, IWEVCUSTOM, &evt, aucBuffer); return; } /* end of kalP2PIndicateConnReq() */
void __cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid) { struct wireless_dev *wdev = dev->ieee80211_ptr; struct cfg80211_bss *bss; #ifdef CONFIG_CFG80211_WEXT union iwreq_data wrqu; #endif if (WARN_ON(wdev->iftype != NL80211_IFTYPE_ADHOC)) return; if (!wdev->ssid_len) return; bss = cfg80211_get_bss(wdev->wiphy, NULL, bssid, wdev->ssid, wdev->ssid_len, WLAN_CAPABILITY_IBSS, WLAN_CAPABILITY_IBSS); if (WARN_ON(!bss)) return; if (wdev->current_bss) { cfg80211_unhold_bss(wdev->current_bss); cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub); } cfg80211_hold_bss(bss_from_pub(bss)); wdev->current_bss = bss_from_pub(bss); wdev->sme_state = CFG80211_SME_CONNECTED; cfg80211_upload_connect_keys(wdev); nl80211_send_ibss_bssid(wiphy_to_dev(wdev->wiphy), dev, bssid, GFP_KERNEL); #ifdef CONFIG_CFG80211_WEXT memset(&wrqu, 0, sizeof(wrqu)); memcpy(wrqu.ap_addr.sa_data, bssid, ETH_ALEN); wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL); #endif }
void rtw_indicate_sta_disassoc_event(struct adapter *padapter, struct sta_info *psta) { union iwreq_data wrqu; struct sta_priv *pstapriv = &padapter->stapriv; if (!psta) return; if (psta->aid > NUM_STA) return; if (pstapriv->sta_aid[psta->aid - 1] != psta) return; wrqu.addr.sa_family = ARPHRD_ETHER; memcpy(wrqu.addr.sa_data, psta->hwaddr, ETH_ALEN); DBG_88E("+rtw_indicate_sta_disassoc_event\n"); wireless_send_event(padapter->pnetdev, IWEVEXPIRED, &wrqu, NULL); }
/*--------------------------------------------------------------------------------------------- \brief hdd_OemDataReqCallback() - This function also reports the results to the user space \return - eHalStatus enumeration -----------------------------------------------------------------------------------------------*/ static eHalStatus hdd_OemDataReqCallback(tHalHandle hHal, void *pContext, tANI_U32 oemDataReqID, eOemDataReqStatus oemDataReqStatus) { eHalStatus status = eHAL_STATUS_SUCCESS; struct net_device *dev = (struct net_device *) pContext; union iwreq_data wrqu; char buffer[IW_CUSTOM_MAX+1]; memset(&wrqu, '\0', sizeof(wrqu)); memset(buffer, '\0', sizeof(buffer)); //now if the status is success, then send an event up //so that the application can request for the data //else no need to send the event up if(oemDataReqStatus == eOEM_DATA_REQ_FAILURE) { snprintf(buffer, IW_CUSTOM_MAX, "QCOM: OEM-DATA-REQ-FAILED"); hddLog(LOGW, "%s: oem data req %d failed", __func__, oemDataReqID); } else if(oemDataReqStatus == eOEM_DATA_REQ_INVALID_MODE) { snprintf(buffer, IW_CUSTOM_MAX, "QCOM: OEM-DATA-REQ-INVALID-MODE"); hddLog(LOGW, "%s: oem data req %d failed because the driver is in invalid mode (IBSS|BTAMP|AP)", __func__, oemDataReqID); } else { snprintf(buffer, IW_CUSTOM_MAX, "QCOM: OEM-DATA-REQ-SUCCESS"); //everything went alright } wrqu.data.pointer = buffer; wrqu.data.length = strlen(buffer); wireless_send_event(dev, IWEVCUSTOM, &wrqu, buffer); return status; }
/*----------------------------------------------------------------------------*/ VOID kalP2PSetRole( IN P_GLUE_INFO_T prGlueInfo, IN UINT_8 ucResult, IN PUINT_8 pucSSID, IN UINT_8 ucSSIDLen, IN UINT_8 ucRole ) { union iwreq_data evt; UINT_8 aucBuffer[IW_CUSTOM_MAX]; ASSERT(prGlueInfo); ASSERT(ucRole <= 2); memset(&evt, 0, sizeof(evt)); if(ucResult == 0) { prGlueInfo->prP2PInfo->ucRole = ucRole; } if (pucSSID) snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_FORMATION_RST=%d%d%d%c%c", ucResult, ucRole, 1/* persistence or not */, pucSSID[7], pucSSID[8]); else snprintf(aucBuffer, IW_CUSTOM_MAX-1, "P2P_FORMATION_RST=%d%d%d%c%c", ucResult, ucRole, 1/* persistence or not */, '0', '0'); evt.data.length = strlen(aucBuffer); //if (pucSSID) // printk("P2P GO SSID DIRECT-%c%c\n", pucSSID[7], pucSSID[8]); /* indicate in IWECUSTOM event */ wireless_send_event(prGlueInfo->prP2PInfo->prDevHandler, IWEVCUSTOM, &evt, aucBuffer); return; } /* end of kalP2PSetRole() */
int nrx_wxevent_michael_mic_failure(struct net_device *dev, void *bssid, int group_failure) { unsigned int keyid = 0; #if WIRELESS_EXT < 18 char buf[128]; char addr[32]; format_hex(addr, sizeof(addr), bssid, 6); snprintf(buf, sizeof(buf), "MLME-MICHAELMICFAILURE.indication(keyid=%u %s addr=%s)", keyid, group_failure ? "broadcast" : "unicast", addr); send_custom_event(dev, buf, "", NULL, 0); #else struct iw_michaelmicfailure mic; union iwreq_data wrqu; wrqu.data.length = sizeof(mic); wrqu.data.flags = 0; mic.flags = keyid; if(group_failure) mic.flags |= IW_MICFAILURE_GROUP; else mic.flags |= IW_MICFAILURE_PAIRWISE; mic.src_addr.sa_family = ARPHRD_ETHER; memcpy(mic.src_addr.sa_data, bssid, 6); memset(mic.tsc, 0, sizeof(mic.tsc)); wireless_send_event(dev, IWEVMICHAELMICFAILURE, &wrqu, (char*)&mic); #endif return 0; }
/* * Prepare and send a Spy Threshold event */ static void iw_send_thrspy_event(struct net_device * dev, struct iw_spy_data * spydata, unsigned char * address, struct iw_quality * wstats) { union iwreq_data wrqu; struct iw_thrspy threshold; /* Init */ wrqu.data.length = 1; wrqu.data.flags = 0; /* Copy address */ memcpy(threshold.addr.sa_data, address, ETH_ALEN); threshold.addr.sa_family = ARPHRD_ETHER; /* Copy stats */ memcpy(&(threshold.qual), wstats, sizeof(struct iw_quality)); /* Copy also thresholds */ memcpy(&(threshold.low), &(spydata->spy_thr_low), 2 * sizeof(struct iw_quality)); /* Send event to user space */ wireless_send_event(dev, SIOCGIWTHRSPY, &wrqu, (char *) &threshold); }