This reverts commit 8c3ed7aa2b9ef666195b789e9b02e28383243fa8. As Jouni points out, there's really no need for this, since the RSN pre-authentication frames are normal data frames, not port control frames (locally). We can still revert this now since it hasn't actually gone beyond -next.
Unified · Split
| @@ -3974,8 +3974,7 @@ struct cfg80211_ops { · 3973 unmodified lines | ||
| 3974 | 3974 | int (*tx_control_port)(struct wiphy *wiphy, |
| 3975 | 3975 | struct net_device *dev, |
| 3976 | 3976 | const u8 *buf, size_t len, |
| 3977 | − const u8 *dest, const u8 *src, | |
| 3978 | − const __be16 proto, | |
| 3977 | + const u8 *dest, const __be16 proto, | |
| 3979 | 3978 | const bool noencrypt); |
| 3980 | 3979 | |
| 3981 | 3980 | int (*get_ftm_responder_stats)(struct wiphy *wiphy, |
| @@ -1039,14 +1039,11 @@ · 1038 unmodified lines | ||
| 1039 | 1039 | * a control port frame and as a notification that a control port frame |
| 1040 | 1040 | * has been received. %NL80211_ATTR_FRAME is used to specify the |
| 1041 | 1041 | * frame contents. The frame is the raw EAPoL data, without ethernet or |
| 1042 | − * 802.11 headers. An optional %NL80211_ATTR_SRC_MAC can be used to send | |
| 1043 | − * pre-auth frames to STAs on behalf of other APs. | |
| 1042 | + * 802.11 headers. | |
| 1044 | 1043 | * When used as an event indication %NL80211_ATTR_CONTROL_PORT_ETHERTYPE, |
| 1045 | 1044 | * %NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT and %NL80211_ATTR_MAC are added |
| 1046 | 1045 | * indicating the protocol type of the received frame; whether the frame |
| 1047 | 1046 | * was received unencrypted and the MAC address of the peer respectively. |
| 1048 | − * %NL80211_ATTR_DST_MAC can be used to forward pre-auth frames in | |
| 1049 | − * userspace while using AP mode. | |
| 1050 | 1047 | * |
| 1051 | 1048 | * @NL80211_CMD_RELOAD_REGDB: Request that the regdb firmware file is reloaded. |
| 1052 | 1049 | * |
| @@ -2412,9 +2409,6 @@ enum nl80211_commands { · 1359 unmodified lines | ||
| 2412 | 2409 | * %NL80211_ATTR_AKM_SUITES are default capabilities if AKM suites not |
| 2413 | 2410 | * advertised for a specific interface type. |
| 2414 | 2411 | * |
| 2415 | − * @NL80211_ATTR_SRC_MAC: MAC address used in control port over nl80211 transmit | |
| 2416 | − * @NL80211_ATTR_DST_MAC: MAC address used in control port over nl80211 receive | |
| 2417 | − * | |
| 2418 | 2412 | * @NUM_NL80211_ATTR: total number of nl80211_attrs available |
| 2419 | 2413 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
| 2420 | 2414 | * @__NL80211_ATTR_AFTER_LAST: internal use |
| @@ -2883,9 +2877,6 @@ enum nl80211_attrs { · 462 unmodified lines | ||
| 2883 | 2877 | |
| 2884 | 2878 | NL80211_ATTR_IFTYPE_AKM_SUITES, |
| 2885 | 2879 | |
| 2886 | − NL80211_ATTR_SRC_MAC, | |
| 2887 | − NL80211_ATTR_DST_MAC, | |
| 2888 | − | |
| 2889 | 2880 | /* add attributes here, update the policy in nl80211.c */ |
| 2890 | 2881 | |
| 2891 | 2882 | __NL80211_ATTR_AFTER_LAST, |
| @@ -5548,10 +5539,6 @@ enum nl80211_feature_flags { · 2656 unmodified lines | ||
| 5548 | 5539 | * feature, which prevents bufferbloat by using the expected transmission |
| 5549 | 5540 | * time to limit the amount of data buffered in the hardware. |
| 5550 | 5541 | * |
| 5551 | − * @NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_MAC_ADDRS: The driver | |
| 5552 | − * can use src and dst MAC addresses with control port over nl80211 rx | |
| 5553 | − * and tx operations. | |
| 5554 | − * | |
| 5555 | 5542 | * @NUM_NL80211_EXT_FEATURES: number of extended features. |
| 5556 | 5543 | * @MAX_NL80211_EXT_FEATURES: highest extended feature index. |
| 5557 | 5544 | */ |
| @@ -5599,7 +5586,6 @@ enum nl80211_ext_feature_index { · 41 unmodified lines | ||
| 5599 | 5586 | NL80211_EXT_FEATURE_SAE_OFFLOAD, |
| 5600 | 5587 | NL80211_EXT_FEATURE_VLAN_OFFLOAD, |
| 5601 | 5588 | NL80211_EXT_FEATURE_AQL, |
| 5602 | − NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_MAC_ADDRS, | |
| 5603 | 5589 | |
| 5604 | 5590 | /* add new features before the definition below */ |
| 5605 | 5591 | NUM_NL80211_EXT_FEATURES, |
| @@ -1792,8 +1792,7 @@ void ieee80211_check_fast_xmit_iface(struct ieee80211_sub_if_data *sdata); · 1791 unmodified lines | ||
| 1792 | 1792 | void ieee80211_clear_fast_xmit(struct sta_info *sta); |
| 1793 | 1793 | int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev, |
| 1794 | 1794 | const u8 *buf, size_t len, |
| 1795 | − const u8 *dest, const u8 *src, __be16 proto, | |
| 1796 | − bool unencrypted); | |
| 1795 | + const u8 *dest, __be16 proto, bool unencrypted); | |
| 1797 | 1796 | int ieee80211_probe_mesh_link(struct wiphy *wiphy, struct net_device *dev, |
| 1798 | 1797 | const u8 *buf, size_t len); |
| 1799 | 1798 | |
| @@ -5283,8 +5283,7 @@ void __ieee80211_tx_skb_tid_band(struct ieee80211_sub_if_data *sdata, · 5282 unmodified lines | ||
| 5283 | 5283 | |
| 5284 | 5284 | int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev, |
| 5285 | 5285 | const u8 *buf, size_t len, |
| 5286 | − const u8 *dest, const u8 *src, __be16 proto, | |
| 5287 | − bool unencrypted) | |
| 5286 | + const u8 *dest, __be16 proto, bool unencrypted) | |
| 5288 | 5287 | { |
| 5289 | 5288 | struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
| 5290 | 5289 | struct ieee80211_local *local = sdata->local; |
| @@ -634,8 +634,6 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = { · 633 unmodified lines | ||
| 634 | 634 | [NL80211_ATTR_HE_OBSS_PD] = NLA_POLICY_NESTED(he_obss_pd_policy), |
| 635 | 635 | [NL80211_ATTR_VLAN_ID] = NLA_POLICY_RANGE(NLA_U16, 1, VLAN_N_VID - 2), |
| 636 | 636 | [NL80211_ATTR_HE_BSS_COLOR] = NLA_POLICY_NESTED(he_bss_color_policy), |
| 637 | − [NL80211_ATTR_SRC_MAC] = NLA_POLICY_ETH_ADDR, | |
| 638 | − [NL80211_ATTR_DST_MAC] = NLA_POLICY_ETH_ADDR, | |
| 639 | 637 | }; |
| 640 | 638 | |
| 641 | 639 | /* policy for the key attributes */ |
| @@ -13698,7 +13696,6 @@ static int nl80211_tx_control_port(struct sk_buff *skb, struct genl_info *info) · 13056 unmodified lines | ||
| 13698 | 13696 | const u8 *buf; |
| 13699 | 13697 | size_t len; |
| 13700 | 13698 | u8 *dest; |
| 13701 | − u8 src[ETH_ALEN]; | |
| 13702 | 13699 | u16 proto; |
| 13703 | 13700 | bool noencrypt; |
| 13704 | 13701 | int err; |
| @@ -13736,13 +13733,6 @@ static int nl80211_tx_control_port(struct sk_buff *skb, struct genl_info *info) · 31 unmodified lines | ||
| 13736 | 13733 | goto out; |
| 13737 | 13734 | } |
| 13738 | 13735 | |
| 13739 | − /* copy src address under wdev_lock, as we may copy wdev_address */ | |
| 13740 | − if (info->attrs[NL80211_ATTR_SRC_MAC]) | |
| 13741 | − ether_addr_copy(src, | |
| 13742 | − nla_data(info->attrs[NL80211_ATTR_SRC_MAC])); | |
| 13743 | − else | |
| 13744 | − ether_addr_copy(src, wdev_address(wdev)); | |
| 13745 | − | |
| 13746 | 13736 | wdev_unlock(wdev); |
| 13747 | 13737 | |
| 13748 | 13738 | buf = nla_data(info->attrs[NL80211_ATTR_FRAME]); |
| @@ -13753,7 +13743,7 @@ static int nl80211_tx_control_port(struct sk_buff *skb, struct genl_info *info) · 4 unmodified lines | ||
| 13753 | 13743 | nla_get_flag(info->attrs[NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT]); |
| 13754 | 13744 | |
| 13755 | 13745 | return rdev_tx_control_port(rdev, dev, buf, len, |
| 13756 | − dest, src, cpu_to_be16(proto), noencrypt); | |
| 13746 | + dest, cpu_to_be16(proto), noencrypt); | |
| 13757 | 13747 | |
| 13758 | 13748 | out: |
| 13759 | 13749 | wdev_unlock(wdev); |
| @@ -16010,8 +16000,7 @@ static int __nl80211_rx_control_port(struct net_device *dev, · 2250 unmodified lines | ||
| 16010 | 16000 | struct wireless_dev *wdev = dev->ieee80211_ptr; |
| 16011 | 16001 | struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); |
| 16012 | 16002 | struct ethhdr *ehdr = eth_hdr(skb); |
| 16013 | − const u8 *daddr = ehdr->h_dest; | |
| 16014 | − const u8 *saddr = ehdr->h_source; | |
| 16003 | + const u8 *addr = ehdr->h_source; | |
| 16015 | 16004 | u16 proto = be16_to_cpu(skb->protocol); |
| 16016 | 16005 | struct sk_buff *msg; |
| 16017 | 16006 | void *hdr; |
| @@ -16036,8 +16025,7 @@ static int __nl80211_rx_control_port(struct net_device *dev, · 18 unmodified lines | ||
| 16036 | 16025 | nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || |
| 16037 | 16026 | nla_put_u64_64bit(msg, NL80211_ATTR_WDEV, wdev_id(wdev), |
| 16038 | 16027 | NL80211_ATTR_PAD) || |
| 16039 | − nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, saddr) || | |
| 16040 | − nla_put(msg, NL80211_ATTR_DST_MAC, ETH_ALEN, daddr) || | |
| 16028 | + nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr) || | |
| 16041 | 16029 | nla_put_u16(msg, NL80211_ATTR_CONTROL_PORT_ETHERTYPE, proto) || |
| 16042 | 16030 | (unencrypted && nla_put_flag(msg, |
| 16043 | 16031 | NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT))) |
| @@ -734,14 +734,14 @@ static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev, · 733 unmodified lines | ||
| 734 | 734 | static inline int rdev_tx_control_port(struct cfg80211_registered_device *rdev, |
| 735 | 735 | struct net_device *dev, |
| 736 | 736 | const void *buf, size_t len, |
| 737 | − const u8 *dest, const u8 *src, | |
| 738 | − __be16 proto, const bool noencrypt) | |
| 737 | + const u8 *dest, __be16 proto, | |
| 738 | + const bool noencrypt) | |
| 739 | 739 | { |
| 740 | 740 | int ret; |
| 741 | 741 | trace_rdev_tx_control_port(&rdev->wiphy, dev, buf, len, |
| 742 | − dest, src, proto, noencrypt); | |
| 742 | + dest, proto, noencrypt); | |
| 743 | 743 | ret = rdev->ops->tx_control_port(&rdev->wiphy, dev, buf, len, |
| 744 | − dest, src, proto, noencrypt); | |
| 744 | + dest, proto, noencrypt); | |
| 745 | 745 | trace_rdev_return_int(&rdev->wiphy, ret); |
| 746 | 746 | return ret; |
| 747 | 747 | } |
| @@ -1928,31 +1928,27 @@ TRACE_EVENT(rdev_mgmt_tx, · 1927 unmodified lines | ||
| 1928 | 1928 | |
| 1929 | 1929 | TRACE_EVENT(rdev_tx_control_port, |
| 1930 | 1930 | TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, |
| 1931 | − const u8 *buf, size_t len, | |
| 1932 | − const u8 *dest, const u8 *src, __be16 proto, | |
| 1931 | + const u8 *buf, size_t len, const u8 *dest, __be16 proto, | |
| 1933 | 1932 | bool unencrypted), |
| 1934 | − TP_ARGS(wiphy, netdev, buf, len, dest, src, proto, unencrypted), | |
| 1933 | + TP_ARGS(wiphy, netdev, buf, len, dest, proto, unencrypted), | |
| 1935 | 1934 | TP_STRUCT__entry( |
| 1936 | 1935 | WIPHY_ENTRY |
| 1937 | 1936 | NETDEV_ENTRY |
| 1938 | 1937 | MAC_ENTRY(dest) |
| 1939 | − MAC_ENTRY(src) | |
| 1940 | − __field(u16, proto) | |
| 1938 | + __field(__be16, proto) | |
| 1941 | 1939 | __field(bool, unencrypted) |
| 1942 | 1940 | ), |
| 1943 | 1941 | TP_fast_assign( |
| 1944 | 1942 | WIPHY_ASSIGN; |
| 1945 | 1943 | NETDEV_ASSIGN; |
| 1946 | 1944 | MAC_ASSIGN(dest, dest); |
| 1947 | − MAC_ASSIGN(src, src); | |
| 1948 | − __entry->proto = be16_to_cpu(proto); | |
| 1945 | + __entry->proto = proto; | |
| 1949 | 1946 | __entry->unencrypted = unencrypted; |
| 1950 | 1947 | ), |
| 1951 | − TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", dest: " MAC_PR_FMT | |
| 1952 | − ", src: " MAC_PR_FMT ", proto: 0x%x, unencrypted: %s", | |
| 1953 | − WIPHY_PR_ARG, NETDEV_PR_ARG, | |
| 1954 | − MAC_PR_ARG(dest), MAC_PR_ARG(src), | |
| 1955 | − __entry->proto, | |
| 1948 | + TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", " MAC_PR_FMT "," | |
| 1949 | + " proto: 0x%x, unencrypted: %s", | |
| 1950 | + WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(dest), | |
| 1951 | + be16_to_cpu(__entry->proto), | |
| 1956 | 1952 | BOOL_TO_STR(__entry->unencrypted)) |
| 1957 | 1953 | ); |
| 1958 | 1954 | |
| @@ -2844,7 +2840,6 @@ TRACE_EVENT(cfg80211_rx_control_port, · 885 unmodified lines | ||
| 2844 | 2840 | TP_STRUCT__entry( |
| 2845 | 2841 | NETDEV_ENTRY |
| 2846 | 2842 | __field(int, len) |
| 2847 | − MAC_ENTRY(to) | |
| 2848 | 2843 | MAC_ENTRY(from) |
| 2849 | 2844 | __field(u16, proto) |
| 2850 | 2845 | __field(bool, unencrypted) |
| @@ -2852,14 +2847,12 @@ TRACE_EVENT(cfg80211_rx_control_port, · 1 unmodified line | ||
| 2852 | 2847 | TP_fast_assign( |
| 2853 | 2848 | NETDEV_ASSIGN; |
| 2854 | 2849 | __entry->len = skb->len; |
| 2855 | − MAC_ASSIGN(to, eth_hdr(skb)->h_dest); | |
| 2856 | 2850 | MAC_ASSIGN(from, eth_hdr(skb)->h_source); |
| 2857 | 2851 | __entry->proto = be16_to_cpu(skb->protocol); |
| 2858 | 2852 | __entry->unencrypted = unencrypted; |
| 2859 | 2853 | ), |
| 2860 | − TP_printk(NETDEV_PR_FMT ", len=%d, dest: " MAC_PR_FMT | |
| 2861 | − ", src: " MAC_PR_FMT ", proto: 0x%x, unencrypted: %s", | |
| 2862 | − NETDEV_PR_ARG, __entry->len, MAC_PR_ARG(to), MAC_PR_ARG(from), | |
| 2854 | + TP_printk(NETDEV_PR_FMT ", len=%d, " MAC_PR_FMT ", proto: 0x%x, unencrypted: %s", | |
| 2855 | + NETDEV_PR_ARG, __entry->len, MAC_PR_ARG(from), | |
| 2863 | 2856 | __entry->proto, BOOL_TO_STR(__entry->unencrypted)) |
| 2864 | 2857 | ); |
| 2865 | 2858 | |