From 58149cd4db41ea835a4aea35300a0af4bb5396ff Mon Sep 17 00:00:00 2001 From: themanyone Date: Fri, 2 Dec 2022 06:07:18 -0900 Subject: [PATCH] quickfix for kernel 6.1 --- README.md | 6 ++++-- core/rtw_ieee80211.c | 15 +++++++++++++++ core/rtw_mlme.c | 2 +- core/rtw_recv.c | 1 + ifcfg-wlan0 | 2 +- include/ieee80211.h | 21 +++++---------------- os_dep/linux/ioctl_cfg80211.c | 28 ++++++++++++++-------------- os_dep/linux/ioctl_cfg80211.h | 3 +-- os_dep/linux/os_intfs.c | 2 +- os_dep/linux/rtw_proc.c | 5 ++--- os_dep/osdep_service.c | 2 +- 11 files changed, 46 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index bb3d579..0b28c85 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# Realtek RTL8811CU/RTL8821CU USB wifi adapter driver version 5.4.1 for Linux 4.4.x up to 5.x +# Realtek RTL8811CU/RTL8821CU USB wifi adapter driver version 5.4.1 for Linux 4.4.x up to ... + +This fork compiles for kernel 6.1 and tested on open networks. Not all functions/ap settings may work. Before build this driver make sure `make`, `gcc`, `linux-header`/`kernel-devel`, `bc` and `git` have been installed. @@ -6,7 +8,7 @@ Before build this driver make sure `make`, `gcc`, `linux-header`/`kernel-devel`, ``` mkdir -p ~/build cd ~/build -git clone https://github.com/brektrou/rtl8821CU.git +git clone (url of repository) ``` ## Check the name of the interface diff --git a/core/rtw_ieee80211.c b/core/rtw_ieee80211.c index c867197..e0455e3 100644 --- a/core/rtw_ieee80211.c +++ b/core/rtw_ieee80211.c @@ -18,7 +18,22 @@ #include #endif #include +extern __inline int is_multicast_mac_addr(const u8 *addr) +{ + return (addr[0] != 0xff) && (0x01 & addr[0]); +} +extern __inline int is_broadcast_mac_addr(const u8 *addr) +{ + return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \ + (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff)); +} + +extern __inline int is_zero_mac_addr(const u8 *addr) +{ + return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && \ + (addr[3] == 0x00) && (addr[4] == 0x00) && (addr[5] == 0x00)); +} u8 RTW_WPA_OUI_TYPE[] = { 0x00, 0x50, 0xf2, 1 }; u16 RTW_WPA_VERSION = 1; diff --git a/core/rtw_mlme.c b/core/rtw_mlme.c index 2bfa50f..a5f6dc8 100644 --- a/core/rtw_mlme.c +++ b/core/rtw_mlme.c @@ -15,7 +15,7 @@ #define _RTW_MLME_C_ #include - +#include extern void indicate_wx_scan_complete_event(_adapter *padapter); extern u8 rtw_do_join(_adapter *padapter); diff --git a/core/rtw_recv.c b/core/rtw_recv.c index 8f08212..3df931a 100644 --- a/core/rtw_recv.c +++ b/core/rtw_recv.c @@ -16,6 +16,7 @@ #include #include +#include #if defined(PLATFORM_LINUX) && defined (PLATFORM_WINDOWS) diff --git a/ifcfg-wlan0 b/ifcfg-wlan0 index 20dcbec..bb9fa3e 100755 --- a/ifcfg-wlan0 +++ b/ifcfg-wlan0 @@ -1,4 +1,4 @@ #DHCP client -DEVICE=wlan0 +DEVICE=wlo2 BOOTPROTO=dhcp ONBOOT=yes \ No newline at end of file diff --git a/include/ieee80211.h b/include/ieee80211.h index dde8b4c..8706d1b 100644 --- a/include/ieee80211.h +++ b/include/ieee80211.h @@ -1529,22 +1529,11 @@ enum ieee80211_state { (((Addr[2]) & 0xff) == 0xff) && (((Addr[3]) & 0xff) == 0xff) && (((Addr[4]) & 0xff) == 0xff) && \ (((Addr[5]) & 0xff) == 0xff)) #else -extern __inline int is_multicast_mac_addr(const u8 *addr) -{ - return (addr[0] != 0xff) && (0x01 & addr[0]); -} - -extern __inline int is_broadcast_mac_addr(const u8 *addr) -{ - return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \ - (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff)); -} - -extern __inline int is_zero_mac_addr(const u8 *addr) -{ - return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && \ - (addr[3] == 0x00) && (addr[4] == 0x00) && (addr[5] == 0x00)); -} +extern int is_multicast_mac_addr(const u8 *addr); + +extern int is_broadcast_mac_addr(const u8 *addr); + +extern int is_zero_mac_addr(const u8 *addr); #endif /* PLATFORM_FREEBSD */ #define CFG_IEEE80211_RESERVE_FCS (1<<0) diff --git a/os_dep/linux/ioctl_cfg80211.c b/os_dep/linux/ioctl_cfg80211.c index d9c81c9..af38eb9 100644 --- a/os_dep/linux/ioctl_cfg80211.c +++ b/os_dep/linux/ioctl_cfg80211.c @@ -417,7 +417,7 @@ u8 rtw_cfg80211_ch_switch_notify(_adapter *adapter, u8 ch, u8 bw, u8 offset, u8 if (ret != _SUCCESS) goto exit; - cfg80211_ch_switch_notify(adapter->pnetdev, &chdef); + cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, NULL); #else int freq = rtw_ch2freq(ch); @@ -1085,7 +1085,7 @@ check_bss: #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) - roam_info.bssid = cur_network->network.MacAddress; + //roam_info.bssid = cur_network->network.MacAddress; roam_info.req_ie = pmlmepriv->assoc_req + sizeof(struct rtw_ieee80211_hdr_3addr) + 2; roam_info.req_ie_len = pmlmepriv->assoc_req_len - sizeof(struct rtw_ieee80211_hdr_3addr) - 2; roam_info.resp_ie = pmlmepriv->assoc_rsp + sizeof(struct rtw_ieee80211_hdr_3addr) + 6; @@ -4223,7 +4223,7 @@ void rtw_cfg80211_indicate_sta_assoc(_adapter *padapter, u8 *pmgmt_frame, uint f pwdev->iftype = NL80211_IFTYPE_STATION; #endif /* CONFIG_PLATFORM_MSTAR */ RTW_INFO("iftype=%d before call cfg80211_send_rx_assoc()\n", pwdev->iftype); - rtw_cfg80211_send_rx_assoc(padapter, NULL, pmgmt_frame, frame_len); + //~ rtw_cfg80211_send_rx_assoc(padapter, NULL, pmgmt_frame, frame_len); RTW_INFO("iftype=%d after call cfg80211_send_rx_assoc()\n", pwdev->iftype); pwdev->iftype = NL80211_IFTYPE_AP; /* cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC); */ @@ -4282,7 +4282,7 @@ void rtw_cfg80211_indicate_sta_disassoc(_adapter *padapter, const u8 *da, unsign #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER) rtw_cfg80211_rx_mgmt(wdev, freq, 0, mgmt_buf, frame_len, GFP_ATOMIC); #else /* COMPAT_KERNEL_RELEASE */ - cfg80211_send_disassoc(padapter->pnetdev, mgmt_buf, frame_len); + //~ cfg80211_send_disassoc(padapter->pnetdev, mgmt_buf, frame_len); /* cfg80211_rx_action(padapter->pnetdev, freq, mgmt_buf, frame_len, GFP_ATOMIC); */ #endif /* COMPAT_KERNEL_RELEASE */ #endif /* defined(RTW_USE_CFG80211_STA_EVENT) */ @@ -9378,12 +9378,12 @@ int rtw_hostapd_acs_dump_survey(struct wiphy *wiphy, struct net_device *netdev, static struct cfg80211_ops rtw_cfg80211_ops = { .change_virtual_intf = cfg80211_rtw_change_iface, - .add_key = cfg80211_rtw_add_key, - .get_key = cfg80211_rtw_get_key, - .del_key = cfg80211_rtw_del_key, - .set_default_key = cfg80211_rtw_set_default_key, + //.add_key = cfg80211_rtw_add_key, + //.get_key = cfg80211_rtw_get_key, + //.del_key = cfg80211_rtw_del_key, + //.set_default_key = cfg80211_rtw_set_default_key, #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30)) - .set_default_mgmt_key = cfg80211_rtw_set_default_mgmt_key, + //.set_default_mgmt_key = cfg80211_rtw_set_default_mgmt_key, #endif #if defined(CONFIG_GTK_OL) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0)) .set_rekey_data = cfg80211_rtw_set_rekey_data, @@ -9413,7 +9413,7 @@ static struct cfg80211_ops rtw_cfg80211_ops = { #else .start_ap = cfg80211_rtw_start_ap, .change_beacon = cfg80211_rtw_change_beacon, - .stop_ap = cfg80211_rtw_stop_ap, + //.stop_ap = cfg80211_rtw_stop_ap, #endif #if CONFIG_RTW_MACADDR_ACL && (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)) @@ -9679,10 +9679,10 @@ void rtw_wdev_unregister(struct wireless_dev *wdev) rtw_cfg80211_indicate_scan_done(adapter, _TRUE); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0)) || defined(COMPAT_KERNEL_RELEASE) - if (wdev->current_bss) { - RTW_INFO(FUNC_ADPT_FMT" clear current_bss by cfg80211_disconnected\n", FUNC_ADPT_ARG(adapter)); - rtw_cfg80211_indicate_disconnect(adapter, 0, 1); - } + //~ if (wdev->current_bss) { + //~ RTW_INFO(FUNC_ADPT_FMT" clear current_bss by cfg80211_disconnected\n", FUNC_ADPT_ARG(adapter)); + //~ rtw_cfg80211_indicate_disconnect(adapter, 0, 1); + //~ } #endif if (pwdev_priv->pmon_ndev) { diff --git a/os_dep/linux/ioctl_cfg80211.h b/os_dep/linux/ioctl_cfg80211.h index d16cfdd..b9988fe 100644 --- a/os_dep/linux/ioctl_cfg80211.h +++ b/os_dep/linux/ioctl_cfg80211.h @@ -346,8 +346,7 @@ void rtw_cfg80211_deinit_rfkill(struct wiphy *wiphy); #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 4, 0)) && !defined(COMPAT_KERNEL_RELEASE) #define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, buf, len) -#else -#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, bss, buf, len) + #endif #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0)) diff --git a/os_dep/linux/os_intfs.c b/os_dep/linux/os_intfs.c index 248d4f7..7bd0ca6 100644 --- a/os_dep/linux/os_intfs.c +++ b/os_dep/linux/os_intfs.c @@ -1643,7 +1643,7 @@ 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); + netif_napi_add(ndev, &adapter->napi, rtw_recv_napi_poll); #endif /* CONFIG_RTW_NAPI */ #if defined(CONFIG_IOCTL_CFG80211) diff --git a/os_dep/linux/rtw_proc.c b/os_dep/linux/rtw_proc.c index e5e3cd3..7a8f15d 100644 --- a/os_dep/linux/rtw_proc.c +++ b/os_dep/linux/rtw_proc.c @@ -12,7 +12,6 @@ * more details. * *****************************************************************************/ - #include /* tolower() */ #include #include @@ -1335,7 +1334,7 @@ ssize_t proc_set_macaddr_acl(struct file *file, const char __user *buffer, size_ if (sscanf(c, MAC_SFMT, MAC_SARG(addr)) != 6) break; - is_bcast = is_broadcast_mac_addr(addr); + is_bcast = is_broadcast_mac_addr((const void*)addr); if (is_bcast || rtw_check_invalid_mac_address(addr, 0) == _FALSE ) { @@ -1990,7 +1989,7 @@ static ssize_t proc_set_tx_bw_mode(struct file *file, const char __user *buffer, for (i = 0; i < MACID_NUM_SW_LIMIT; i++) { sta = macid_ctl->sta[i]; - if (sta && !is_broadcast_mac_addr(sta->cmn.mac_addr)) + if (sta && !is_broadcast_mac_addr((const void*)sta->cmn.mac_addr)) rtw_dm_ra_mask_wk_cmd(adapter, (u8 *)sta); } } diff --git a/os_dep/osdep_service.c b/os_dep/osdep_service.c index d4a01c8..a84dd0d 100644 --- a/os_dep/osdep_service.c +++ b/os_dep/osdep_service.c @@ -2615,7 +2615,7 @@ inline u32 rtw_random32(void) { #ifdef PLATFORM_LINUX #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)) - return prandom_u32(); + return rtw_random32(); #elif (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)) u32 random_int; get_random_bytes(&random_int , 4);