aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-02-10 23:01:30 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-10 23:01:30 -0500
commitc5ce28df0e7c01a1de23c36ebdefcd803f2b6cbb (patch)
tree9830baf38832769e1cf621708889111bbe3c93df /include/net
parent29afc4e9a408f2304e09c6dd0dbcfbd2356d0faa (diff)
parent9399f0c51489ae8c16d6559b82a452fdc1895e91 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
Pull networking updates from David Miller: 1) More iov_iter conversion work from Al Viro. [ The "crypto: switch af_alg_make_sg() to iov_iter" commit was wrong, and this pull actually adds an extra commit on top of the branch I'm pulling to fix that up, so that the pre-merge state is ok. - Linus ] 2) Various optimizations to the ipv4 forwarding information base trie lookup implementation. From Alexander Duyck. 3) Remove sock_iocb altogether, from CHristoph Hellwig. 4) Allow congestion control algorithm selection via routing metrics. From Daniel Borkmann. 5) Make ipv4 uncached route list per-cpu, from Eric Dumazet. 6) Handle rfs hash collisions more gracefully, also from Eric Dumazet. 7) Add xmit_more support to r8169, e1000, and e1000e drivers. From Florian Westphal. 8) Transparent Ethernet Bridging support for GRO, from Jesse Gross. 9) Add BPF packet actions to packet scheduler, from Jiri Pirko. 10) Add support for uniqu flow IDs to openvswitch, from Joe Stringer. 11) New NetCP ethernet driver, from Muralidharan Karicheri and Wingman Kwok. 12) More sanely handle out-of-window dupacks, which can result in serious ACK storms. From Neal Cardwell. 13) Various rhashtable bug fixes and enhancements, from Herbert Xu, Patrick McHardy, and Thomas Graf. 14) Support xmit_more in be2net, from Sathya Perla. 15) Group Policy extensions for vxlan, from Thomas Graf. 16) Remove Checksum Offload support for vxlan, from Tom Herbert. 17) Like ipv4, support lockless transmit over ipv6 UDP sockets. From Vlad Yasevich. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1494+1 commits) crypto: fix af_alg_make_sg() conversion to iov_iter ipv4: Namespecify TCP PMTU mechanism i40e: Fix for stats init function call in Rx setup tcp: don't include Fast Open option in SYN-ACK on pure SYN-data openvswitch: Only set TUNNEL_VXLAN_OPT if VXLAN-GBP metadata is set ipv6: Make __ipv6_select_ident static ipv6: Fix fragment id assignment on LE arches. bridge: Fix inability to add non-vlan fdb entry net: Mellanox: Delete unnecessary checks before the function call "vunmap" cxgb4: Add support in cxgb4 to get expansion rom version via ethtool ethtool: rename reserved1 memeber in ethtool_drvinfo for expansion ROM version net: dsa: Remove redundant phy_attach() IB/mlx4: Reset flow support for IB kernel ULPs IB/mlx4: Always use the correct port for mirrored multicast attachments net/bonding: Fix potential bad memory access during bonding events tipc: remove tipc_snprintf tipc: nl compat add noop and remove legacy nl framework tipc: convert legacy nl stats show to nl compat tipc: convert legacy nl net id get to nl compat tipc: convert legacy nl net id set to nl compat ...
Diffstat (limited to 'include/net')
-rw-r--r--include/net/addrconf.h3
-rw-r--r--include/net/bluetooth/bluetooth.h2
-rw-r--r--include/net/bluetooth/hci.h83
-rw-r--r--include/net/bluetooth/hci_core.h52
-rw-r--r--include/net/bluetooth/l2cap.h1
-rw-r--r--include/net/bluetooth/mgmt.h4
-rw-r--r--include/net/bluetooth/rfcomm.h2
-rw-r--r--include/net/bond_3ad.h1
-rw-r--r--include/net/bonding.h18
-rw-r--r--include/net/cfg80211.h293
-rw-r--r--include/net/cfg802154.h10
-rw-r--r--include/net/genetlink.h21
-rw-r--r--include/net/geneve.h7
-rw-r--r--include/net/gro_cells.h29
-rw-r--r--include/net/ieee802154_netdev.h4
-rw-r--r--include/net/inet_connection_sock.h3
-rw-r--r--include/net/inet_sock.h29
-rw-r--r--include/net/ip.h7
-rw-r--r--include/net/ip6_fib.h10
-rw-r--r--include/net/ip6_tunnel.h1
-rw-r--r--include/net/ip_fib.h50
-rw-r--r--include/net/ip_tunnels.h6
-rw-r--r--include/net/ipv6.h21
-rw-r--r--include/net/mac80211.h100
-rw-r--r--include/net/mac802154.h5
-rw-r--r--include/net/net_namespace.h4
-rw-r--r--include/net/netfilter/nf_conntrack.h2
-rw-r--r--include/net/netlink.h10
-rw-r--r--include/net/netns/ipv4.h5
-rw-r--r--include/net/nfc/hci.h25
-rw-r--r--include/net/nfc/nci.h97
-rw-r--r--include/net/nfc/nci_core.h137
-rw-r--r--include/net/nfc/nfc.h27
-rw-r--r--include/net/nl802154.h45
-rw-r--r--include/net/ping.h2
-rw-r--r--include/net/pkt_sched.h12
-rw-r--r--include/net/regulatory.h19
-rw-r--r--include/net/route.h2
-rw-r--r--include/net/rtnetlink.h2
-rw-r--r--include/net/sock.h66
-rw-r--r--include/net/switchdev.h79
-rw-r--r--include/net/tc_act/tc_bpf.h25
-rw-r--r--include/net/tc_act/tc_connmark.h14
-rw-r--r--include/net/tcp.h72
-rw-r--r--include/net/udp_tunnel.h16
-rw-r--r--include/net/udplite.h3
-rw-r--r--include/net/vxlan.h103
47 files changed, 1193 insertions, 336 deletions
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
index d13573bb879e..80456f72d70a 100644
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -62,6 +62,9 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg);
62 62
63int ipv6_chk_addr(struct net *net, const struct in6_addr *addr, 63int ipv6_chk_addr(struct net *net, const struct in6_addr *addr,
64 const struct net_device *dev, int strict); 64 const struct net_device *dev, int strict);
65int ipv6_chk_addr_and_flags(struct net *net, const struct in6_addr *addr,
66 const struct net_device *dev, int strict,
67 u32 banned_flags);
65 68
66#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE) 69#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
67int ipv6_chk_home_addr(struct net *net, const struct in6_addr *addr); 70int ipv6_chk_home_addr(struct net *net, const struct in6_addr *addr);
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
index 58695ffeb138..e00455aab18c 100644
--- a/include/net/bluetooth/bluetooth.h
+++ b/include/net/bluetooth/bluetooth.h
@@ -273,7 +273,7 @@ struct l2cap_ctrl {
273 273
274struct hci_dev; 274struct hci_dev;
275 275
276typedef void (*hci_req_complete_t)(struct hci_dev *hdev, u8 status); 276typedef void (*hci_req_complete_t)(struct hci_dev *hdev, u8 status, u16 opcode);
277 277
278struct hci_req_ctrl { 278struct hci_req_ctrl {
279 bool start; 279 bool start;
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 40129b3838b2..8e54f825153c 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -102,6 +102,28 @@ enum {
102 */ 102 */
103 HCI_QUIRK_FIXUP_BUFFER_SIZE, 103 HCI_QUIRK_FIXUP_BUFFER_SIZE,
104 104
105 /* When this quirk is set, then a controller that does not
106 * indicate support for Inquiry Result with RSSI is assumed to
107 * support it anyway. Some early Bluetooth 1.2 controllers had
108 * wrongly configured local features that will require forcing
109 * them to enable this mode. Getting RSSI information with the
110 * inquiry responses is preferred since it allows for a better
111 * user expierence.
112 *
113 * This quirk must be set before hci_register_dev is called.
114 */
115 HCI_QUIRK_FIXUP_INQUIRY_MODE,
116
117 /* When this quirk is set, then the HCI Read Local Supported
118 * Commands command is not supported. In general Bluetooth 1.2
119 * and later controllers should support this command. However
120 * some controllers indicate Bluetooth 1.2 support, but do
121 * not support this command.
122 *
123 * This quirk must be set before hci_register_dev is called.
124 */
125 HCI_QUIRK_BROKEN_LOCAL_COMMANDS,
126
105 /* When this quirk is set, then no stored link key handling 127 /* When this quirk is set, then no stored link key handling
106 * is performed. This is mainly due to the fact that the 128 * is performed. This is mainly due to the fact that the
107 * HCI Delete Stored Link Key command is advertised, but 129 * HCI Delete Stored Link Key command is advertised, but
@@ -162,8 +184,7 @@ enum {
162 */ 184 */
163enum { 185enum {
164 HCI_DUT_MODE, 186 HCI_DUT_MODE,
165 HCI_FORCE_SC, 187 HCI_FORCE_BREDR_SMP,
166 HCI_FORCE_LESC,
167 HCI_FORCE_STATIC_ADDR, 188 HCI_FORCE_STATIC_ADDR,
168}; 189};
169 190
@@ -343,6 +364,7 @@ enum {
343#define HCI_LE_ENCRYPTION 0x01 364#define HCI_LE_ENCRYPTION 0x01
344#define HCI_LE_CONN_PARAM_REQ_PROC 0x02 365#define HCI_LE_CONN_PARAM_REQ_PROC 0x02
345#define HCI_LE_PING 0x10 366#define HCI_LE_PING 0x10
367#define HCI_LE_DATA_LEN_EXT 0x20
346#define HCI_LE_EXT_SCAN_POLICY 0x80 368#define HCI_LE_EXT_SCAN_POLICY 0x80
347 369
348/* Connection modes */ 370/* Connection modes */
@@ -833,11 +855,26 @@ struct hci_cp_set_event_flt {
833#define HCI_CONN_SETUP_AUTO_OFF 0x01 855#define HCI_CONN_SETUP_AUTO_OFF 0x01
834#define HCI_CONN_SETUP_AUTO_ON 0x02 856#define HCI_CONN_SETUP_AUTO_ON 0x02
835 857
858#define HCI_OP_READ_STORED_LINK_KEY 0x0c0d
859struct hci_cp_read_stored_link_key {
860 bdaddr_t bdaddr;
861 __u8 read_all;
862} __packed;
863struct hci_rp_read_stored_link_key {
864 __u8 status;
865 __u8 max_keys;
866 __u8 num_keys;
867} __packed;
868
836#define HCI_OP_DELETE_STORED_LINK_KEY 0x0c12 869#define HCI_OP_DELETE_STORED_LINK_KEY 0x0c12
837struct hci_cp_delete_stored_link_key { 870struct hci_cp_delete_stored_link_key {
838 bdaddr_t bdaddr; 871 bdaddr_t bdaddr;
839 __u8 delete_all; 872 __u8 delete_all;
840} __packed; 873} __packed;
874struct hci_rp_delete_stored_link_key {
875 __u8 status;
876 __u8 num_keys;
877} __packed;
841 878
842#define HCI_MAX_NAME_LENGTH 248 879#define HCI_MAX_NAME_LENGTH 248
843 880
@@ -1371,6 +1408,39 @@ struct hci_cp_le_conn_param_req_neg_reply {
1371 __u8 reason; 1408 __u8 reason;
1372} __packed; 1409} __packed;
1373 1410
1411#define HCI_OP_LE_SET_DATA_LEN 0x2022
1412struct hci_cp_le_set_data_len {
1413 __le16 handle;
1414 __le16 tx_len;
1415 __le16 tx_time;
1416} __packed;
1417struct hci_rp_le_set_data_len {
1418 __u8 status;
1419 __le16 handle;
1420} __packed;
1421
1422#define HCI_OP_LE_READ_DEF_DATA_LEN 0x2023
1423struct hci_rp_le_read_def_data_len {
1424 __u8 status;
1425 __le16 tx_len;
1426 __le16 tx_time;
1427} __packed;
1428
1429#define HCI_OP_LE_WRITE_DEF_DATA_LEN 0x2024
1430struct hci_cp_le_write_def_data_len {
1431 __le16 tx_len;
1432 __le16 tx_time;
1433} __packed;
1434
1435#define HCI_OP_LE_READ_MAX_DATA_LEN 0x202f
1436struct hci_rp_le_read_max_data_len {
1437 __u8 status;
1438 __le16 tx_len;
1439 __le16 tx_time;
1440 __le16 rx_len;
1441 __le16 rx_time;
1442} __packed;
1443
1374/* ---- HCI Events ---- */ 1444/* ---- HCI Events ---- */
1375#define HCI_EV_INQUIRY_COMPLETE 0x01 1445#define HCI_EV_INQUIRY_COMPLETE 0x01
1376 1446
@@ -1796,6 +1866,15 @@ struct hci_ev_le_remote_conn_param_req {
1796 __le16 timeout; 1866 __le16 timeout;
1797} __packed; 1867} __packed;
1798 1868
1869#define HCI_EV_LE_DATA_LEN_CHANGE 0x07
1870struct hci_ev_le_data_len_change {
1871 __le16 handle;
1872 __le16 tx_len;
1873 __le16 tx_time;
1874 __le16 rx_len;
1875 __le16 rx_time;
1876} __packed;
1877
1799#define HCI_EV_LE_DIRECT_ADV_REPORT 0x0B 1878#define HCI_EV_LE_DIRECT_ADV_REPORT 0x0B
1800struct hci_ev_le_direct_adv_info { 1879struct hci_ev_le_direct_adv_info {
1801 __u8 evt_type; 1880 __u8 evt_type;
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 3c7827005c25..52863c3e0b13 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -79,6 +79,8 @@ struct discovery_state {
79 s8 rssi; 79 s8 rssi;
80 u16 uuid_count; 80 u16 uuid_count;
81 u8 (*uuids)[16]; 81 u8 (*uuids)[16];
82 unsigned long scan_start;
83 unsigned long scan_duration;
82}; 84};
83 85
84struct hci_conn_hash { 86struct hci_conn_hash {
@@ -145,6 +147,7 @@ struct oob_data {
145 struct list_head list; 147 struct list_head list;
146 bdaddr_t bdaddr; 148 bdaddr_t bdaddr;
147 u8 bdaddr_type; 149 u8 bdaddr_type;
150 u8 present;
148 u8 hash192[16]; 151 u8 hash192[16];
149 u8 rand192[16]; 152 u8 rand192[16];
150 u8 hash256[16]; 153 u8 hash256[16];
@@ -205,6 +208,8 @@ struct hci_dev {
205 __u16 lmp_subver; 208 __u16 lmp_subver;
206 __u16 voice_setting; 209 __u16 voice_setting;
207 __u8 num_iac; 210 __u8 num_iac;
211 __u8 stored_max_keys;
212 __u8 stored_num_keys;
208 __u8 io_capability; 213 __u8 io_capability;
209 __s8 inq_tx_power; 214 __s8 inq_tx_power;
210 __u16 page_scan_interval; 215 __u16 page_scan_interval;
@@ -220,10 +225,17 @@ struct hci_dev {
220 __u16 le_conn_max_interval; 225 __u16 le_conn_max_interval;
221 __u16 le_conn_latency; 226 __u16 le_conn_latency;
222 __u16 le_supv_timeout; 227 __u16 le_supv_timeout;
228 __u16 le_def_tx_len;
229 __u16 le_def_tx_time;
230 __u16 le_max_tx_len;
231 __u16 le_max_tx_time;
232 __u16 le_max_rx_len;
233 __u16 le_max_rx_time;
223 __u16 discov_interleaved_timeout; 234 __u16 discov_interleaved_timeout;
224 __u16 conn_info_min_age; 235 __u16 conn_info_min_age;
225 __u16 conn_info_max_age; 236 __u16 conn_info_max_age;
226 __u8 ssp_debug_mode; 237 __u8 ssp_debug_mode;
238 __u8 hw_error_code;
227 __u32 clock; 239 __u32 clock;
228 240
229 __u16 devid_source; 241 __u16 devid_source;
@@ -285,6 +297,7 @@ struct hci_dev {
285 297
286 struct work_struct power_on; 298 struct work_struct power_on;
287 struct delayed_work power_off; 299 struct delayed_work power_off;
300 struct work_struct error_reset;
288 301
289 __u16 discov_timeout; 302 __u16 discov_timeout;
290 struct delayed_work discov_off; 303 struct delayed_work discov_off;
@@ -343,6 +356,7 @@ struct hci_dev {
343 unsigned long dev_flags; 356 unsigned long dev_flags;
344 357
345 struct delayed_work le_scan_disable; 358 struct delayed_work le_scan_disable;
359 struct delayed_work le_scan_restart;
346 360
347 __s8 adv_tx_power; 361 __s8 adv_tx_power;
348 __u8 adv_data[HCI_MAX_AD_LENGTH]; 362 __u8 adv_data[HCI_MAX_AD_LENGTH];
@@ -361,6 +375,7 @@ struct hci_dev {
361 int (*setup)(struct hci_dev *hdev); 375 int (*setup)(struct hci_dev *hdev);
362 int (*send)(struct hci_dev *hdev, struct sk_buff *skb); 376 int (*send)(struct hci_dev *hdev, struct sk_buff *skb);
363 void (*notify)(struct hci_dev *hdev, unsigned int evt); 377 void (*notify)(struct hci_dev *hdev, unsigned int evt);
378 void (*hw_error)(struct hci_dev *hdev, u8 code);
364 int (*set_bdaddr)(struct hci_dev *hdev, const bdaddr_t *bdaddr); 379 int (*set_bdaddr)(struct hci_dev *hdev, const bdaddr_t *bdaddr);
365}; 380};
366 381
@@ -434,6 +449,7 @@ struct hci_conn {
434 struct delayed_work le_conn_timeout; 449 struct delayed_work le_conn_timeout;
435 450
436 struct device dev; 451 struct device dev;
452 struct dentry *debugfs;
437 453
438 struct hci_dev *hdev; 454 struct hci_dev *hdev;
439 void *l2cap_data; 455 void *l2cap_data;
@@ -518,6 +534,8 @@ static inline void hci_discovery_filter_clear(struct hci_dev *hdev)
518 hdev->discovery.uuid_count = 0; 534 hdev->discovery.uuid_count = 0;
519 kfree(hdev->discovery.uuids); 535 kfree(hdev->discovery.uuids);
520 hdev->discovery.uuids = NULL; 536 hdev->discovery.uuids = NULL;
537 hdev->discovery.scan_start = 0;
538 hdev->discovery.scan_duration = 0;
521} 539}
522 540
523bool hci_discovery_active(struct hci_dev *hdev); 541bool hci_discovery_active(struct hci_dev *hdev);
@@ -772,7 +790,6 @@ int hci_conn_check_link_mode(struct hci_conn *conn);
772int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level); 790int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level);
773int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type, 791int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
774 bool initiator); 792 bool initiator);
775int hci_conn_change_link_key(struct hci_conn *conn);
776int hci_conn_switch_role(struct hci_conn *conn, __u8 role); 793int hci_conn_switch_role(struct hci_conn *conn, __u8 role);
777 794
778void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active); 795void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active);
@@ -920,8 +937,6 @@ struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
920 bdaddr_t *addr, u8 addr_type); 937 bdaddr_t *addr, u8 addr_type);
921struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev, 938struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev,
922 bdaddr_t *addr, u8 addr_type); 939 bdaddr_t *addr, u8 addr_type);
923int hci_conn_params_set(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
924 u8 auto_connect);
925void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type); 940void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type);
926void hci_conn_params_clear_all(struct hci_dev *hdev); 941void hci_conn_params_clear_all(struct hci_dev *hdev);
927void hci_conn_params_clear_disabled(struct hci_dev *hdev); 942void hci_conn_params_clear_disabled(struct hci_dev *hdev);
@@ -930,8 +945,6 @@ struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
930 bdaddr_t *addr, 945 bdaddr_t *addr,
931 u8 addr_type); 946 u8 addr_type);
932 947
933void hci_update_background_scan(struct hci_dev *hdev);
934
935void hci_uuids_clear(struct hci_dev *hdev); 948void hci_uuids_clear(struct hci_dev *hdev);
936 949
937void hci_link_keys_clear(struct hci_dev *hdev); 950void hci_link_keys_clear(struct hci_dev *hdev);
@@ -1014,8 +1027,7 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
1014 1027
1015#define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \ 1028#define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \
1016 !test_bit(HCI_AUTO_OFF, &hdev->dev_flags)) 1029 !test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
1017#define bredr_sc_enabled(dev) ((lmp_sc_capable(dev) || \ 1030#define bredr_sc_enabled(dev) (lmp_sc_capable(dev) && \
1018 test_bit(HCI_FORCE_SC, &(dev)->dbg_flags)) && \
1019 test_bit(HCI_SC_ENABLED, &(dev)->dev_flags)) 1031 test_bit(HCI_SC_ENABLED, &(dev)->dev_flags))
1020 1032
1021/* ----- HCI protocols ----- */ 1033/* ----- HCI protocols ----- */
@@ -1284,30 +1296,8 @@ static inline int hci_check_conn_params(u16 min, u16 max, u16 latency,
1284int hci_register_cb(struct hci_cb *hcb); 1296int hci_register_cb(struct hci_cb *hcb);
1285int hci_unregister_cb(struct hci_cb *hcb); 1297int hci_unregister_cb(struct hci_cb *hcb);
1286 1298
1287struct hci_request {
1288 struct hci_dev *hdev;
1289 struct sk_buff_head cmd_q;
1290
1291 /* If something goes wrong when building the HCI request, the error
1292 * value is stored in this field.
1293 */
1294 int err;
1295};
1296
1297void hci_req_init(struct hci_request *req, struct hci_dev *hdev);
1298int hci_req_run(struct hci_request *req, hci_req_complete_t complete);
1299void hci_req_add(struct hci_request *req, u16 opcode, u32 plen,
1300 const void *param);
1301void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
1302 const void *param, u8 event);
1303void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status);
1304bool hci_req_pending(struct hci_dev *hdev); 1299bool hci_req_pending(struct hci_dev *hdev);
1305 1300
1306void hci_req_add_le_scan_disable(struct hci_request *req);
1307void hci_req_add_le_passive_scan(struct hci_request *req);
1308
1309void hci_update_page_scan(struct hci_dev *hdev, struct hci_request *req);
1310
1311struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen, 1301struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1312 const void *param, u32 timeout); 1302 const void *param, u32 timeout);
1313struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen, 1303struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
@@ -1344,6 +1334,7 @@ void hci_sock_dev_event(struct hci_dev *hdev, int event);
1344#define DISCOV_INTERLEAVED_TIMEOUT 5120 /* msec */ 1334#define DISCOV_INTERLEAVED_TIMEOUT 5120 /* msec */
1345#define DISCOV_INTERLEAVED_INQUIRY_LEN 0x04 1335#define DISCOV_INTERLEAVED_INQUIRY_LEN 0x04
1346#define DISCOV_BREDR_INQUIRY_LEN 0x08 1336#define DISCOV_BREDR_INQUIRY_LEN 0x08
1337#define DISCOV_LE_RESTART_DELAY msecs_to_jiffies(200) /* msec */
1347 1338
1348int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); 1339int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len);
1349int mgmt_new_settings(struct hci_dev *hdev); 1340int mgmt_new_settings(struct hci_dev *hdev);
@@ -1388,7 +1379,6 @@ int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
1388void mgmt_auth_failed(struct hci_conn *conn, u8 status); 1379void mgmt_auth_failed(struct hci_conn *conn, u8 status);
1389void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status); 1380void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status);
1390void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status); 1381void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
1391void mgmt_sc_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
1392void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class, 1382void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
1393 u8 status); 1383 u8 status);
1394void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status); 1384void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status);
@@ -1417,8 +1407,6 @@ u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
1417void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand, 1407void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
1418 __u8 ltk[16]); 1408 __u8 ltk[16]);
1419 1409
1420int hci_update_random_address(struct hci_request *req, bool require_privacy,
1421 u8 *own_addr_type);
1422void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr, 1410void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
1423 u8 *bdaddr_type); 1411 u8 *bdaddr_type);
1424 1412
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index d1bb342d083f..2239a3753092 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -248,6 +248,7 @@ struct l2cap_conn_rsp {
248#define L2CAP_PSM_SDP 0x0001 248#define L2CAP_PSM_SDP 0x0001
249#define L2CAP_PSM_RFCOMM 0x0003 249#define L2CAP_PSM_RFCOMM 0x0003
250#define L2CAP_PSM_3DSP 0x0021 250#define L2CAP_PSM_3DSP 0x0021
251#define L2CAP_PSM_IPSP 0x0023 /* 6LoWPAN */
251 252
252/* channel identifier */ 253/* channel identifier */
253#define L2CAP_CID_SIGNALING 0x0001 254#define L2CAP_CID_SIGNALING 0x0001
diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h
index 95c34d5180fa..e218a30f2061 100644
--- a/include/net/bluetooth/mgmt.h
+++ b/include/net/bluetooth/mgmt.h
@@ -301,10 +301,6 @@ struct mgmt_cp_user_passkey_neg_reply {
301#define MGMT_OP_READ_LOCAL_OOB_DATA 0x0020 301#define MGMT_OP_READ_LOCAL_OOB_DATA 0x0020
302#define MGMT_READ_LOCAL_OOB_DATA_SIZE 0 302#define MGMT_READ_LOCAL_OOB_DATA_SIZE 0
303struct mgmt_rp_read_local_oob_data { 303struct mgmt_rp_read_local_oob_data {
304 __u8 hash[16];
305 __u8 rand[16];
306} __packed;
307struct mgmt_rp_read_local_oob_ext_data {
308 __u8 hash192[16]; 304 __u8 hash192[16];
309 __u8 rand192[16]; 305 __u8 rand192[16];
310 __u8 hash256[16]; 306 __u8 hash256[16];
diff --git a/include/net/bluetooth/rfcomm.h b/include/net/bluetooth/rfcomm.h
index 578b83127af1..4190af53a46a 100644
--- a/include/net/bluetooth/rfcomm.h
+++ b/include/net/bluetooth/rfcomm.h
@@ -24,8 +24,6 @@
24#ifndef __RFCOMM_H 24#ifndef __RFCOMM_H
25#define __RFCOMM_H 25#define __RFCOMM_H
26 26
27#define RFCOMM_PSM 3
28
29#define RFCOMM_CONN_TIMEOUT (HZ * 30) 27#define RFCOMM_CONN_TIMEOUT (HZ * 30)
30#define RFCOMM_DISC_TIMEOUT (HZ * 20) 28#define RFCOMM_DISC_TIMEOUT (HZ * 20)
31#define RFCOMM_AUTH_TIMEOUT (HZ * 25) 29#define RFCOMM_AUTH_TIMEOUT (HZ * 25)
diff --git a/include/net/bond_3ad.h b/include/net/bond_3ad.h
index e01d903633ef..f04cdbb7848e 100644
--- a/include/net/bond_3ad.h
+++ b/include/net/bond_3ad.h
@@ -274,7 +274,6 @@ void bond_3ad_handle_link_change(struct slave *slave, char link);
274int bond_3ad_get_active_agg_info(struct bonding *bond, struct ad_info *ad_info); 274int bond_3ad_get_active_agg_info(struct bonding *bond, struct ad_info *ad_info);
275int __bond_3ad_get_active_agg_info(struct bonding *bond, 275int __bond_3ad_get_active_agg_info(struct bonding *bond,
276 struct ad_info *ad_info); 276 struct ad_info *ad_info);
277int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev);
278int bond_3ad_lacpdu_recv(const struct sk_buff *skb, struct bonding *bond, 277int bond_3ad_lacpdu_recv(const struct sk_buff *skb, struct bonding *bond,
279 struct slave *slave); 278 struct slave *slave);
280int bond_3ad_set_carrier(struct bonding *bond); 279int bond_3ad_set_carrier(struct bonding *bond);
diff --git a/include/net/bonding.h b/include/net/bonding.h
index 983a94b86b95..fda6feeb6c1f 100644
--- a/include/net/bonding.h
+++ b/include/net/bonding.h
@@ -150,6 +150,12 @@ struct bond_parm_tbl {
150 int mode; 150 int mode;
151}; 151};
152 152
153struct netdev_notify_work {
154 struct delayed_work work;
155 struct net_device *dev;
156 struct netdev_bonding_info bonding_info;
157};
158
153struct slave { 159struct slave {
154 struct net_device *dev; /* first - useful for panic debug */ 160 struct net_device *dev; /* first - useful for panic debug */
155 struct bonding *bond; /* our master */ 161 struct bonding *bond; /* our master */
@@ -243,6 +249,8 @@ struct bonding {
243#define bond_slave_get_rtnl(dev) \ 249#define bond_slave_get_rtnl(dev) \
244 ((struct slave *) rtnl_dereference(dev->rx_handler_data)) 250 ((struct slave *) rtnl_dereference(dev->rx_handler_data))
245 251
252void bond_queue_slave_event(struct slave *slave);
253
246struct bond_vlan_tag { 254struct bond_vlan_tag {
247 __be16 vlan_proto; 255 __be16 vlan_proto;
248 unsigned short vlan_id; 256 unsigned short vlan_id;
@@ -315,6 +323,7 @@ static inline void bond_set_active_slave(struct slave *slave)
315{ 323{
316 if (slave->backup) { 324 if (slave->backup) {
317 slave->backup = 0; 325 slave->backup = 0;
326 bond_queue_slave_event(slave);
318 rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC); 327 rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC);
319 } 328 }
320} 329}
@@ -323,6 +332,7 @@ static inline void bond_set_backup_slave(struct slave *slave)
323{ 332{
324 if (!slave->backup) { 333 if (!slave->backup) {
325 slave->backup = 1; 334 slave->backup = 1;
335 bond_queue_slave_event(slave);
326 rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC); 336 rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC);
327 } 337 }
328} 338}
@@ -336,6 +346,7 @@ static inline void bond_set_slave_state(struct slave *slave,
336 slave->backup = slave_state; 346 slave->backup = slave_state;
337 if (notify) { 347 if (notify) {
338 rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC); 348 rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC);
349 bond_queue_slave_event(slave);
339 slave->should_notify = 0; 350 slave->should_notify = 0;
340 } else { 351 } else {
341 if (slave->should_notify) 352 if (slave->should_notify)
@@ -490,6 +501,12 @@ static inline bool bond_is_slave_inactive(struct slave *slave)
490 return slave->inactive; 501 return slave->inactive;
491} 502}
492 503
504static inline void bond_set_slave_link_state(struct slave *slave, int state)
505{
506 slave->link = state;
507 bond_queue_slave_event(slave);
508}
509
493static inline __be32 bond_confirm_addr(struct net_device *dev, __be32 dst, __be32 local) 510static inline __be32 bond_confirm_addr(struct net_device *dev, __be32 dst, __be32 local)
494{ 511{
495 struct in_device *in_dev; 512 struct in_device *in_dev;
@@ -525,6 +542,7 @@ void bond_sysfs_slave_del(struct slave *slave);
525int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev); 542int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev);
526int bond_release(struct net_device *bond_dev, struct net_device *slave_dev); 543int bond_release(struct net_device *bond_dev, struct net_device *slave_dev);
527u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb); 544u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb);
545int bond_set_carrier(struct bonding *bond);
528void bond_select_active_slave(struct bonding *bond); 546void bond_select_active_slave(struct bonding *bond);
529void bond_change_active_slave(struct bonding *bond, struct slave *new_active); 547void bond_change_active_slave(struct bonding *bond, struct slave *new_active);
530void bond_create_debugfs(void); 548void bond_create_debugfs(void);
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 4ebb816241fa..64e09e1e8099 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -520,37 +520,41 @@ ieee80211_chandef_max_power(struct cfg80211_chan_def *chandef)
520 * 520 *
521 * @SURVEY_INFO_NOISE_DBM: noise (in dBm) was filled in 521 * @SURVEY_INFO_NOISE_DBM: noise (in dBm) was filled in
522 * @SURVEY_INFO_IN_USE: channel is currently being used 522 * @SURVEY_INFO_IN_USE: channel is currently being used
523 * @SURVEY_INFO_CHANNEL_TIME: channel active time (in ms) was filled in 523 * @SURVEY_INFO_TIME: active time (in ms) was filled in
524 * @SURVEY_INFO_CHANNEL_TIME_BUSY: channel busy time was filled in 524 * @SURVEY_INFO_TIME_BUSY: busy time was filled in
525 * @SURVEY_INFO_CHANNEL_TIME_EXT_BUSY: extension channel busy time was filled in 525 * @SURVEY_INFO_TIME_EXT_BUSY: extension channel busy time was filled in
526 * @SURVEY_INFO_CHANNEL_TIME_RX: channel receive time was filled in 526 * @SURVEY_INFO_TIME_RX: receive time was filled in
527 * @SURVEY_INFO_CHANNEL_TIME_TX: channel transmit time was filled in 527 * @SURVEY_INFO_TIME_TX: transmit time was filled in
528 * @SURVEY_INFO_TIME_SCAN: scan time was filled in
528 * 529 *
529 * Used by the driver to indicate which info in &struct survey_info 530 * Used by the driver to indicate which info in &struct survey_info
530 * it has filled in during the get_survey(). 531 * it has filled in during the get_survey().
531 */ 532 */
532enum survey_info_flags { 533enum survey_info_flags {
533 SURVEY_INFO_NOISE_DBM = 1<<0, 534 SURVEY_INFO_NOISE_DBM = BIT(0),
534 SURVEY_INFO_IN_USE = 1<<1, 535 SURVEY_INFO_IN_USE = BIT(1),
535 SURVEY_INFO_CHANNEL_TIME = 1<<2, 536 SURVEY_INFO_TIME = BIT(2),
536 SURVEY_INFO_CHANNEL_TIME_BUSY = 1<<3, 537 SURVEY_INFO_TIME_BUSY = BIT(3),
537 SURVEY_INFO_CHANNEL_TIME_EXT_BUSY = 1<<4, 538 SURVEY_INFO_TIME_EXT_BUSY = BIT(4),
538 SURVEY_INFO_CHANNEL_TIME_RX = 1<<5, 539 SURVEY_INFO_TIME_RX = BIT(5),
539 SURVEY_INFO_CHANNEL_TIME_TX = 1<<6, 540 SURVEY_INFO_TIME_TX = BIT(6),
541 SURVEY_INFO_TIME_SCAN = BIT(7),
540}; 542};
541 543
542/** 544/**
543 * struct survey_info - channel survey response 545 * struct survey_info - channel survey response
544 * 546 *
545 * @channel: the channel this survey record reports, mandatory 547 * @channel: the channel this survey record reports, may be %NULL for a single
548 * record to report global statistics
546 * @filled: bitflag of flags from &enum survey_info_flags 549 * @filled: bitflag of flags from &enum survey_info_flags
547 * @noise: channel noise in dBm. This and all following fields are 550 * @noise: channel noise in dBm. This and all following fields are
548 * optional 551 * optional
549 * @channel_time: amount of time in ms the radio spent on the channel 552 * @time: amount of time in ms the radio was turn on (on the channel)
550 * @channel_time_busy: amount of time the primary channel was sensed busy 553 * @time_busy: amount of time the primary channel was sensed busy
551 * @channel_time_ext_busy: amount of time the extension channel was sensed busy 554 * @time_ext_busy: amount of time the extension channel was sensed busy
552 * @channel_time_rx: amount of time the radio spent receiving data 555 * @time_rx: amount of time the radio spent receiving data
553 * @channel_time_tx: amount of time the radio spent transmitting data 556 * @time_tx: amount of time the radio spent transmitting data
557 * @time_scan: amount of time the radio spent for scanning
554 * 558 *
555 * Used by dump_survey() to report back per-channel survey information. 559 * Used by dump_survey() to report back per-channel survey information.
556 * 560 *
@@ -559,11 +563,12 @@ enum survey_info_flags {
559 */ 563 */
560struct survey_info { 564struct survey_info {
561 struct ieee80211_channel *channel; 565 struct ieee80211_channel *channel;
562 u64 channel_time; 566 u64 time;
563 u64 channel_time_busy; 567 u64 time_busy;
564 u64 channel_time_ext_busy; 568 u64 time_ext_busy;
565 u64 channel_time_rx; 569 u64 time_rx;
566 u64 channel_time_tx; 570 u64 time_tx;
571 u64 time_scan;
567 u32 filled; 572 u32 filled;
568 s8 noise; 573 s8 noise;
569}; 574};
@@ -861,75 +866,6 @@ int cfg80211_check_station_change(struct wiphy *wiphy,
861 enum cfg80211_station_type statype); 866 enum cfg80211_station_type statype);
862 867
863/** 868/**
864 * enum station_info_flags - station information flags
865 *
866 * Used by the driver to indicate which info in &struct station_info
867 * it has filled in during get_station() or dump_station().
868 *
869 * @STATION_INFO_INACTIVE_TIME: @inactive_time filled
870 * @STATION_INFO_RX_BYTES: @rx_bytes filled
871 * @STATION_INFO_TX_BYTES: @tx_bytes filled
872 * @STATION_INFO_RX_BYTES64: @rx_bytes filled with 64-bit value
873 * @STATION_INFO_TX_BYTES64: @tx_bytes filled with 64-bit value
874 * @STATION_INFO_LLID: @llid filled
875 * @STATION_INFO_PLID: @plid filled
876 * @STATION_INFO_PLINK_STATE: @plink_state filled
877 * @STATION_INFO_SIGNAL: @signal filled
878 * @STATION_INFO_TX_BITRATE: @txrate fields are filled
879 * (tx_bitrate, tx_bitrate_flags and tx_bitrate_mcs)
880 * @STATION_INFO_RX_PACKETS: @rx_packets filled with 32-bit value
881 * @STATION_INFO_TX_PACKETS: @tx_packets filled with 32-bit value
882 * @STATION_INFO_TX_RETRIES: @tx_retries filled
883 * @STATION_INFO_TX_FAILED: @tx_failed filled
884 * @STATION_INFO_RX_DROP_MISC: @rx_dropped_misc filled
885 * @STATION_INFO_SIGNAL_AVG: @signal_avg filled
886 * @STATION_INFO_RX_BITRATE: @rxrate fields are filled
887 * @STATION_INFO_BSS_PARAM: @bss_param filled
888 * @STATION_INFO_CONNECTED_TIME: @connected_time filled
889 * @STATION_INFO_ASSOC_REQ_IES: @assoc_req_ies filled
890 * @STATION_INFO_STA_FLAGS: @sta_flags filled
891 * @STATION_INFO_BEACON_LOSS_COUNT: @beacon_loss_count filled
892 * @STATION_INFO_T_OFFSET: @t_offset filled
893 * @STATION_INFO_LOCAL_PM: @local_pm filled
894 * @STATION_INFO_PEER_PM: @peer_pm filled
895 * @STATION_INFO_NONPEER_PM: @nonpeer_pm filled
896 * @STATION_INFO_CHAIN_SIGNAL: @chain_signal filled
897 * @STATION_INFO_CHAIN_SIGNAL_AVG: @chain_signal_avg filled
898 * @STATION_INFO_EXPECTED_THROUGHPUT: @expected_throughput filled
899 */
900enum station_info_flags {
901 STATION_INFO_INACTIVE_TIME = BIT(0),
902 STATION_INFO_RX_BYTES = BIT(1),
903 STATION_INFO_TX_BYTES = BIT(2),
904 STATION_INFO_LLID = BIT(3),
905 STATION_INFO_PLID = BIT(4),
906 STATION_INFO_PLINK_STATE = BIT(5),
907 STATION_INFO_SIGNAL = BIT(6),
908 STATION_INFO_TX_BITRATE = BIT(7),
909 STATION_INFO_RX_PACKETS = BIT(8),
910 STATION_INFO_TX_PACKETS = BIT(9),
911 STATION_INFO_TX_RETRIES = BIT(10),
912 STATION_INFO_TX_FAILED = BIT(11),
913 STATION_INFO_RX_DROP_MISC = BIT(12),
914 STATION_INFO_SIGNAL_AVG = BIT(13),
915 STATION_INFO_RX_BITRATE = BIT(14),
916 STATION_INFO_BSS_PARAM = BIT(15),
917 STATION_INFO_CONNECTED_TIME = BIT(16),
918 STATION_INFO_ASSOC_REQ_IES = BIT(17),
919 STATION_INFO_STA_FLAGS = BIT(18),
920 STATION_INFO_BEACON_LOSS_COUNT = BIT(19),
921 STATION_INFO_T_OFFSET = BIT(20),
922 STATION_INFO_LOCAL_PM = BIT(21),
923 STATION_INFO_PEER_PM = BIT(22),
924 STATION_INFO_NONPEER_PM = BIT(23),
925 STATION_INFO_RX_BYTES64 = BIT(24),
926 STATION_INFO_TX_BYTES64 = BIT(25),
927 STATION_INFO_CHAIN_SIGNAL = BIT(26),
928 STATION_INFO_CHAIN_SIGNAL_AVG = BIT(27),
929 STATION_INFO_EXPECTED_THROUGHPUT = BIT(28),
930};
931
932/**
933 * enum station_info_rate_flags - bitrate info flags 869 * enum station_info_rate_flags - bitrate info flags
934 * 870 *
935 * Used by the driver to indicate the specific rate transmission 871 * Used by the driver to indicate the specific rate transmission
@@ -937,22 +873,35 @@ enum station_info_flags {
937 * 873 *
938 * @RATE_INFO_FLAGS_MCS: mcs field filled with HT MCS 874 * @RATE_INFO_FLAGS_MCS: mcs field filled with HT MCS
939 * @RATE_INFO_FLAGS_VHT_MCS: mcs field filled with VHT MCS 875 * @RATE_INFO_FLAGS_VHT_MCS: mcs field filled with VHT MCS
940 * @RATE_INFO_FLAGS_40_MHZ_WIDTH: 40 MHz width transmission
941 * @RATE_INFO_FLAGS_80_MHZ_WIDTH: 80 MHz width transmission
942 * @RATE_INFO_FLAGS_80P80_MHZ_WIDTH: 80+80 MHz width transmission
943 * @RATE_INFO_FLAGS_160_MHZ_WIDTH: 160 MHz width transmission
944 * @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval 876 * @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval
945 * @RATE_INFO_FLAGS_60G: 60GHz MCS 877 * @RATE_INFO_FLAGS_60G: 60GHz MCS
946 */ 878 */
947enum rate_info_flags { 879enum rate_info_flags {
948 RATE_INFO_FLAGS_MCS = BIT(0), 880 RATE_INFO_FLAGS_MCS = BIT(0),
949 RATE_INFO_FLAGS_VHT_MCS = BIT(1), 881 RATE_INFO_FLAGS_VHT_MCS = BIT(1),
950 RATE_INFO_FLAGS_40_MHZ_WIDTH = BIT(2), 882 RATE_INFO_FLAGS_SHORT_GI = BIT(2),
951 RATE_INFO_FLAGS_80_MHZ_WIDTH = BIT(3), 883 RATE_INFO_FLAGS_60G = BIT(3),
952 RATE_INFO_FLAGS_80P80_MHZ_WIDTH = BIT(4), 884};
953 RATE_INFO_FLAGS_160_MHZ_WIDTH = BIT(5), 885
954 RATE_INFO_FLAGS_SHORT_GI = BIT(6), 886/**
955 RATE_INFO_FLAGS_60G = BIT(7), 887 * enum rate_info_bw - rate bandwidth information
888 *
889 * Used by the driver to indicate the rate bandwidth.
890 *
891 * @RATE_INFO_BW_5: 5 MHz bandwidth
892 * @RATE_INFO_BW_10: 10 MHz bandwidth
893 * @RATE_INFO_BW_20: 20 MHz bandwidth
894 * @RATE_INFO_BW_40: 40 MHz bandwidth
895 * @RATE_INFO_BW_80: 80 MHz bandwidth
896 * @RATE_INFO_BW_160: 160 MHz bandwidth
897 */
898enum rate_info_bw {
899 RATE_INFO_BW_5,
900 RATE_INFO_BW_10,
901 RATE_INFO_BW_20,
902 RATE_INFO_BW_40,
903 RATE_INFO_BW_80,
904 RATE_INFO_BW_160,
956}; 905};
957 906
958/** 907/**
@@ -964,12 +913,14 @@ enum rate_info_flags {
964 * @mcs: mcs index if struct describes a 802.11n bitrate 913 * @mcs: mcs index if struct describes a 802.11n bitrate
965 * @legacy: bitrate in 100kbit/s for 802.11abg 914 * @legacy: bitrate in 100kbit/s for 802.11abg
966 * @nss: number of streams (VHT only) 915 * @nss: number of streams (VHT only)
916 * @bw: bandwidth (from &enum rate_info_bw)
967 */ 917 */
968struct rate_info { 918struct rate_info {
969 u8 flags; 919 u8 flags;
970 u8 mcs; 920 u8 mcs;
971 u16 legacy; 921 u16 legacy;
972 u8 nss; 922 u8 nss;
923 u8 bw;
973}; 924};
974 925
975/** 926/**
@@ -1003,6 +954,24 @@ struct sta_bss_parameters {
1003 u16 beacon_interval; 954 u16 beacon_interval;
1004}; 955};
1005 956
957/**
958 * struct cfg80211_tid_stats - per-TID statistics
959 * @filled: bitmap of flags using the bits of &enum nl80211_tid_stats to
960 * indicate the relevant values in this struct are filled
961 * @rx_msdu: number of received MSDUs
962 * @tx_msdu: number of (attempted) transmitted MSDUs
963 * @tx_msdu_retries: number of retries (not counting the first) for
964 * transmitted MSDUs
965 * @tx_msdu_failed: number of failed transmitted MSDUs
966 */
967struct cfg80211_tid_stats {
968 u32 filled;
969 u64 rx_msdu;
970 u64 tx_msdu;
971 u64 tx_msdu_retries;
972 u64 tx_msdu_failed;
973};
974
1006#define IEEE80211_MAX_CHAINS 4 975#define IEEE80211_MAX_CHAINS 4
1007 976
1008/** 977/**
@@ -1010,11 +979,12 @@ struct sta_bss_parameters {
1010 * 979 *
1011 * Station information filled by driver for get_station() and dump_station. 980 * Station information filled by driver for get_station() and dump_station.
1012 * 981 *
1013 * @filled: bitflag of flags from &enum station_info_flags 982 * @filled: bitflag of flags using the bits of &enum nl80211_sta_info to
983 * indicate the relevant values in this struct for them
1014 * @connected_time: time(in secs) since a station is last connected 984 * @connected_time: time(in secs) since a station is last connected
1015 * @inactive_time: time since last station activity (tx/rx) in milliseconds 985 * @inactive_time: time since last station activity (tx/rx) in milliseconds
1016 * @rx_bytes: bytes received from this station 986 * @rx_bytes: bytes (size of MPDUs) received from this station
1017 * @tx_bytes: bytes transmitted to this station 987 * @tx_bytes: bytes (size of MPDUs) transmitted to this station
1018 * @llid: mesh local link id 988 * @llid: mesh local link id
1019 * @plid: mesh peer link id 989 * @plid: mesh peer link id
1020 * @plink_state: mesh peer link state 990 * @plink_state: mesh peer link state
@@ -1027,10 +997,10 @@ struct sta_bss_parameters {
1027 * @chain_signal_avg: per-chain signal strength average in dBm 997 * @chain_signal_avg: per-chain signal strength average in dBm
1028 * @txrate: current unicast bitrate from this station 998 * @txrate: current unicast bitrate from this station
1029 * @rxrate: current unicast bitrate to this station 999 * @rxrate: current unicast bitrate to this station
1030 * @rx_packets: packets received from this station 1000 * @rx_packets: packets (MSDUs & MMPDUs) received from this station
1031 * @tx_packets: packets transmitted to this station 1001 * @tx_packets: packets (MSDUs & MMPDUs) transmitted to this station
1032 * @tx_retries: cumulative retry counts 1002 * @tx_retries: cumulative retry counts (MPDUs)
1033 * @tx_failed: number of failed transmissions (retries exceeded, no ACK) 1003 * @tx_failed: number of failed transmissions (MPDUs) (retries exceeded, no ACK)
1034 * @rx_dropped_misc: Dropped for un-specified reason. 1004 * @rx_dropped_misc: Dropped for un-specified reason.
1035 * @bss_param: current BSS parameters 1005 * @bss_param: current BSS parameters
1036 * @generation: generation number for nl80211 dumps. 1006 * @generation: generation number for nl80211 dumps.
@@ -1050,6 +1020,11 @@ struct sta_bss_parameters {
1050 * @nonpeer_pm: non-peer mesh STA power save mode 1020 * @nonpeer_pm: non-peer mesh STA power save mode
1051 * @expected_throughput: expected throughput in kbps (including 802.11 headers) 1021 * @expected_throughput: expected throughput in kbps (including 802.11 headers)
1052 * towards this station. 1022 * towards this station.
1023 * @rx_beacon: number of beacons received from this peer
1024 * @rx_beacon_signal_avg: signal strength average (in dBm) for beacons received
1025 * from this peer
1026 * @pertid: per-TID statistics, see &struct cfg80211_tid_stats, using the last
1027 * (IEEE80211_NUM_TIDS) index for MSDUs not encapsulated in QoS-MPDUs.
1053 */ 1028 */
1054struct station_info { 1029struct station_info {
1055 u32 filled; 1030 u32 filled;
@@ -1090,10 +1065,9 @@ struct station_info {
1090 1065
1091 u32 expected_throughput; 1066 u32 expected_throughput;
1092 1067
1093 /* 1068 u64 rx_beacon;
1094 * Note: Add a new enum station_info_flags value for each new field and 1069 u8 rx_beacon_signal_avg;
1095 * use it to check which fields are initialized. 1070 struct cfg80211_tid_stats pertid[IEEE80211_NUM_TIDS + 1];
1096 */
1097}; 1071};
1098 1072
1099/** 1073/**
@@ -1516,6 +1490,13 @@ struct cfg80211_match_set {
1516 * @mac_addr_mask: MAC address mask used with randomisation, bits that 1490 * @mac_addr_mask: MAC address mask used with randomisation, bits that
1517 * are 0 in the mask should be randomised, bits that are 1 should 1491 * are 0 in the mask should be randomised, bits that are 1 should
1518 * be taken from the @mac_addr 1492 * be taken from the @mac_addr
1493 * @rcu_head: RCU callback used to free the struct
1494 * @owner_nlportid: netlink portid of owner (if this should is a request
1495 * owned by a particular socket)
1496 * @delay: delay in seconds to use before starting the first scan
1497 * cycle. The driver may ignore this parameter and start
1498 * immediately (or at any other time), if this feature is not
1499 * supported.
1519 */ 1500 */
1520struct cfg80211_sched_scan_request { 1501struct cfg80211_sched_scan_request {
1521 struct cfg80211_ssid *ssids; 1502 struct cfg80211_ssid *ssids;
@@ -1529,6 +1510,7 @@ struct cfg80211_sched_scan_request {
1529 struct cfg80211_match_set *match_sets; 1510 struct cfg80211_match_set *match_sets;
1530 int n_match_sets; 1511 int n_match_sets;
1531 s32 min_rssi_thold; 1512 s32 min_rssi_thold;
1513 u32 delay;
1532 1514
1533 u8 mac_addr[ETH_ALEN] __aligned(2); 1515 u8 mac_addr[ETH_ALEN] __aligned(2);
1534 u8 mac_addr_mask[ETH_ALEN] __aligned(2); 1516 u8 mac_addr_mask[ETH_ALEN] __aligned(2);
@@ -1537,6 +1519,8 @@ struct cfg80211_sched_scan_request {
1537 struct wiphy *wiphy; 1519 struct wiphy *wiphy;
1538 struct net_device *dev; 1520 struct net_device *dev;
1539 unsigned long scan_start; 1521 unsigned long scan_start;
1522 struct rcu_head rcu_head;
1523 u32 owner_nlportid;
1540 1524
1541 /* keep last */ 1525 /* keep last */
1542 struct ieee80211_channel *channels[0]; 1526 struct ieee80211_channel *channels[0];
@@ -3011,6 +2995,8 @@ struct wiphy_vendor_command {
3011 * @regulatory_flags: wiphy regulatory flags, see 2995 * @regulatory_flags: wiphy regulatory flags, see
3012 * &enum ieee80211_regulatory_flags 2996 * &enum ieee80211_regulatory_flags
3013 * @features: features advertised to nl80211, see &enum nl80211_feature_flags. 2997 * @features: features advertised to nl80211, see &enum nl80211_feature_flags.
2998 * @ext_features: extended features advertised to nl80211, see
2999 * &enum nl80211_ext_feature_index.
3014 * @bss_priv_size: each BSS struct has private data allocated with it, 3000 * @bss_priv_size: each BSS struct has private data allocated with it,
3015 * this variable determines its size 3001 * this variable determines its size
3016 * @max_scan_ssids: maximum number of SSIDs the device can scan for in 3002 * @max_scan_ssids: maximum number of SSIDs the device can scan for in
@@ -3120,6 +3106,7 @@ struct wiphy {
3120 u16 max_acl_mac_addrs; 3106 u16 max_acl_mac_addrs;
3121 3107
3122 u32 flags, regulatory_flags, features; 3108 u32 flags, regulatory_flags, features;
3109 u8 ext_features[DIV_ROUND_UP(NUM_NL80211_EXT_FEATURES, 8)];
3123 3110
3124 u32 ap_sme_capa; 3111 u32 ap_sme_capa;
3125 3112
@@ -3808,6 +3795,34 @@ const u8 *cfg80211_find_vendor_ie(unsigned int oui, u8 oui_type,
3808int regulatory_hint(struct wiphy *wiphy, const char *alpha2); 3795int regulatory_hint(struct wiphy *wiphy, const char *alpha2);
3809 3796
3810/** 3797/**
3798 * regulatory_set_wiphy_regd - set regdom info for self managed drivers
3799 * @wiphy: the wireless device we want to process the regulatory domain on
3800 * @rd: the regulatory domain informatoin to use for this wiphy
3801 *
3802 * Set the regulatory domain information for self-managed wiphys, only they
3803 * may use this function. See %REGULATORY_WIPHY_SELF_MANAGED for more
3804 * information.
3805 *
3806 * Return: 0 on success. -EINVAL, -EPERM
3807 */
3808int regulatory_set_wiphy_regd(struct wiphy *wiphy,
3809 struct ieee80211_regdomain *rd);
3810
3811/**
3812 * regulatory_set_wiphy_regd_sync_rtnl - set regdom for self-managed drivers
3813 * @wiphy: the wireless device we want to process the regulatory domain on
3814 * @rd: the regulatory domain information to use for this wiphy
3815 *
3816 * This functions requires the RTNL to be held and applies the new regdomain
3817 * synchronously to this wiphy. For more details see
3818 * regulatory_set_wiphy_regd().
3819 *
3820 * Return: 0 on success. -EINVAL, -EPERM
3821 */
3822int regulatory_set_wiphy_regd_sync_rtnl(struct wiphy *wiphy,
3823 struct ieee80211_regdomain *rd);
3824
3825/**
3811 * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain 3826 * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain
3812 * @wiphy: the wireless device we want to process the regulatory domain on 3827 * @wiphy: the wireless device we want to process the regulatory domain on
3813 * @regd: the custom regulatory domain to use for this wiphy 3828 * @regd: the custom regulatory domain to use for this wiphy
@@ -4565,13 +4580,27 @@ void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr,
4565 struct station_info *sinfo, gfp_t gfp); 4580 struct station_info *sinfo, gfp_t gfp);
4566 4581
4567/** 4582/**
4583 * cfg80211_del_sta_sinfo - notify userspace about deletion of a station
4584 * @dev: the netdev
4585 * @mac_addr: the station's address
4586 * @sinfo: the station information/statistics
4587 * @gfp: allocation flags
4588 */
4589void cfg80211_del_sta_sinfo(struct net_device *dev, const u8 *mac_addr,
4590 struct station_info *sinfo, gfp_t gfp);
4591
4592/**
4568 * cfg80211_del_sta - notify userspace about deletion of a station 4593 * cfg80211_del_sta - notify userspace about deletion of a station
4569 * 4594 *
4570 * @dev: the netdev 4595 * @dev: the netdev
4571 * @mac_addr: the station's address 4596 * @mac_addr: the station's address
4572 * @gfp: allocation flags 4597 * @gfp: allocation flags
4573 */ 4598 */
4574void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp); 4599static inline void cfg80211_del_sta(struct net_device *dev,
4600 const u8 *mac_addr, gfp_t gfp)
4601{
4602 cfg80211_del_sta_sinfo(dev, mac_addr, NULL, gfp);
4603}
4575 4604
4576/** 4605/**
4577 * cfg80211_conn_failed - connection request failed notification 4606 * cfg80211_conn_failed - connection request failed notification
@@ -5033,6 +5062,42 @@ void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev,
5033 */ 5062 */
5034void cfg80211_shutdown_all_interfaces(struct wiphy *wiphy); 5063void cfg80211_shutdown_all_interfaces(struct wiphy *wiphy);
5035 5064
5065/**
5066 * wiphy_ext_feature_set - set the extended feature flag
5067 *
5068 * @wiphy: the wiphy to modify.
5069 * @ftidx: extended feature bit index.
5070 *
5071 * The extended features are flagged in multiple bytes (see
5072 * &struct wiphy.@ext_features)
5073 */
5074static inline void wiphy_ext_feature_set(struct wiphy *wiphy,
5075 enum nl80211_ext_feature_index ftidx)
5076{
5077 u8 *ft_byte;
5078
5079 ft_byte = &wiphy->ext_features[ftidx / 8];
5080 *ft_byte |= BIT(ftidx % 8);
5081}
5082
5083/**
5084 * wiphy_ext_feature_isset - check the extended feature flag
5085 *
5086 * @wiphy: the wiphy to modify.
5087 * @ftidx: extended feature bit index.
5088 *
5089 * The extended features are flagged in multiple bytes (see
5090 * &struct wiphy.@ext_features)
5091 */
5092static inline bool
5093wiphy_ext_feature_isset(struct wiphy *wiphy,
5094 enum nl80211_ext_feature_index ftidx)
5095{
5096 u8 ft_byte;
5097
5098 ft_byte = wiphy->ext_features[ftidx / 8];
5099 return (ft_byte & BIT(ftidx % 8)) != 0;
5100}
5036 5101
5037/* ethtool helper */ 5102/* ethtool helper */
5038void cfg80211_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info); 5103void cfg80211_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info);
diff --git a/include/net/cfg802154.h b/include/net/cfg802154.h
index 7f713acfa106..eeda67652766 100644
--- a/include/net/cfg802154.h
+++ b/include/net/cfg802154.h
@@ -25,6 +25,7 @@
25#include <net/nl802154.h> 25#include <net/nl802154.h>
26 26
27struct wpan_phy; 27struct wpan_phy;
28struct wpan_phy_cca;
28 29
29struct cfg802154_ops { 30struct cfg802154_ops {
30 struct net_device * (*add_virtual_intf_deprecated)(struct wpan_phy *wpan_phy, 31 struct net_device * (*add_virtual_intf_deprecated)(struct wpan_phy *wpan_phy,
@@ -39,6 +40,8 @@ struct cfg802154_ops {
39 int (*del_virtual_intf)(struct wpan_phy *wpan_phy, 40 int (*del_virtual_intf)(struct wpan_phy *wpan_phy,
40 struct wpan_dev *wpan_dev); 41 struct wpan_dev *wpan_dev);
41 int (*set_channel)(struct wpan_phy *wpan_phy, u8 page, u8 channel); 42 int (*set_channel)(struct wpan_phy *wpan_phy, u8 page, u8 channel);
43 int (*set_cca_mode)(struct wpan_phy *wpan_phy,
44 const struct wpan_phy_cca *cca);
42 int (*set_pan_id)(struct wpan_phy *wpan_phy, 45 int (*set_pan_id)(struct wpan_phy *wpan_phy,
43 struct wpan_dev *wpan_dev, __le16 pan_id); 46 struct wpan_dev *wpan_dev, __le16 pan_id);
44 int (*set_short_addr)(struct wpan_phy *wpan_phy, 47 int (*set_short_addr)(struct wpan_phy *wpan_phy,
@@ -56,6 +59,11 @@ struct cfg802154_ops {
56 struct wpan_dev *wpan_dev, bool mode); 59 struct wpan_dev *wpan_dev, bool mode);
57}; 60};
58 61
62struct wpan_phy_cca {
63 enum nl802154_cca_modes mode;
64 enum nl802154_cca_opts opt;
65};
66
59struct wpan_phy { 67struct wpan_phy {
60 struct mutex pib_lock; 68 struct mutex pib_lock;
61 69
@@ -76,7 +84,7 @@ struct wpan_phy {
76 u8 current_page; 84 u8 current_page;
77 u32 channels_supported[IEEE802154_MAX_PAGE + 1]; 85 u32 channels_supported[IEEE802154_MAX_PAGE + 1];
78 s8 transmit_power; 86 s8 transmit_power;
79 u8 cca_mode; 87 struct wpan_phy_cca cca;
80 88
81 __le64 perm_extended_addr; 89 __le64 perm_extended_addr;
82 90
diff --git a/include/net/genetlink.h b/include/net/genetlink.h
index 6c92415311ca..0574abd3db86 100644
--- a/include/net/genetlink.h
+++ b/include/net/genetlink.h
@@ -211,6 +211,23 @@ static inline struct nlmsghdr *genlmsg_nlhdr(void *user_hdr,
211} 211}
212 212
213/** 213/**
214 * genlmsg_parse - parse attributes of a genetlink message
215 * @nlh: netlink message header
216 * @family: genetlink message family
217 * @tb: destination array with maxtype+1 elements
218 * @maxtype: maximum attribute type to be expected
219 * @policy: validation policy
220 * */
221static inline int genlmsg_parse(const struct nlmsghdr *nlh,
222 const struct genl_family *family,
223 struct nlattr *tb[], int maxtype,
224 const struct nla_policy *policy)
225{
226 return nlmsg_parse(nlh, family->hdrsize + GENL_HDRLEN, tb, maxtype,
227 policy);
228}
229
230/**
214 * genl_dump_check_consistent - check if sequence is consistent and advertise if not 231 * genl_dump_check_consistent - check if sequence is consistent and advertise if not
215 * @cb: netlink callback structure that stores the sequence number 232 * @cb: netlink callback structure that stores the sequence number
216 * @user_hdr: user header as returned from genlmsg_put() 233 * @user_hdr: user header as returned from genlmsg_put()
@@ -250,9 +267,9 @@ static inline void *genlmsg_put_reply(struct sk_buff *skb,
250 * @skb: socket buffer the message is stored in 267 * @skb: socket buffer the message is stored in
251 * @hdr: user specific header 268 * @hdr: user specific header
252 */ 269 */
253static inline int genlmsg_end(struct sk_buff *skb, void *hdr) 270static inline void genlmsg_end(struct sk_buff *skb, void *hdr)
254{ 271{
255 return nlmsg_end(skb, hdr - GENL_HDRLEN - NLMSG_HDRLEN); 272 nlmsg_end(skb, hdr - GENL_HDRLEN - NLMSG_HDRLEN);
256} 273}
257 274
258/** 275/**
diff --git a/include/net/geneve.h b/include/net/geneve.h
index 112132cf8e2e..14fb8d3390b4 100644
--- a/include/net/geneve.h
+++ b/include/net/geneve.h
@@ -68,13 +68,12 @@ struct geneve_sock;
68typedef void (geneve_rcv_t)(struct geneve_sock *gs, struct sk_buff *skb); 68typedef void (geneve_rcv_t)(struct geneve_sock *gs, struct sk_buff *skb);
69 69
70struct geneve_sock { 70struct geneve_sock {
71 struct hlist_node hlist; 71 struct list_head list;
72 geneve_rcv_t *rcv; 72 geneve_rcv_t *rcv;
73 void *rcv_data; 73 void *rcv_data;
74 struct work_struct del_work;
75 struct socket *sock; 74 struct socket *sock;
76 struct rcu_head rcu; 75 struct rcu_head rcu;
77 atomic_t refcnt; 76 int refcnt;
78 struct udp_offload udp_offloads; 77 struct udp_offload udp_offloads;
79}; 78};
80 79
@@ -91,7 +90,7 @@ int geneve_xmit_skb(struct geneve_sock *gs, struct rtable *rt,
91 struct sk_buff *skb, __be32 src, __be32 dst, __u8 tos, 90 struct sk_buff *skb, __be32 src, __be32 dst, __u8 tos,
92 __u8 ttl, __be16 df, __be16 src_port, __be16 dst_port, 91 __u8 ttl, __be16 df, __be16 src_port, __be16 dst_port,
93 __be16 tun_flags, u8 vni[3], u8 opt_len, u8 *opt, 92 __be16 tun_flags, u8 vni[3], u8 opt_len, u8 *opt,
94 bool xnet); 93 bool csum, bool xnet);
95#endif /*ifdef CONFIG_INET */ 94#endif /*ifdef CONFIG_INET */
96 95
97#endif /*ifdef__NET_GENEVE_H */ 96#endif /*ifdef__NET_GENEVE_H */
diff --git a/include/net/gro_cells.h b/include/net/gro_cells.h
index 734d9b5f577a..0f712c0bc0bf 100644
--- a/include/net/gro_cells.h
+++ b/include/net/gro_cells.h
@@ -8,25 +8,23 @@
8struct gro_cell { 8struct gro_cell {
9 struct sk_buff_head napi_skbs; 9 struct sk_buff_head napi_skbs;
10 struct napi_struct napi; 10 struct napi_struct napi;
11} ____cacheline_aligned_in_smp; 11};
12 12
13struct gro_cells { 13struct gro_cells {
14 unsigned int gro_cells_mask; 14 struct gro_cell __percpu *cells;
15 struct gro_cell *cells;
16}; 15};
17 16
18static inline void gro_cells_receive(struct gro_cells *gcells, struct sk_buff *skb) 17static inline void gro_cells_receive(struct gro_cells *gcells, struct sk_buff *skb)
19{ 18{
20 struct gro_cell *cell = gcells->cells; 19 struct gro_cell *cell;
21 struct net_device *dev = skb->dev; 20 struct net_device *dev = skb->dev;
22 21
23 if (!cell || skb_cloned(skb) || !(dev->features & NETIF_F_GRO)) { 22 if (!gcells->cells || skb_cloned(skb) || !(dev->features & NETIF_F_GRO)) {
24 netif_rx(skb); 23 netif_rx(skb);
25 return; 24 return;
26 } 25 }
27 26
28 if (skb_rx_queue_recorded(skb)) 27 cell = this_cpu_ptr(gcells->cells);
29 cell += skb_get_rx_queue(skb) & gcells->gro_cells_mask;
30 28
31 if (skb_queue_len(&cell->napi_skbs) > netdev_max_backlog) { 29 if (skb_queue_len(&cell->napi_skbs) > netdev_max_backlog) {
32 atomic_long_inc(&dev->rx_dropped); 30 atomic_long_inc(&dev->rx_dropped);
@@ -72,15 +70,12 @@ static inline int gro_cells_init(struct gro_cells *gcells, struct net_device *de
72{ 70{
73 int i; 71 int i;
74 72
75 gcells->gro_cells_mask = roundup_pow_of_two(netif_get_num_default_rss_queues()) - 1; 73 gcells->cells = alloc_percpu(struct gro_cell);
76 gcells->cells = kcalloc(gcells->gro_cells_mask + 1,
77 sizeof(struct gro_cell),
78 GFP_KERNEL);
79 if (!gcells->cells) 74 if (!gcells->cells)
80 return -ENOMEM; 75 return -ENOMEM;
81 76
82 for (i = 0; i <= gcells->gro_cells_mask; i++) { 77 for_each_possible_cpu(i) {
83 struct gro_cell *cell = gcells->cells + i; 78 struct gro_cell *cell = per_cpu_ptr(gcells->cells, i);
84 79
85 skb_queue_head_init(&cell->napi_skbs); 80 skb_queue_head_init(&cell->napi_skbs);
86 netif_napi_add(dev, &cell->napi, gro_cell_poll, 64); 81 netif_napi_add(dev, &cell->napi, gro_cell_poll, 64);
@@ -91,16 +86,16 @@ static inline int gro_cells_init(struct gro_cells *gcells, struct net_device *de
91 86
92static inline void gro_cells_destroy(struct gro_cells *gcells) 87static inline void gro_cells_destroy(struct gro_cells *gcells)
93{ 88{
94 struct gro_cell *cell = gcells->cells;
95 int i; 89 int i;
96 90
97 if (!cell) 91 if (!gcells->cells)
98 return; 92 return;
99 for (i = 0; i <= gcells->gro_cells_mask; i++,cell++) { 93 for_each_possible_cpu(i) {
94 struct gro_cell *cell = per_cpu_ptr(gcells->cells, i);
100 netif_napi_del(&cell->napi); 95 netif_napi_del(&cell->napi);
101 skb_queue_purge(&cell->napi_skbs); 96 skb_queue_purge(&cell->napi_skbs);
102 } 97 }
103 kfree(gcells->cells); 98 free_percpu(gcells->cells);
104 gcells->cells = NULL; 99 gcells->cells = NULL;
105} 100}
106 101
diff --git a/include/net/ieee802154_netdev.h b/include/net/ieee802154_netdev.h
index 83bb8a73d23c..94a297052442 100644
--- a/include/net/ieee802154_netdev.h
+++ b/include/net/ieee802154_netdev.h
@@ -28,6 +28,8 @@
28#include <linux/skbuff.h> 28#include <linux/skbuff.h>
29#include <linux/ieee802154.h> 29#include <linux/ieee802154.h>
30 30
31#include <net/cfg802154.h>
32
31struct ieee802154_sechdr { 33struct ieee802154_sechdr {
32#if defined(__LITTLE_ENDIAN_BITFIELD) 34#if defined(__LITTLE_ENDIAN_BITFIELD)
33 u8 level:3, 35 u8 level:3,
@@ -337,7 +339,7 @@ struct ieee802154_mac_params {
337 s8 frame_retries; 339 s8 frame_retries;
338 340
339 bool lbt; 341 bool lbt;
340 u8 cca_mode; 342 struct wpan_phy_cca cca;
341 s32 cca_ed_level; 343 s32 cca_ed_level;
342}; 344};
343 345
diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h
index 848e85cb5c61..5976bdecf58b 100644
--- a/include/net/inet_connection_sock.h
+++ b/include/net/inet_connection_sock.h
@@ -98,7 +98,8 @@ struct inet_connection_sock {
98 const struct tcp_congestion_ops *icsk_ca_ops; 98 const struct tcp_congestion_ops *icsk_ca_ops;
99 const struct inet_connection_sock_af_ops *icsk_af_ops; 99 const struct inet_connection_sock_af_ops *icsk_af_ops;
100 unsigned int (*icsk_sync_mss)(struct sock *sk, u32 pmtu); 100 unsigned int (*icsk_sync_mss)(struct sock *sk, u32 pmtu);
101 __u8 icsk_ca_state; 101 __u8 icsk_ca_state:7,
102 icsk_ca_dst_locked:1;
102 __u8 icsk_retransmits; 103 __u8 icsk_retransmits;
103 __u8 icsk_pending; 104 __u8 icsk_pending;
104 __u8 icsk_backoff; 105 __u8 icsk_backoff;
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h
index a829b77523cf..eb16c7beed1e 100644
--- a/include/net/inet_sock.h
+++ b/include/net/inet_sock.h
@@ -16,7 +16,7 @@
16#ifndef _INET_SOCK_H 16#ifndef _INET_SOCK_H
17#define _INET_SOCK_H 17#define _INET_SOCK_H
18 18
19 19#include <linux/bitops.h>
20#include <linux/kmemcheck.h> 20#include <linux/kmemcheck.h>
21#include <linux/string.h> 21#include <linux/string.h>
22#include <linux/types.h> 22#include <linux/types.h>
@@ -184,6 +184,7 @@ struct inet_sock {
184 mc_all:1, 184 mc_all:1,
185 nodefrag:1; 185 nodefrag:1;
186 __u8 rcv_tos; 186 __u8 rcv_tos;
187 __u8 convert_csum;
187 int uc_index; 188 int uc_index;
188 int mc_index; 189 int mc_index;
189 __be32 mc_addr; 190 __be32 mc_addr;
@@ -194,6 +195,16 @@ struct inet_sock {
194#define IPCORK_OPT 1 /* ip-options has been held in ipcork.opt */ 195#define IPCORK_OPT 1 /* ip-options has been held in ipcork.opt */
195#define IPCORK_ALLFRAG 2 /* always fragment (for ipv6 for now) */ 196#define IPCORK_ALLFRAG 2 /* always fragment (for ipv6 for now) */
196 197
198/* cmsg flags for inet */
199#define IP_CMSG_PKTINFO BIT(0)
200#define IP_CMSG_TTL BIT(1)
201#define IP_CMSG_TOS BIT(2)
202#define IP_CMSG_RECVOPTS BIT(3)
203#define IP_CMSG_RETOPTS BIT(4)
204#define IP_CMSG_PASSSEC BIT(5)
205#define IP_CMSG_ORIGDSTADDR BIT(6)
206#define IP_CMSG_CHECKSUM BIT(7)
207
197static inline struct inet_sock *inet_sk(const struct sock *sk) 208static inline struct inet_sock *inet_sk(const struct sock *sk)
198{ 209{
199 return (struct inet_sock *)sk; 210 return (struct inet_sock *)sk;
@@ -250,4 +261,20 @@ static inline __u8 inet_sk_flowi_flags(const struct sock *sk)
250 return flags; 261 return flags;
251} 262}
252 263
264static inline void inet_inc_convert_csum(struct sock *sk)
265{
266 inet_sk(sk)->convert_csum++;
267}
268
269static inline void inet_dec_convert_csum(struct sock *sk)
270{
271 if (inet_sk(sk)->convert_csum > 0)
272 inet_sk(sk)->convert_csum--;
273}
274
275static inline bool inet_get_convert_csum(struct sock *sk)
276{
277 return !!inet_sk(sk)->convert_csum;
278}
279
253#endif /* _INET_SOCK_H */ 280#endif /* _INET_SOCK_H */
diff --git a/include/net/ip.h b/include/net/ip.h
index 09cf5aebb283..025c61c0dffb 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -538,7 +538,7 @@ int ip_options_rcv_srr(struct sk_buff *skb);
538 */ 538 */
539 539
540void ipv4_pktinfo_prepare(const struct sock *sk, struct sk_buff *skb); 540void ipv4_pktinfo_prepare(const struct sock *sk, struct sk_buff *skb);
541void ip_cmsg_recv(struct msghdr *msg, struct sk_buff *skb); 541void ip_cmsg_recv_offset(struct msghdr *msg, struct sk_buff *skb, int offset);
542int ip_cmsg_send(struct net *net, struct msghdr *msg, 542int ip_cmsg_send(struct net *net, struct msghdr *msg,
543 struct ipcm_cookie *ipc, bool allow_ipv6); 543 struct ipcm_cookie *ipc, bool allow_ipv6);
544int ip_setsockopt(struct sock *sk, int level, int optname, char __user *optval, 544int ip_setsockopt(struct sock *sk, int level, int optname, char __user *optval,
@@ -558,6 +558,11 @@ void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err, __be16 port,
558void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport, 558void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport,
559 u32 info); 559 u32 info);
560 560
561static inline void ip_cmsg_recv(struct msghdr *msg, struct sk_buff *skb)
562{
563 ip_cmsg_recv_offset(msg, skb, 0);
564}
565
561bool icmp_global_allow(void); 566bool icmp_global_allow(void);
562extern int sysctl_icmp_msgs_per_sec; 567extern int sysctl_icmp_msgs_per_sec;
563extern int sysctl_icmp_msgs_burst; 568extern int sysctl_icmp_msgs_burst;
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h
index 8eea35d32a75..20e80fa7bbdd 100644
--- a/include/net/ip6_fib.h
+++ b/include/net/ip6_fib.h
@@ -74,6 +74,11 @@ struct fib6_node {
74#define FIB6_SUBTREE(fn) ((fn)->subtree) 74#define FIB6_SUBTREE(fn) ((fn)->subtree)
75#endif 75#endif
76 76
77struct mx6_config {
78 const u32 *mx;
79 DECLARE_BITMAP(mx_valid, RTAX_MAX);
80};
81
77/* 82/*
78 * routing information 83 * routing information
79 * 84 *
@@ -291,9 +296,8 @@ struct fib6_node *fib6_locate(struct fib6_node *root,
291void fib6_clean_all(struct net *net, int (*func)(struct rt6_info *, void *arg), 296void fib6_clean_all(struct net *net, int (*func)(struct rt6_info *, void *arg),
292 void *arg); 297 void *arg);
293 298
294int fib6_add(struct fib6_node *root, struct rt6_info *rt, struct nl_info *info, 299int fib6_add(struct fib6_node *root, struct rt6_info *rt,
295 struct nlattr *mx, int mx_len); 300 struct nl_info *info, struct mx6_config *mxc);
296
297int fib6_del(struct rt6_info *rt, struct nl_info *info); 301int fib6_del(struct rt6_info *rt, struct nl_info *info);
298 302
299void inet6_rt_notify(int event, struct rt6_info *rt, struct nl_info *info); 303void inet6_rt_notify(int event, struct rt6_info *rt, struct nl_info *info);
diff --git a/include/net/ip6_tunnel.h b/include/net/ip6_tunnel.h
index 9326c41c2d7f..76c091b53dae 100644
--- a/include/net/ip6_tunnel.h
+++ b/include/net/ip6_tunnel.h
@@ -70,6 +70,7 @@ int ip6_tnl_xmit_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
70__u16 ip6_tnl_parse_tlv_enc_lim(struct sk_buff *skb, __u8 *raw); 70__u16 ip6_tnl_parse_tlv_enc_lim(struct sk_buff *skb, __u8 *raw);
71__u32 ip6_tnl_get_cap(struct ip6_tnl *t, const struct in6_addr *laddr, 71__u32 ip6_tnl_get_cap(struct ip6_tnl *t, const struct in6_addr *laddr,
72 const struct in6_addr *raddr); 72 const struct in6_addr *raddr);
73struct net *ip6_tnl_get_link_net(const struct net_device *dev);
73 74
74static inline void ip6tunnel_xmit(struct sk_buff *skb, struct net_device *dev) 75static inline void ip6tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
75{ 76{
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
index 09a819ee2151..5bd120e4bc0a 100644
--- a/include/net/ip_fib.h
+++ b/include/net/ip_fib.h
@@ -222,16 +222,19 @@ static inline struct fib_table *fib_new_table(struct net *net, u32 id)
222static inline int fib_lookup(struct net *net, const struct flowi4 *flp, 222static inline int fib_lookup(struct net *net, const struct flowi4 *flp,
223 struct fib_result *res) 223 struct fib_result *res)
224{ 224{
225 struct fib_table *table; 225 int err = -ENETUNREACH;
226
227 rcu_read_lock();
228
229 if (!fib_table_lookup(fib_get_table(net, RT_TABLE_LOCAL), flp, res,
230 FIB_LOOKUP_NOREF) ||
231 !fib_table_lookup(fib_get_table(net, RT_TABLE_MAIN), flp, res,
232 FIB_LOOKUP_NOREF))
233 err = 0;
226 234
227 table = fib_get_table(net, RT_TABLE_LOCAL); 235 rcu_read_unlock();
228 if (!fib_table_lookup(table, flp, res, FIB_LOOKUP_NOREF))
229 return 0;
230 236
231 table = fib_get_table(net, RT_TABLE_MAIN); 237 return err;
232 if (!fib_table_lookup(table, flp, res, FIB_LOOKUP_NOREF))
233 return 0;
234 return -ENETUNREACH;
235} 238}
236 239
237#else /* CONFIG_IP_MULTIPLE_TABLES */ 240#else /* CONFIG_IP_MULTIPLE_TABLES */
@@ -247,20 +250,25 @@ static inline int fib_lookup(struct net *net, struct flowi4 *flp,
247 struct fib_result *res) 250 struct fib_result *res)
248{ 251{
249 if (!net->ipv4.fib_has_custom_rules) { 252 if (!net->ipv4.fib_has_custom_rules) {
253 int err = -ENETUNREACH;
254
255 rcu_read_lock();
256
250 res->tclassid = 0; 257 res->tclassid = 0;
251 if (net->ipv4.fib_local && 258 if ((net->ipv4.fib_local &&
252 !fib_table_lookup(net->ipv4.fib_local, flp, res, 259 !fib_table_lookup(net->ipv4.fib_local, flp, res,
253 FIB_LOOKUP_NOREF)) 260 FIB_LOOKUP_NOREF)) ||
254 return 0; 261 (net->ipv4.fib_main &&
255 if (net->ipv4.fib_main && 262 !fib_table_lookup(net->ipv4.fib_main, flp, res,
256 !fib_table_lookup(net->ipv4.fib_main, flp, res, 263 FIB_LOOKUP_NOREF)) ||
257 FIB_LOOKUP_NOREF)) 264 (net->ipv4.fib_default &&
258 return 0; 265 !fib_table_lookup(net->ipv4.fib_default, flp, res,
259 if (net->ipv4.fib_default && 266 FIB_LOOKUP_NOREF)))
260 !fib_table_lookup(net->ipv4.fib_default, flp, res, 267 err = 0;
261 FIB_LOOKUP_NOREF)) 268
262 return 0; 269 rcu_read_unlock();
263 return -ENETUNREACH; 270
271 return err;
264 } 272 }
265 return __fib_lookup(net, flp, res); 273 return __fib_lookup(net, flp, res);
266} 274}
diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h
index 25a59eb388a6..2c47061a6954 100644
--- a/include/net/ip_tunnels.h
+++ b/include/net/ip_tunnels.h
@@ -97,7 +97,10 @@ struct ip_tunnel {
97#define TUNNEL_DONT_FRAGMENT __cpu_to_be16(0x0100) 97#define TUNNEL_DONT_FRAGMENT __cpu_to_be16(0x0100)
98#define TUNNEL_OAM __cpu_to_be16(0x0200) 98#define TUNNEL_OAM __cpu_to_be16(0x0200)
99#define TUNNEL_CRIT_OPT __cpu_to_be16(0x0400) 99#define TUNNEL_CRIT_OPT __cpu_to_be16(0x0400)
100#define TUNNEL_OPTIONS_PRESENT __cpu_to_be16(0x0800) 100#define TUNNEL_GENEVE_OPT __cpu_to_be16(0x0800)
101#define TUNNEL_VXLAN_OPT __cpu_to_be16(0x1000)
102
103#define TUNNEL_OPTIONS_PRESENT (TUNNEL_GENEVE_OPT | TUNNEL_VXLAN_OPT)
101 104
102struct tnl_ptk_info { 105struct tnl_ptk_info {
103 __be16 flags; 106 __be16 flags;
@@ -138,6 +141,7 @@ int ip_tunnel_encap_del_ops(const struct ip_tunnel_encap_ops *op,
138int ip_tunnel_init(struct net_device *dev); 141int ip_tunnel_init(struct net_device *dev);
139void ip_tunnel_uninit(struct net_device *dev); 142void ip_tunnel_uninit(struct net_device *dev);
140void ip_tunnel_dellink(struct net_device *dev, struct list_head *head); 143void ip_tunnel_dellink(struct net_device *dev, struct list_head *head);
144struct net *ip_tunnel_get_link_net(const struct net_device *dev);
141int ip_tunnel_init_net(struct net *net, int ip_tnl_net_id, 145int ip_tunnel_init_net(struct net *net, int ip_tnl_net_id,
142 struct rtnl_link_ops *ops, char *devname); 146 struct rtnl_link_ops *ops, char *devname);
143 147
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index 6e416f6d3e3c..4c9fe224d73b 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -671,8 +671,6 @@ static inline int ipv6_addr_diff(const struct in6_addr *a1, const struct in6_add
671 return __ipv6_addr_diff(a1, a2, sizeof(struct in6_addr)); 671 return __ipv6_addr_diff(a1, a2, sizeof(struct in6_addr));
672} 672}
673 673
674u32 __ipv6_select_ident(u32 hashrnd, struct in6_addr *dst,
675 struct in6_addr *src);
676void ipv6_select_ident(struct frag_hdr *fhdr, struct rt6_info *rt); 674void ipv6_select_ident(struct frag_hdr *fhdr, struct rt6_info *rt);
677void ipv6_proxy_select_ident(struct sk_buff *skb); 675void ipv6_proxy_select_ident(struct sk_buff *skb);
678 676
@@ -791,6 +789,25 @@ int ip6_push_pending_frames(struct sock *sk);
791 789
792void ip6_flush_pending_frames(struct sock *sk); 790void ip6_flush_pending_frames(struct sock *sk);
793 791
792int ip6_send_skb(struct sk_buff *skb);
793
794struct sk_buff *__ip6_make_skb(struct sock *sk, struct sk_buff_head *queue,
795 struct inet_cork_full *cork,
796 struct inet6_cork *v6_cork);
797struct sk_buff *ip6_make_skb(struct sock *sk,
798 int getfrag(void *from, char *to, int offset,
799 int len, int odd, struct sk_buff *skb),
800 void *from, int length, int transhdrlen,
801 int hlimit, int tclass, struct ipv6_txoptions *opt,
802 struct flowi6 *fl6, struct rt6_info *rt,
803 unsigned int flags, int dontfrag);
804
805static inline struct sk_buff *ip6_finish_skb(struct sock *sk)
806{
807 return __ip6_make_skb(sk, &sk->sk_write_queue, &inet_sk(sk)->cork,
808 &inet6_sk(sk)->cork);
809}
810
794int ip6_dst_lookup(struct sock *sk, struct dst_entry **dst, struct flowi6 *fl6); 811int ip6_dst_lookup(struct sock *sk, struct dst_entry **dst, struct flowi6 *fl6);
795struct dst_entry *ip6_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, 812struct dst_entry *ip6_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
796 const struct in6_addr *final_dst); 813 const struct in6_addr *final_dst);
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 29c7be8808d5..d52914b75331 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -376,6 +376,12 @@ enum ieee80211_rssi_event {
376 * @ssid_len: Length of SSID given in @ssid. 376 * @ssid_len: Length of SSID given in @ssid.
377 * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode. 377 * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode.
378 * @txpower: TX power in dBm 378 * @txpower: TX power in dBm
379 * @txpower_type: TX power adjustment used to control per packet Transmit
380 * Power Control (TPC) in lower driver for the current vif. In particular
381 * TPC is enabled if value passed in %txpower_type is
382 * NL80211_TX_POWER_LIMITED (allow using less than specified from
383 * userspace), whereas TPC is disabled if %txpower_type is set to
384 * NL80211_TX_POWER_FIXED (use value configured from userspace)
379 * @p2p_noa_attr: P2P NoA attribute for P2P powersave 385 * @p2p_noa_attr: P2P NoA attribute for P2P powersave
380 */ 386 */
381struct ieee80211_bss_conf { 387struct ieee80211_bss_conf {
@@ -411,6 +417,7 @@ struct ieee80211_bss_conf {
411 size_t ssid_len; 417 size_t ssid_len;
412 bool hidden_ssid; 418 bool hidden_ssid;
413 int txpower; 419 int txpower;
420 enum nl80211_tx_power_setting txpower_type;
414 struct ieee80211_p2p_noa_attr p2p_noa_attr; 421 struct ieee80211_p2p_noa_attr p2p_noa_attr;
415}; 422};
416 423
@@ -505,8 +512,11 @@ struct ieee80211_bss_conf {
505 * @IEEE80211_TX_CTL_DONTFRAG: Don't fragment this packet even if it 512 * @IEEE80211_TX_CTL_DONTFRAG: Don't fragment this packet even if it
506 * would be fragmented by size (this is optional, only used for 513 * would be fragmented by size (this is optional, only used for
507 * monitor injection). 514 * monitor injection).
508 * @IEEE80211_TX_CTL_PS_RESPONSE: This frame is a response to a poll 515 * @IEEE80211_TX_STAT_NOACK_TRANSMITTED: A frame that was marked with
509 * frame (PS-Poll or uAPSD). 516 * IEEE80211_TX_CTL_NO_ACK has been successfully transmitted without
517 * any errors (like issues specific to the driver/HW).
518 * This flag must not be set for frames that don't request no-ack
519 * behaviour with IEEE80211_TX_CTL_NO_ACK.
510 * 520 *
511 * Note: If you have to add new flags to the enumeration, then don't 521 * Note: If you have to add new flags to the enumeration, then don't
512 * forget to update %IEEE80211_TX_TEMPORARY_FLAGS when necessary. 522 * forget to update %IEEE80211_TX_TEMPORARY_FLAGS when necessary.
@@ -542,7 +552,7 @@ enum mac80211_tx_info_flags {
542 IEEE80211_TX_STATUS_EOSP = BIT(28), 552 IEEE80211_TX_STATUS_EOSP = BIT(28),
543 IEEE80211_TX_CTL_USE_MINRATE = BIT(29), 553 IEEE80211_TX_CTL_USE_MINRATE = BIT(29),
544 IEEE80211_TX_CTL_DONTFRAG = BIT(30), 554 IEEE80211_TX_CTL_DONTFRAG = BIT(30),
545 IEEE80211_TX_CTL_PS_RESPONSE = BIT(31), 555 IEEE80211_TX_STAT_NOACK_TRANSMITTED = BIT(31),
546}; 556};
547 557
548#define IEEE80211_TX_CTL_STBC_SHIFT 23 558#define IEEE80211_TX_CTL_STBC_SHIFT 23
@@ -552,11 +562,14 @@ enum mac80211_tx_info_flags {
552 * 562 *
553 * @IEEE80211_TX_CTRL_PORT_CTRL_PROTO: this frame is a port control 563 * @IEEE80211_TX_CTRL_PORT_CTRL_PROTO: this frame is a port control
554 * protocol frame (e.g. EAP) 564 * protocol frame (e.g. EAP)
565 * @IEEE80211_TX_CTRL_PS_RESPONSE: This frame is a response to a poll
566 * frame (PS-Poll or uAPSD).
555 * 567 *
556 * These flags are used in tx_info->control.flags. 568 * These flags are used in tx_info->control.flags.
557 */ 569 */
558enum mac80211_tx_control_flags { 570enum mac80211_tx_control_flags {
559 IEEE80211_TX_CTRL_PORT_CTRL_PROTO = BIT(0), 571 IEEE80211_TX_CTRL_PORT_CTRL_PROTO = BIT(0),
572 IEEE80211_TX_CTRL_PS_RESPONSE = BIT(1),
560}; 573};
561 574
562/* 575/*
@@ -925,15 +938,13 @@ enum mac80211_rx_flags {
925 * These flags are used with the @vht_flag member of 938 * These flags are used with the @vht_flag member of
926 * &struct ieee80211_rx_status. 939 * &struct ieee80211_rx_status.
927 * @RX_VHT_FLAG_80MHZ: 80 MHz was used 940 * @RX_VHT_FLAG_80MHZ: 80 MHz was used
928 * @RX_VHT_FLAG_80P80MHZ: 80+80 MHz was used
929 * @RX_VHT_FLAG_160MHZ: 160 MHz was used 941 * @RX_VHT_FLAG_160MHZ: 160 MHz was used
930 * @RX_VHT_FLAG_BF: packet was beamformed 942 * @RX_VHT_FLAG_BF: packet was beamformed
931 */ 943 */
932enum mac80211_rx_vht_flags { 944enum mac80211_rx_vht_flags {
933 RX_VHT_FLAG_80MHZ = BIT(0), 945 RX_VHT_FLAG_80MHZ = BIT(0),
934 RX_VHT_FLAG_80P80MHZ = BIT(1), 946 RX_VHT_FLAG_160MHZ = BIT(1),
935 RX_VHT_FLAG_160MHZ = BIT(2), 947 RX_VHT_FLAG_BF = BIT(2),
936 RX_VHT_FLAG_BF = BIT(3),
937}; 948};
938 949
939/** 950/**
@@ -1181,10 +1192,15 @@ struct ieee80211_channel_switch {
1181 * monitoring on this virtual interface -- i.e. it can monitor 1192 * monitoring on this virtual interface -- i.e. it can monitor
1182 * connection quality related parameters, such as the RSSI level and 1193 * connection quality related parameters, such as the RSSI level and
1183 * provide notifications if configured trigger levels are reached. 1194 * provide notifications if configured trigger levels are reached.
1195 * @IEEE80211_VIF_SUPPORTS_UAPSD: The device can do U-APSD for this
1196 * interface. This flag should be set during interface addition,
1197 * but may be set/cleared as late as authentication to an AP. It is
1198 * only valid for managed/station mode interfaces.
1184 */ 1199 */
1185enum ieee80211_vif_flags { 1200enum ieee80211_vif_flags {
1186 IEEE80211_VIF_BEACON_FILTER = BIT(0), 1201 IEEE80211_VIF_BEACON_FILTER = BIT(0),
1187 IEEE80211_VIF_SUPPORTS_CQM_RSSI = BIT(1), 1202 IEEE80211_VIF_SUPPORTS_CQM_RSSI = BIT(1),
1203 IEEE80211_VIF_SUPPORTS_UAPSD = BIT(2),
1188}; 1204};
1189 1205
1190/** 1206/**
@@ -1270,19 +1286,22 @@ struct ieee80211_vif *wdev_to_ieee80211_vif(struct wireless_dev *wdev);
1270 * 1286 *
1271 * @IEEE80211_KEY_FLAG_GENERATE_IV: This flag should be set by the 1287 * @IEEE80211_KEY_FLAG_GENERATE_IV: This flag should be set by the
1272 * driver to indicate that it requires IV generation for this 1288 * driver to indicate that it requires IV generation for this
1273 * particular key. 1289 * particular key. Setting this flag does not necessarily mean that SKBs
1290 * will have sufficient tailroom for ICV or MIC.
1274 * @IEEE80211_KEY_FLAG_GENERATE_MMIC: This flag should be set by 1291 * @IEEE80211_KEY_FLAG_GENERATE_MMIC: This flag should be set by
1275 * the driver for a TKIP key if it requires Michael MIC 1292 * the driver for a TKIP key if it requires Michael MIC
1276 * generation in software. 1293 * generation in software.
1277 * @IEEE80211_KEY_FLAG_PAIRWISE: Set by mac80211, this flag indicates 1294 * @IEEE80211_KEY_FLAG_PAIRWISE: Set by mac80211, this flag indicates
1278 * that the key is pairwise rather then a shared key. 1295 * that the key is pairwise rather then a shared key.
1279 * @IEEE80211_KEY_FLAG_SW_MGMT_TX: This flag should be set by the driver for a 1296 * @IEEE80211_KEY_FLAG_SW_MGMT_TX: This flag should be set by the driver for a
1280 * CCMP key if it requires CCMP encryption of management frames (MFP) to 1297 * CCMP/GCMP key if it requires CCMP/GCMP encryption of management frames
1281 * be done in software. 1298 * (MFP) to be done in software.
1282 * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver 1299 * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver
1283 * if space should be prepared for the IV, but the IV 1300 * if space should be prepared for the IV, but the IV
1284 * itself should not be generated. Do not set together with 1301 * itself should not be generated. Do not set together with
1285 * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key. 1302 * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key. Setting this flag does
1303 * not necessarily mean that SKBs will have sufficient tailroom for ICV or
1304 * MIC.
1286 * @IEEE80211_KEY_FLAG_RX_MGMT: This key will be used to decrypt received 1305 * @IEEE80211_KEY_FLAG_RX_MGMT: This key will be used to decrypt received
1287 * management frames. The flag can help drivers that have a hardware 1306 * management frames. The flag can help drivers that have a hardware
1288 * crypto implementation that doesn't deal with management frames 1307 * crypto implementation that doesn't deal with management frames
@@ -1291,8 +1310,11 @@ struct ieee80211_vif *wdev_to_ieee80211_vif(struct wireless_dev *wdev);
1291 * RX, if your crypto engine can't deal with TX you can also set the 1310 * RX, if your crypto engine can't deal with TX you can also set the
1292 * %IEEE80211_KEY_FLAG_SW_MGMT_TX flag to encrypt such frames in SW. 1311 * %IEEE80211_KEY_FLAG_SW_MGMT_TX flag to encrypt such frames in SW.
1293 * @IEEE80211_KEY_FLAG_GENERATE_IV_MGMT: This flag should be set by the 1312 * @IEEE80211_KEY_FLAG_GENERATE_IV_MGMT: This flag should be set by the
1294 * driver for a CCMP key to indicate that is requires IV generation 1313 * driver for a CCMP/GCMP key to indicate that is requires IV generation
1295 * only for managment frames (MFP). 1314 * only for managment frames (MFP).
1315 * @IEEE80211_KEY_FLAG_RESERVE_TAILROOM: This flag should be set by the
1316 * driver for a key to indicate that sufficient tailroom must always
1317 * be reserved for ICV or MIC, even when HW encryption is enabled.
1296 */ 1318 */
1297enum ieee80211_key_flags { 1319enum ieee80211_key_flags {
1298 IEEE80211_KEY_FLAG_GENERATE_IV_MGMT = BIT(0), 1320 IEEE80211_KEY_FLAG_GENERATE_IV_MGMT = BIT(0),
@@ -1302,6 +1324,7 @@ enum ieee80211_key_flags {
1302 IEEE80211_KEY_FLAG_SW_MGMT_TX = BIT(4), 1324 IEEE80211_KEY_FLAG_SW_MGMT_TX = BIT(4),
1303 IEEE80211_KEY_FLAG_PUT_IV_SPACE = BIT(5), 1325 IEEE80211_KEY_FLAG_PUT_IV_SPACE = BIT(5),
1304 IEEE80211_KEY_FLAG_RX_MGMT = BIT(6), 1326 IEEE80211_KEY_FLAG_RX_MGMT = BIT(6),
1327 IEEE80211_KEY_FLAG_RESERVE_TAILROOM = BIT(7),
1305}; 1328};
1306 1329
1307/** 1330/**
@@ -1580,11 +1603,6 @@ struct ieee80211_tx_control {
1580 * @IEEE80211_HW_MFP_CAPABLE: 1603 * @IEEE80211_HW_MFP_CAPABLE:
1581 * Hardware supports management frame protection (MFP, IEEE 802.11w). 1604 * Hardware supports management frame protection (MFP, IEEE 802.11w).
1582 * 1605 *
1583 * @IEEE80211_HW_SUPPORTS_UAPSD:
1584 * Hardware supports Unscheduled Automatic Power Save Delivery
1585 * (U-APSD) in managed mode. The mode is configured with
1586 * conf_tx() operation.
1587 *
1588 * @IEEE80211_HW_REPORTS_TX_ACK_STATUS: 1606 * @IEEE80211_HW_REPORTS_TX_ACK_STATUS:
1589 * Hardware can provide ack status reports of Tx frames to 1607 * Hardware can provide ack status reports of Tx frames to
1590 * the stack. 1608 * the stack.
@@ -1623,6 +1641,12 @@ struct ieee80211_tx_control {
1623 * be created. It is expected user-space will create vifs as 1641 * be created. It is expected user-space will create vifs as
1624 * desired (and thus have them named as desired). 1642 * desired (and thus have them named as desired).
1625 * 1643 *
1644 * @IEEE80211_HW_SW_CRYPTO_CONTROL: The driver wants to control which of the
1645 * crypto algorithms can be done in software - so don't automatically
1646 * try to fall back to it if hardware crypto fails, but do so only if
1647 * the driver returns 1. This also forces the driver to advertise its
1648 * supported cipher suites.
1649 *
1626 * @IEEE80211_HW_QUEUE_CONTROL: The driver wants to control per-interface 1650 * @IEEE80211_HW_QUEUE_CONTROL: The driver wants to control per-interface
1627 * queue mapping in order to use different queues (not just one per AC) 1651 * queue mapping in order to use different queues (not just one per AC)
1628 * for different virtual interfaces. See the doc section on HW queue 1652 * for different virtual interfaces. See the doc section on HW queue
@@ -1670,8 +1694,8 @@ enum ieee80211_hw_flags {
1670 IEEE80211_HW_MFP_CAPABLE = 1<<13, 1694 IEEE80211_HW_MFP_CAPABLE = 1<<13,
1671 IEEE80211_HW_WANT_MONITOR_VIF = 1<<14, 1695 IEEE80211_HW_WANT_MONITOR_VIF = 1<<14,
1672 IEEE80211_HW_NO_AUTO_VIF = 1<<15, 1696 IEEE80211_HW_NO_AUTO_VIF = 1<<15,
1673 /* free slot */ 1697 IEEE80211_HW_SW_CRYPTO_CONTROL = 1<<16,
1674 IEEE80211_HW_SUPPORTS_UAPSD = 1<<17, 1698 /* free slots */
1675 IEEE80211_HW_REPORTS_TX_ACK_STATUS = 1<<18, 1699 IEEE80211_HW_REPORTS_TX_ACK_STATUS = 1<<18,
1676 IEEE80211_HW_CONNECTION_MONITOR = 1<<19, 1700 IEEE80211_HW_CONNECTION_MONITOR = 1<<19,
1677 IEEE80211_HW_QUEUE_CONTROL = 1<<20, 1701 IEEE80211_HW_QUEUE_CONTROL = 1<<20,
@@ -1945,6 +1969,11 @@ void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb);
1945 * added; if you return 0 then hw_key_idx must be assigned to the 1969 * added; if you return 0 then hw_key_idx must be assigned to the
1946 * hardware key index, you are free to use the full u8 range. 1970 * hardware key index, you are free to use the full u8 range.
1947 * 1971 *
1972 * Note that in the case that the @IEEE80211_HW_SW_CRYPTO_CONTROL flag is
1973 * set, mac80211 will not automatically fall back to software crypto if
1974 * enabling hardware crypto failed. The set_key() call may also return the
1975 * value 1 to permit this specific key/algorithm to be done in software.
1976 *
1948 * When the cmd is %DISABLE_KEY then it must succeed. 1977 * When the cmd is %DISABLE_KEY then it must succeed.
1949 * 1978 *
1950 * Note that it is permissible to not decrypt a frame even if a key 1979 * Note that it is permissible to not decrypt a frame even if a key
@@ -2023,7 +2052,7 @@ void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb);
2023 * enabled whenever user has enabled powersave. 2052 * enabled whenever user has enabled powersave.
2024 * 2053 *
2025 * Driver informs U-APSD client support by enabling 2054 * Driver informs U-APSD client support by enabling
2026 * %IEEE80211_HW_SUPPORTS_UAPSD flag. The mode is configured through the 2055 * %IEEE80211_VIF_SUPPORTS_UAPSD flag. The mode is configured through the
2027 * uapsd parameter in conf_tx() operation. Hardware needs to send the QoS 2056 * uapsd parameter in conf_tx() operation. Hardware needs to send the QoS
2028 * Nullfunc frames and stay awake until the service period has ended. To 2057 * Nullfunc frames and stay awake until the service period has ended. To
2029 * utilize U-APSD, dynamic powersave is disabled for voip AC and all frames 2058 * utilize U-APSD, dynamic powersave is disabled for voip AC and all frames
@@ -2696,6 +2725,14 @@ enum ieee80211_reconfig_type {
2696 * is only used if the configured rate control algorithm actually uses 2725 * is only used if the configured rate control algorithm actually uses
2697 * the new rate table API, and is therefore optional. Must be atomic. 2726 * the new rate table API, and is therefore optional. Must be atomic.
2698 * 2727 *
2728 * @sta_statistics: Get statistics for this station. For example with beacon
2729 * filtering, the statistics kept by mac80211 might not be accurate, so
2730 * let the driver pre-fill the statistics. The driver can fill most of
2731 * the values (indicating which by setting the filled bitmap), but not
2732 * all of them make sense - see the source for which ones are possible.
2733 * Statistics that the driver doesn't fill will be filled by mac80211.
2734 * The callback can sleep.
2735 *
2699 * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max), 2736 * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
2700 * bursting) for a hardware TX queue. 2737 * bursting) for a hardware TX queue.
2701 * Returns a negative error code on failure. 2738 * Returns a negative error code on failure.
@@ -2856,9 +2893,6 @@ enum ieee80211_reconfig_type {
2856 * @get_et_strings: Ethtool API to get a set of strings to describe stats 2893 * @get_et_strings: Ethtool API to get a set of strings to describe stats
2857 * and perhaps other supported types of ethtool data-sets. 2894 * and perhaps other supported types of ethtool data-sets.
2858 * 2895 *
2859 * @get_rssi: Get current signal strength in dBm, the function is optional
2860 * and can sleep.
2861 *
2862 * @mgd_prepare_tx: Prepare for transmitting a management frame for association 2896 * @mgd_prepare_tx: Prepare for transmitting a management frame for association
2863 * before associated. In multi-channel scenarios, a virtual interface is 2897 * before associated. In multi-channel scenarios, a virtual interface is
2864 * bound to a channel before it is associated, but as it isn't associated 2898 * bound to a channel before it is associated, but as it isn't associated
@@ -3059,6 +3093,10 @@ struct ieee80211_ops {
3059 void (*sta_rate_tbl_update)(struct ieee80211_hw *hw, 3093 void (*sta_rate_tbl_update)(struct ieee80211_hw *hw,
3060 struct ieee80211_vif *vif, 3094 struct ieee80211_vif *vif,
3061 struct ieee80211_sta *sta); 3095 struct ieee80211_sta *sta);
3096 void (*sta_statistics)(struct ieee80211_hw *hw,
3097 struct ieee80211_vif *vif,
3098 struct ieee80211_sta *sta,
3099 struct station_info *sinfo);
3062 int (*conf_tx)(struct ieee80211_hw *hw, 3100 int (*conf_tx)(struct ieee80211_hw *hw,
3063 struct ieee80211_vif *vif, u16 ac, 3101 struct ieee80211_vif *vif, u16 ac,
3064 const struct ieee80211_tx_queue_params *params); 3102 const struct ieee80211_tx_queue_params *params);
@@ -3126,8 +3164,6 @@ struct ieee80211_ops {
3126 void (*get_et_strings)(struct ieee80211_hw *hw, 3164 void (*get_et_strings)(struct ieee80211_hw *hw,
3127 struct ieee80211_vif *vif, 3165 struct ieee80211_vif *vif,
3128 u32 sset, u8 *data); 3166 u32 sset, u8 *data);
3129 int (*get_rssi)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
3130 struct ieee80211_sta *sta, s8 *rssi_dbm);
3131 3167
3132 void (*mgd_prepare_tx)(struct ieee80211_hw *hw, 3168 void (*mgd_prepare_tx)(struct ieee80211_hw *hw,
3133 struct ieee80211_vif *vif); 3169 struct ieee80211_vif *vif);
@@ -4062,6 +4098,10 @@ void ieee80211_aes_cmac_calculate_k1_k2(struct ieee80211_key_conf *keyconf,
4062 * reverse order than in packet) 4098 * reverse order than in packet)
4063 * @aes_cmac: PN data, most significant byte first (big endian, 4099 * @aes_cmac: PN data, most significant byte first (big endian,
4064 * reverse order than in packet) 4100 * reverse order than in packet)
4101 * @aes_gmac: PN data, most significant byte first (big endian,
4102 * reverse order than in packet)
4103 * @gcmp: PN data, most significant byte first (big endian,
4104 * reverse order than in packet)
4065 */ 4105 */
4066struct ieee80211_key_seq { 4106struct ieee80211_key_seq {
4067 union { 4107 union {
@@ -4075,6 +4115,12 @@ struct ieee80211_key_seq {
4075 struct { 4115 struct {
4076 u8 pn[6]; 4116 u8 pn[6];
4077 } aes_cmac; 4117 } aes_cmac;
4118 struct {
4119 u8 pn[6];
4120 } aes_gmac;
4121 struct {
4122 u8 pn[6];
4123 } gcmp;
4078 }; 4124 };
4079}; 4125};
4080 4126
@@ -4099,7 +4145,7 @@ void ieee80211_get_key_tx_seq(struct ieee80211_key_conf *keyconf,
4099 * ieee80211_get_key_rx_seq - get key RX sequence counter 4145 * ieee80211_get_key_rx_seq - get key RX sequence counter
4100 * 4146 *
4101 * @keyconf: the parameter passed with the set key 4147 * @keyconf: the parameter passed with the set key
4102 * @tid: The TID, or -1 for the management frame value (CCMP only); 4148 * @tid: The TID, or -1 for the management frame value (CCMP/GCMP only);
4103 * the value on TID 0 is also used for non-QoS frames. For 4149 * the value on TID 0 is also used for non-QoS frames. For
4104 * CMAC, only TID 0 is valid. 4150 * CMAC, only TID 0 is valid.
4105 * @seq: buffer to receive the sequence data 4151 * @seq: buffer to receive the sequence data
@@ -4135,7 +4181,7 @@ void ieee80211_set_key_tx_seq(struct ieee80211_key_conf *keyconf,
4135 * ieee80211_set_key_rx_seq - set key RX sequence counter 4181 * ieee80211_set_key_rx_seq - set key RX sequence counter
4136 * 4182 *
4137 * @keyconf: the parameter passed with the set key 4183 * @keyconf: the parameter passed with the set key
4138 * @tid: The TID, or -1 for the management frame value (CCMP only); 4184 * @tid: The TID, or -1 for the management frame value (CCMP/GCMP only);
4139 * the value on TID 0 is also used for non-QoS frames. For 4185 * the value on TID 0 is also used for non-QoS frames. For
4140 * CMAC, only TID 0 is valid. 4186 * CMAC, only TID 0 is valid.
4141 * @seq: new sequence data 4187 * @seq: new sequence data
diff --git a/include/net/mac802154.h b/include/net/mac802154.h
index c823d910b46c..850647811749 100644
--- a/include/net/mac802154.h
+++ b/include/net/mac802154.h
@@ -20,6 +20,8 @@
20#include <linux/ieee802154.h> 20#include <linux/ieee802154.h>
21#include <linux/skbuff.h> 21#include <linux/skbuff.h>
22 22
23#include <net/cfg802154.h>
24
23/* General MAC frame format: 25/* General MAC frame format:
24 * 2 bytes: Frame Control 26 * 2 bytes: Frame Control
25 * 1 byte: Sequence Number 27 * 1 byte: Sequence Number
@@ -212,7 +214,8 @@ struct ieee802154_ops {
212 unsigned long changed); 214 unsigned long changed);
213 int (*set_txpower)(struct ieee802154_hw *hw, int db); 215 int (*set_txpower)(struct ieee802154_hw *hw, int db);
214 int (*set_lbt)(struct ieee802154_hw *hw, bool on); 216 int (*set_lbt)(struct ieee802154_hw *hw, bool on);
215 int (*set_cca_mode)(struct ieee802154_hw *hw, u8 mode); 217 int (*set_cca_mode)(struct ieee802154_hw *hw,
218 const struct wpan_phy_cca *cca);
216 int (*set_cca_ed_level)(struct ieee802154_hw *hw, 219 int (*set_cca_ed_level)(struct ieee802154_hw *hw,
217 s32 level); 220 s32 level);
218 int (*set_csma_params)(struct ieee802154_hw *hw, 221 int (*set_csma_params)(struct ieee802154_hw *hw,
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h
index 2e8756b8c775..36faf4990c4b 100644
--- a/include/net/net_namespace.h
+++ b/include/net/net_namespace.h
@@ -60,6 +60,7 @@ struct net {
60 struct list_head exit_list; /* Use only net_mutex */ 60 struct list_head exit_list; /* Use only net_mutex */
61 61
62 struct user_namespace *user_ns; /* Owning user namespace */ 62 struct user_namespace *user_ns; /* Owning user namespace */
63 struct idr netns_ids;
63 64
64 struct ns_common ns; 65 struct ns_common ns;
65 66
@@ -290,6 +291,9 @@ static inline struct net *read_pnet(struct net * const *pnet)
290#define __net_initconst __initconst 291#define __net_initconst __initconst
291#endif 292#endif
292 293
294int peernet2id(struct net *net, struct net *peer);
295struct net *get_net_ns_by_id(struct net *net, int id);
296
293struct pernet_operations { 297struct pernet_operations {
294 struct list_head list; 298 struct list_head list;
295 int (*init)(struct net *net); 299 int (*init)(struct net *net);
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h
index f0daed2b54d1..74f271a172dd 100644
--- a/include/net/netfilter/nf_conntrack.h
+++ b/include/net/netfilter/nf_conntrack.h
@@ -191,8 +191,6 @@ __nf_conntrack_find(struct net *net, u16 zone,
191int nf_conntrack_hash_check_insert(struct nf_conn *ct); 191int nf_conntrack_hash_check_insert(struct nf_conn *ct);
192bool nf_ct_delete(struct nf_conn *ct, u32 pid, int report); 192bool nf_ct_delete(struct nf_conn *ct, u32 pid, int report);
193 193
194void nf_conntrack_flush_report(struct net *net, u32 portid, int report);
195
196bool nf_ct_get_tuplepr(const struct sk_buff *skb, unsigned int nhoff, 194bool nf_ct_get_tuplepr(const struct sk_buff *skb, unsigned int nhoff,
197 u_int16_t l3num, struct nf_conntrack_tuple *tuple); 195 u_int16_t l3num, struct nf_conntrack_tuple *tuple);
198bool nf_ct_invert_tuplepr(struct nf_conntrack_tuple *inverse, 196bool nf_ct_invert_tuplepr(struct nf_conntrack_tuple *inverse,
diff --git a/include/net/netlink.h b/include/net/netlink.h
index 64158353ecb2..e010ee8da41d 100644
--- a/include/net/netlink.h
+++ b/include/net/netlink.h
@@ -490,14 +490,10 @@ static inline struct sk_buff *nlmsg_new(size_t payload, gfp_t flags)
490 * Corrects the netlink message header to include the appeneded 490 * Corrects the netlink message header to include the appeneded
491 * attributes. Only necessary if attributes have been added to 491 * attributes. Only necessary if attributes have been added to
492 * the message. 492 * the message.
493 *
494 * Returns the total data length of the skb.
495 */ 493 */
496static inline int nlmsg_end(struct sk_buff *skb, struct nlmsghdr *nlh) 494static inline void nlmsg_end(struct sk_buff *skb, struct nlmsghdr *nlh)
497{ 495{
498 nlh->nlmsg_len = skb_tail_pointer(skb) - (unsigned char *)nlh; 496 nlh->nlmsg_len = skb_tail_pointer(skb) - (unsigned char *)nlh;
499
500 return skb->len;
501} 497}
502 498
503/** 499/**
@@ -520,8 +516,10 @@ static inline void *nlmsg_get_pos(struct sk_buff *skb)
520 */ 516 */
521static inline void nlmsg_trim(struct sk_buff *skb, const void *mark) 517static inline void nlmsg_trim(struct sk_buff *skb, const void *mark)
522{ 518{
523 if (mark) 519 if (mark) {
520 WARN_ON((unsigned char *) mark < skb->data);
524 skb_trim(skb, (unsigned char *) mark - skb->data); 521 skb_trim(skb, (unsigned char *) mark - skb->data);
522 }
525} 523}
526 524
527/** 525/**
diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
index 0ffef1a38efc..dbe225478adb 100644
--- a/include/net/netns/ipv4.h
+++ b/include/net/netns/ipv4.h
@@ -48,7 +48,8 @@ struct netns_ipv4 {
48 struct hlist_head *fib_table_hash; 48 struct hlist_head *fib_table_hash;
49 struct sock *fibnl; 49 struct sock *fibnl;
50 50
51 struct sock **icmp_sk; 51 struct sock * __percpu *icmp_sk;
52
52 struct inet_peer_base *peers; 53 struct inet_peer_base *peers;
53 struct tcpm_hash_bucket *tcp_metrics_hash; 54 struct tcpm_hash_bucket *tcp_metrics_hash;
54 unsigned int tcp_metrics_hash_log; 55 unsigned int tcp_metrics_hash_log;
@@ -81,6 +82,8 @@ struct netns_ipv4 {
81 82
82 int sysctl_fwmark_reflect; 83 int sysctl_fwmark_reflect;
83 int sysctl_tcp_fwmark_accept; 84 int sysctl_tcp_fwmark_accept;
85 int sysctl_tcp_mtu_probing;
86 int sysctl_tcp_base_mss;
84 87
85 struct ping_group_range ping_group_range; 88 struct ping_group_range ping_group_range;
86 89
diff --git a/include/net/nfc/hci.h b/include/net/nfc/hci.h
index 14bd0e1c47fa..ab672b537dd4 100644
--- a/include/net/nfc/hci.h
+++ b/include/net/nfc/hci.h
@@ -51,8 +51,10 @@ struct nfc_hci_ops {
51 int (*tm_send)(struct nfc_hci_dev *hdev, struct sk_buff *skb); 51 int (*tm_send)(struct nfc_hci_dev *hdev, struct sk_buff *skb);
52 int (*check_presence)(struct nfc_hci_dev *hdev, 52 int (*check_presence)(struct nfc_hci_dev *hdev,
53 struct nfc_target *target); 53 struct nfc_target *target);
54 int (*event_received)(struct nfc_hci_dev *hdev, u8 gate, u8 event, 54 int (*event_received)(struct nfc_hci_dev *hdev, u8 pipe, u8 event,
55 struct sk_buff *skb); 55 struct sk_buff *skb);
56 void (*cmd_received)(struct nfc_hci_dev *hdev, u8 pipe, u8 cmd,
57 struct sk_buff *skb);
56 int (*fw_download)(struct nfc_hci_dev *hdev, const char *firmware_name); 58 int (*fw_download)(struct nfc_hci_dev *hdev, const char *firmware_name);
57 int (*discover_se)(struct nfc_hci_dev *dev); 59 int (*discover_se)(struct nfc_hci_dev *dev);
58 int (*enable_se)(struct nfc_hci_dev *dev, u32 se_idx); 60 int (*enable_se)(struct nfc_hci_dev *dev, u32 se_idx);
@@ -63,8 +65,10 @@ struct nfc_hci_ops {
63}; 65};
64 66
65/* Pipes */ 67/* Pipes */
66#define NFC_HCI_INVALID_PIPE 0x80
67#define NFC_HCI_DO_NOT_CREATE_PIPE 0x81 68#define NFC_HCI_DO_NOT_CREATE_PIPE 0x81
69#define NFC_HCI_INVALID_PIPE 0x80
70#define NFC_HCI_INVALID_GATE 0xFF
71#define NFC_HCI_INVALID_HOST 0x80
68#define NFC_HCI_LINK_MGMT_PIPE 0x00 72#define NFC_HCI_LINK_MGMT_PIPE 0x00
69#define NFC_HCI_ADMIN_PIPE 0x01 73#define NFC_HCI_ADMIN_PIPE 0x01
70 74
@@ -73,7 +77,13 @@ struct nfc_hci_gate {
73 u8 pipe; 77 u8 pipe;
74}; 78};
75 79
80struct nfc_hci_pipe {
81 u8 gate;
82 u8 dest_host;
83};
84
76#define NFC_HCI_MAX_CUSTOM_GATES 50 85#define NFC_HCI_MAX_CUSTOM_GATES 50
86#define NFC_HCI_MAX_PIPES 127
77struct nfc_hci_init_data { 87struct nfc_hci_init_data {
78 u8 gate_count; 88 u8 gate_count;
79 struct nfc_hci_gate gates[NFC_HCI_MAX_CUSTOM_GATES]; 89 struct nfc_hci_gate gates[NFC_HCI_MAX_CUSTOM_GATES];
@@ -125,6 +135,7 @@ struct nfc_hci_dev {
125 void *clientdata; 135 void *clientdata;
126 136
127 u8 gate2pipe[NFC_HCI_MAX_GATES]; 137 u8 gate2pipe[NFC_HCI_MAX_GATES];
138 struct nfc_hci_pipe pipes[NFC_HCI_MAX_PIPES];
128 139
129 u8 sw_romlib; 140 u8 sw_romlib;
130 u8 sw_patch; 141 u8 sw_patch;
@@ -167,6 +178,8 @@ void *nfc_hci_get_clientdata(struct nfc_hci_dev *hdev);
167void nfc_hci_driver_failure(struct nfc_hci_dev *hdev, int err); 178void nfc_hci_driver_failure(struct nfc_hci_dev *hdev, int err);
168 179
169int nfc_hci_result_to_errno(u8 result); 180int nfc_hci_result_to_errno(u8 result);
181void nfc_hci_reset_pipes(struct nfc_hci_dev *dev);
182void nfc_hci_reset_pipes_per_host(struct nfc_hci_dev *hdev, u8 host);
170 183
171/* Host IDs */ 184/* Host IDs */
172#define NFC_HCI_HOST_CONTROLLER_ID 0x00 185#define NFC_HCI_HOST_CONTROLLER_ID 0x00
@@ -219,6 +232,12 @@ int nfc_hci_result_to_errno(u8 result);
219#define NFC_HCI_EVT_POST_DATA 0x02 232#define NFC_HCI_EVT_POST_DATA 0x02
220#define NFC_HCI_EVT_HOT_PLUG 0x03 233#define NFC_HCI_EVT_HOT_PLUG 0x03
221 234
235/* Generic commands */
236#define NFC_HCI_ANY_SET_PARAMETER 0x01
237#define NFC_HCI_ANY_GET_PARAMETER 0x02
238#define NFC_HCI_ANY_OPEN_PIPE 0x03
239#define NFC_HCI_ANY_CLOSE_PIPE 0x04
240
222/* Reader RF gates events */ 241/* Reader RF gates events */
223#define NFC_HCI_EVT_READER_REQUESTED 0x10 242#define NFC_HCI_EVT_READER_REQUESTED 0x10
224#define NFC_HCI_EVT_END_OPERATION 0x11 243#define NFC_HCI_EVT_END_OPERATION 0x11
@@ -249,8 +268,6 @@ int nfc_hci_send_cmd(struct nfc_hci_dev *hdev, u8 gate, u8 cmd,
249int nfc_hci_send_cmd_async(struct nfc_hci_dev *hdev, u8 gate, u8 cmd, 268int nfc_hci_send_cmd_async(struct nfc_hci_dev *hdev, u8 gate, u8 cmd,
250 const u8 *param, size_t param_len, 269 const u8 *param, size_t param_len,
251 data_exchange_cb_t cb, void *cb_context); 270 data_exchange_cb_t cb, void *cb_context);
252int nfc_hci_send_response(struct nfc_hci_dev *hdev, u8 gate, u8 response,
253 const u8 *param, size_t param_len);
254int nfc_hci_send_event(struct nfc_hci_dev *hdev, u8 gate, u8 event, 271int nfc_hci_send_event(struct nfc_hci_dev *hdev, u8 gate, u8 event,
255 const u8 *param, size_t param_len); 272 const u8 *param, size_t param_len);
256int nfc_hci_target_discovered(struct nfc_hci_dev *hdev, u8 gate); 273int nfc_hci_target_discovered(struct nfc_hci_dev *hdev, u8 gate);
diff --git a/include/net/nfc/nci.h b/include/net/nfc/nci.h
index e7257a4653b4..a2f2f3d3196d 100644
--- a/include/net/nfc/nci.h
+++ b/include/net/nfc/nci.h
@@ -62,6 +62,25 @@
62#define NCI_STATUS_NFCEE_PROTOCOL_ERROR 0xc2 62#define NCI_STATUS_NFCEE_PROTOCOL_ERROR 0xc2
63#define NCI_STATUS_NFCEE_TIMEOUT_ERROR 0xc3 63#define NCI_STATUS_NFCEE_TIMEOUT_ERROR 0xc3
64 64
65/* NFCEE Interface/Protocols */
66#define NCI_NFCEE_INTERFACE_APDU 0x00
67#define NCI_NFCEE_INTERFACE_HCI_ACCESS 0x01
68#define NCI_NFCEE_INTERFACE_TYPE3_CMD_SET 0x02
69#define NCI_NFCEE_INTERFACE_TRANSPARENT 0x03
70
71/* Destination type */
72#define NCI_DESTINATION_NFCC_LOOPBACK 0x01
73#define NCI_DESTINATION_REMOTE_NFC_ENDPOINT 0x02
74#define NCI_DESTINATION_NFCEE 0x03
75
76/* Destination-specific parameters type */
77#define NCI_DESTINATION_SPECIFIC_PARAM_RF_TYPE 0x00
78#define NCI_DESTINATION_SPECIFIC_PARAM_NFCEE_TYPE 0x01
79
80/* NFCEE Discovery Action */
81#define NCI_NFCEE_DISCOVERY_ACTION_DISABLE 0x00
82#define NCI_NFCEE_DISCOVERY_ACTION_ENABLE 0x01
83
65/* NCI RF Technology and Mode */ 84/* NCI RF Technology and Mode */
66#define NCI_NFC_A_PASSIVE_POLL_MODE 0x00 85#define NCI_NFC_A_PASSIVE_POLL_MODE 0x00
67#define NCI_NFC_B_PASSIVE_POLL_MODE 0x01 86#define NCI_NFC_B_PASSIVE_POLL_MODE 0x01
@@ -224,6 +243,28 @@ struct nci_core_set_config_cmd {
224 struct set_config_param param; /* support 1 param per cmd is enough */ 243 struct set_config_param param; /* support 1 param per cmd is enough */
225} __packed; 244} __packed;
226 245
246#define NCI_OP_CORE_CONN_CREATE_CMD nci_opcode_pack(NCI_GID_CORE, 0x04)
247#define DEST_SPEC_PARAMS_ID_INDEX 0
248#define DEST_SPEC_PARAMS_PROTOCOL_INDEX 1
249struct dest_spec_params {
250 __u8 id;
251 __u8 protocol;
252} __packed;
253
254struct core_conn_create_dest_spec_params {
255 __u8 type;
256 __u8 length;
257 __u8 value[0];
258} __packed;
259
260struct nci_core_conn_create_cmd {
261 __u8 destination_type;
262 __u8 number_destination_params;
263 struct core_conn_create_dest_spec_params params[0];
264} __packed;
265
266#define NCI_OP_CORE_CONN_CLOSE_CMD nci_opcode_pack(NCI_GID_CORE, 0x05)
267
227#define NCI_OP_RF_DISCOVER_MAP_CMD nci_opcode_pack(NCI_GID_RF_MGMT, 0x00) 268#define NCI_OP_RF_DISCOVER_MAP_CMD nci_opcode_pack(NCI_GID_RF_MGMT, 0x00)
228struct disc_map_config { 269struct disc_map_config {
229 __u8 rf_protocol; 270 __u8 rf_protocol;
@@ -260,6 +301,19 @@ struct nci_rf_deactivate_cmd {
260 __u8 type; 301 __u8 type;
261} __packed; 302} __packed;
262 303
304#define NCI_OP_NFCEE_DISCOVER_CMD nci_opcode_pack(NCI_GID_NFCEE_MGMT, 0x00)
305struct nci_nfcee_discover_cmd {
306 __u8 discovery_action;
307} __packed;
308
309#define NCI_OP_NFCEE_MODE_SET_CMD nci_opcode_pack(NCI_GID_NFCEE_MGMT, 0x01)
310#define NCI_NFCEE_DISABLE 0x00
311#define NCI_NFCEE_ENABLE 0x01
312struct nci_nfcee_mode_set_cmd {
313 __u8 nfcee_id;
314 __u8 nfcee_mode;
315} __packed;
316
263/* ----------------------- */ 317/* ----------------------- */
264/* ---- NCI Responses ---- */ 318/* ---- NCI Responses ---- */
265/* ----------------------- */ 319/* ----------------------- */
@@ -295,6 +349,16 @@ struct nci_core_set_config_rsp {
295 __u8 params_id[0]; /* variable size array */ 349 __u8 params_id[0]; /* variable size array */
296} __packed; 350} __packed;
297 351
352#define NCI_OP_CORE_CONN_CREATE_RSP nci_opcode_pack(NCI_GID_CORE, 0x04)
353struct nci_core_conn_create_rsp {
354 __u8 status;
355 __u8 max_ctrl_pkt_payload_len;
356 __u8 credits_cnt;
357 __u8 conn_id;
358} __packed;
359
360#define NCI_OP_CORE_CONN_CLOSE_RSP nci_opcode_pack(NCI_GID_CORE, 0x05)
361
298#define NCI_OP_RF_DISCOVER_MAP_RSP nci_opcode_pack(NCI_GID_RF_MGMT, 0x00) 362#define NCI_OP_RF_DISCOVER_MAP_RSP nci_opcode_pack(NCI_GID_RF_MGMT, 0x00)
299 363
300#define NCI_OP_RF_DISCOVER_RSP nci_opcode_pack(NCI_GID_RF_MGMT, 0x03) 364#define NCI_OP_RF_DISCOVER_RSP nci_opcode_pack(NCI_GID_RF_MGMT, 0x03)
@@ -303,6 +367,13 @@ struct nci_core_set_config_rsp {
303 367
304#define NCI_OP_RF_DEACTIVATE_RSP nci_opcode_pack(NCI_GID_RF_MGMT, 0x06) 368#define NCI_OP_RF_DEACTIVATE_RSP nci_opcode_pack(NCI_GID_RF_MGMT, 0x06)
305 369
370#define NCI_OP_NFCEE_DISCOVER_RSP nci_opcode_pack(NCI_GID_NFCEE_MGMT, 0x00)
371struct nci_nfcee_discover_rsp {
372 __u8 status;
373 __u8 num_nfcee;
374} __packed;
375
376#define NCI_OP_NFCEE_MODE_SET_RSP nci_opcode_pack(NCI_GID_NFCEE_MGMT, 0x01)
306/* --------------------------- */ 377/* --------------------------- */
307/* ---- NCI Notifications ---- */ 378/* ---- NCI Notifications ---- */
308/* --------------------------- */ 379/* --------------------------- */
@@ -430,4 +501,30 @@ struct nci_rf_deactivate_ntf {
430 __u8 reason; 501 __u8 reason;
431} __packed; 502} __packed;
432 503
504#define NCI_OP_RF_NFCEE_ACTION_NTF nci_opcode_pack(NCI_GID_RF_MGMT, 0x09)
505struct nci_rf_nfcee_action_ntf {
506 __u8 nfcee_id;
507 __u8 trigger;
508 __u8 supported_data_length;
509 __u8 supported_data[0];
510} __packed;
511
512#define NCI_OP_NFCEE_DISCOVER_NTF nci_opcode_pack(NCI_GID_NFCEE_MGMT, 0x00)
513struct nci_nfcee_supported_protocol {
514 __u8 num_protocol;
515 __u8 supported_protocol[0];
516} __packed;
517
518struct nci_nfcee_information_tlv {
519 __u8 num_tlv;
520 __u8 information_tlv[0];
521} __packed;
522
523struct nci_nfcee_discover_ntf {
524 __u8 nfcee_id;
525 __u8 nfcee_status;
526 struct nci_nfcee_supported_protocol supported_protocols;
527 struct nci_nfcee_information_tlv information_tlv;
528} __packed;
529
433#endif /* __NCI_H */ 530#endif /* __NCI_H */
diff --git a/include/net/nfc/nci_core.h b/include/net/nfc/nci_core.h
index 9e51bb4d841e..ff87f8611fa3 100644
--- a/include/net/nfc/nci_core.h
+++ b/include/net/nfc/nci_core.h
@@ -78,15 +78,107 @@ struct nci_ops {
78 int (*se_io)(struct nci_dev *ndev, u32 se_idx, 78 int (*se_io)(struct nci_dev *ndev, u32 se_idx,
79 u8 *apdu, size_t apdu_length, 79 u8 *apdu, size_t apdu_length,
80 se_io_cb_t cb, void *cb_context); 80 se_io_cb_t cb, void *cb_context);
81 int (*hci_load_session)(struct nci_dev *ndev);
82 void (*hci_event_received)(struct nci_dev *ndev, u8 pipe, u8 event,
83 struct sk_buff *skb);
84 void (*hci_cmd_received)(struct nci_dev *ndev, u8 pipe, u8 cmd,
85 struct sk_buff *skb);
81}; 86};
82 87
83#define NCI_MAX_SUPPORTED_RF_INTERFACES 4 88#define NCI_MAX_SUPPORTED_RF_INTERFACES 4
84#define NCI_MAX_DISCOVERED_TARGETS 10 89#define NCI_MAX_DISCOVERED_TARGETS 10
90#define NCI_MAX_NUM_NFCEE 255
91#define NCI_MAX_CONN_ID 7
92
93struct nci_conn_info {
94 struct list_head list;
95 __u8 id; /* can be an RF Discovery ID or an NFCEE ID */
96 __u8 conn_id;
97 __u8 max_pkt_payload_len;
98
99 atomic_t credits_cnt;
100 __u8 initial_num_credits;
101
102 data_exchange_cb_t data_exchange_cb;
103 void *data_exchange_cb_context;
104
105 struct sk_buff *rx_skb;
106};
107
108#define NCI_INVALID_CONN_ID 0x80
109
110#define NCI_HCI_ANY_OPEN_PIPE 0x03
111
112/* Gates */
113#define NCI_HCI_ADMIN_GATE 0x00
114#define NCI_HCI_LINK_MGMT_GATE 0x06
115
116/* Pipes */
117#define NCI_HCI_LINK_MGMT_PIPE 0x00
118#define NCI_HCI_ADMIN_PIPE 0x01
119
120/* Generic responses */
121#define NCI_HCI_ANY_OK 0x00
122#define NCI_HCI_ANY_E_NOT_CONNECTED 0x01
123#define NCI_HCI_ANY_E_CMD_PAR_UNKNOWN 0x02
124#define NCI_HCI_ANY_E_NOK 0x03
125#define NCI_HCI_ANY_E_PIPES_FULL 0x04
126#define NCI_HCI_ANY_E_REG_PAR_UNKNOWN 0x05
127#define NCI_HCI_ANY_E_PIPE_NOT_OPENED 0x06
128#define NCI_HCI_ANY_E_CMD_NOT_SUPPORTED 0x07
129#define NCI_HCI_ANY_E_INHIBITED 0x08
130#define NCI_HCI_ANY_E_TIMEOUT 0x09
131#define NCI_HCI_ANY_E_REG_ACCESS_DENIED 0x0a
132#define NCI_HCI_ANY_E_PIPE_ACCESS_DENIED 0x0b
133
134#define NCI_HCI_DO_NOT_OPEN_PIPE 0x81
135#define NCI_HCI_INVALID_PIPE 0x80
136#define NCI_HCI_INVALID_GATE 0xFF
137#define NCI_HCI_INVALID_HOST 0x80
138
139#define NCI_HCI_MAX_CUSTOM_GATES 50
140#define NCI_HCI_MAX_PIPES 127
141
142struct nci_hci_gate {
143 u8 gate;
144 u8 pipe;
145 u8 dest_host;
146} __packed;
147
148struct nci_hci_pipe {
149 u8 gate;
150 u8 host;
151} __packed;
152
153struct nci_hci_init_data {
154 u8 gate_count;
155 struct nci_hci_gate gates[NCI_HCI_MAX_CUSTOM_GATES];
156 char session_id[9];
157};
158
159#define NCI_HCI_MAX_GATES 256
160
161struct nci_hci_dev {
162 u8 nfcee_id;
163 struct nci_dev *ndev;
164 struct nci_conn_info *conn_info;
165
166 struct nci_hci_init_data init_data;
167 struct nci_hci_pipe pipes[NCI_HCI_MAX_PIPES];
168 u8 gate2pipe[NCI_HCI_MAX_GATES];
169 int expected_pipes;
170 int count_pipes;
171
172 struct sk_buff_head rx_hcp_frags;
173 struct work_struct msg_rx_work;
174 struct sk_buff_head msg_rx_queue;
175};
85 176
86/* NCI Core structures */ 177/* NCI Core structures */
87struct nci_dev { 178struct nci_dev {
88 struct nfc_dev *nfc_dev; 179 struct nfc_dev *nfc_dev;
89 struct nci_ops *ops; 180 struct nci_ops *ops;
181 struct nci_hci_dev *hci_dev;
90 182
91 int tx_headroom; 183 int tx_headroom;
92 int tx_tailroom; 184 int tx_tailroom;
@@ -95,7 +187,10 @@ struct nci_dev {
95 unsigned long flags; 187 unsigned long flags;
96 188
97 atomic_t cmd_cnt; 189 atomic_t cmd_cnt;
98 atomic_t credits_cnt; 190 __u8 cur_conn_id;
191
192 struct list_head conn_info_list;
193 struct nci_conn_info *rf_conn_info;
99 194
100 struct timer_list cmd_timer; 195 struct timer_list cmd_timer;
101 struct timer_list data_timer; 196 struct timer_list data_timer;
@@ -141,13 +236,10 @@ struct nci_dev {
141 __u8 manufact_id; 236 __u8 manufact_id;
142 __u32 manufact_specific_info; 237 __u32 manufact_specific_info;
143 238
144 /* received during NCI_OP_RF_INTF_ACTIVATED_NTF */ 239 /* Save RF Discovery ID or NFCEE ID under conn_create */
145 __u8 max_data_pkt_payload_size; 240 __u8 cur_id;
146 __u8 initial_num_credits;
147 241
148 /* stored during nci_data_exchange */ 242 /* stored during nci_data_exchange */
149 data_exchange_cb_t data_exchange_cb;
150 void *data_exchange_cb_context;
151 struct sk_buff *rx_data_reassembly; 243 struct sk_buff *rx_data_reassembly;
152 244
153 /* stored during intf_activated_ntf */ 245 /* stored during intf_activated_ntf */
@@ -163,9 +255,36 @@ struct nci_dev *nci_allocate_device(struct nci_ops *ops,
163void nci_free_device(struct nci_dev *ndev); 255void nci_free_device(struct nci_dev *ndev);
164int nci_register_device(struct nci_dev *ndev); 256int nci_register_device(struct nci_dev *ndev);
165void nci_unregister_device(struct nci_dev *ndev); 257void nci_unregister_device(struct nci_dev *ndev);
258int nci_request(struct nci_dev *ndev,
259 void (*req)(struct nci_dev *ndev,
260 unsigned long opt),
261 unsigned long opt, __u32 timeout);
166int nci_recv_frame(struct nci_dev *ndev, struct sk_buff *skb); 262int nci_recv_frame(struct nci_dev *ndev, struct sk_buff *skb);
167int nci_set_config(struct nci_dev *ndev, __u8 id, size_t len, __u8 *val); 263int nci_set_config(struct nci_dev *ndev, __u8 id, size_t len, __u8 *val);
168 264
265int nci_nfcee_discover(struct nci_dev *ndev, u8 action);
266int nci_nfcee_mode_set(struct nci_dev *ndev, u8 nfcee_id, u8 nfcee_mode);
267int nci_core_conn_create(struct nci_dev *ndev, u8 destination_type,
268 u8 number_destination_params,
269 size_t params_len,
270 struct core_conn_create_dest_spec_params *params);
271int nci_core_conn_close(struct nci_dev *ndev, u8 conn_id);
272
273struct nci_hci_dev *nci_hci_allocate(struct nci_dev *ndev);
274int nci_hci_send_event(struct nci_dev *ndev, u8 gate, u8 event,
275 const u8 *param, size_t param_len);
276int nci_hci_send_cmd(struct nci_dev *ndev, u8 gate,
277 u8 cmd, const u8 *param, size_t param_len,
278 struct sk_buff **skb);
279int nci_hci_open_pipe(struct nci_dev *ndev, u8 pipe);
280int nci_hci_connect_gate(struct nci_dev *ndev, u8 dest_host,
281 u8 dest_gate, u8 pipe);
282int nci_hci_set_param(struct nci_dev *ndev, u8 gate, u8 idx,
283 const u8 *param, size_t param_len);
284int nci_hci_get_param(struct nci_dev *ndev, u8 gate, u8 idx,
285 struct sk_buff **skb);
286int nci_hci_dev_session_init(struct nci_dev *ndev);
287
169static inline struct sk_buff *nci_skb_alloc(struct nci_dev *ndev, 288static inline struct sk_buff *nci_skb_alloc(struct nci_dev *ndev,
170 unsigned int len, 289 unsigned int len,
171 gfp_t how) 290 gfp_t how)
@@ -200,7 +319,9 @@ void nci_rx_data_packet(struct nci_dev *ndev, struct sk_buff *skb);
200int nci_send_cmd(struct nci_dev *ndev, __u16 opcode, __u8 plen, void *payload); 319int nci_send_cmd(struct nci_dev *ndev, __u16 opcode, __u8 plen, void *payload);
201int nci_send_data(struct nci_dev *ndev, __u8 conn_id, struct sk_buff *skb); 320int nci_send_data(struct nci_dev *ndev, __u8 conn_id, struct sk_buff *skb);
202void nci_data_exchange_complete(struct nci_dev *ndev, struct sk_buff *skb, 321void nci_data_exchange_complete(struct nci_dev *ndev, struct sk_buff *skb,
203 int err); 322 __u8 conn_id, int err);
323void nci_hci_data_received_cb(void *context, struct sk_buff *skb, int err);
324
204void nci_clear_target_list(struct nci_dev *ndev); 325void nci_clear_target_list(struct nci_dev *ndev);
205 326
206/* ----- NCI requests ----- */ 327/* ----- NCI requests ----- */
@@ -209,6 +330,8 @@ void nci_clear_target_list(struct nci_dev *ndev);
209#define NCI_REQ_CANCELED 2 330#define NCI_REQ_CANCELED 2
210 331
211void nci_req_complete(struct nci_dev *ndev, int result); 332void nci_req_complete(struct nci_dev *ndev, int result);
333struct nci_conn_info *nci_get_conn_info_by_conn_id(struct nci_dev *ndev,
334 int conn_id);
212 335
213/* ----- NCI status code ----- */ 336/* ----- NCI status code ----- */
214int nci_to_errno(__u8 code); 337int nci_to_errno(__u8 code);
diff --git a/include/net/nfc/nfc.h b/include/net/nfc/nfc.h
index 12adb817c27a..73190e65d5c1 100644
--- a/include/net/nfc/nfc.h
+++ b/include/net/nfc/nfc.h
@@ -135,6 +135,31 @@ struct nfc_se {
135 u16 state; 135 u16 state;
136}; 136};
137 137
138/**
139 * nfc_evt_transaction - A struct for NFC secure element event transaction.
140 *
141 * @aid: The application identifier triggering the event
142 *
143 * @aid_len: The application identifier length [5:16]
144 *
145 * @params: The application parameters transmitted during the transaction
146 *
147 * @params_len: The applications parameters length [0:255]
148 *
149 */
150#define NFC_MIN_AID_LENGTH 5
151#define NFC_MAX_AID_LENGTH 16
152#define NFC_MAX_PARAMS_LENGTH 255
153
154#define NFC_EVT_TRANSACTION_AID_TAG 0x81
155#define NFC_EVT_TRANSACTION_PARAMS_TAG 0x82
156struct nfc_evt_transaction {
157 u32 aid_len;
158 u8 aid[NFC_MAX_AID_LENGTH];
159 u8 params_len;
160 u8 params[NFC_MAX_PARAMS_LENGTH];
161} __packed;
162
138struct nfc_genl_data { 163struct nfc_genl_data {
139 u32 poll_req_portid; 164 u32 poll_req_portid;
140 struct mutex genl_data_mutex; 165 struct mutex genl_data_mutex;
@@ -262,6 +287,8 @@ int nfc_tm_data_received(struct nfc_dev *dev, struct sk_buff *skb);
262 287
263void nfc_driver_failure(struct nfc_dev *dev, int err); 288void nfc_driver_failure(struct nfc_dev *dev, int err);
264 289
290int nfc_se_transaction(struct nfc_dev *dev, u8 se_idx,
291 struct nfc_evt_transaction *evt_transaction);
265int nfc_add_se(struct nfc_dev *dev, u32 se_idx, u16 type); 292int nfc_add_se(struct nfc_dev *dev, u32 se_idx, u16 type);
266int nfc_remove_se(struct nfc_dev *dev, u32 se_idx); 293int nfc_remove_se(struct nfc_dev *dev, u32 se_idx);
267struct nfc_se *nfc_find_se(struct nfc_dev *dev, u32 se_idx); 294struct nfc_se *nfc_find_se(struct nfc_dev *dev, u32 se_idx);
diff --git a/include/net/nl802154.h b/include/net/nl802154.h
index 6dbd406ca41b..f8b5bc997959 100644
--- a/include/net/nl802154.h
+++ b/include/net/nl802154.h
@@ -82,7 +82,7 @@ enum nl802154_attrs {
82 NL802154_ATTR_TX_POWER, 82 NL802154_ATTR_TX_POWER,
83 83
84 NL802154_ATTR_CCA_MODE, 84 NL802154_ATTR_CCA_MODE,
85 NL802154_ATTR_CCA_MODE3_AND, 85 NL802154_ATTR_CCA_OPT,
86 NL802154_ATTR_CCA_ED_LEVEL, 86 NL802154_ATTR_CCA_ED_LEVEL,
87 87
88 NL802154_ATTR_MAX_FRAME_RETRIES, 88 NL802154_ATTR_MAX_FRAME_RETRIES,
@@ -119,4 +119,47 @@ enum nl802154_iftype {
119 NL802154_IFTYPE_MAX = NUM_NL802154_IFTYPES - 1 119 NL802154_IFTYPE_MAX = NUM_NL802154_IFTYPES - 1
120}; 120};
121 121
122/**
123 * enum nl802154_cca_modes - cca modes
124 *
125 * @__NL802154_CCA_INVALID: cca mode number 0 is reserved
126 * @NL802154_CCA_ENERGY: Energy above threshold
127 * @NL802154_CCA_CARRIER: Carrier sense only
128 * @NL802154_CCA_ENERGY_CARRIER: Carrier sense with energy above threshold
129 * @NL802154_CCA_ALOHA: CCA shall always report an idle medium
130 * @NL802154_CCA_UWB_SHR: UWB preamble sense based on the SHR of a frame
131 * @NL802154_CCA_UWB_MULTIPEXED: UWB preamble sense based on the packet with
132 * the multiplexed preamble
133 * @__NL802154_CCA_ATTR_AFTER_LAST: Internal
134 * @NL802154_CCA_ATTR_MAX: Maximum CCA attribute number
135 */
136enum nl802154_cca_modes {
137 __NL802154_CCA_INVALID,
138 NL802154_CCA_ENERGY,
139 NL802154_CCA_CARRIER,
140 NL802154_CCA_ENERGY_CARRIER,
141 NL802154_CCA_ALOHA,
142 NL802154_CCA_UWB_SHR,
143 NL802154_CCA_UWB_MULTIPEXED,
144
145 /* keep last */
146 __NL802154_CCA_ATTR_AFTER_LAST,
147 NL802154_CCA_ATTR_MAX = __NL802154_CCA_ATTR_AFTER_LAST - 1
148};
149
150/**
151 * enum nl802154_cca_opts - additional options for cca modes
152 *
153 * @NL802154_CCA_OPT_ENERGY_CARRIER_OR: NL802154_CCA_ENERGY_CARRIER with OR
154 * @NL802154_CCA_OPT_ENERGY_CARRIER_AND: NL802154_CCA_ENERGY_CARRIER with AND
155 */
156enum nl802154_cca_opts {
157 NL802154_CCA_OPT_ENERGY_CARRIER_AND,
158 NL802154_CCA_OPT_ENERGY_CARRIER_OR,
159
160 /* keep last */
161 __NL802154_CCA_OPT_ATTR_AFTER_LAST,
162 NL802154_CCA_OPT_ATTR_MAX = __NL802154_CCA_OPT_ATTR_AFTER_LAST - 1
163};
164
122#endif /* __NL802154_H */ 165#endif /* __NL802154_H */
diff --git a/include/net/ping.h b/include/net/ping.h
index f074060bc5de..cc16d413f681 100644
--- a/include/net/ping.h
+++ b/include/net/ping.h
@@ -59,7 +59,7 @@ extern struct pingv6_ops pingv6_ops;
59 59
60struct pingfakehdr { 60struct pingfakehdr {
61 struct icmphdr icmph; 61 struct icmphdr icmph;
62 struct iovec *iov; 62 struct msghdr *msg;
63 sa_family_t family; 63 sa_family_t family;
64 __wsum wcheck; 64 __wsum wcheck;
65}; 65};
diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h
index 27a33833ff4a..2342bf12cb78 100644
--- a/include/net/pkt_sched.h
+++ b/include/net/pkt_sched.h
@@ -3,6 +3,7 @@
3 3
4#include <linux/jiffies.h> 4#include <linux/jiffies.h>
5#include <linux/ktime.h> 5#include <linux/ktime.h>
6#include <linux/if_vlan.h>
6#include <net/sch_generic.h> 7#include <net/sch_generic.h>
7 8
8struct qdisc_walker { 9struct qdisc_walker {
@@ -114,6 +115,17 @@ int tc_classify_compat(struct sk_buff *skb, const struct tcf_proto *tp,
114int tc_classify(struct sk_buff *skb, const struct tcf_proto *tp, 115int tc_classify(struct sk_buff *skb, const struct tcf_proto *tp,
115 struct tcf_result *res); 116 struct tcf_result *res);
116 117
118static inline __be16 tc_skb_protocol(const struct sk_buff *skb)
119{
120 /* We need to take extra care in case the skb came via
121 * vlan accelerated path. In that case, use skb->vlan_proto
122 * as the original vlan header was already stripped.
123 */
124 if (skb_vlan_tag_present(skb))
125 return skb->vlan_proto;
126 return skb->protocol;
127}
128
117/* Calculate maximal size of packet seen by hard_start_xmit 129/* Calculate maximal size of packet seen by hard_start_xmit
118 routine of this device. 130 routine of this device.
119 */ 131 */
diff --git a/include/net/regulatory.h b/include/net/regulatory.h
index b776d72d84be..ebc5a2ed8631 100644
--- a/include/net/regulatory.h
+++ b/include/net/regulatory.h
@@ -147,6 +147,24 @@ struct regulatory_request {
147 * NL80211_IFTYPE_P2P_CLIENT, NL80211_IFTYPE_P2P_GO, 147 * NL80211_IFTYPE_P2P_CLIENT, NL80211_IFTYPE_P2P_GO,
148 * NL80211_IFTYPE_P2P_DEVICE. The flag will be set by default if a device 148 * NL80211_IFTYPE_P2P_DEVICE. The flag will be set by default if a device
149 * includes any modes unsupported for enforcement checking. 149 * includes any modes unsupported for enforcement checking.
150 * @REGULATORY_WIPHY_SELF_MANAGED: for devices that employ wiphy-specific
151 * regdom management. These devices will ignore all regdom changes not
152 * originating from their own wiphy.
153 * A self-managed wiphys only employs regulatory information obtained from
154 * the FW and driver and does not use other cfg80211 sources like
155 * beacon-hints, country-code IEs and hints from other devices on the same
156 * system. Conversely, a self-managed wiphy does not share its regulatory
157 * hints with other devices in the system. If a system contains several
158 * devices, one or more of which are self-managed, there might be
159 * contradictory regulatory settings between them. Usage of flag is
160 * generally discouraged. Only use it if the FW/driver is incompatible
161 * with non-locally originated hints.
162 * This flag is incompatible with the flags: %REGULATORY_CUSTOM_REG,
163 * %REGULATORY_STRICT_REG, %REGULATORY_COUNTRY_IE_FOLLOW_POWER,
164 * %REGULATORY_COUNTRY_IE_IGNORE and %REGULATORY_DISABLE_BEACON_HINTS.
165 * Mixing any of the above flags with this flag will result in a failure
166 * to register the wiphy. This flag implies
167 * %REGULATORY_DISABLE_BEACON_HINTS and %REGULATORY_COUNTRY_IE_IGNORE.
150 */ 168 */
151enum ieee80211_regulatory_flags { 169enum ieee80211_regulatory_flags {
152 REGULATORY_CUSTOM_REG = BIT(0), 170 REGULATORY_CUSTOM_REG = BIT(0),
@@ -156,6 +174,7 @@ enum ieee80211_regulatory_flags {
156 REGULATORY_COUNTRY_IE_IGNORE = BIT(4), 174 REGULATORY_COUNTRY_IE_IGNORE = BIT(4),
157 REGULATORY_ENABLE_RELAX_NO_IR = BIT(5), 175 REGULATORY_ENABLE_RELAX_NO_IR = BIT(5),
158 REGULATORY_IGNORE_STALE_KICKOFF = BIT(6), 176 REGULATORY_IGNORE_STALE_KICKOFF = BIT(6),
177 REGULATORY_WIPHY_SELF_MANAGED = BIT(7),
159}; 178};
160 179
161struct ieee80211_freq_range { 180struct ieee80211_freq_range {
diff --git a/include/net/route.h b/include/net/route.h
index b17cf28f996e..fe22d03afb6a 100644
--- a/include/net/route.h
+++ b/include/net/route.h
@@ -46,6 +46,7 @@
46 46
47struct fib_nh; 47struct fib_nh;
48struct fib_info; 48struct fib_info;
49struct uncached_list;
49struct rtable { 50struct rtable {
50 struct dst_entry dst; 51 struct dst_entry dst;
51 52
@@ -64,6 +65,7 @@ struct rtable {
64 u32 rt_pmtu; 65 u32 rt_pmtu;
65 66
66 struct list_head rt_uncached; 67 struct list_head rt_uncached;
68 struct uncached_list *rt_uncached_list;
67}; 69};
68 70
69static inline bool rt_is_input_route(const struct rtable *rt) 71static inline bool rt_is_input_route(const struct rtable *rt)
diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h
index e21b9f9653c0..6c6d5393fc34 100644
--- a/include/net/rtnetlink.h
+++ b/include/net/rtnetlink.h
@@ -46,6 +46,7 @@ static inline int rtnl_msg_family(const struct nlmsghdr *nlh)
46 * to create when creating a new device. 46 * to create when creating a new device.
47 * @get_num_rx_queues: Function to determine number of receive queues 47 * @get_num_rx_queues: Function to determine number of receive queues
48 * to create when creating a new device. 48 * to create when creating a new device.
49 * @get_link_net: Function to get the i/o netns of the device
49 */ 50 */
50struct rtnl_link_ops { 51struct rtnl_link_ops {
51 struct list_head list; 52 struct list_head list;
@@ -93,6 +94,7 @@ struct rtnl_link_ops {
93 int (*fill_slave_info)(struct sk_buff *skb, 94 int (*fill_slave_info)(struct sk_buff *skb,
94 const struct net_device *dev, 95 const struct net_device *dev,
95 const struct net_device *slave_dev); 96 const struct net_device *slave_dev);
97 struct net *(*get_link_net)(const struct net_device *dev);
96}; 98};
97 99
98int __rtnl_link_register(struct rtnl_link_ops *ops); 100int __rtnl_link_register(struct rtnl_link_ops *ops);
diff --git a/include/net/sock.h b/include/net/sock.h
index 2210fec65669..e13824570b0f 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -857,18 +857,6 @@ static inline void sock_rps_record_flow_hash(__u32 hash)
857#endif 857#endif
858} 858}
859 859
860static inline void sock_rps_reset_flow_hash(__u32 hash)
861{
862#ifdef CONFIG_RPS
863 struct rps_sock_flow_table *sock_flow_table;
864
865 rcu_read_lock();
866 sock_flow_table = rcu_dereference(rps_sock_flow_table);
867 rps_reset_sock_flow(sock_flow_table, hash);
868 rcu_read_unlock();
869#endif
870}
871
872static inline void sock_rps_record_flow(const struct sock *sk) 860static inline void sock_rps_record_flow(const struct sock *sk)
873{ 861{
874#ifdef CONFIG_RPS 862#ifdef CONFIG_RPS
@@ -876,28 +864,18 @@ static inline void sock_rps_record_flow(const struct sock *sk)
876#endif 864#endif
877} 865}
878 866
879static inline void sock_rps_reset_flow(const struct sock *sk)
880{
881#ifdef CONFIG_RPS
882 sock_rps_reset_flow_hash(sk->sk_rxhash);
883#endif
884}
885
886static inline void sock_rps_save_rxhash(struct sock *sk, 867static inline void sock_rps_save_rxhash(struct sock *sk,
887 const struct sk_buff *skb) 868 const struct sk_buff *skb)
888{ 869{
889#ifdef CONFIG_RPS 870#ifdef CONFIG_RPS
890 if (unlikely(sk->sk_rxhash != skb->hash)) { 871 if (unlikely(sk->sk_rxhash != skb->hash))
891 sock_rps_reset_flow(sk);
892 sk->sk_rxhash = skb->hash; 872 sk->sk_rxhash = skb->hash;
893 }
894#endif 873#endif
895} 874}
896 875
897static inline void sock_rps_reset_rxhash(struct sock *sk) 876static inline void sock_rps_reset_rxhash(struct sock *sk)
898{ 877{
899#ifdef CONFIG_RPS 878#ifdef CONFIG_RPS
900 sock_rps_reset_flow(sk);
901 sk->sk_rxhash = 0; 879 sk->sk_rxhash = 0;
902#endif 880#endif
903} 881}
@@ -1374,29 +1352,6 @@ void sk_prot_clear_portaddr_nulls(struct sock *sk, int size);
1374#define SOCK_BINDADDR_LOCK 4 1352#define SOCK_BINDADDR_LOCK 4
1375#define SOCK_BINDPORT_LOCK 8 1353#define SOCK_BINDPORT_LOCK 8
1376 1354
1377/* sock_iocb: used to kick off async processing of socket ios */
1378struct sock_iocb {
1379 struct list_head list;
1380
1381 int flags;
1382 int size;
1383 struct socket *sock;
1384 struct sock *sk;
1385 struct scm_cookie *scm;
1386 struct msghdr *msg, async_msg;
1387 struct kiocb *kiocb;
1388};
1389
1390static inline struct sock_iocb *kiocb_to_siocb(struct kiocb *iocb)
1391{
1392 return (struct sock_iocb *)iocb->private;
1393}
1394
1395static inline struct kiocb *siocb_to_kiocb(struct sock_iocb *si)
1396{
1397 return si->kiocb;
1398}
1399
1400struct socket_alloc { 1355struct socket_alloc {
1401 struct socket socket; 1356 struct socket socket;
1402 struct inode vfs_inode; 1357 struct inode vfs_inode;
@@ -1826,27 +1781,25 @@ static inline void sk_nocaps_add(struct sock *sk, netdev_features_t flags)
1826} 1781}
1827 1782
1828static inline int skb_do_copy_data_nocache(struct sock *sk, struct sk_buff *skb, 1783static inline int skb_do_copy_data_nocache(struct sock *sk, struct sk_buff *skb,
1829 char __user *from, char *to, 1784 struct iov_iter *from, char *to,
1830 int copy, int offset) 1785 int copy, int offset)
1831{ 1786{
1832 if (skb->ip_summed == CHECKSUM_NONE) { 1787 if (skb->ip_summed == CHECKSUM_NONE) {
1833 int err = 0; 1788 __wsum csum = 0;
1834 __wsum csum = csum_and_copy_from_user(from, to, copy, 0, &err); 1789 if (csum_and_copy_from_iter(to, copy, &csum, from) != copy)
1835 if (err) 1790 return -EFAULT;
1836 return err;
1837 skb->csum = csum_block_add(skb->csum, csum, offset); 1791 skb->csum = csum_block_add(skb->csum, csum, offset);
1838 } else if (sk->sk_route_caps & NETIF_F_NOCACHE_COPY) { 1792 } else if (sk->sk_route_caps & NETIF_F_NOCACHE_COPY) {
1839 if (!access_ok(VERIFY_READ, from, copy) || 1793 if (copy_from_iter_nocache(to, copy, from) != copy)
1840 __copy_from_user_nocache(to, from, copy))
1841 return -EFAULT; 1794 return -EFAULT;
1842 } else if (copy_from_user(to, from, copy)) 1795 } else if (copy_from_iter(to, copy, from) != copy)
1843 return -EFAULT; 1796 return -EFAULT;
1844 1797
1845 return 0; 1798 return 0;
1846} 1799}
1847 1800
1848static inline int skb_add_data_nocache(struct sock *sk, struct sk_buff *skb, 1801static inline int skb_add_data_nocache(struct sock *sk, struct sk_buff *skb,
1849 char __user *from, int copy) 1802 struct iov_iter *from, int copy)
1850{ 1803{
1851 int err, offset = skb->len; 1804 int err, offset = skb->len;
1852 1805
@@ -1858,7 +1811,7 @@ static inline int skb_add_data_nocache(struct sock *sk, struct sk_buff *skb,
1858 return err; 1811 return err;
1859} 1812}
1860 1813
1861static inline int skb_copy_to_page_nocache(struct sock *sk, char __user *from, 1814static inline int skb_copy_to_page_nocache(struct sock *sk, struct iov_iter *from,
1862 struct sk_buff *skb, 1815 struct sk_buff *skb,
1863 struct page *page, 1816 struct page *page,
1864 int off, int copy) 1817 int off, int copy)
@@ -2262,6 +2215,7 @@ bool sk_net_capable(const struct sock *sk, int cap);
2262extern __u32 sysctl_wmem_max; 2215extern __u32 sysctl_wmem_max;
2263extern __u32 sysctl_rmem_max; 2216extern __u32 sysctl_rmem_max;
2264 2217
2218extern int sysctl_tstamp_allow_data;
2265extern int sysctl_optmem_max; 2219extern int sysctl_optmem_max;
2266 2220
2267extern __u32 sysctl_wmem_default; 2221extern __u32 sysctl_wmem_default;
diff --git a/include/net/switchdev.h b/include/net/switchdev.h
index 8a6d1641fd9b..cfcdac2e5d25 100644
--- a/include/net/switchdev.h
+++ b/include/net/switchdev.h
@@ -11,13 +11,46 @@
11#define _LINUX_SWITCHDEV_H_ 11#define _LINUX_SWITCHDEV_H_
12 12
13#include <linux/netdevice.h> 13#include <linux/netdevice.h>
14#include <linux/notifier.h>
15
16enum netdev_switch_notifier_type {
17 NETDEV_SWITCH_FDB_ADD = 1,
18 NETDEV_SWITCH_FDB_DEL,
19};
20
21struct netdev_switch_notifier_info {
22 struct net_device *dev;
23};
24
25struct netdev_switch_notifier_fdb_info {
26 struct netdev_switch_notifier_info info; /* must be first */
27 const unsigned char *addr;
28 u16 vid;
29};
30
31static inline struct net_device *
32netdev_switch_notifier_info_to_dev(const struct netdev_switch_notifier_info *info)
33{
34 return info->dev;
35}
14 36
15#ifdef CONFIG_NET_SWITCHDEV 37#ifdef CONFIG_NET_SWITCHDEV
16 38
17int netdev_switch_parent_id_get(struct net_device *dev, 39int netdev_switch_parent_id_get(struct net_device *dev,
18 struct netdev_phys_item_id *psid); 40 struct netdev_phys_item_id *psid);
19int netdev_switch_port_stp_update(struct net_device *dev, u8 state); 41int netdev_switch_port_stp_update(struct net_device *dev, u8 state);
20 42int register_netdev_switch_notifier(struct notifier_block *nb);
43int unregister_netdev_switch_notifier(struct notifier_block *nb);
44int call_netdev_switch_notifiers(unsigned long val, struct net_device *dev,
45 struct netdev_switch_notifier_info *info);
46int netdev_switch_port_bridge_setlink(struct net_device *dev,
47 struct nlmsghdr *nlh, u16 flags);
48int netdev_switch_port_bridge_dellink(struct net_device *dev,
49 struct nlmsghdr *nlh, u16 flags);
50int ndo_dflt_netdev_switch_port_bridge_dellink(struct net_device *dev,
51 struct nlmsghdr *nlh, u16 flags);
52int ndo_dflt_netdev_switch_port_bridge_setlink(struct net_device *dev,
53 struct nlmsghdr *nlh, u16 flags);
21#else 54#else
22 55
23static inline int netdev_switch_parent_id_get(struct net_device *dev, 56static inline int netdev_switch_parent_id_get(struct net_device *dev,
@@ -32,6 +65,50 @@ static inline int netdev_switch_port_stp_update(struct net_device *dev,
32 return -EOPNOTSUPP; 65 return -EOPNOTSUPP;
33} 66}
34 67
68static inline int register_netdev_switch_notifier(struct notifier_block *nb)
69{
70 return 0;
71}
72
73static inline int unregister_netdev_switch_notifier(struct notifier_block *nb)
74{
75 return 0;
76}
77
78static inline int call_netdev_switch_notifiers(unsigned long val, struct net_device *dev,
79 struct netdev_switch_notifier_info *info)
80{
81 return NOTIFY_DONE;
82}
83
84static inline int netdev_switch_port_bridge_setlink(struct net_device *dev,
85 struct nlmsghdr *nlh,
86 u16 flags)
87{
88 return -EOPNOTSUPP;
89}
90
91static inline int netdev_switch_port_bridge_dellink(struct net_device *dev,
92 struct nlmsghdr *nlh,
93 u16 flags)
94{
95 return -EOPNOTSUPP;
96}
97
98static inline int ndo_dflt_netdev_switch_port_bridge_dellink(struct net_device *dev,
99 struct nlmsghdr *nlh,
100 u16 flags)
101{
102 return 0;
103}
104
105static inline int ndo_dflt_netdev_switch_port_bridge_setlink(struct net_device *dev,
106 struct nlmsghdr *nlh,
107 u16 flags)
108{
109 return 0;
110}
111
35#endif 112#endif
36 113
37#endif /* _LINUX_SWITCHDEV_H_ */ 114#endif /* _LINUX_SWITCHDEV_H_ */
diff --git a/include/net/tc_act/tc_bpf.h b/include/net/tc_act/tc_bpf.h
new file mode 100644
index 000000000000..86a070ffc930
--- /dev/null
+++ b/include/net/tc_act/tc_bpf.h
@@ -0,0 +1,25 @@
1/*
2 * Copyright (c) 2015 Jiri Pirko <jiri@resnulli.us>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 */
9
10#ifndef __NET_TC_BPF_H
11#define __NET_TC_BPF_H
12
13#include <linux/filter.h>
14#include <net/act_api.h>
15
16struct tcf_bpf {
17 struct tcf_common common;
18 struct bpf_prog *filter;
19 struct sock_filter *bpf_ops;
20 u16 bpf_num_ops;
21};
22#define to_bpf(a) \
23 container_of(a->priv, struct tcf_bpf, common)
24
25#endif /* __NET_TC_BPF_H */
diff --git a/include/net/tc_act/tc_connmark.h b/include/net/tc_act/tc_connmark.h
new file mode 100644
index 000000000000..5c1104c2e24f
--- /dev/null
+++ b/include/net/tc_act/tc_connmark.h
@@ -0,0 +1,14 @@
1#ifndef __NET_TC_CONNMARK_H
2#define __NET_TC_CONNMARK_H
3
4#include <net/act_api.h>
5
6struct tcf_connmark_info {
7 struct tcf_common common;
8 u16 zone;
9};
10
11#define to_connmark(a) \
12 container_of(a->priv, struct tcf_connmark_info, common)
13
14#endif /* __NET_TC_CONNMARK_H */
diff --git a/include/net/tcp.h b/include/net/tcp.h
index 9d9111ef43ae..8d6b983d5099 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -262,8 +262,6 @@ extern int sysctl_tcp_low_latency;
262extern int sysctl_tcp_nometrics_save; 262extern int sysctl_tcp_nometrics_save;
263extern int sysctl_tcp_moderate_rcvbuf; 263extern int sysctl_tcp_moderate_rcvbuf;
264extern int sysctl_tcp_tso_win_divisor; 264extern int sysctl_tcp_tso_win_divisor;
265extern int sysctl_tcp_mtu_probing;
266extern int sysctl_tcp_base_mss;
267extern int sysctl_tcp_workaround_signed_windows; 265extern int sysctl_tcp_workaround_signed_windows;
268extern int sysctl_tcp_slow_start_after_idle; 266extern int sysctl_tcp_slow_start_after_idle;
269extern int sysctl_tcp_thin_linear_timeouts; 267extern int sysctl_tcp_thin_linear_timeouts;
@@ -274,6 +272,7 @@ extern int sysctl_tcp_challenge_ack_limit;
274extern unsigned int sysctl_tcp_notsent_lowat; 272extern unsigned int sysctl_tcp_notsent_lowat;
275extern int sysctl_tcp_min_tso_segs; 273extern int sysctl_tcp_min_tso_segs;
276extern int sysctl_tcp_autocorking; 274extern int sysctl_tcp_autocorking;
275extern int sysctl_tcp_invalid_ratelimit;
277 276
278extern atomic_long_t tcp_memory_allocated; 277extern atomic_long_t tcp_memory_allocated;
279extern struct percpu_counter tcp_sockets_allocated; 278extern struct percpu_counter tcp_sockets_allocated;
@@ -448,6 +447,7 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb);
448struct sock *tcp_create_openreq_child(struct sock *sk, 447struct sock *tcp_create_openreq_child(struct sock *sk,
449 struct request_sock *req, 448 struct request_sock *req,
450 struct sk_buff *skb); 449 struct sk_buff *skb);
450void tcp_ca_openreq_child(struct sock *sk, const struct dst_entry *dst);
451struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb, 451struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
452 struct request_sock *req, 452 struct request_sock *req,
453 struct dst_entry *dst); 453 struct dst_entry *dst);
@@ -636,6 +636,11 @@ static inline u32 tcp_rto_min_us(struct sock *sk)
636 return jiffies_to_usecs(tcp_rto_min(sk)); 636 return jiffies_to_usecs(tcp_rto_min(sk));
637} 637}
638 638
639static inline bool tcp_ca_dst_locked(const struct dst_entry *dst)
640{
641 return dst_metric_locked(dst, RTAX_CC_ALGO);
642}
643
639/* Compute the actual receive window we are currently advertising. 644/* Compute the actual receive window we are currently advertising.
640 * Rcv_nxt can be after the window if our peer push more data 645 * Rcv_nxt can be after the window if our peer push more data
641 * than the offered window. 646 * than the offered window.
@@ -787,6 +792,8 @@ enum tcp_ca_ack_event_flags {
787#define TCP_CA_MAX 128 792#define TCP_CA_MAX 128
788#define TCP_CA_BUF_MAX (TCP_CA_NAME_MAX*TCP_CA_MAX) 793#define TCP_CA_BUF_MAX (TCP_CA_NAME_MAX*TCP_CA_MAX)
789 794
795#define TCP_CA_UNSPEC 0
796
790/* Algorithm can be set on socket without CAP_NET_ADMIN privileges */ 797/* Algorithm can be set on socket without CAP_NET_ADMIN privileges */
791#define TCP_CONG_NON_RESTRICTED 0x1 798#define TCP_CONG_NON_RESTRICTED 0x1
792/* Requires ECN/ECT set on all packets */ 799/* Requires ECN/ECT set on all packets */
@@ -794,7 +801,8 @@ enum tcp_ca_ack_event_flags {
794 801
795struct tcp_congestion_ops { 802struct tcp_congestion_ops {
796 struct list_head list; 803 struct list_head list;
797 unsigned long flags; 804 u32 key;
805 u32 flags;
798 806
799 /* initialize private data (optional) */ 807 /* initialize private data (optional) */
800 void (*init)(struct sock *sk); 808 void (*init)(struct sock *sk);
@@ -841,6 +849,17 @@ u32 tcp_reno_ssthresh(struct sock *sk);
841void tcp_reno_cong_avoid(struct sock *sk, u32 ack, u32 acked); 849void tcp_reno_cong_avoid(struct sock *sk, u32 ack, u32 acked);
842extern struct tcp_congestion_ops tcp_reno; 850extern struct tcp_congestion_ops tcp_reno;
843 851
852struct tcp_congestion_ops *tcp_ca_find_key(u32 key);
853u32 tcp_ca_get_key_by_name(const char *name);
854#ifdef CONFIG_INET
855char *tcp_ca_get_name_by_key(u32 key, char *buffer);
856#else
857static inline char *tcp_ca_get_name_by_key(u32 key, char *buffer)
858{
859 return NULL;
860}
861#endif
862
844static inline bool tcp_ca_needs_ecn(const struct sock *sk) 863static inline bool tcp_ca_needs_ecn(const struct sock *sk)
845{ 864{
846 const struct inet_connection_sock *icsk = inet_csk(sk); 865 const struct inet_connection_sock *icsk = inet_csk(sk);
@@ -1124,6 +1143,7 @@ static inline void tcp_openreq_init(struct request_sock *req,
1124 tcp_rsk(req)->rcv_isn = TCP_SKB_CB(skb)->seq; 1143 tcp_rsk(req)->rcv_isn = TCP_SKB_CB(skb)->seq;
1125 tcp_rsk(req)->rcv_nxt = TCP_SKB_CB(skb)->seq + 1; 1144 tcp_rsk(req)->rcv_nxt = TCP_SKB_CB(skb)->seq + 1;
1126 tcp_rsk(req)->snt_synack = tcp_time_stamp; 1145 tcp_rsk(req)->snt_synack = tcp_time_stamp;
1146 tcp_rsk(req)->last_oow_ack_time = 0;
1127 req->mss = rx_opt->mss_clamp; 1147 req->mss = rx_opt->mss_clamp;
1128 req->ts_recent = rx_opt->saw_tstamp ? rx_opt->rcv_tsval : 0; 1148 req->ts_recent = rx_opt->saw_tstamp ? rx_opt->rcv_tsval : 0;
1129 ireq->tstamp_ok = rx_opt->tstamp_ok; 1149 ireq->tstamp_ok = rx_opt->tstamp_ok;
@@ -1216,6 +1236,37 @@ static inline bool tcp_paws_reject(const struct tcp_options_received *rx_opt,
1216 return true; 1236 return true;
1217} 1237}
1218 1238
1239/* Return true if we're currently rate-limiting out-of-window ACKs and
1240 * thus shouldn't send a dupack right now. We rate-limit dupacks in
1241 * response to out-of-window SYNs or ACKs to mitigate ACK loops or DoS
1242 * attacks that send repeated SYNs or ACKs for the same connection. To
1243 * do this, we do not send a duplicate SYNACK or ACK if the remote
1244 * endpoint is sending out-of-window SYNs or pure ACKs at a high rate.
1245 */
1246static inline bool tcp_oow_rate_limited(struct net *net,
1247 const struct sk_buff *skb,
1248 int mib_idx, u32 *last_oow_ack_time)
1249{
1250 /* Data packets without SYNs are not likely part of an ACK loop. */
1251 if ((TCP_SKB_CB(skb)->seq != TCP_SKB_CB(skb)->end_seq) &&
1252 !tcp_hdr(skb)->syn)
1253 goto not_rate_limited;
1254
1255 if (*last_oow_ack_time) {
1256 s32 elapsed = (s32)(tcp_time_stamp - *last_oow_ack_time);
1257
1258 if (0 <= elapsed && elapsed < sysctl_tcp_invalid_ratelimit) {
1259 NET_INC_STATS_BH(net, mib_idx);
1260 return true; /* rate-limited: don't send yet! */
1261 }
1262 }
1263
1264 *last_oow_ack_time = tcp_time_stamp;
1265
1266not_rate_limited:
1267 return false; /* not rate-limited: go ahead, send dupack now! */
1268}
1269
1219static inline void tcp_mib_init(struct net *net) 1270static inline void tcp_mib_init(struct net *net)
1220{ 1271{
1221 /* See RFC 2012 */ 1272 /* See RFC 2012 */
@@ -1693,4 +1744,19 @@ static inline struct ip_options_rcu *tcp_v4_save_options(struct sk_buff *skb)
1693 return dopt; 1744 return dopt;
1694} 1745}
1695 1746
1747/* locally generated TCP pure ACKs have skb->truesize == 2
1748 * (check tcp_send_ack() in net/ipv4/tcp_output.c )
1749 * This is much faster than dissecting the packet to find out.
1750 * (Think of GRE encapsulations, IPv4, IPv6, ...)
1751 */
1752static inline bool skb_is_tcp_pure_ack(const struct sk_buff *skb)
1753{
1754 return skb->truesize == 2;
1755}
1756
1757static inline void skb_set_tcp_pure_ack(struct sk_buff *skb)
1758{
1759 skb->truesize = 2;
1760}
1761
1696#endif /* _TCP_H */ 1762#endif /* _TCP_H */
diff --git a/include/net/udp_tunnel.h b/include/net/udp_tunnel.h
index 2a50a70ef587..1a20d33d56bc 100644
--- a/include/net/udp_tunnel.h
+++ b/include/net/udp_tunnel.h
@@ -77,17 +77,17 @@ void setup_udp_tunnel_sock(struct net *net, struct socket *sock,
77 struct udp_tunnel_sock_cfg *sock_cfg); 77 struct udp_tunnel_sock_cfg *sock_cfg);
78 78
79/* Transmit the skb using UDP encapsulation. */ 79/* Transmit the skb using UDP encapsulation. */
80int udp_tunnel_xmit_skb(struct socket *sock, struct rtable *rt, 80int udp_tunnel_xmit_skb(struct rtable *rt, struct sk_buff *skb,
81 struct sk_buff *skb, __be32 src, __be32 dst, 81 __be32 src, __be32 dst, __u8 tos, __u8 ttl,
82 __u8 tos, __u8 ttl, __be16 df, __be16 src_port, 82 __be16 df, __be16 src_port, __be16 dst_port,
83 __be16 dst_port, bool xnet); 83 bool xnet, bool nocheck);
84 84
85#if IS_ENABLED(CONFIG_IPV6) 85#if IS_ENABLED(CONFIG_IPV6)
86int udp_tunnel6_xmit_skb(struct socket *sock, struct dst_entry *dst, 86int udp_tunnel6_xmit_skb(struct dst_entry *dst, struct sk_buff *skb,
87 struct sk_buff *skb, struct net_device *dev, 87 struct net_device *dev, struct in6_addr *saddr,
88 struct in6_addr *saddr, struct in6_addr *daddr, 88 struct in6_addr *daddr,
89 __u8 prio, __u8 ttl, __be16 src_port, 89 __u8 prio, __u8 ttl, __be16 src_port,
90 __be16 dst_port); 90 __be16 dst_port, bool nocheck);
91#endif 91#endif
92 92
93void udp_tunnel_sock_release(struct socket *sock); 93void udp_tunnel_sock_release(struct socket *sock);
diff --git a/include/net/udplite.h b/include/net/udplite.h
index ae7c8d1fbcad..80761938b9a7 100644
--- a/include/net/udplite.h
+++ b/include/net/udplite.h
@@ -20,8 +20,7 @@ static __inline__ int udplite_getfrag(void *from, char *to, int offset,
20 int len, int odd, struct sk_buff *skb) 20 int len, int odd, struct sk_buff *skb)
21{ 21{
22 struct msghdr *msg = from; 22 struct msghdr *msg = from;
23 /* XXX: stripping const */ 23 return copy_from_iter(to, len, &msg->msg_iter) != len ? -EFAULT : 0;
24 return memcpy_fromiovecend(to, (struct iovec *)msg->msg_iter.iov, offset, len);
25} 24}
26 25
27/* Designate sk as UDP-Lite socket */ 26/* Designate sk as UDP-Lite socket */
diff --git a/include/net/vxlan.h b/include/net/vxlan.h
index 903461aa5644..2927d6244481 100644
--- a/include/net/vxlan.h
+++ b/include/net/vxlan.h
@@ -11,14 +11,96 @@
11#define VNI_HASH_BITS 10 11#define VNI_HASH_BITS 10
12#define VNI_HASH_SIZE (1<<VNI_HASH_BITS) 12#define VNI_HASH_SIZE (1<<VNI_HASH_BITS)
13 13
14/* VXLAN protocol header */ 14/*
15 * VXLAN Group Based Policy Extension:
16 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
17 * |1|-|-|-|1|-|-|-|R|D|R|R|A|R|R|R| Group Policy ID |
18 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
19 * | VXLAN Network Identifier (VNI) | Reserved |
20 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
21 *
22 * D = Don't Learn bit. When set, this bit indicates that the egress
23 * VTEP MUST NOT learn the source address of the encapsulated frame.
24 *
25 * A = Indicates that the group policy has already been applied to
26 * this packet. Policies MUST NOT be applied by devices when the
27 * A bit is set.
28 *
29 * [0] https://tools.ietf.org/html/draft-smith-vxlan-group-policy
30 */
31struct vxlanhdr_gbp {
32 __u8 vx_flags;
33#ifdef __LITTLE_ENDIAN_BITFIELD
34 __u8 reserved_flags1:3,
35 policy_applied:1,
36 reserved_flags2:2,
37 dont_learn:1,
38 reserved_flags3:1;
39#elif defined(__BIG_ENDIAN_BITFIELD)
40 __u8 reserved_flags1:1,
41 dont_learn:1,
42 reserved_flags2:2,
43 policy_applied:1,
44 reserved_flags3:3;
45#else
46#error "Please fix <asm/byteorder.h>"
47#endif
48 __be16 policy_id;
49 __be32 vx_vni;
50};
51
52#define VXLAN_GBP_USED_BITS (VXLAN_HF_GBP | 0xFFFFFF)
53
54/* skb->mark mapping
55 *
56 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
57 * |R|R|R|R|R|R|R|R|R|D|R|R|A|R|R|R| Group Policy ID |
58 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
59 */
60#define VXLAN_GBP_DONT_LEARN (BIT(6) << 16)
61#define VXLAN_GBP_POLICY_APPLIED (BIT(3) << 16)
62#define VXLAN_GBP_ID_MASK (0xFFFF)
63
64/* VXLAN protocol header:
65 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
66 * |G|R|R|R|I|R|R|C| Reserved |
67 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
68 * | VXLAN Network Identifier (VNI) | Reserved |
69 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
70 *
71 * G = 1 Group Policy (VXLAN-GBP)
72 * I = 1 VXLAN Network Identifier (VNI) present
73 * C = 1 Remote checksum offload (RCO)
74 */
15struct vxlanhdr { 75struct vxlanhdr {
16 __be32 vx_flags; 76 __be32 vx_flags;
17 __be32 vx_vni; 77 __be32 vx_vni;
18}; 78};
19 79
80/* VXLAN header flags. */
81#define VXLAN_HF_RCO BIT(24)
82#define VXLAN_HF_VNI BIT(27)
83#define VXLAN_HF_GBP BIT(31)
84
85/* Remote checksum offload header option */
86#define VXLAN_RCO_MASK 0x7f /* Last byte of vni field */
87#define VXLAN_RCO_UDP 0x80 /* Indicate UDP RCO (TCP when not set *) */
88#define VXLAN_RCO_SHIFT 1 /* Left shift of start */
89#define VXLAN_RCO_SHIFT_MASK ((1 << VXLAN_RCO_SHIFT) - 1)
90#define VXLAN_MAX_REMCSUM_START (VXLAN_RCO_MASK << VXLAN_RCO_SHIFT)
91
92#define VXLAN_N_VID (1u << 24)
93#define VXLAN_VID_MASK (VXLAN_N_VID - 1)
94#define VXLAN_HLEN (sizeof(struct udphdr) + sizeof(struct vxlanhdr))
95
96struct vxlan_metadata {
97 __be32 vni;
98 u32 gbp;
99};
100
20struct vxlan_sock; 101struct vxlan_sock;
21typedef void (vxlan_rcv_t)(struct vxlan_sock *vh, struct sk_buff *skb, __be32 key); 102typedef void (vxlan_rcv_t)(struct vxlan_sock *vh, struct sk_buff *skb,
103 struct vxlan_metadata *md);
22 104
23/* per UDP socket information */ 105/* per UDP socket information */
24struct vxlan_sock { 106struct vxlan_sock {
@@ -31,6 +113,7 @@ struct vxlan_sock {
31 struct hlist_head vni_list[VNI_HASH_SIZE]; 113 struct hlist_head vni_list[VNI_HASH_SIZE];
32 atomic_t refcnt; 114 atomic_t refcnt;
33 struct udp_offload udp_offloads; 115 struct udp_offload udp_offloads;
116 u32 flags;
34}; 117};
35 118
36#define VXLAN_F_LEARN 0x01 119#define VXLAN_F_LEARN 0x01
@@ -42,6 +125,16 @@ struct vxlan_sock {
42#define VXLAN_F_UDP_CSUM 0x40 125#define VXLAN_F_UDP_CSUM 0x40
43#define VXLAN_F_UDP_ZERO_CSUM6_TX 0x80 126#define VXLAN_F_UDP_ZERO_CSUM6_TX 0x80
44#define VXLAN_F_UDP_ZERO_CSUM6_RX 0x100 127#define VXLAN_F_UDP_ZERO_CSUM6_RX 0x100
128#define VXLAN_F_REMCSUM_TX 0x200
129#define VXLAN_F_REMCSUM_RX 0x400
130#define VXLAN_F_GBP 0x800
131
132/* Flags that are used in the receive patch. These flags must match in
133 * order for a socket to be shareable
134 */
135#define VXLAN_F_RCV_FLAGS (VXLAN_F_GBP | \
136 VXLAN_F_UDP_ZERO_CSUM6_RX | \
137 VXLAN_F_REMCSUM_RX)
45 138
46struct vxlan_sock *vxlan_sock_add(struct net *net, __be16 port, 139struct vxlan_sock *vxlan_sock_add(struct net *net, __be16 port,
47 vxlan_rcv_t *rcv, void *data, 140 vxlan_rcv_t *rcv, void *data,
@@ -49,10 +142,10 @@ struct vxlan_sock *vxlan_sock_add(struct net *net, __be16 port,
49 142
50void vxlan_sock_release(struct vxlan_sock *vs); 143void vxlan_sock_release(struct vxlan_sock *vs);
51 144
52int vxlan_xmit_skb(struct vxlan_sock *vs, 145int vxlan_xmit_skb(struct rtable *rt, struct sk_buff *skb,
53 struct rtable *rt, struct sk_buff *skb,
54 __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df, 146 __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df,
55 __be16 src_port, __be16 dst_port, __be32 vni, bool xnet); 147 __be16 src_port, __be16 dst_port, struct vxlan_metadata *md,
148 bool xnet, u32 vxflags);
56 149
57static inline netdev_features_t vxlan_features_check(struct sk_buff *skb, 150static inline netdev_features_t vxlan_features_check(struct sk_buff *skb,
58 netdev_features_t features) 151 netdev_features_t features)