From 6c26c98beea82543f72099a8045b145865362b6e Mon Sep 17 00:00:00 2001 From: Youngsoo Date: Mon, 16 Sep 2019 14:16:39 +0900 Subject: [PATCH] [RAMEN9610-20095][lv] host update 10.5.1.1 for lenovo only add ipv4 multicast packet filter again. Change-Id: I6c801c86787e257cd3f04e898e2da269aca0289d Signed-off-by: Youngsoo --- drivers/net/wireless/scsc/Kconfig | 6 + drivers/net/wireless/scsc/dev.c | 3 + drivers/net/wireless/scsc/dev.h | 45 ++++--- drivers/net/wireless/scsc/ioctl.c | 9 ++ drivers/net/wireless/scsc/mgt.c | 207 ++++++++++++++++++++++-------- drivers/net/wireless/scsc/mgt.h | 3 + include/scsc/scsc_release.h | 2 +- 7 files changed, 198 insertions(+), 77 deletions(-) diff --git a/drivers/net/wireless/scsc/Kconfig b/drivers/net/wireless/scsc/Kconfig index 05e3b2099d3f..bccc2711fbef 100755 --- a/drivers/net/wireless/scsc/Kconfig +++ b/drivers/net/wireless/scsc/Kconfig @@ -262,3 +262,9 @@ config SCSC_WLAN_STA_ENHANCED_ARP_DETECT ---help--- This option tells whether enhanced arp detection is enabled or not. + +config SCSC_WLAN_ABNORMAL_MULTICAST_PKT_FILTER + bool "Enable abnormal multicast packet filtering in suspend" + default n + ---help--- + This option tells if abnormal multicast packet filtering in suspend is supported or not. diff --git a/drivers/net/wireless/scsc/dev.c b/drivers/net/wireless/scsc/dev.c index 72591471d5b7..a4b5d04ef942 100755 --- a/drivers/net/wireless/scsc/dev.c +++ b/drivers/net/wireless/scsc/dev.c @@ -391,6 +391,9 @@ struct slsi_dev *slsi_dev_attach(struct device *dev, struct scsc_mx *core, struc #endif #ifdef CONFIG_SCSC_WLAN_ENHANCED_PKT_FILTER sdev->enhanced_pkt_filter_enabled = true; +#endif +#ifdef CONFIG_SCSC_WLAN_ABNORMAL_MULTICAST_PKT_FILTER + sdev->abnormal_multicast_pkt_filter_enabled = true; #endif sdev->device_state = SLSI_DEVICE_STATE_STOPPED; sdev->current_tspec_id = -1; diff --git a/drivers/net/wireless/scsc/dev.h b/drivers/net/wireless/scsc/dev.h index 5e02635dfde2..e27645eb0f55 100755 --- a/drivers/net/wireless/scsc/dev.h +++ b/drivers/net/wireless/scsc/dev.h @@ -464,38 +464,42 @@ struct slsi_wmm_parameter_element { #ifdef CONFIG_SCSC_WLAN_BLOCK_IPV6 enum slsi_filter_id { - SLSI_LOCAL_ARP_FILTER_ID = SLSI_MIN_FILTER_ID, /* 0x80 */ - SLSI_ALL_BC_MC_FILTER_ID, /* 0x81 */ - SLSI_PROXY_ARP_FILTER_ID, /* 0x82 */ - SLSI_ALL_IPV6_PKTS_FILTER_ID, /* 0x83 */ + SLSI_ALL_ARP_FILTER_ID = SLSI_MIN_FILTER_ID, /* 0x80 */ + SLSI_LOCAL_ARP_FILTER_ID, /* 0x81 */ + SLSI_ALL_BC_MC_FILTER_ID, /* 0x82 */ + SLSI_PROXY_ARP_FILTER_ID, /* 0x83 */ + SLSI_ALL_IPV6_PKTS_FILTER_ID, /* 0x84 */ #ifndef CONFIG_SCSC_WLAN_DISABLE_NAT_KA - SLSI_NAT_IPSEC_FILTER_ID, /* 0x84 */ + SLSI_NAT_IPSEC_FILTER_ID, /* 0x85 */ #endif #ifdef CONFIG_SCSC_WLAN_ENHANCED_PKT_FILTER - SLSI_OPT_OUT_ALL_FILTER_ID, /* 0x85 */ - SLSI_OPT_IN_TCP4_FILTER_ID, /* 0x86 */ - SLSI_OPT_IN_TCP6_FILTER_ID, /* 0x87 */ + SLSI_OPT_OUT_ALL_FILTER_ID, /* 0x86 */ + SLSI_OPT_IN_TCP4_FILTER_ID, /* 0x87 */ + SLSI_OPT_IN_TCP6_FILTER_ID, /* 0x88 */ #endif - SLSI_REGD_MC_FILTER_ID, /* 0x88 */ + SLSI_OPT_OUT_ABNORMAL_MULTICAST_ID, /* 0x89 */ + SLSI_REGD_MC_FILTER_ID, /* 0x8A */ }; #else /* for STA */ enum slsi_filter_id { - SLSI_LOCAL_ARP_FILTER_ID = SLSI_MIN_FILTER_ID, /* 0x80 */ - SLSI_ALL_BC_MC_FILTER_ID, /* 0x81 */ - SLSI_PROXY_ARP_FILTER_ID, /* 0x82 */ - SLSI_LOCAL_NS_FILTER_ID, /* 0x83 */ - SLSI_PROXY_ARP_NA_FILTER_ID, /* 0x84 */ + SLSI_ALL_ARP_FILTER_ID = SLSI_MIN_FILTER_ID, /* 0x80 */ + SLSI_LOCAL_ARP_FILTER_ID, /* 0x81 */ + SLSI_ALL_BC_MC_FILTER_ID, /* 0x82 */ + SLSI_PROXY_ARP_FILTER_ID, /* 0x83 */ + SLSI_LOCAL_NS_FILTER_ID, /* 0x84 */ + SLSI_PROXY_ARP_NA_FILTER_ID, /* 0x85 */ #ifndef CONFIG_SCSC_WLAN_DISABLE_NAT_KA - SLSI_NAT_IPSEC_FILTER_ID, /* 0x85 */ + SLSI_NAT_IPSEC_FILTER_ID, /* 0x86 */ #endif #ifdef CONFIG_SCSC_WLAN_ENHANCED_PKT_FILTER - SLSI_OPT_OUT_ALL_FILTER_ID, /* 0x86 */ - SLSI_OPT_IN_TCP4_FILTER_ID, /* 0x87 */ - SLSI_OPT_IN_TCP6_FILTER_ID, /* 0x88 */ + SLSI_OPT_OUT_ALL_FILTER_ID, /* 0x87 */ + SLSI_OPT_IN_TCP4_FILTER_ID, /* 0x88 */ + SLSI_OPT_IN_TCP6_FILTER_ID, /* 0x89 */ #endif - SLSI_REGD_MC_FILTER_ID, /* 0x89 */ + SLSI_OPT_OUT_ABNORMAL_MULTICAST_ID, /* 0x8a */ + SLSI_REGD_MC_FILTER_ID, /* 0x8b */ }; #endif @@ -1172,6 +1176,9 @@ struct slsi_dev { #ifdef CONFIG_SCSC_WLAN_ENHANCED_PKT_FILTER bool enhanced_pkt_filter_enabled; #endif +#ifdef CONFIG_SCSC_WLAN_ABNORMAL_MULTICAST_PKT_FILTER + bool abnormal_multicast_pkt_filter_enabled; +#endif }; /* Compact representation of channels a ESS has been seen on diff --git a/drivers/net/wireless/scsc/ioctl.c b/drivers/net/wireless/scsc/ioctl.c index 96184523b084..ff67a866a4cf 100755 --- a/drivers/net/wireless/scsc/ioctl.c +++ b/drivers/net/wireless/scsc/ioctl.c @@ -130,6 +130,9 @@ #ifdef CONFIG_SCSC_WLAN_ENHANCED_PKT_FILTER #define CMD_ENHANCED_PKT_FILTER "ENHANCED_PKT_FILTER" #endif +#ifdef SCSC_WLAN_ABNORMAL_MULTICAST_PKT_FILTER +#define CMD_ABNORMAL_MULTICAST_PKT_FILTER "ABNORMAL_MULTICAST_PKT_FILTER" +#endif #define CMD_GET_MAX_LINK_SPEED "GET_MAX_LINK_SPEED" #ifdef CONFIG_SCSC_WLAN_SET_NUM_ANTENNAS @@ -2743,6 +2746,12 @@ int slsi_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) ret = slsi_set_enhanced_pkt_filter(dev, enable); #endif +#ifdef SCSC_WLAN_ABNORMAL_MULTICAST_PKT_FILTER + } else if ((strncasecmp(command, CMD_ABNORMAL_MULTICAST_PKT_FILTER, strlen(CMD_ABNORMAL_MULTICAST_PKT_FILTER)) == 0)) { + const u8 enable = *(command + strlen(CMD_ABNORMAL_MULTICAST_PKT_FILTER) + 1) - '0'; + + ret = slsi_set_abnormal_multicast_pkt_filter(dev, enable); +#endif #ifdef CONFIG_SCSC_WLAN_SET_NUM_ANTENNAS } else if (strncasecmp(command, CMD_SET_NUM_ANTENNAS, strlen(CMD_SET_NUM_ANTENNAS)) == 0) { struct netdev_vif *ndev_vif = netdev_priv(dev); diff --git a/drivers/net/wireless/scsc/mgt.c b/drivers/net/wireless/scsc/mgt.c index c5c88152d1bb..2b8d4f941a96 100755 --- a/drivers/net/wireless/scsc/mgt.c +++ b/drivers/net/wireless/scsc/mgt.c @@ -3241,7 +3241,7 @@ int slsi_set_arp_packet_filter(struct slsi_dev *sdev, struct net_device *dev) struct slsi_mlme_pattern_desc pattern_desc[SLSI_MAX_PATTERN_DESC]; int num_pattern_desc = 0; u8 pkt_filters_len = 0, num_filters = 0; - struct slsi_mlme_pkt_filter_elem pkt_filter_elem[2]; + struct slsi_mlme_pkt_filter_elem pkt_filter_elem[3]; int ret; struct netdev_vif *ndev_vif = netdev_priv(dev); struct slsi_peer *peer = slsi_get_peer_from_qs(sdev, dev, SLSI_STA_PEER_QUEUESET); @@ -3263,15 +3263,31 @@ int slsi_set_arp_packet_filter(struct slsi_dev *sdev, struct net_device *dev) SLSI_NET_DBG2(dev, SLSI_MLME, "Set ARP filter\n"); - /*Opt in the broadcast ARP packets for Local IP address*/ + /* Opt out all ARP requests*/ num_pattern_desc = 0; - pattern_desc[num_pattern_desc].offset = 0; /*filtering on MAC destination Address*/ - pattern_desc[num_pattern_desc].mask_length = ETH_ALEN; - SLSI_ETHER_COPY(pattern_desc[num_pattern_desc].mask, addr_mask); - SLSI_ETHER_COPY(pattern_desc[num_pattern_desc].pattern, addr_mask); + SET_ETHERTYPE_PATTERN_DESC(pattern_desc[num_pattern_desc], ETH_P_ARP); num_pattern_desc++; - /*filter on ethertype ARP*/ + /* ARP - Request */ + pattern_desc[num_pattern_desc].offset = 0x14; /*sizeof(struct ethhdr) + offsetof(ar_op)*/ + pattern_desc[num_pattern_desc].mask_length = 2; + pattern_desc[num_pattern_desc].mask[0] = 0xff; + pattern_desc[num_pattern_desc].mask[1] = 0xff; + pattern_desc[num_pattern_desc].pattern[0] = 0x00; + pattern_desc[num_pattern_desc].pattern[1] = 0x01; + num_pattern_desc++; + + slsi_create_packet_filter_element(SLSI_ALL_ARP_FILTER_ID, + FAPI_PACKETFILTERMODE_OPT_OUT | FAPI_PACKETFILTERMODE_OPT_OUT_SLEEP, + num_pattern_desc, pattern_desc, &pkt_filter_elem[num_filters], &pkt_filters_len); + num_filters++; + + ret = slsi_mlme_set_packet_filter(sdev, dev, pkt_filters_len, num_filters, pkt_filter_elem); + if (ret) + return ret; + + /*Opt-in arp pakcet for device IP address*/ + num_pattern_desc = 0; SET_ETHERTYPE_PATTERN_DESC(pattern_desc[num_pattern_desc], ETH_P_ARP); num_pattern_desc++; @@ -3281,7 +3297,8 @@ int slsi_set_arp_packet_filter(struct slsi_dev *sdev, struct net_device *dev) memcpy(pattern_desc[num_pattern_desc].pattern, &ndev_vif->ipaddress, pattern_desc[num_pattern_desc].mask_length); num_pattern_desc++; - slsi_create_packet_filter_element(SLSI_LOCAL_ARP_FILTER_ID, FAPI_PACKETFILTERMODE_OPT_IN, + slsi_create_packet_filter_element(SLSI_LOCAL_ARP_FILTER_ID, + FAPI_PACKETFILTERMODE_OPT_IN | FAPI_PACKETFILTERMODE_OPT_IN_SLEEP, num_pattern_desc, pattern_desc, &pkt_filter_elem[num_filters], &pkt_filters_len); num_filters++; @@ -3441,6 +3458,64 @@ static int slsi_set_opt_in_tcp6_packet_filter(struct slsi_dev *sdev, struct net } #endif +#ifdef CONFIG_SCSC_WLAN_ABNORMAL_MULTICAST_PKT_FILTER +int slsi_set_abnormal_multicast_pkt_filter(struct net_device *dev, u8 enabled) +{ + struct netdev_vif *netdev_vif = netdev_priv(dev); + struct slsi_dev *sdev = netdev_vif->sdev; + int ret = 0; + int is_suspend = 0; + + SLSI_MUTEX_LOCK(sdev->device_config_mutex); + is_suspend = sdev->device_config.user_suspend_mode; + SLSI_MUTEX_UNLOCK(sdev->device_config_mutex); + + if (is_suspend) { + SLSI_ERR(sdev, "Host is in early suspend state.\n"); + return -EPERM; /* set_enhanced_pkt_filter should not be called after suspend */ + } + + sdev->abnormal_multicast_pkt_filter_enabled = enabled; + SLSI_INFO(sdev, "Abnormal multicast packet filter is %s", (enabled ? "enabled" : "disabled")); + return ret; +} + +static int slsi_set_opt_out_abnormal_multicast_packet_filter(struct slsi_dev *sdev, struct net_device *dev) +{ + struct slsi_mlme_pattern_desc pattern_desc[3]; + u8 pkt_filters_len = 0; + int ret = 0; + struct slsi_mlme_pkt_filter_elem pkt_filter_elem; + + /* IPv4 packet */ + pattern_desc[0].offset = 0; /* destination mac address*/ + pattern_desc[0].mask_length = ETH_ALEN; + memset(pattern_desc[0].mask, 0xff, ETH_ALEN); + memcpy(pattern_desc[0].pattern, sdev->hw_addr, ETH_ALEN); + + pattern_desc[1].offset = ETH_ALEN + ETH_ALEN; /* ethhdr->h_proto == IPv4 */ + pattern_desc[1].mask_length = 2; + pattern_desc[1].mask[0] = 0xff; /* Big endian 0xffff */ + pattern_desc[1].mask[1] = 0xff; + pattern_desc[1].pattern[0] = 0x08; /* Big endian 0x0800 */ + pattern_desc[1].pattern[1] = 0x00; + + pattern_desc[2].offset = sizeof(struct ethhdr) + offsetof(struct iphdr, daddr); /* iphdr->daddr starts with 1110 */ + pattern_desc[2].mask_length = 1; + pattern_desc[2].mask[0] = 0xf0; + pattern_desc[2].pattern[0] = 0xe0; /* 224 */ + + slsi_create_packet_filter_element(SLSI_OPT_OUT_ABNORMAL_MULTICAST_ID, + FAPI_PACKETFILTERMODE_OPT_OUT_SLEEP, + 3, pattern_desc, + &pkt_filter_elem, &pkt_filters_len); + + ret = slsi_mlme_set_packet_filter(sdev, dev, pkt_filters_len, 1, &pkt_filter_elem); + + return ret; +} +#endif + static int slsi_set_multicast_packet_filters(struct slsi_dev *sdev, struct net_device *dev) { struct slsi_mlme_pattern_desc pattern_desc; @@ -3517,6 +3592,7 @@ int slsi_clear_packet_filters(struct slsi_dev *sdev, struct net_device *dev) num_filters = ndev_vif->sta.regd_mc_addr_count + SLSI_SCREEN_OFF_FILTERS_COUNT; if ((slsi_is_proxy_arp_supported_on_ap(peer->assoc_resp_ie)) == false) { num_filters++; + num_filters++; #ifndef CONFIG_SCSC_WLAN_BLOCK_IPV6 num_filters++; #endif @@ -3529,7 +3605,10 @@ int slsi_clear_packet_filters(struct slsi_dev *sdev, struct net_device *dev) num_filters++; /*TCP IPv6 OPT IN*/ } #endif - +#ifdef CONFIG_SCSC_WLAN_ABNORMAL_MULTICAST_PKT_FILTER + if (sdev->abnormal_multicast_pkt_filter_enabled) + num_filters++;/* clear abnormal multicast packet */ +#endif pkt_filter_elem = kmalloc((num_filters * sizeof(struct slsi_mlme_pkt_filter_elem)), GFP_KERNEL); if (!pkt_filter_elem) { SLSI_NET_ERR(dev, "ERROR Memory allocation failure"); @@ -3545,6 +3624,8 @@ int slsi_clear_packet_filters(struct slsi_dev *sdev, struct net_device *dev) if ((slsi_is_proxy_arp_supported_on_ap(peer->assoc_resp_ie)) == false) { slsi_create_packet_filter_element(SLSI_LOCAL_ARP_FILTER_ID, 0, 0, NULL, &pkt_filter_elem[num_filters], &pkt_filters_len); num_filters++; + slsi_create_packet_filter_element(SLSI_ALL_ARP_FILTER_ID, 0, 0, NULL, &pkt_filter_elem[num_filters], &pkt_filters_len); + num_filters++; #ifndef CONFIG_SCSC_WLAN_BLOCK_IPV6 slsi_create_packet_filter_element(SLSI_LOCAL_NS_FILTER_ID, 0, 0, NULL, &pkt_filter_elem[num_filters], &pkt_filters_len); num_filters++; @@ -3566,6 +3647,13 @@ int slsi_clear_packet_filters(struct slsi_dev *sdev, struct net_device *dev) &pkt_filter_elem[num_filters], &pkt_filters_len); num_filters++; } +#endif +#ifdef CONFIG_SCSC_WLAN_ABNORMAL_MULTICAST_PKT_FILTER + if (sdev->abnormal_multicast_pkt_filter_enabled) { + slsi_create_packet_filter_element(SLSI_OPT_OUT_ABNORMAL_MULTICAST_ID, 0, 0, NULL, + &pkt_filter_elem[num_filters], &pkt_filters_len); + num_filters++; + } #endif ret = slsi_mlme_set_packet_filter(sdev, dev, pkt_filters_len, num_filters, pkt_filter_elem); kfree(pkt_filter_elem); @@ -3601,6 +3689,14 @@ int slsi_update_packet_filters(struct slsi_dev *sdev, struct net_device *dev) if (ret) return ret; } +#endif + /* install abnormal multicast packet filter */ +#ifdef CONFIG_SCSC_WLAN_ABNORMAL_MULTICAST_PKT_FILTER + if (sdev->abnormal_multicast_pkt_filter_enabled) { + ret = slsi_set_opt_out_abnormal_multicast_packet_filter(sdev, dev); + if (ret) + return ret; + } #endif return slsi_set_common_packet_filters(sdev, dev); } @@ -3661,60 +3757,57 @@ void slsi_set_packet_filters(struct slsi_dev *sdev, struct net_device *dev) if (ie) { SLSI_NET_DBG1(dev, SLSI_CFG80211, "Connected to HS2 AP "); - if (slsi_is_proxy_arp_supported_on_ap(peer->assoc_resp_ie)) { - SLSI_NET_DBG1(dev, SLSI_CFG80211, "Proxy ARP service supported on HS2 AP "); + if (slsi_is_proxy_arp_supported_on_ap(peer->assoc_resp_ie)) { + SLSI_NET_DBG1(dev, SLSI_CFG80211, "Proxy ARP service supported on HS2 AP "); - /* Opt out Gratuitous ARP packets (ARP Announcement) in active and suspended mode. - * For suspended mode, gratituous ARP is dropped by "opt out all broadcast" that will be - * set in slsi_set_common_packet_filters on screen off - */ - num_pattern_desc = 0; - pattern_desc[num_pattern_desc].offset = 0; /*filtering on MAC destination Address*/ - pattern_desc[num_pattern_desc].mask_length = ETH_ALEN; - SLSI_ETHER_COPY(pattern_desc[num_pattern_desc].mask, addr_mask); - SLSI_ETHER_COPY(pattern_desc[num_pattern_desc].pattern, addr_mask); - num_pattern_desc++; + /* Opt out Gratuitous ARP packets (ARP Announcement) in active and suspended mode. + * For suspended mode, gratituous ARP is dropped by "opt out all broadcast" that will be + * set in slsi_set_common_packet_filters on screen off + */ + num_pattern_desc = 0; + pattern_desc[num_pattern_desc].offset = 0; /*filtering on MAC destination Address*/ + pattern_desc[num_pattern_desc].mask_length = ETH_ALEN; + SLSI_ETHER_COPY(pattern_desc[num_pattern_desc].mask, addr_mask); + SLSI_ETHER_COPY(pattern_desc[num_pattern_desc].pattern, addr_mask); + num_pattern_desc++; - SET_ETHERTYPE_PATTERN_DESC(pattern_desc[num_pattern_desc], ETH_P_ARP); - num_pattern_desc++; + SET_ETHERTYPE_PATTERN_DESC(pattern_desc[num_pattern_desc], ETH_P_ARP); + num_pattern_desc++; - slsi_create_packet_filter_element(SLSI_PROXY_ARP_FILTER_ID, FAPI_PACKETFILTERMODE_OPT_OUT, - num_pattern_desc, pattern_desc, &pkt_filter_elem[num_filters], - &pkt_filters_len); - num_filters++; + slsi_create_packet_filter_element(SLSI_PROXY_ARP_FILTER_ID, FAPI_PACKETFILTERMODE_OPT_OUT, + num_pattern_desc, pattern_desc, &pkt_filter_elem[num_filters], &pkt_filters_len); + num_filters++; #ifndef CONFIG_SCSC_WLAN_BLOCK_IPV6 - /* Opt out unsolicited Neighbor Advertisement packets .For suspended mode, NA is dropped by - * "opt out all IPv6 multicast" already set in slsi_create_common_packet_filters - */ + /* Opt out unsolicited Neighbor Advertisement packets .For suspended mode, NA is dropped by + * "opt out all IPv6 multicast" already set in slsi_create_common_packet_filters + */ + num_pattern_desc = 0; + + pattern_desc[num_pattern_desc].offset = 0; /*filtering on MAC destination Address*/ + pattern_desc[num_pattern_desc].mask_length = ETH_ALEN; + SLSI_ETHER_COPY(pattern_desc[num_pattern_desc].mask, addr_mask); + SLSI_ETHER_COPY(pattern_desc[num_pattern_desc].pattern, solicited_node_addr_mask); + num_pattern_desc++; + + SET_ETHERTYPE_PATTERN_DESC(pattern_desc[num_pattern_desc], 0x86DD); + num_pattern_desc++; + + pattern_desc[num_pattern_desc].offset = 0x14; /*filtering on next header*/ + pattern_desc[num_pattern_desc].mask_length = 1; + pattern_desc[num_pattern_desc].mask[0] = 0xff; + pattern_desc[num_pattern_desc].pattern[0] = 0x3a; + num_pattern_desc++; + + pattern_desc[num_pattern_desc].offset = 0x36; /*filtering on ICMP6 packet type*/ + pattern_desc[num_pattern_desc].mask_length = 1; + pattern_desc[num_pattern_desc].mask[0] = 0xff; + pattern_desc[num_pattern_desc].pattern[0] = 0x88; /* Neighbor Advertisement type in ICMPv6 */ + num_pattern_desc++; - num_pattern_desc = 0; - - pattern_desc[num_pattern_desc].offset = 0; /*filtering on MAC destination Address*/ - pattern_desc[num_pattern_desc].mask_length = ETH_ALEN; - SLSI_ETHER_COPY(pattern_desc[num_pattern_desc].mask, addr_mask); - SLSI_ETHER_COPY(pattern_desc[num_pattern_desc].pattern, solicited_node_addr_mask); - num_pattern_desc++; - - SET_ETHERTYPE_PATTERN_DESC(pattern_desc[num_pattern_desc], 0x86DD); - num_pattern_desc++; - - pattern_desc[num_pattern_desc].offset = 0x14; /*filtering on next header*/ - pattern_desc[num_pattern_desc].mask_length = 1; - pattern_desc[num_pattern_desc].mask[0] = 0xff; - pattern_desc[num_pattern_desc].pattern[0] = 0x3a; - num_pattern_desc++; - - pattern_desc[num_pattern_desc].offset = 0x36; /*filtering on ICMP6 packet type*/ - pattern_desc[num_pattern_desc].mask_length = 1; - pattern_desc[num_pattern_desc].mask[0] = 0xff; - pattern_desc[num_pattern_desc].pattern[0] = 0x88; /* Neighbor Advertisement type in ICMPv6 */ - num_pattern_desc++; - - slsi_create_packet_filter_element(SLSI_PROXY_ARP_NA_FILTER_ID, FAPI_PACKETFILTERMODE_OPT_OUT, - num_pattern_desc, pattern_desc, &pkt_filter_elem[num_filters], - &pkt_filters_len); - num_filters++; + slsi_create_packet_filter_element(SLSI_PROXY_ARP_NA_FILTER_ID, FAPI_PACKETFILTERMODE_OPT_OUT, + num_pattern_desc, pattern_desc, &pkt_filter_elem[num_filters], &pkt_filters_len); + num_filters++; #endif } } diff --git a/drivers/net/wireless/scsc/mgt.h b/drivers/net/wireless/scsc/mgt.h index 67069ec48212..b61a5c620896 100755 --- a/drivers/net/wireless/scsc/mgt.h +++ b/drivers/net/wireless/scsc/mgt.h @@ -486,6 +486,9 @@ int slsi_is_tcp_sync_packet(struct net_device *dev, struct sk_buff *skb); #ifdef CONFIG_SCSC_WLAN_ENHANCED_PKT_FILTER int slsi_set_enhanced_pkt_filter(struct net_device *dev, u8 pkt_filter_enable); #endif +#ifdef CONFIG_SCSC_WLAN_ABNORMAL_MULTICAST_PKT_FILTER +int slsi_set_abnormal_multicast_pkt_filter(struct net_device *dev, u8 enabled); +#endif void slsi_set_packet_filters(struct slsi_dev *sdev, struct net_device *dev); int slsi_update_packet_filters(struct slsi_dev *sdev, struct net_device *dev); int slsi_clear_packet_filters(struct slsi_dev *sdev, struct net_device *dev); diff --git a/include/scsc/scsc_release.h b/include/scsc/scsc_release.h index 6459d2fc5746..bf200ef17a3e 100644 --- a/include/scsc/scsc_release.h +++ b/include/scsc/scsc_release.h @@ -23,7 +23,7 @@ #define SCSC_RELEASE_ITERATION 5 #define SCSC_RELEASE_CANDIDATE 1 -#define SCSC_RELEASE_POINT 0 +#define SCSC_RELEASE_POINT 1 #endif -- 2.20.1