diff --git a/README.md b/README.md index b135d44..452c3da 100644 --- a/README.md +++ b/README.md @@ -18,28 +18,37 @@ * MESH Support * Monitor mode * Frame injection -* Up to kernel v6.0+ +* Up to kernel v6.5+ ... And a bunch of various wifi chipsets # Howto build/install -1. You will need to blacklist another driver in order to use this one. -2. `echo 'blacklist r8188eu'|sudo tee -a '/etc/modprobe.d/realtek.conf'` -3. Reboot -4. cd rtl8188eus -5. `make && sudo make install` -6. Reboot in order to blacklist and load the new driver/module. +1. Compile and install the driver: +``` +cd rtl8188eus +make && sudo make install +``` +2. Blacklist another drivers in order to use this one: +``` +echo 'blacklist r8188eu' | sudo tee -a '/etc/modprobe.d/realtek.conf' +echo 'blacklist rtl8xxxu' | sudo tee -a '/etc/modprobe.d/realtek.conf' +``` +3. `reboot` or remove all drivers related to RTL8188 and reload this one: +``` +rmmod r8188eu rtl8xxxu 8188eu +modprobe 8188eu +``` # MONITOR MODE howto Use these steps to enter monitor mode. ``` -$ sudo airmon-ng check kill -$ sudo ip link set down -$ sudo iw dev set type monitor +sudo airmon-ng check kill +sudo ip link set down +sudo iw dev set type monitor ``` Frame injection test may be performed with (after kernel v5.2 scanning is slow, run a scan or simply an airodump-ng first!) ``` -$ aireplay -9 +sudo aireplay-ng -9 ``` # NetworkManager configuration diff --git a/core/rtw_br_ext.c b/core/rtw_br_ext.c index 532d6b3..1998500 100644 --- a/core/rtw_br_ext.c +++ b/core/rtw_br_ext.c @@ -117,7 +117,13 @@ static __inline__ int __nat25_add_pppoe_tag(struct sk_buff *skb, struct pppoe_ta /* have a room for new tag */ memmove(((unsigned char *)ph->tag + data_len), (unsigned char *)ph->tag, ntohs(ph->length)); ph->length = htons(ntohs(ph->length) + data_len); +#if (defined __GNUC__) && (__GNUC__ > 10) + #pragma GCC diagnostic ignored "-Wstringop-overread" +#endif memcpy((unsigned char *)ph->tag, tag, data_len); +#if (defined __GNUC__) && (__GNUC__ > 10) + #pragma GCC diagnostic pop +#endif return data_len; } diff --git a/core/rtw_mp.c b/core/rtw_mp.c index 130dd98..23e75ec 100644 --- a/core/rtw_mp.c +++ b/core/rtw_mp.c @@ -14,9 +14,6 @@ *****************************************************************************/ #define _RTW_MP_C_ #include -#ifdef PLATFORM_FREEBSD - #include /* for RFHIGHPID */ -#endif #include "../hal/phydm/phydm_precomp.h" #if defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8821A) @@ -163,64 +160,6 @@ static void _init_mp_priv_(struct mp_priv *pmp_priv) } -#ifdef PLATFORM_WINDOWS -#if 0 -void mp_wi_callback( - IN NDIS_WORK_ITEM *pwk_item, - IN PVOID cntx -) -{ - _adapter *padapter = (_adapter *)cntx; - struct mp_priv *pmppriv = &padapter->mppriv; - struct mp_wi_cntx *pmp_wi_cntx = &pmppriv->wi_cntx; - - /* Execute specified action. */ - if (pmp_wi_cntx->curractfunc != NULL) { - LARGE_INTEGER cur_time; - ULONGLONG start_time, end_time; - NdisGetCurrentSystemTime(&cur_time); /* driver version */ - start_time = cur_time.QuadPart / 10; /* The return value is in microsecond */ - - pmp_wi_cntx->curractfunc(padapter); - - NdisGetCurrentSystemTime(&cur_time); /* driver version */ - end_time = cur_time.QuadPart / 10; /* The return value is in microsecond */ - - } - - NdisAcquireSpinLock(&(pmp_wi_cntx->mp_wi_lock)); - pmp_wi_cntx->bmp_wi_progress = _FALSE; - NdisReleaseSpinLock(&(pmp_wi_cntx->mp_wi_lock)); - - if (pmp_wi_cntx->bmpdrv_unload) - NdisSetEvent(&(pmp_wi_cntx->mp_wi_evt)); - -} -#endif - -static int init_mp_priv_by_os(struct mp_priv *pmp_priv) -{ - struct mp_wi_cntx *pmp_wi_cntx; - - if (pmp_priv == NULL) - return _FAIL; - - pmp_priv->rx_testcnt = 0; - pmp_priv->rx_testcnt1 = 0; - pmp_priv->rx_testcnt2 = 0; - - pmp_priv->tx_testcnt = 0; - pmp_priv->tx_testcnt1 = 0; - - pmp_wi_cntx = &pmp_priv->wi_cntx - pmp_wi_cntx->bmpdrv_unload = _FALSE; - pmp_wi_cntx->bmp_wi_progress = _FALSE; - pmp_wi_cntx->curractfunc = NULL; - - return _SUCCESS; -} -#endif - #ifdef PLATFORM_LINUX static int init_mp_priv_by_os(struct mp_priv *pmp_priv) { @@ -1940,17 +1879,6 @@ void SetPacketTx(PADAPTER padapter) pmp_priv->tx.PktTxThread = NULL; } #endif -#ifdef PLATFORM_FREEBSD - { - struct proc *p; - struct thread *td; - pmp_priv->tx.PktTxThread = kproc_kthread_add(mp_xmit_packet_thread, pmp_priv, - &p, &td, RFHIGHPID, 0, "MPXmitThread", "MPXmitThread"); - - if (pmp_priv->tx.PktTxThread < 0) - RTW_INFO("Create PktTx Thread Fail !!!!!\n"); - } -#endif Rtw_MPSetMacTxEDCA(padapter); exit: diff --git a/hal/phydm/halrf/halrf.h b/hal/phydm/halrf/halrf.h index 7240397..58c6ca2 100644 --- a/hal/phydm/halrf/halrf.h +++ b/hal/phydm/halrf/halrf.h @@ -354,7 +354,7 @@ halrf_cmn_info_init( void halrf_cmn_info_hook( void *dm_void, - u32 cmn_info, + enum halrf_cmninfo_hook cmn_info, void *value ); diff --git a/os_dep/linux/ioctl_cfg80211.c b/os_dep/linux/ioctl_cfg80211.c index b68e5eb..cc804ac 100644 --- a/os_dep/linux/ioctl_cfg80211.c +++ b/os_dep/linux/ioctl_cfg80211.c @@ -417,7 +417,9 @@ u8 rtw_cfg80211_ch_switch_notify(_adapter *adapter, u8 ch, u8 bw, u8 offset, u8 if (ret != _SUCCESS) goto exit; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 3, 0)) + cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, 0, 0); +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 0)) cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, 0); #else cfg80211_ch_switch_notify(adapter->pnetdev, &chdef); @@ -1104,6 +1106,7 @@ check_bss: #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) || defined(RHEL79)) #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)) + roam_info.links[0].channel = notify_channel; roam_info.links[0].bssid = cur_network->network.MacAddress; #else roam_info.bssid = cur_network->network.MacAddress; @@ -1138,13 +1141,17 @@ check_bss: RTW_INFO("pwdev->sme_state(b)=%d\n", pwdev->sme_state); #endif - if (check_fwstate(pmlmepriv, WIFI_MONITOR_STATE) != _TRUE) - rtw_cfg80211_connect_result(pwdev, cur_network->network.MacAddress - , pmlmepriv->assoc_req + sizeof(struct rtw_ieee80211_hdr_3addr) + 2 - , pmlmepriv->assoc_req_len - sizeof(struct rtw_ieee80211_hdr_3addr) - 2 - , pmlmepriv->assoc_rsp + sizeof(struct rtw_ieee80211_hdr_3addr) + 6 - , pmlmepriv->assoc_rsp_len - sizeof(struct rtw_ieee80211_hdr_3addr) - 6 - , WLAN_STATUS_SUCCESS, GFP_ATOMIC); + if (check_fwstate(pmlmepriv, WIFI_MONITOR_STATE) != _TRUE) { + struct cfg80211_bss *bss; + bss = cfg80211_get_bss(pwdev->wiphy, NULL, cur_network->network.MacAddress, NULL, 0, + IEEE80211_BSS_TYPE_ANY, IEEE80211_PRIVACY_ANY); + cfg80211_connect_bss(wdev_to_ndev(pwdev), cur_network->network.MacAddress, bss + , pmlmepriv->assoc_req + sizeof(struct rtw_ieee80211_hdr_3addr) + 2 + , pmlmepriv->assoc_req_len - sizeof(struct rtw_ieee80211_hdr_3addr) - 2 + , pmlmepriv->assoc_rsp + sizeof(struct rtw_ieee80211_hdr_3addr) + 6 + , pmlmepriv->assoc_rsp_len - sizeof(struct rtw_ieee80211_hdr_3addr) - 6 + , WLAN_STATUS_SUCCESS, GFP_ATOMIC, NL80211_TIMEOUT_UNSPECIFIED); + } #if defined(RHEL79) && (LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0) || defined(COMPAT_KERNEL_RELEASE)) RTW_INFO("pwdev->sme_state(a)=%d\n", pwdev->sme_state); #endif @@ -1660,6 +1667,9 @@ exit: } static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) + , int link_id +#endif , u8 key_index #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) || defined(COMPAT_KERNEL_RELEASE) , bool pairwise @@ -1804,6 +1814,9 @@ addkey_end: } static int cfg80211_rtw_get_key(struct wiphy *wiphy, struct net_device *ndev +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) + , int link_id +#endif , u8 keyid #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) || defined(COMPAT_KERNEL_RELEASE) , bool pairwise @@ -1969,6 +1982,9 @@ exit: } static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) + int link_id, +#endif #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) || defined(COMPAT_KERNEL_RELEASE) u8 key_index, bool pairwise, const u8 *mac_addr) #else /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) */ @@ -1989,7 +2005,11 @@ static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev, } static int cfg80211_rtw_set_default_key(struct wiphy *wiphy, - struct net_device *ndev, u8 key_index + struct net_device *ndev, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) + int link_id, +#endif + u8 key_index #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38)) || defined(COMPAT_KERNEL_RELEASE) , bool unicast, bool multicast #endif @@ -2037,7 +2057,11 @@ static int cfg80211_rtw_set_default_key(struct wiphy *wiphy, #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30)) int cfg80211_rtw_set_default_mgmt_key(struct wiphy *wiphy, - struct net_device *ndev, u8 key_index) + struct net_device *ndev, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) + int link_id, +#endif + u8 key_index) { #define SET_DEF_KEY_PARAM_FMT " key_index=%d" #define SET_DEF_KEY_PARAM_ARG , key_index diff --git a/os_dep/linux/ioctl_linux.c b/os_dep/linux/ioctl_linux.c index 35421a7..fbc162f 100644 --- a/os_dep/linux/ioctl_linux.c +++ b/os_dep/linux/ioctl_linux.c @@ -9789,7 +9789,7 @@ static int rtw_mp_efuse_set(struct net_device *dev, rtw_hal_read_chip_info(padapter); /* set mac addr*/ rtw_macaddr_cfg(adapter_mac_addr(padapter), get_hal_mac_addr(padapter)); - _rtw_memcpy(padapter->pnetdev->dev_addr, get_hal_mac_addr(padapter), ETH_ALEN); /* set mac addr to net_device */ + _rtw_memcpy((void *)padapter->pnetdev->dev_addr, get_hal_mac_addr(padapter), ETH_ALEN); /* set mac addr to net_device */ #ifdef CONFIG_P2P rtw_init_wifidirect_addrs(padapter, adapter_mac_addr(padapter), adapter_mac_addr(padapter)); diff --git a/os_dep/linux/os_intfs.c b/os_dep/linux/os_intfs.c index f006fc8..abc2eb2 100644 --- a/os_dep/linux/os_intfs.c +++ b/os_dep/linux/os_intfs.c @@ -1618,7 +1618,11 @@ int rtw_os_ndev_register(_adapter *adapter, const char *name) u8 rtnl_lock_needed = rtw_rtnl_lock_needed(dvobj); #ifdef CONFIG_RTW_NAPI - netif_napi_add(ndev, &adapter->napi, rtw_recv_napi_poll, RTL_NAPI_WEIGHT); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) + netif_napi_add_weight(ndev, &adapter->napi, rtw_recv_napi_poll, RTL_NAPI_WEIGHT); +#else + netif_napi_add(ndev, &adapter->napi, rtw_recv_napi_poll, RTL_NAPI_WEIGHT); +#endif #endif /* CONFIG_RTW_NAPI */ #if defined(CONFIG_IOCTL_CFG80211) diff --git a/os_dep/osdep_service.c b/os_dep/osdep_service.c index 7367bca..9753ba4 100644 --- a/os_dep/osdep_service.c +++ b/os_dep/osdep_service.c @@ -2451,7 +2451,7 @@ int rtw_change_ifname(_adapter *padapter, const char *ifname) rtw_init_netdev_name(pnetdev, ifname); - _rtw_memcpy(pnetdev->dev_addr, adapter_mac_addr(padapter), ETH_ALEN); + _rtw_memcpy((void *)pnetdev->dev_addr, adapter_mac_addr(padapter), ETH_ALEN); if (rtnl_lock_needed) ret = register_netdev(pnetdev); @@ -2574,7 +2574,9 @@ u64 rtw_division64(u64 x, u64 y) inline u32 rtw_random32(void) { #ifdef PLATFORM_LINUX -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) + return get_random_u32(); +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)) return prandom_u32(); #elif (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)) u32 random_int;