/* ======================================================================== Routine Description: Send a packet to WLAN. Arguments: pPktSrc points to our adapter pDev which WLAN network interface Return Value: 0: transmit successfully otherwise: transmit fail Note: ======================================================================== */ INT MBSS_VirtualIF_PacketSend( IN PNDIS_PACKET pPktSrc, IN PNET_DEV pDev) { RTMP_ADAPTER *pAd; MULTISSID_STRUCT *pMbss; PNDIS_PACKET pPkt = (PNDIS_PACKET)pPktSrc; INT IdBss; pAd = RTMP_OS_NETDEV_GET_PRIV(pDev); ASSERT(pAd); #ifdef RALINK_ATE if (ATE_ON(pAd)) { RELEASE_NDIS_PACKET(pAd, pPkt, NDIS_STATUS_FAILURE); return 0; } #endif // RALINK_ATE // if ((RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS))) { /* wlan is scanning/disabled/reset */ RELEASE_NDIS_PACKET(pAd, pPkt, NDIS_STATUS_FAILURE); return 0; } if(!(RTMP_OS_NETDEV_STATE_RUNNING(pDev))) { /* the interface is down */ RELEASE_NDIS_PACKET(pAd, pPkt, NDIS_STATUS_FAILURE); return 0; } /* 0 is main BSS, dont handle it here */ /* FIRST_MBSSID = 1 */ pMbss = pAd->ApCfg.MBSSID; for(IdBss=FIRST_MBSSID; IdBss<pAd->ApCfg.BssidNum; IdBss++) { /* find the device in our MBSS list */ if (pMbss[IdBss].MSSIDDev == pDev) { NdisZeroMemory((PUCHAR)&(RTPKT_TO_OSPKT(pPktSrc))->cb[CB_OFF], 15); RTMP_SET_PACKET_NET_DEVICE_MBSSID(pPktSrc, IdBss); // SET_OS_PKT_NETDEV(pPktSrc, pDev); /* MBSS used original interface for TX */ /* transmit the packet */ return rt28xx_packet_xmit(pPktSrc); } } /* can not find the BSS so discard the packet */ RELEASE_NDIS_PACKET(pAd, pPkt, NDIS_STATUS_FAILURE); return 0; } /* End of MBSS_VirtualIF_PacketSend */
INT WdsVirtualIFSendPackets( IN PNDIS_PACKET pSkb, IN PNET_DEV dev) { UCHAR i; RTMP_ADAPTER *pAd; PNDIS_PACKET pPacket = (PNDIS_PACKET) pSkb; pAd = (PRTMP_ADAPTER) RTMP_OS_NETDEV_GET_PRIV(dev); #ifdef RALINK_ATE if (ATE_ON(pAd)) { RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); return 0; } #endif // RALINK_ATE // if ((RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS))) { RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); return 0; } if (!(RTMP_OS_NETDEV_STATE_RUNNING(dev))) { RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); return 0; } for (i = 0; i < MAX_WDS_ENTRY; i++) { if (ValidWdsEntry(pAd, i) && (pAd->WdsTab.WdsEntry[i].dev == dev)) { RTMP_SET_PACKET_NET_DEVICE_WDS(pSkb, i); SET_OS_PKT_NETDEV(pSkb, pAd->net_dev); return rt28xx_packet_xmit(pSkb); } } RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); return 0; }
/* ======================================================================== Routine Description: Send a packet to WLAN. Arguments: skb_p points to our adapter dev_p which WLAN network interface Return Value: 0: transmit successfully otherwise: transmit fail Note: ======================================================================== */ static int rt28xx_send_packets( IN struct sk_buff *skb_p, IN struct net_device *net_dev) { RTMP_ADAPTER *pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); if (!(net_dev->flags & IFF_UP)) { RELEASE_NDIS_PACKET(pAd, (PNDIS_PACKET)skb_p, NDIS_STATUS_FAILURE); return 0; } NdisZeroMemory((PUCHAR)&skb_p->cb[CB_OFF], 15); RTMP_SET_PACKET_NET_DEVICE_MBSSID(skb_p, MAIN_MBSSID); return rt28xx_packet_xmit(skb_p); }
/* ======================================================================== Routine Description: Send a packet to WLAN. Arguments: skb_p points to our adapter dev_p which WLAN network interface Return Value: 0: transmit successfully otherwise: transmit fail Note: ======================================================================== */ static int rt28xx_send_packets(IN struct sk_buff *skb_p, IN struct net_device *net_dev) { struct rt_rtmp_adapter *pAd = NULL; GET_PAD_FROM_NET_DEV(pAd, net_dev); if (!(net_dev->flags & IFF_UP)) { RELEASE_NDIS_PACKET(pAd, (void *)skb_p, NDIS_STATUS_FAILURE); return NETDEV_TX_OK; } NdisZeroMemory((u8 *)& skb_p->cb[CB_OFF], 15); RTMP_SET_PACKET_NET_DEVICE_MBSSID(skb_p, MAIN_MBSSID); return rt28xx_packet_xmit(skb_p); }
/* ======================================================================== Routine Description: Send a packet to WLAN. Arguments: skb_p points to our adapter dev_p which WLAN network interface Return Value: 0: transmit successfully otherwise: transmit fail Note: ======================================================================== */ static int rt28xx_send_packets( IN struct sk_buff *skb_p, IN struct net_device *net_dev) { RTMP_ADAPTER *pAd = NULL; GET_PAD_FROM_NET_DEV(pAd, net_dev); if (!(RTMP_OS_NETDEV_STATE_RUNNING(net_dev))) { RELEASE_NDIS_PACKET(pAd, (PNDIS_PACKET)skb_p, NDIS_STATUS_FAILURE); return 0; } NdisZeroMemory((PUCHAR)&skb_p->cb[CB_OFF], 15); RTMP_SET_PACKET_NET_DEVICE_MBSSID(skb_p, MAIN_MBSSID); MEM_DBG_PKT_ALLOC_INC(pAd); return rt28xx_packet_xmit(skb_p); }
/* ======================================================================== Routine Description: Send a packet to WLAN. Arguments: skb_p points to our adapter dev_p which WLAN network interface Return Value: 0: transmit successfully otherwise: transmit fail Note: ======================================================================== */ INT ApCli_VirtualIF_PacketSend( IN PNDIS_PACKET skb_p, IN PNET_DEV dev_p) { RTMP_ADAPTER *ad_p; PAPCLI_STRUCT pApCli; INT apcliIndex; ad_p = RTMP_OS_NETDEV_GET_PRIV(dev_p); ASSERT(ad_p); #ifdef RALINK_ATE if (ATE_ON(ad_p)) { RELEASE_NDIS_PACKET(ad_p, skb_p, NDIS_STATUS_FAILURE); return 0; } #endif // RALINK_ATE // if ((RTMP_TEST_FLAG(ad_p, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) || (RTMP_TEST_FLAG(ad_p, fRTMP_ADAPTER_RADIO_OFF)) || (RTMP_TEST_FLAG(ad_p, fRTMP_ADAPTER_RESET_IN_PROGRESS))) { /* wlan is scanning/disabled/reset */ RELEASE_NDIS_PACKET(ad_p, skb_p, NDIS_STATUS_FAILURE); return 0; } if (!(RTMP_OS_NETDEV_STATE_RUNNING(dev_p))) { /* the interface is down */ RELEASE_NDIS_PACKET(ad_p, skb_p, NDIS_STATUS_FAILURE); return 0; } pApCli = (PAPCLI_STRUCT)&ad_p->ApCfg.ApCliTab; for(apcliIndex = 0; apcliIndex < MAX_APCLI_NUM; apcliIndex++) { if (pApCli[apcliIndex].Valid != TRUE) continue; /* find the device in our ApCli list */ if (pApCli[apcliIndex].dev == dev_p) { /* ya! find it */ ad_p->RalinkCounters.PendingNdisPacketCount ++; RTMP_SET_PACKET_MOREDATA(skb_p, FALSE); RTMP_SET_PACKET_NET_DEVICE_APCLI(skb_p, apcliIndex); SET_OS_PKT_NETDEV(skb_p, ad_p->net_dev); /* transmit the packet */ return rt28xx_packet_xmit(RTPKT_TO_OSPKT(skb_p)); } } RELEASE_NDIS_PACKET(ad_p, skb_p, NDIS_STATUS_FAILURE); return 0; } /* End of ApCli_VirtualIF_PacketSend */