INT Set_P2P_Device_Discoverability_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg) { POS_COOKIE pObj; UCHAR p2pindex; UCHAR MyGOIdx; pObj = (POS_COOKIE) pAd->OS_Cookie; if (pObj->ioctl_if_type != INT_P2P) return 0; p2pindex = simple_strtol(arg, 0, 10); DBGPRINT(RT_DEBUG_ERROR, ("%s:: TabIdx[%d]\n", __FUNCTION__, p2pindex)); P2PPrintP2PEntry(pAd, p2pindex); if (p2pindex < MAX_P2P_GROUP_SIZE) { MyGOIdx = pAd->P2pTable.Client[p2pindex].MyGOIndex; if (MyGOIdx != P2P_NOT_FOUND) { DBGPRINT(RT_DEBUG_TRACE, ("Start P2P Device Discoverability = %02x:%02x:%02x:%02x:%02x:%02x. \n", PRINT_MAC(pAd->P2pTable.Client[p2pindex].addr))); pAd->P2pTable.Client[p2pindex].GeneralToken++; pAd->P2pTable.Client[MyGOIdx].P2pClientState = P2PSTATE_GO_DISCO_COMMAND; pAd->P2pTable.Client[p2pindex].P2pClientState = P2PSTATE_CLIENT_DISCO_COMMAND; P2pSetListenIntBias(pAd, 12); } } else DBGPRINT(RT_DEBUG_ERROR, ("Table Idx out of range!\n")); return TRUE; }
static VOID P2pSendProvisionCmd( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem) { PRT_P2P_CONFIG pP2PCtrl = &pAd->P2pCfg; P2P_GO_FORM_STATE *pCurrState = &(pAd->P2pCfg.GoFormCurrentState); PP2P_CMD_STRUCT pP2pCmd = (PP2P_CMD_STRUCT)Elem->Msg; UCHAR p2pIdx; ULONG FrameLen; USHORT PeerWscMethod; UCHAR Addr[6] = {0}; DBGPRINT(RT_DEBUG_ERROR, ("%s::\n", __FUNCTION__)); DBGPRINT(RT_DEBUG_ERROR, ("Addr = %02x:%02x:%02x:%02x:%02x:%02x\n", PRINT_MAC(pP2pCmd->Addr))); p2pIdx = P2pGroupTabSearch(pAd, pP2pCmd->Addr); P2PPrintP2PEntry(pAd, p2pIdx); if (pAd->P2pTable.Client[p2pIdx].Rule == P2P_IS_GO) RTMPMoveMemory(&Addr, pAd->P2pTable.Client[p2pIdx].bssid, sizeof(Addr)); else RTMPMoveMemory(&Addr, pAd->P2pTable.Client[p2pIdx].addr, sizeof(Addr)); if (pAd->P2pCfg.Dpid != DEV_PASS_ID_NOSPEC) { if ((pAd->P2pCfg.Dpid == DEV_PASS_ID_USER) && ((pAd->P2pTable.Client[p2pIdx].ConfigMethod & WSC_CONFMET_DISPLAY) != 0)) { pAd->P2pTable.Client[p2pIdx].P2pClientState = P2PSTATE_SENT_PROVISION_REQ; P2PSendProvisionReq(pAd, WSC_CONFMET_DISPLAY, pAd->P2pTable.Client[p2pIdx].GeneralToken, Addr/*pAd->P2pTable.Client[p2pIdx].addr*/, &FrameLen); DBGPRINT(RT_DEBUG_ERROR, ("Request : CONFIG_METHOD_DISPLAY \n")); } else if ((pAd->P2pCfg.Dpid == DEV_PASS_ID_PBC) && ((pAd->P2pTable.Client[p2pIdx].ConfigMethod & WSC_CONFMET_PBC) != 0)) { pAd->P2pTable.Client[p2pIdx].P2pClientState = P2PSTATE_SENT_PROVISION_REQ; P2PSendProvisionReq(pAd, WSC_CONFMET_PBC, pAd->P2pTable.Client[p2pIdx].GeneralToken, Addr/*pAd->P2pTable.Client[p2pIdx].addr*/, &FrameLen); DBGPRINT(RT_DEBUG_TRACE, ("Request : CONFIG_METHOD_PUSHBUTTON \n")); } else if ((pAd->P2pCfg.Dpid == DEV_PASS_ID_REG) && ((pAd->P2pTable.Client[p2pIdx].ConfigMethod&WSC_CONFMET_KEYPAD) != 0)) { pAd->P2pTable.Client[p2pIdx].P2pClientState = P2PSTATE_SENT_PROVISION_REQ; P2PSendProvisionReq(pAd, WSC_CONFMET_KEYPAD, pAd->P2pTable.Client[p2pIdx].GeneralToken, Addr/*pAd->P2pTable.Client[p2pIdx].addr*/, &FrameLen); DBGPRINT(RT_DEBUG_ERROR, ("Request : CONFIG_METHOD_KEYPAD \n")); } else P2PSendProvisionReq(pAd, pAd->P2pTable.Client[p2pIdx].ConfigMethod, pAd->P2pTable.Client[p2pIdx].GeneralToken, Addr/*pAd->P2pTable.Client[p2pIdx].addr*/, &FrameLen); } else { P2P_SetWscRule(pAd, pP2pCmd->Idx, &PeerWscMethod); pAd->P2pTable.Client[p2pIdx].P2pClientState = P2PSTATE_SENT_PROVISION_REQ; P2PSendProvisionReq(pAd, PeerWscMethod, pAd->P2pTable.Client[p2pIdx].GeneralToken, pAd->P2pTable.Client[p2pIdx].addr, &FrameLen); DBGPRINT(RT_DEBUG_ERROR, ("Request : CONFIG_METHOD_KEYPAD \n")); } *pCurrState = P2P_WAIT_GO_FORM_PROV_RSP; }
static VOID P2pSendDevDiscCmd( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem) { P2P_GO_FORM_STATE *pCurrState = &(pAd->P2pCfg.GoFormCurrentState); PP2P_CMD_STRUCT pP2pCmd = (PP2P_CMD_STRUCT)Elem->Msg; UCHAR p2pIdx; DBGPRINT(RT_DEBUG_ERROR, ("%s::\n", __FUNCTION__)); DBGPRINT(RT_DEBUG_ERROR, ("Addr = %02x:%02x:%02x:%02x:%02x:%02x\n", PRINT_MAC(pP2pCmd->Addr))); p2pIdx = P2pGroupTabSearch(pAd, pP2pCmd->Addr); P2PPrintP2PEntry(pAd, p2pIdx); P2pClientDiscovery(pAd, pAd->P2pTable.Client[p2pIdx].addr, p2pIdx); *pCurrState = P2P_WAIT_GO_FORM_DEV_DISC_RSP; }
static VOID P2pSendStartGroupFormCmd( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem) { PRT_P2P_CONFIG pP2PCtrl = &pAd->P2pCfg; P2P_GO_FORM_STATE *pCurrState = &(pAd->P2pCfg.GoFormCurrentState); PP2P_CMD_STRUCT pP2pCmd = (PP2P_CMD_STRUCT)Elem->Msg; DBGPRINT(RT_DEBUG_ERROR, ("%s::\n", __FUNCTION__)); DBGPRINT(RT_DEBUG_ERROR, ("Addr = %02x:%02x:%02x:%02x:%02x:%02x\n", PRINT_MAC(pP2pCmd->Addr))); P2PPrintP2PEntry(pAd, pP2pCmd->Idx); *pCurrState = P2P_WAIT_GO_FORM_RSP; if (pP2PCtrl->Dpid == DEV_PASS_ID_NOSPEC) P2P_SetWscRule(pAd, pP2pCmd->Idx); P2pStartGroupForm(pAd, pAd->P2pTable.Client[pP2pCmd->Idx].addr, pP2pCmd->Idx); }
INT Set_PeerRtspPort_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg) { PRT_WFD_CONFIG pWFDCtrl = &pAd->StaCfg.WfdCfg; UINT32 ip_addr; MAC_TABLE_ENTRY *pEntry; USHORT RtspPort = WFD_RTSP_DEFAULT_PORT; UCHAR P2pIdx = P2P_NOT_FOUND; PRT_P2P_CONFIG pP2PCtrl = &pAd->P2pCfg; INT i; #ifdef DOT11Z_TDLS_SUPPORT i = -1; if (pAd->StaCfg.TdlsInfo.bTDLSCapable && pAd->StaCfg.WfdCfg.PC == WFD_PC_TDLS) { PRT_802_11_TDLS pTDLS = NULL; DBGPRINT(RT_DEBUG_TRACE, ("%s - TDLS peer rtsp port get...\n", __FUNCTION__)); for (i = MAX_NUM_OF_TDLS_ENTRY - 1; i >= 0; i--) { if ((pAd->StaCfg.TdlsInfo.TDLSEntry[i].Valid) && (pAd->StaCfg.TdlsInfo.TDLSEntry[i].Status == TDLS_MODE_CONNECTED)) { pTDLS = &pAd->StaCfg.TdlsInfo.TDLSEntry[i]; RtspPort = pTDLS->WfdEntryInfo.rtsp_port; DBGPRINT(RT_DEBUG_TRACE, ("TDLS Entry[%d][%02x:%02x:%02x:%02x:%02x:%02x]\n", i, PRINT_MAC(pTDLS->MacAddr))); DBGPRINT(RT_DEBUG_TRACE, ("RTSP_PORT = %d.\n", pTDLS->WfdEntryInfo.rtsp_port)); break; } } if ((RtspPort == 0) && (pTDLS != NULL)) { DBGPRINT(RT_DEBUG_ERROR, ("TDLS peer rtsp port is zero, search P2P Entry!\n", RtspPort)); P2pIdx = P2pGroupTabSearch(pAd, pTDLS->MacAddr); if (P2pIdx != P2P_NOT_FOUND) { RtspPort = pAd->P2pTable.Client[P2pIdx].WfdEntryInfo.rtsp_port; DBGPRINT(RT_DEBUG_TRACE, ("P2P Entry[%d][%02x:%02x:%02x:%02x:%02x:%02x]\n", P2pIdx, PRINT_MAC(pTDLS->MacAddr))); DBGPRINT(RT_DEBUG_TRACE, ("RTSP_PORT = %d.\n", pAd->P2pTable.Client[P2pIdx].WfdEntryInfo.rtsp_port)); if (RtspPort == 0) RtspPort = WFD_RTSP_DEFAULT_PORT; } else { RtspPort = WFD_RTSP_DEFAULT_PORT; DBGPRINT(RT_DEBUG_ERROR, ("OID_802_11_P2P_PEER_RTSP_PORT::P2P not found, use default RTSP port\n")); } } } if (i < 0) #endif /* DOT11Z_TDLS_SUPPORT */ { DBGPRINT(RT_DEBUG_TRACE, ("%s - P2P peer rtsp port get...\n", __FUNCTION__)); if (P2P_GO_ON(pAd) || P2P_CLI_ON(pAd)) { for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++) { pEntry = &pAd->MacTab.Content[i]; if (IS_P2P_GO_ENTRY(pEntry) || IS_P2P_CLI_ENTRY(pEntry)) { P2pIdx = P2pGroupTabSearch(pAd, pEntry->Addr); DBGPRINT(RT_DEBUG_TRACE, ("P2P Entry[%d][%02x:%02x:%02x:%02x:%02x:%02x]\n", pEntry->P2pInfo.p2pIndex, PRINT_MAC(pEntry->Addr))); DBGPRINT(RT_DEBUG_TRACE, ("RTSP_PORT = %d.\n", pAd->P2pTable.Client[pEntry->P2pInfo.p2pIndex].WfdEntryInfo.rtsp_port)); if (P2pIdx != P2P_NOT_FOUND) RtspPort = pAd->P2pTable.Client[P2pIdx].WfdEntryInfo.rtsp_port; else { RtspPort = WFD_RTSP_DEFAULT_PORT; DBGPRINT(RT_DEBUG_ERROR, ("OID_802_11_P2P_PEER_RTSP_PORT::P2P not found, use default RTSP port\n")); } if (pEntry->P2pInfo.p2pIndex < MAX_P2P_GROUP_SIZE) P2PPrintP2PEntry(pAd, pEntry->P2pInfo.p2pIndex); break; } } DBGPRINT(RT_DEBUG_TRACE, ("OID_802_11_P2P_PEER_RTSP_PORT bssid: %02x:%02x:%02x:%02x:%02x:%02x.\n", PRINT_MAC(pP2PCtrl->CurrentAddress))); } } DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_P2P_PEER_RTSP_PORT (=%d)\n", RtspPort)); return TRUE; }