type = WLAN_FC_GET_TYPE(fc);
        praddr = hdr->addr1;
 
-       bpacket_match_bssid = ((RTLLIB_FTYPE_CTL != type) &&
-                       (!compare_ether_addr(priv->rtllib->
-                       current_network.bssid,
-                          (fc & RTLLIB_FCTL_TODS) ? hdr->addr1 :
-                          (fc & RTLLIB_FCTL_FROMDS) ? hdr->addr2 : hdr->addr3))
-               && (!pstats->bHwError) && (!pstats->bCRC) && (!pstats->bICV));
-       bpacket_toself =  bpacket_match_bssid &&        /* check this */
-                         (!compare_ether_addr(praddr,
-                         priv->rtllib->dev->dev_addr));
+       bpacket_match_bssid =
+               ((RTLLIB_FTYPE_CTL != type) &&
+                ether_addr_equal(priv->rtllib->current_network.bssid,
+                                 (fc & RTLLIB_FCTL_TODS) ? hdr->addr1 :
+                                 (fc & RTLLIB_FCTL_FROMDS) ? hdr->addr2 :
+                                 hdr->addr3) &&
+                (!pstats->bHwError) && (!pstats->bCRC) && (!pstats->bICV));
+       bpacket_toself = bpacket_match_bssid &&         /* check this */
+                        ether_addr_equal(praddr, priv->rtllib->dev->dev_addr);
        if (WLAN_FC_GET_FRAMETYPE(fc) == RTLLIB_STYPE_BEACON)
                bPacketBeacon = true;
        if (bpacket_match_bssid)
 
 static int rtllib_rx_data_filter(struct rtllib_device *ieee, u16 fc,
                                 u8 *dst, u8 *src, u8 *bssid, u8 *addr2)
 {
-       u8 zero_addr[ETH_ALEN] = {0};
        u8 type, stype;
 
        type = WLAN_FC_GET_TYPE(fc);
        stype = WLAN_FC_GET_STYPE(fc);
 
        /* Filter frames from different BSS */
-       if (((fc & RTLLIB_FCTL_DSTODS) != RTLLIB_FCTL_DSTODS)
-               && (compare_ether_addr(ieee->current_network.bssid, bssid) != 0)
-               && memcmp(ieee->current_network.bssid, zero_addr, ETH_ALEN)) {
+       if (((fc & RTLLIB_FCTL_DSTODS) != RTLLIB_FCTL_DSTODS) &&
+           !ether_addr_equal(ieee->current_network.bssid, bssid) &&
+           !is_zero_ether_addr(ieee->current_network.bssid)) {
                return -1;
        }
 
        if (ieee->IntelPromiscuousModeInfo.bPromiscuousOn  &&
                ieee->IntelPromiscuousModeInfo.bFilterSourceStationFrame) {
                if ((fc & RTLLIB_FCTL_TODS) && !(fc & RTLLIB_FCTL_FROMDS) &&
-                       (compare_ether_addr(dst, ieee->current_network.bssid) != 0) &&
-                       (compare_ether_addr(bssid, ieee->current_network.bssid) == 0)) {
+                   !ether_addr_equal(dst, ieee->current_network.bssid) &&
+                   ether_addr_equal(bssid, ieee->current_network.bssid)) {
                        return -1;
                }
        }
        /*Filter pkt not to me*/
        multicast = is_multicast_ether_addr(hdr->addr1);
        unicast = !multicast;
-       if (unicast && (compare_ether_addr(dev->dev_addr, hdr->addr1) != 0)) {
+       if (unicast && !ether_addr_equal(dev->dev_addr, hdr->addr1)) {
                if (ieee->bNetPromiscuousMode)
                        bToOtherSTA = true;
                else
 
                        struct mcast_address *mcaddr = adapter->mcastaddrs;
 
                        while (mcaddr) {
-                               if (!compare_ether_addr(mcaddr->address,
-                                                       ether_frame->ether_dhost)) {
+                               if (ether_addr_equal(mcaddr->address,
+                                                    ether_frame->ether_dhost)) {
                                        adapter->rcv_multicasts++;
                                        netdev->stats.multicast++;
                                        return true;
        /* Check to see if it already exists */
        mlist = adapter->mcastaddrs;
        while (mlist) {
-               if (!compare_ether_addr(mlist->address, address))
+               if (ether_addr_equal(mlist->address, address))
                        return 0;
                mlist = mlist->next;
        }
 
                        if (pDevice->bLinkPass == false) pCurrBSS->bSelected = false;
                        if ((pCurrBSS->bActive) &&
                            (pCurrBSS->bSelected == false)) {
-                               if (!compare_ether_addr(pCurrBSS->abyBSSID, pbyBSSID)) {
+                               if (ether_addr_equal(pCurrBSS->abyBSSID,
+                                                    pbyBSSID)) {
                                        if (pSSID != NULL) {
                                                // compare ssid
                                                if (!memcmp(pSSID->abySSID,
        for (ii = 0; ii < MAX_BSS_NUM; ii++) {
                if (bKeepCurrBSSID) {
                        if (pMgmt->sBSSList[ii].bActive &&
-                           !compare_ether_addr(pMgmt->sBSSList[ii].abyBSSID, pMgmt->abyCurrBSSID)) {
+                           ether_addr_equal(pMgmt->sBSSList[ii].abyBSSID,
+                                            pMgmt->abyCurrBSSID)) {
                                // bKeepCurrBSSID = false;
                                continue;
                        }
        for (ii = 0; ii < MAX_BSS_NUM; ii++) {
                pBSSList = &(pMgmt->sBSSList[ii]);
                if (pBSSList->bActive) {
-                       if (!compare_ether_addr(pBSSList->abyBSSID, abyBSSID)) {
+                       if (ether_addr_equal(pBSSList->abyBSSID, abyBSSID)) {
                                if (pSSID->len == ((PWLAN_IE_SSID)pBSSList->abySSID)->len) {
                                        if (memcmp(pSSID->abySSID,
                                                   ((PWLAN_IE_SSID)pBSSList->abySSID)->abySSID,
        // Index = 0 reserved for AP Node
        for (ii = 1; ii < (MAX_NODE_NUM + 1); ii++) {
                if (pMgmt->sNodeDBTable[ii].bActive) {
-                       if (!compare_ether_addr(abyDstAddr, pMgmt->sNodeDBTable[ii].abyMACAddr)) {
+                       if (ether_addr_equal(abyDstAddr,
+                                            pMgmt->sNodeDBTable[ii].abyMACAddr)) {
                                *puNodeIndex = ii;
                                return true;
                        }
 
        };
 
        pbyRxBuffer = (unsigned char *)(pbyRxBufferAddr + cbHeaderSize);
-       if (!compare_ether_addr(pbyRxBuffer, &pDevice->abySNAP_Bridgetunnel[0])) {
+       if (ether_addr_equal(pbyRxBuffer, pDevice->abySNAP_Bridgetunnel)) {
                cbHeaderSize += 6;
-       } else if (!compare_ether_addr(pbyRxBuffer, &pDevice->abySNAP_RFC1042[0])) {
+       } else if (ether_addr_equal(pbyRxBuffer, pDevice->abySNAP_RFC1042)) {
                cbHeaderSize += 6;
                pwType = (unsigned short *)(pbyRxBufferAddr + cbHeaderSize);
                if ((*pwType != TYPE_PKT_IPX) && (*pwType != cpu_to_le16(0xF380))) {
        s_vGetDASA(skb->data+4, &cbHeaderSize, &pDevice->sRxEthHeader);
 
        // filter packet send from myself
-       if (!compare_ether_addr((unsigned char *)&(pDevice->sRxEthHeader.abySrcAddr[0]), pDevice->abyCurrentNetAddr))
+       if (ether_addr_equal(pDevice->sRxEthHeader.abySrcAddr,
+                            pDevice->abyCurrentNetAddr))
                return false;
 
        if ((pMgmt->eCurrMode == WMAC_MODE_ESS_AP) || (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA)) {
 
                        unsigned int ii, uSameBssidNum = 0;
                        for (ii = 0; ii < MAX_BSS_NUM; ii++) {
                                if (pMgmt->sBSSList[ii].bActive &&
-                                   !compare_ether_addr(pMgmt->sBSSList[ii].abyBSSID, pMgmt->abyDesireBSSID)) {
+                                   ether_addr_equal(pMgmt->sBSSList[ii].abyBSSID,
+                                                    pMgmt->abyDesireBSSID)) {
                                        uSameBssidNum++;
                                }
                        }
                                        //         by means of judging if there are two same BSSID exist in list ?
                                        for (ii = 0; ii < MAX_BSS_NUM; ii++) {
                                                if (pMgmt->sBSSList[ii].bActive &&
-                                                   !compare_ether_addr(pMgmt->sBSSList[ii].abyBSSID, pCurr->abyBSSID)) {
+                                                   ether_addr_equal(pMgmt->sBSSList[ii].abyBSSID,
+                                                                    pCurr->abyBSSID)) {
                                                        uSameBssidNum++;
                                                }
                                        }
 
        *pKey = NULL;
        for (i = 0; i < MAX_KEY_TABLE; i++) {
                if ((pTable->KeyTable[i].bInUse == true) &&
-                   !compare_ether_addr(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
+                   ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
                        if (dwKeyIndex == 0xFFFFFFFF) {
                                if (pTable->KeyTable[i].PairwiseKey.bKeyValid == true) {
                                        *pKey = &(pTable->KeyTable[i].PairwiseKey);
                        j = i;
                }
                if ((pTable->KeyTable[i].bInUse == true) &&
-                   !compare_ether_addr(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
+                   ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
                        // found table already exist
                        if ((dwKeyIndex & PAIRWISE_KEY) != 0) {
                                // Pairwise key
 
        for (i = 0; i < MAX_KEY_TABLE; i++) {
                if ((pTable->KeyTable[i].bInUse == true) &&
-                   !compare_ether_addr(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
+                   ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
                        if ((dwKeyIndex & PAIRWISE_KEY) != 0) {
                                pTable->KeyTable[i].PairwiseKey.bKeyValid = false;
                                s_vCheckKeyTableValid(pTable, dwIoBase);
 
        for (i = 0; i < MAX_KEY_TABLE; i++) {
                if ((pTable->KeyTable[i].bInUse == true) &&
-                   !compare_ether_addr(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
+                   ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
                        pTable->KeyTable[i].PairwiseKey.bKeyValid = false;
                        for (u = 0; u < MAX_GROUP_KEY; u++) {
                                pTable->KeyTable[i].GroupKey[u].bKeyValid = false;
        *pKey = NULL;
        for (i = 0; i < MAX_KEY_TABLE; i++) {
                if ((pTable->KeyTable[i].bInUse == true) &&
-                   !compare_ether_addr(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
+                   ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
                        if (dwKeyType == PAIRWISE_KEY) {
                                if (pTable->KeyTable[i].PairwiseKey.bKeyValid == true) {
                                        *pKey = &(pTable->KeyTable[i].PairwiseKey);
 
                for (ii = 0; ii < DUPLICATE_RX_CACHE_LENGTH; ii++) {
                        pCacheEntry = &(pCache->asCacheEntry[uIndex]);
                        if ((pCacheEntry->wFmSequence == pMACHeader->wSeqCtl) &&
-                           (!compare_ether_addr(&(pCacheEntry->abyAddr2[0]), &(pMACHeader->abyAddr2[0])))
-) {
+                           ether_addr_equal(pCacheEntry->abyAddr2,
+                                            pMACHeader->abyAddr2)) {
                                /* Duplicate match */
                                return true;
                        }
 
        for (ii = 0; ii < pDevice->cbDFCB; ii++) {
                if ((pDevice->sRxDFCB[ii].bInUse == true) &&
-                   (!compare_ether_addr(&(pDevice->sRxDFCB[ii].abyAddr2[0]), &(pMACHeader->abyAddr2[0])))
-) {
+                   ether_addr_equal(pDevice->sRxDFCB[ii].abyAddr2,
+                                    pMACHeader->abyAddr2)) {
                        //
                        return ii;
                }
 
                        vMgrDecodeDeauthen(&sFrame);
                        DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO  "AP deauthed me, reason=%d.\n", cpu_to_le16((*(sFrame.pwReason))));
                        // TODO: update BSS list for specific BSSID if pre-authentication case
-                       if (!compare_ether_addr(sFrame.pHdr->sA3.abyAddr3, pMgmt->abyCurrBSSID)) {
+                       if (ether_addr_equal(sFrame.pHdr->sA3.abyAddr3,
+                                            pMgmt->abyCurrBSSID)) {
                                if (pMgmt->eCurrState >= WMAC_STATE_AUTHPENDING) {
                                        pMgmt->sNodeDBTable[0].bActive = false;
                                        pMgmt->eCurrMode = WMAC_MODE_STANDBY;
 
 
                } else {
                        // Key Table Full
-                       if (!compare_ether_addr(¶m->addr[0], pDevice->abyBSSID)) {
+                       if (ether_addr_equal(param->addr, pDevice->abyBSSID)) {
                                //DBG_PRN_WLAN03(("return NDIS_STATUS_INVALID_DATA -Key Table Full.2\n"));
                                //spin_unlock_irq(&pDevice->lock);
                                return -EINVAL;
 
 
             if ((pCurrBSS->bActive) &&
                 (pCurrBSS->bSelected == false)) {
-                   if (!compare_ether_addr(pCurrBSS->abyBSSID, pbyBSSID)) {
+                   if (ether_addr_equal(pCurrBSS->abyBSSID, pbyBSSID)) {
                     if (pSSID != NULL) {
                         // compare ssid
                         if ( !memcmp(pSSID->abySSID,
     for (ii = 0; ii < MAX_BSS_NUM; ii++) {
         if (bKeepCurrBSSID) {
             if (pMgmt->sBSSList[ii].bActive &&
-               !compare_ether_addr(pMgmt->sBSSList[ii].abyBSSID,
-                                   pMgmt->abyCurrBSSID)) {
+               ether_addr_equal(pMgmt->sBSSList[ii].abyBSSID,
+                                pMgmt->abyCurrBSSID)) {
  //mike mark: there are two BSSID's in list. If that AP is in hidden ssid mode, one SSID is null,
  //                 but other's might not be obvious, so if it associate's with your STA,
  //                 you must keep the two of them!!
     for (ii = 0; ii < MAX_BSS_NUM; ii++) {
         pBSSList = &(pMgmt->sBSSList[ii]);
         if (pBSSList->bActive) {
-               if (!compare_ether_addr(pBSSList->abyBSSID, abyBSSID)) {
+               if (ether_addr_equal(pBSSList->abyBSSID, abyBSSID)) {
                 if (pSSID->len == ((PWLAN_IE_SSID)pBSSList->abySSID)->len){
                     if (memcmp(pSSID->abySSID,
                             ((PWLAN_IE_SSID)pBSSList->abySSID)->abySSID,
     // Index = 0 reserved for AP Node
     for (ii = 1; ii < (MAX_NODE_NUM + 1); ii++) {
         if (pMgmt->sNodeDBTable[ii].bActive) {
-               if (!compare_ether_addr(abyDstAddr,
-                                       pMgmt->sNodeDBTable[ii].abyMACAddr)) {
+               if (ether_addr_equal(abyDstAddr,
+                                    pMgmt->sNodeDBTable[ii].abyMACAddr)) {
                 *puNodeIndex = ii;
                 return true;
             }
 
     };
 
     pbyRxBuffer = (u8 *) (pbyRxBufferAddr + cbHeaderSize);
-    if (!compare_ether_addr(pbyRxBuffer, &pDevice->abySNAP_Bridgetunnel[0])) {
+    if (ether_addr_equal(pbyRxBuffer, pDevice->abySNAP_Bridgetunnel)) {
         cbHeaderSize += 6;
-    } else if (!compare_ether_addr(pbyRxBuffer, &pDevice->abySNAP_RFC1042[0])) {
+    } else if (ether_addr_equal(pbyRxBuffer, pDevice->abySNAP_RFC1042)) {
         cbHeaderSize += 6;
         pwType = (u16 *) (pbyRxBufferAddr + cbHeaderSize);
        if ((*pwType == cpu_to_be16(ETH_P_IPX)) ||
     if ((pMgmt->eCurrMode == WMAC_MODE_STANDBY) ||
         (pMgmt->eCurrMode == WMAC_MODE_ESS_STA)) {
        if (pMgmt->sNodeDBTable[0].bActive) {
-        if (!compare_ether_addr(pMgmt->abyCurrBSSID, pMACHeader->addr2)) {
+        if (ether_addr_equal(pMgmt->abyCurrBSSID, pMACHeader->addr2)) {
            if (pMgmt->sNodeDBTable[0].uInActiveCount != 0)
                   pMgmt->sNodeDBTable[0].uInActiveCount = 0;
            }
             return false;
         }
 
-       if (compare_ether_addr(pDevice->abyCurrentNetAddr,
-                              pMACHeader->addr1)) {
+       if (!ether_addr_equal(pDevice->abyCurrentNetAddr, pMACHeader->addr1)) {
                return false;
         }
     }
     // Use for TKIP MIC
     s_vGetDASA(pbyFrame, &cbHeaderSize, &pDevice->sRxEthHeader);
 
-    if (!compare_ether_addr((u8 *)&(pDevice->sRxEthHeader.h_source[0]),
-                           pDevice->abyCurrentNetAddr))
+    if (ether_addr_equal((u8 *)pDevice->sRxEthHeader.h_source,
+                        pDevice->abyCurrentNetAddr))
         return false;
 
     if ((pMgmt->eCurrMode == WMAC_MODE_ESS_AP) || (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA)) {
 
                        unsigned uSameBssidNum = 0;
                        for (ii = 0; ii < MAX_BSS_NUM; ii++) {
                                if (pMgmt->sBSSList[ii].bActive &&
-                                       !compare_ether_addr(pMgmt->sBSSList[ii].abyBSSID,
-                                                       pMgmt->abyDesireBSSID)) {
+                                       ether_addr_equal(pMgmt->sBSSList[ii].abyBSSID,
+                                                        pMgmt->abyDesireBSSID)) {
                                        uSameBssidNum++;
                                }
                        }
                                // are two same BSSID exist in list ?
                                for (ii = 0; ii < MAX_BSS_NUM; ii++) {
                                        if (pMgmt->sBSSList[ii].bActive &&
-                                               !compare_ether_addr(pMgmt->sBSSList[ii].abyBSSID,
-                                                               pCurr->abyBSSID)) {
+                                               ether_addr_equal(pMgmt->sBSSList[ii].abyBSSID,
+                                                                pCurr->abyBSSID)) {
                                                uSameBssidNum++;
                                        }
                                }
 
     *pKey = NULL;
     for (i=0;i<MAX_KEY_TABLE;i++) {
         if ((pTable->KeyTable[i].bInUse == true) &&
-           !compare_ether_addr(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
+           ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
             if (dwKeyIndex == 0xFFFFFFFF) {
                 if (pTable->KeyTable[i].PairwiseKey.bKeyValid == true) {
                     *pKey = &(pTable->KeyTable[i].PairwiseKey);
             j = i;
         }
         if ((pTable->KeyTable[i].bInUse == true) &&
-           !compare_ether_addr(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
+           ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
             // found table already exist
             if ((dwKeyIndex & PAIRWISE_KEY) != 0) {
                 // Pairwise key
     } else {
         for (i=0;i<MAX_KEY_TABLE;i++) {
             if ( (pTable->KeyTable[i].bInUse == true) &&
-                !compare_ether_addr(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
+                ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
 
                 if ((dwKeyIndex & PAIRWISE_KEY) != 0) {
                     pTable->KeyTable[i].PairwiseKey.bKeyValid = false;
 
     for (i=0;i<MAX_KEY_TABLE;i++) {
         if ((pTable->KeyTable[i].bInUse == true) &&
-           !compare_ether_addr(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
+           ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
             pTable->KeyTable[i].PairwiseKey.bKeyValid = false;
            for (u = 0; u < MAX_GROUP_KEY; u++)
                pTable->KeyTable[i].GroupKey[u].bKeyValid = false;
 
     for (i = 0; i < MAX_KEY_TABLE; i++) {
         if ((pTable->KeyTable[i].bInUse == true) &&
-           !compare_ether_addr(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
+           ether_addr_equal(pTable->KeyTable[i].abyBSSID, pbyBSSID)) {
 
             if (dwKeyType == PAIRWISE_KEY) {
 
 
         for (ii = 0; ii < DUPLICATE_RX_CACHE_LENGTH; ii++) {
             pCacheEntry = &(pCache->asCacheEntry[uIndex]);
             if ((pCacheEntry->wFmSequence == pMACHeader->seq_ctrl) &&
-               (!compare_ether_addr(&(pCacheEntry->abyAddr2[0]),
-                                    &(pMACHeader->addr2[0]))) &&
+               ether_addr_equal(pCacheEntry->abyAddr2, pMACHeader->addr2) &&
                 (LOBYTE(pCacheEntry->wFrameCtl) == LOBYTE(pMACHeader->frame_control))
                 ) {
                 /* Duplicate match */
 
        for (ii = 0; ii < pDevice->cbDFCB; ii++) {
                if ((pDevice->sRxDFCB[ii].bInUse == true) &&
-                   (!compare_ether_addr(&(pDevice->sRxDFCB[ii].abyAddr2[0]),
-                                         &(pMACHeader->addr2[0])))) {
+                   ether_addr_equal(pDevice->sRxDFCB[ii].abyAddr2,
+                                    pMACHeader->addr2)) {
                        return ii;
                }
        }
 
           pDevice->fWPA_Authened = false;
             DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO  "AP deauthed me, reason=%d.\n", cpu_to_le16((*(sFrame.pwReason))));
             // TODO: update BSS list for specific BSSID if pre-authentication case
-           if (!compare_ether_addr(sFrame.pHdr->sA3.abyAddr3,
-                                   pMgmt->abyCurrBSSID)) {
+           if (ether_addr_equal(sFrame.pHdr->sA3.abyAddr3,
+                                pMgmt->abyCurrBSSID)) {
                 if (pMgmt->eCurrState >= WMAC_STATE_AUTHPENDING) {
                     pMgmt->sNodeDBTable[0].bActive = false;
                     pMgmt->eCurrMode = WMAC_MODE_STANDBY;
 
                        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Pairwise Key Set\n");
                } else {
                        // Key Table Full
-                       if (!compare_ether_addr(¶m->addr[0], pDevice->abyBSSID)) {
+                       if (ether_addr_equal(param->addr, pDevice->abyBSSID)) {
                                //DBG_PRN_WLAN03(("return NDIS_STATUS_INVALID_DATA -Key Table Full.2\n"));
                                return -EINVAL;
                        } else {