aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-01-06 15:30:19 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-06 15:30:19 -0500
commitabb359450f20c32ae03039d8736f12b1d561caf5 (patch)
tree6e8723885feb66a138f19f0ff31615dc13a8d859 /include
parentcb600d2f83c854ec3d6660063e4466431999489b (diff)
parent4e3dbdb1392a83bd21a6ff8f6bc785495058d37c (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1436 commits) cassini: Use local-mac-address prom property for Cassini MAC address net: remove the duplicate #ifdef __KERNEL__ net: bridge: check the length of skb after nf_bridge_maybe_copy_header() netconsole: clarify stopping message netconsole: don't announce stopping if nothing happened cnic: Fix the type field in SPQ messages netfilter: fix export secctx error handling netfilter: fix the race when initializing nf_ct_expect_hash_rnd ipv4: IP defragmentation must be ECN aware net: r6040: Return proper error for r6040_init_one dcb: use after free in dcb_flushapp() dcb: unlock on error in dcbnl_ieee_get() net: ixp4xx_eth: Return proper error for eth_init_one include/linux/if_ether.h: Add #define ETH_P_LINK_CTL for HPNA and wlan local tunnel net: add POLLPRI to sock_def_readable() af_unix: Avoid socket->sk NULL OOPS in stream connect security hooks. net_sched: pfifo_head_drop problem mac80211: remove stray extern mac80211: implement off-channel TX using hw r-o-c offload mac80211: implement hardware offload for remain-on-channel ...
Diffstat (limited to 'include')
-rw-r--r--include/linux/average.h30
-rw-r--r--include/linux/bitops.h11
-rw-r--r--include/linux/dcbnl.h184
-rw-r--r--include/linux/dccp.h23
-rw-r--r--include/linux/ethtool.h4
-rw-r--r--include/linux/filter.h56
-rw-r--r--include/linux/ieee80211.h30
-rw-r--r--include/linux/if_bridge.h4
-rw-r--r--include/linux/if_ether.h1
-rw-r--r--include/linux/if_link.h28
-rw-r--r--include/linux/if_macvlan.h34
-rw-r--r--include/linux/igmp.h18
-rw-r--r--include/linux/inetdevice.h15
-rw-r--r--include/linux/ipv6.h2
-rw-r--r--include/linux/jhash.h183
-rw-r--r--include/linux/mdio.h5
-rw-r--r--include/linux/netdevice.h89
-rw-r--r--include/linux/netfilter.h2
-rw-r--r--include/linux/nl80211.h188
-rw-r--r--include/linux/rfkill.h31
-rw-r--r--include/linux/security.h15
-rw-r--r--include/linux/skbuff.h13
-rw-r--r--include/linux/socket.h8
-rw-r--r--include/linux/ssb/ssb.h4
-rw-r--r--include/linux/ssb/ssb_regs.h40
-rw-r--r--include/linux/stmmac.h6
-rw-r--r--include/linux/tipc.h18
-rw-r--r--include/linux/tipc_config.h76
-rw-r--r--include/linux/usb/usbnet.h6
-rw-r--r--include/linux/wl12xx.h8
-rw-r--r--include/linux/xfrm.h1
-rw-r--r--include/net/addrconf.h2
-rw-r--r--include/net/bluetooth/bluetooth.h1
-rw-r--r--include/net/bluetooth/hci.h20
-rw-r--r--include/net/bluetooth/hci_core.h23
-rw-r--r--include/net/bluetooth/l2cap.h22
-rw-r--r--include/net/bluetooth/mgmt.h87
-rw-r--r--include/net/bluetooth/rfcomm.h18
-rw-r--r--include/net/bluetooth/sco.h20
-rw-r--r--include/net/caif/cfctrl.h2
-rw-r--r--include/net/cfg80211.h171
-rw-r--r--include/net/dcbevent.h31
-rw-r--r--include/net/dcbnl.h28
-rw-r--r--include/net/dn_dev.h27
-rw-r--r--include/net/dn_route.h10
-rw-r--r--include/net/dst.h68
-rw-r--r--include/net/dst_ops.h2
-rw-r--r--include/net/flow.h2
-rw-r--r--include/net/if_inet6.h3
-rw-r--r--include/net/inet6_connection_sock.h3
-rw-r--r--include/net/inet_connection_sock.h3
-rw-r--r--include/net/inet_sock.h7
-rw-r--r--include/net/inet_timewait_sock.h20
-rw-r--r--include/net/inetpeer.h32
-rw-r--r--include/net/ip.h10
-rw-r--r--include/net/ip6_fib.h2
-rw-r--r--include/net/ip6_route.h13
-rw-r--r--include/net/mac80211.h125
-rw-r--r--include/net/ndisc.h3
-rw-r--r--include/net/neighbour.h10
-rw-r--r--include/net/netfilter/nf_conntrack.h2
-rw-r--r--include/net/netlink.h21
-rw-r--r--include/net/netns/generic.h2
-rw-r--r--include/net/regulatory.h7
-rw-r--r--include/net/route.h37
-rw-r--r--include/net/rtnetlink.h35
-rw-r--r--include/net/sch_generic.h1
-rw-r--r--include/net/scm.h5
-rw-r--r--include/net/sctp/command.h3
-rw-r--r--include/net/sctp/constants.h14
-rw-r--r--include/net/sctp/structs.h2
-rw-r--r--include/net/snmp.h4
-rw-r--r--include/net/sock.h97
-rw-r--r--include/net/tcp.h22
-rw-r--r--include/net/timewait_sock.h8
-rw-r--r--include/net/tipc/tipc.h186
-rw-r--r--include/net/tipc/tipc_bearer.h138
-rw-r--r--include/net/tipc/tipc_msg.h207
-rw-r--r--include/net/tipc/tipc_port.h101
-rw-r--r--include/net/x25.h2
-rw-r--r--include/net/xfrm.h7
81 files changed, 1643 insertions, 1156 deletions
diff --git a/include/linux/average.h b/include/linux/average.h
new file mode 100644
index 000000000000..c6028fd742c1
--- /dev/null
+++ b/include/linux/average.h
@@ -0,0 +1,30 @@
1#ifndef _LINUX_AVERAGE_H
2#define _LINUX_AVERAGE_H
3
4/* Exponentially weighted moving average (EWMA) */
5
6/* For more documentation see lib/average.c */
7
8struct ewma {
9 unsigned long internal;
10 unsigned long factor;
11 unsigned long weight;
12};
13
14extern void ewma_init(struct ewma *avg, unsigned long factor,
15 unsigned long weight);
16
17extern struct ewma *ewma_add(struct ewma *avg, unsigned long val);
18
19/**
20 * ewma_read() - Get average value
21 * @avg: Average structure
22 *
23 * Returns the average value held in @avg.
24 */
25static inline unsigned long ewma_read(const struct ewma *avg)
26{
27 return avg->internal >> avg->factor;
28}
29
30#endif /* _LINUX_AVERAGE_H */
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index 827cc95711ef..2184c6b97aeb 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -109,6 +109,17 @@ static inline __u8 ror8(__u8 word, unsigned int shift)
109 return (word >> shift) | (word << (8 - shift)); 109 return (word >> shift) | (word << (8 - shift));
110} 110}
111 111
112/**
113 * sign_extend32 - sign extend a 32-bit value using specified bit as sign-bit
114 * @value: value to sign extend
115 * @index: 0 based bit index (0<=index<32) to sign bit
116 */
117static inline __s32 sign_extend32(__u32 value, int index)
118{
119 __u8 shift = 31 - index;
120 return (__s32)(value << shift) >> shift;
121}
122
112static inline unsigned fls_long(unsigned long l) 123static inline unsigned fls_long(unsigned long l)
113{ 124{
114 if (sizeof(l) == 4) 125 if (sizeof(l) == 4)
diff --git a/include/linux/dcbnl.h b/include/linux/dcbnl.h
index 8723491f7dfd..68cd248f6d3e 100644
--- a/include/linux/dcbnl.h
+++ b/include/linux/dcbnl.h
@@ -22,6 +22,89 @@
22 22
23#include <linux/types.h> 23#include <linux/types.h>
24 24
25/* IEEE 802.1Qaz std supported values */
26#define IEEE_8021QAZ_MAX_TCS 8
27
28/* This structure contains the IEEE 802.1Qaz ETS managed object
29 *
30 * @willing: willing bit in ETS configuratin TLV
31 * @ets_cap: indicates supported capacity of ets feature
32 * @cbs: credit based shaper ets algorithm supported
33 * @tc_tx_bw: tc tx bandwidth indexed by traffic class
34 * @tc_rx_bw: tc rx bandwidth indexed by traffic class
35 * @tc_tsa: TSA Assignment table, indexed by traffic class
36 * @prio_tc: priority assignment table mapping 8021Qp to traffic class
37 * @tc_reco_bw: recommended tc bandwidth indexed by traffic class for TLV
38 * @tc_reco_tsa: recommended tc bandwidth indexed by traffic class for TLV
39 * @reco_prio_tc: recommended tc tx bandwidth indexed by traffic class for TLV
40 *
41 * Recommended values are used to set fields in the ETS recommendation TLV
42 * with hardware offloaded LLDP.
43 *
44 * ----
45 * TSA Assignment 8 bit identifiers
46 * 0 strict priority
47 * 1 credit-based shaper
48 * 2 enhanced transmission selection
49 * 3-254 reserved
50 * 255 vendor specific
51 */
52struct ieee_ets {
53 __u8 willing;
54 __u8 ets_cap;
55 __u8 cbs;
56 __u8 tc_tx_bw[IEEE_8021QAZ_MAX_TCS];
57 __u8 tc_rx_bw[IEEE_8021QAZ_MAX_TCS];
58 __u8 tc_tsa[IEEE_8021QAZ_MAX_TCS];
59 __u8 prio_tc[IEEE_8021QAZ_MAX_TCS];
60 __u8 tc_reco_bw[IEEE_8021QAZ_MAX_TCS];
61 __u8 tc_reco_tsa[IEEE_8021QAZ_MAX_TCS];
62 __u8 reco_prio_tc[IEEE_8021QAZ_MAX_TCS];
63};
64
65/* This structure contains the IEEE 802.1Qaz PFC managed object
66 *
67 * @pfc_cap: Indicates the number of traffic classes on the local device
68 * that may simultaneously have PFC enabled.
69 * @pfc_en: bitmap indicating pfc enabled traffic classes
70 * @mbc: enable macsec bypass capability
71 * @delay: the allowance made for a round-trip propagation delay of the
72 * link in bits.
73 * @requests: count of the sent pfc frames
74 * @indications: count of the received pfc frames
75 */
76struct ieee_pfc {
77 __u8 pfc_cap;
78 __u8 pfc_en;
79 __u8 mbc;
80 __u16 delay;
81 __u64 requests[IEEE_8021QAZ_MAX_TCS];
82 __u64 indications[IEEE_8021QAZ_MAX_TCS];
83};
84
85/* This structure contains the IEEE 802.1Qaz APP managed object. This
86 * object is also used for the CEE std as well. There is no difference
87 * between the objects.
88 *
89 * @selector: protocol identifier type
90 * @protocol: protocol of type indicated
91 * @priority: 3-bit unsigned integer indicating priority
92 *
93 * ----
94 * Selector field values
95 * 0 Reserved
96 * 1 Ethertype
97 * 2 Well known port number over TCP or SCTP
98 * 3 Well known port number over UDP or DCCP
99 * 4 Well known port number over TCP, SCTP, UDP, or DCCP
100 * 5-7 Reserved
101 */
102struct dcb_app {
103 __u8 selector;
104 __u32 protocol;
105 __u8 priority;
106};
107
25struct dcbmsg { 108struct dcbmsg {
26 __u8 dcb_family; 109 __u8 dcb_family;
27 __u8 cmd; 110 __u8 cmd;
@@ -50,6 +133,12 @@ struct dcbmsg {
50 * @DCB_CMD_SBCN: get backward congestion notification configration. 133 * @DCB_CMD_SBCN: get backward congestion notification configration.
51 * @DCB_CMD_GAPP: get application protocol configuration 134 * @DCB_CMD_GAPP: get application protocol configuration
52 * @DCB_CMD_SAPP: set application protocol configuration 135 * @DCB_CMD_SAPP: set application protocol configuration
136 * @DCB_CMD_IEEE_SET: set IEEE 802.1Qaz configuration
137 * @DCB_CMD_IEEE_GET: get IEEE 802.1Qaz configuration
138 * @DCB_CMD_GDCBX: get DCBX engine configuration
139 * @DCB_CMD_SDCBX: set DCBX engine configuration
140 * @DCB_CMD_GFEATCFG: get DCBX features flags
141 * @DCB_CMD_SFEATCFG: set DCBX features negotiation flags
53 */ 142 */
54enum dcbnl_commands { 143enum dcbnl_commands {
55 DCB_CMD_UNDEFINED, 144 DCB_CMD_UNDEFINED,
@@ -83,6 +172,15 @@ enum dcbnl_commands {
83 DCB_CMD_GAPP, 172 DCB_CMD_GAPP,
84 DCB_CMD_SAPP, 173 DCB_CMD_SAPP,
85 174
175 DCB_CMD_IEEE_SET,
176 DCB_CMD_IEEE_GET,
177
178 DCB_CMD_GDCBX,
179 DCB_CMD_SDCBX,
180
181 DCB_CMD_GFEATCFG,
182 DCB_CMD_SFEATCFG,
183
86 __DCB_CMD_ENUM_MAX, 184 __DCB_CMD_ENUM_MAX,
87 DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1, 185 DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1,
88}; 186};
@@ -102,6 +200,9 @@ enum dcbnl_commands {
102 * @DCB_ATTR_CAP: DCB capabilities of the device (NLA_NESTED) 200 * @DCB_ATTR_CAP: DCB capabilities of the device (NLA_NESTED)
103 * @DCB_ATTR_NUMTCS: number of traffic classes supported (NLA_NESTED) 201 * @DCB_ATTR_NUMTCS: number of traffic classes supported (NLA_NESTED)
104 * @DCB_ATTR_BCN: backward congestion notification configuration (NLA_NESTED) 202 * @DCB_ATTR_BCN: backward congestion notification configuration (NLA_NESTED)
203 * @DCB_ATTR_IEEE: IEEE 802.1Qaz supported attributes (NLA_NESTED)
204 * @DCB_ATTR_DCBX: DCBX engine configuration in the device (NLA_U8)
205 * @DCB_ATTR_FEATCFG: DCBX features flags (NLA_NESTED)
105 */ 206 */
106enum dcbnl_attrs { 207enum dcbnl_attrs {
107 DCB_ATTR_UNDEFINED, 208 DCB_ATTR_UNDEFINED,
@@ -119,10 +220,32 @@ enum dcbnl_attrs {
119 DCB_ATTR_BCN, 220 DCB_ATTR_BCN,
120 DCB_ATTR_APP, 221 DCB_ATTR_APP,
121 222
223 /* IEEE std attributes */
224 DCB_ATTR_IEEE,
225
226 DCB_ATTR_DCBX,
227 DCB_ATTR_FEATCFG,
228
122 __DCB_ATTR_ENUM_MAX, 229 __DCB_ATTR_ENUM_MAX,
123 DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1, 230 DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1,
124}; 231};
125 232
233enum ieee_attrs {
234 DCB_ATTR_IEEE_UNSPEC,
235 DCB_ATTR_IEEE_ETS,
236 DCB_ATTR_IEEE_PFC,
237 DCB_ATTR_IEEE_APP_TABLE,
238 __DCB_ATTR_IEEE_MAX
239};
240#define DCB_ATTR_IEEE_MAX (__DCB_ATTR_IEEE_MAX - 1)
241
242enum ieee_attrs_app {
243 DCB_ATTR_IEEE_APP_UNSPEC,
244 DCB_ATTR_IEEE_APP,
245 __DCB_ATTR_IEEE_APP_MAX
246};
247#define DCB_ATTR_IEEE_APP_MAX (__DCB_ATTR_IEEE_APP_MAX - 1)
248
126/** 249/**
127 * enum dcbnl_pfc_attrs - DCB Priority Flow Control user priority nested attrs 250 * enum dcbnl_pfc_attrs - DCB Priority Flow Control user priority nested attrs
128 * 251 *
@@ -262,6 +385,8 @@ enum dcbnl_tc_attrs {
262 * @DCB_CAP_ATTR_GSP: (NLA_U8) device supports group strict priority 385 * @DCB_CAP_ATTR_GSP: (NLA_U8) device supports group strict priority
263 * @DCB_CAP_ATTR_BCN: (NLA_U8) device supports Backwards Congestion 386 * @DCB_CAP_ATTR_BCN: (NLA_U8) device supports Backwards Congestion
264 * Notification 387 * Notification
388 * @DCB_CAP_ATTR_DCBX: (NLA_U8) device supports DCBX engine
389 *
265 */ 390 */
266enum dcbnl_cap_attrs { 391enum dcbnl_cap_attrs {
267 DCB_CAP_ATTR_UNDEFINED, 392 DCB_CAP_ATTR_UNDEFINED,
@@ -273,12 +398,45 @@ enum dcbnl_cap_attrs {
273 DCB_CAP_ATTR_PFC_TCS, 398 DCB_CAP_ATTR_PFC_TCS,
274 DCB_CAP_ATTR_GSP, 399 DCB_CAP_ATTR_GSP,
275 DCB_CAP_ATTR_BCN, 400 DCB_CAP_ATTR_BCN,
401 DCB_CAP_ATTR_DCBX,
276 402
277 __DCB_CAP_ATTR_ENUM_MAX, 403 __DCB_CAP_ATTR_ENUM_MAX,
278 DCB_CAP_ATTR_MAX = __DCB_CAP_ATTR_ENUM_MAX - 1, 404 DCB_CAP_ATTR_MAX = __DCB_CAP_ATTR_ENUM_MAX - 1,
279}; 405};
280 406
281/** 407/**
408 * DCBX capability flags
409 *
410 * @DCB_CAP_DCBX_HOST: DCBX negotiation is performed by the host LLDP agent.
411 * 'set' routines are used to configure the device with
412 * the negotiated parameters
413 *
414 * @DCB_CAP_DCBX_LLD_MANAGED: DCBX negotiation is not performed in the host but
415 * by another entity
416 * 'get' routines are used to retrieve the
417 * negotiated parameters
418 * 'set' routines can be used to set the initial
419 * negotiation configuration
420 *
421 * @DCB_CAP_DCBX_VER_CEE: for a non-host DCBX engine, indicates the engine
422 * supports the CEE protocol flavor
423 *
424 * @DCB_CAP_DCBX_VER_IEEE: for a non-host DCBX engine, indicates the engine
425 * supports the IEEE protocol flavor
426 *
427 * @DCB_CAP_DCBX_STATIC: for a non-host DCBX engine, indicates the engine
428 * supports static configuration (i.e no actual
429 * negotiation is performed negotiated parameters equal
430 * the initial configuration)
431 *
432 */
433#define DCB_CAP_DCBX_HOST 0x01
434#define DCB_CAP_DCBX_LLD_MANAGED 0x02
435#define DCB_CAP_DCBX_VER_CEE 0x04
436#define DCB_CAP_DCBX_VER_IEEE 0x08
437#define DCB_CAP_DCBX_STATIC 0x10
438
439/**
282 * enum dcbnl_numtcs_attrs - number of traffic classes 440 * enum dcbnl_numtcs_attrs - number of traffic classes
283 * 441 *
284 * @DCB_NUMTCS_ATTR_UNDEFINED: unspecified attribute to catch errors 442 * @DCB_NUMTCS_ATTR_UNDEFINED: unspecified attribute to catch errors
@@ -355,4 +513,30 @@ enum dcbnl_app_attrs {
355 DCB_APP_ATTR_MAX = __DCB_APP_ATTR_ENUM_MAX - 1, 513 DCB_APP_ATTR_MAX = __DCB_APP_ATTR_ENUM_MAX - 1,
356}; 514};
357 515
516/**
517 * enum dcbnl_featcfg_attrs - features conifiguration flags
518 *
519 * @DCB_FEATCFG_ATTR_UNDEFINED: unspecified attribute to catch errors
520 * @DCB_FEATCFG_ATTR_ALL: (NLA_FLAG) all features configuration attributes
521 * @DCB_FEATCFG_ATTR_PG: (NLA_U8) configuration flags for priority groups
522 * @DCB_FEATCFG_ATTR_PFC: (NLA_U8) configuration flags for priority
523 * flow control
524 * @DCB_FEATCFG_ATTR_APP: (NLA_U8) configuration flags for application TLV
525 *
526 */
527#define DCB_FEATCFG_ERROR 0x01 /* error in feature resolution */
528#define DCB_FEATCFG_ENABLE 0x02 /* enable feature */
529#define DCB_FEATCFG_WILLING 0x04 /* feature is willing */
530#define DCB_FEATCFG_ADVERTISE 0x08 /* advertise feature */
531enum dcbnl_featcfg_attrs {
532 DCB_FEATCFG_ATTR_UNDEFINED,
533 DCB_FEATCFG_ATTR_ALL,
534 DCB_FEATCFG_ATTR_PG,
535 DCB_FEATCFG_ATTR_PFC,
536 DCB_FEATCFG_ATTR_APP,
537
538 __DCB_FEATCFG_ATTR_ENUM_MAX,
539 DCB_FEATCFG_ATTR_MAX = __DCB_FEATCFG_ATTR_ENUM_MAX - 1,
540};
541
358#endif /* __LINUX_DCBNL_H__ */ 542#endif /* __LINUX_DCBNL_H__ */
diff --git a/include/linux/dccp.h b/include/linux/dccp.h
index 749f01ccd26e..010e2d87ed75 100644
--- a/include/linux/dccp.h
+++ b/include/linux/dccp.h
@@ -197,6 +197,21 @@ enum dccp_feature_numbers {
197 DCCPF_MAX_CCID_SPECIFIC = 255, 197 DCCPF_MAX_CCID_SPECIFIC = 255,
198}; 198};
199 199
200/* DCCP socket control message types for cmsg */
201enum dccp_cmsg_type {
202 DCCP_SCM_PRIORITY = 1,
203 DCCP_SCM_QPOLICY_MAX = 0xFFFF,
204 /* ^-- Up to here reserved exclusively for qpolicy parameters */
205 DCCP_SCM_MAX
206};
207
208/* DCCP priorities for outgoing/queued packets */
209enum dccp_packet_dequeueing_policy {
210 DCCPQ_POLICY_SIMPLE,
211 DCCPQ_POLICY_PRIO,
212 DCCPQ_POLICY_MAX
213};
214
200/* DCCP socket options */ 215/* DCCP socket options */
201#define DCCP_SOCKOPT_PACKET_SIZE 1 /* XXX deprecated, without effect */ 216#define DCCP_SOCKOPT_PACKET_SIZE 1 /* XXX deprecated, without effect */
202#define DCCP_SOCKOPT_SERVICE 2 217#define DCCP_SOCKOPT_SERVICE 2
@@ -210,6 +225,8 @@ enum dccp_feature_numbers {
210#define DCCP_SOCKOPT_CCID 13 225#define DCCP_SOCKOPT_CCID 13
211#define DCCP_SOCKOPT_TX_CCID 14 226#define DCCP_SOCKOPT_TX_CCID 14
212#define DCCP_SOCKOPT_RX_CCID 15 227#define DCCP_SOCKOPT_RX_CCID 15
228#define DCCP_SOCKOPT_QPOLICY_ID 16
229#define DCCP_SOCKOPT_QPOLICY_TXQLEN 17
213#define DCCP_SOCKOPT_CCID_RX_INFO 128 230#define DCCP_SOCKOPT_CCID_RX_INFO 128
214#define DCCP_SOCKOPT_CCID_TX_INFO 192 231#define DCCP_SOCKOPT_CCID_TX_INFO 192
215 232
@@ -458,10 +475,13 @@ struct dccp_ackvec;
458 * @dccps_hc_rx_ccid - CCID used for the receiver (or receiving half-connection) 475 * @dccps_hc_rx_ccid - CCID used for the receiver (or receiving half-connection)
459 * @dccps_hc_tx_ccid - CCID used for the sender (or sending half-connection) 476 * @dccps_hc_tx_ccid - CCID used for the sender (or sending half-connection)
460 * @dccps_options_received - parsed set of retrieved options 477 * @dccps_options_received - parsed set of retrieved options
478 * @dccps_qpolicy - TX dequeueing policy, one of %dccp_packet_dequeueing_policy
479 * @dccps_tx_qlen - maximum length of the TX queue
461 * @dccps_role - role of this sock, one of %dccp_role 480 * @dccps_role - role of this sock, one of %dccp_role
462 * @dccps_hc_rx_insert_options - receiver wants to add options when acking 481 * @dccps_hc_rx_insert_options - receiver wants to add options when acking
463 * @dccps_hc_tx_insert_options - sender wants to add options when sending 482 * @dccps_hc_tx_insert_options - sender wants to add options when sending
464 * @dccps_server_timewait - server holds timewait state on close (RFC 4340, 8.3) 483 * @dccps_server_timewait - server holds timewait state on close (RFC 4340, 8.3)
484 * @dccps_sync_scheduled - flag which signals "send out-of-band message soon"
465 * @dccps_xmitlet - tasklet scheduled by the TX CCID to dequeue data packets 485 * @dccps_xmitlet - tasklet scheduled by the TX CCID to dequeue data packets
466 * @dccps_xmit_timer - used by the TX CCID to delay sending (rate-based pacing) 486 * @dccps_xmit_timer - used by the TX CCID to delay sending (rate-based pacing)
467 * @dccps_syn_rtt - RTT sample from Request/Response exchange (in usecs) 487 * @dccps_syn_rtt - RTT sample from Request/Response exchange (in usecs)
@@ -499,10 +519,13 @@ struct dccp_sock {
499 struct ccid *dccps_hc_rx_ccid; 519 struct ccid *dccps_hc_rx_ccid;
500 struct ccid *dccps_hc_tx_ccid; 520 struct ccid *dccps_hc_tx_ccid;
501 struct dccp_options_received dccps_options_received; 521 struct dccp_options_received dccps_options_received;
522 __u8 dccps_qpolicy;
523 __u32 dccps_tx_qlen;
502 enum dccp_role dccps_role:2; 524 enum dccp_role dccps_role:2;
503 __u8 dccps_hc_rx_insert_options:1; 525 __u8 dccps_hc_rx_insert_options:1;
504 __u8 dccps_hc_tx_insert_options:1; 526 __u8 dccps_hc_tx_insert_options:1;
505 __u8 dccps_server_timewait:1; 527 __u8 dccps_server_timewait:1;
528 __u8 dccps_sync_scheduled:1;
506 struct tasklet_struct dccps_xmitlet; 529 struct tasklet_struct dccps_xmitlet;
507 struct timer_list dccps_xmit_timer; 530 struct timer_list dccps_xmit_timer;
508}; 531};
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
index 6628a507fd3b..1908929204a9 100644
--- a/include/linux/ethtool.h
+++ b/include/linux/ethtool.h
@@ -691,7 +691,9 @@ struct ethtool_ops {
691#define ETHTOOL_GMSGLVL 0x00000007 /* Get driver message level */ 691#define ETHTOOL_GMSGLVL 0x00000007 /* Get driver message level */
692#define ETHTOOL_SMSGLVL 0x00000008 /* Set driver msg level. */ 692#define ETHTOOL_SMSGLVL 0x00000008 /* Set driver msg level. */
693#define ETHTOOL_NWAY_RST 0x00000009 /* Restart autonegotiation. */ 693#define ETHTOOL_NWAY_RST 0x00000009 /* Restart autonegotiation. */
694#define ETHTOOL_GLINK 0x0000000a /* Get link status (ethtool_value) */ 694/* Get link status for host, i.e. whether the interface *and* the
695 * physical port (if there is one) are up (ethtool_value). */
696#define ETHTOOL_GLINK 0x0000000a
695#define ETHTOOL_GEEPROM 0x0000000b /* Get EEPROM data */ 697#define ETHTOOL_GEEPROM 0x0000000b /* Get EEPROM data */
696#define ETHTOOL_SEEPROM 0x0000000c /* Set EEPROM data. */ 698#define ETHTOOL_SEEPROM 0x0000000c /* Set EEPROM data. */
697#define ETHTOOL_GCOALESCE 0x0000000e /* Get coalesce config */ 699#define ETHTOOL_GCOALESCE 0x0000000e /* Get coalesce config */
diff --git a/include/linux/filter.h b/include/linux/filter.h
index 69b43dbea6c6..45266b75409a 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -91,54 +91,6 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */
91#define BPF_TAX 0x00 91#define BPF_TAX 0x00
92#define BPF_TXA 0x80 92#define BPF_TXA 0x80
93 93
94enum {
95 BPF_S_RET_K = 0,
96 BPF_S_RET_A,
97 BPF_S_ALU_ADD_K,
98 BPF_S_ALU_ADD_X,
99 BPF_S_ALU_SUB_K,
100 BPF_S_ALU_SUB_X,
101 BPF_S_ALU_MUL_K,
102 BPF_S_ALU_MUL_X,
103 BPF_S_ALU_DIV_X,
104 BPF_S_ALU_AND_K,
105 BPF_S_ALU_AND_X,
106 BPF_S_ALU_OR_K,
107 BPF_S_ALU_OR_X,
108 BPF_S_ALU_LSH_K,
109 BPF_S_ALU_LSH_X,
110 BPF_S_ALU_RSH_K,
111 BPF_S_ALU_RSH_X,
112 BPF_S_ALU_NEG,
113 BPF_S_LD_W_ABS,
114 BPF_S_LD_H_ABS,
115 BPF_S_LD_B_ABS,
116 BPF_S_LD_W_LEN,
117 BPF_S_LD_W_IND,
118 BPF_S_LD_H_IND,
119 BPF_S_LD_B_IND,
120 BPF_S_LD_IMM,
121 BPF_S_LDX_W_LEN,
122 BPF_S_LDX_B_MSH,
123 BPF_S_LDX_IMM,
124 BPF_S_MISC_TAX,
125 BPF_S_MISC_TXA,
126 BPF_S_ALU_DIV_K,
127 BPF_S_LD_MEM,
128 BPF_S_LDX_MEM,
129 BPF_S_ST,
130 BPF_S_STX,
131 BPF_S_JMP_JA,
132 BPF_S_JMP_JEQ_K,
133 BPF_S_JMP_JEQ_X,
134 BPF_S_JMP_JGE_K,
135 BPF_S_JMP_JGE_X,
136 BPF_S_JMP_JGT_K,
137 BPF_S_JMP_JGT_X,
138 BPF_S_JMP_JSET_K,
139 BPF_S_JMP_JSET_X,
140};
141
142#ifndef BPF_MAXINSNS 94#ifndef BPF_MAXINSNS
143#define BPF_MAXINSNS 4096 95#define BPF_MAXINSNS 4096
144#endif 96#endif
@@ -172,7 +124,9 @@ enum {
172#define SKF_AD_MARK 20 124#define SKF_AD_MARK 20
173#define SKF_AD_QUEUE 24 125#define SKF_AD_QUEUE 24
174#define SKF_AD_HATYPE 28 126#define SKF_AD_HATYPE 28
175#define SKF_AD_MAX 32 127#define SKF_AD_RXHASH 32
128#define SKF_AD_CPU 36
129#define SKF_AD_MAX 40
176#define SKF_NET_OFF (-0x100000) 130#define SKF_NET_OFF (-0x100000)
177#define SKF_LL_OFF (-0x200000) 131#define SKF_LL_OFF (-0x200000)
178 132
@@ -194,8 +148,8 @@ struct sk_buff;
194struct sock; 148struct sock;
195 149
196extern int sk_filter(struct sock *sk, struct sk_buff *skb); 150extern int sk_filter(struct sock *sk, struct sk_buff *skb);
197extern unsigned int sk_run_filter(struct sk_buff *skb, 151extern unsigned int sk_run_filter(const struct sk_buff *skb,
198 struct sock_filter *filter, int flen); 152 const struct sock_filter *filter);
199extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); 153extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk);
200extern int sk_detach_filter(struct sock *sk); 154extern int sk_detach_filter(struct sock *sk);
201extern int sk_chk_filter(struct sock_filter *filter, int flen); 155extern int sk_chk_filter(struct sock_filter *filter, int flen);
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index ed5a03cbe184..6042228954a7 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -122,6 +122,7 @@
122 122
123/* U-APSD queue for WMM IEs sent by AP */ 123/* U-APSD queue for WMM IEs sent by AP */
124#define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD (1<<7) 124#define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD (1<<7)
125#define IEEE80211_WMM_IE_AP_QOSINFO_PARAM_SET_CNT_MASK 0x0f
125 126
126/* U-APSD queues for WMM IEs sent by STA */ 127/* U-APSD queues for WMM IEs sent by STA */
127#define IEEE80211_WMM_IE_STA_QOSINFO_AC_VO (1<<0) 128#define IEEE80211_WMM_IE_STA_QOSINFO_AC_VO (1<<0)
@@ -535,7 +536,6 @@ struct ieee80211s_hdr {
535 __le32 seqnum; 536 __le32 seqnum;
536 u8 eaddr1[6]; 537 u8 eaddr1[6];
537 u8 eaddr2[6]; 538 u8 eaddr2[6];
538 u8 eaddr3[6];
539} __attribute__ ((packed)); 539} __attribute__ ((packed));
540 540
541/* Mesh flags */ 541/* Mesh flags */
@@ -1223,6 +1223,9 @@ enum ieee80211_eid {
1223 WLAN_EID_BSS_AC_ACCESS_DELAY = 68, 1223 WLAN_EID_BSS_AC_ACCESS_DELAY = 68,
1224 WLAN_EID_RRM_ENABLED_CAPABILITIES = 70, 1224 WLAN_EID_RRM_ENABLED_CAPABILITIES = 70,
1225 WLAN_EID_MULTIPLE_BSSID = 71, 1225 WLAN_EID_MULTIPLE_BSSID = 71,
1226 WLAN_EID_BSS_COEX_2040 = 72,
1227 WLAN_EID_OVERLAP_BSS_SCAN_PARAM = 74,
1228 WLAN_EID_EXT_CAPABILITY = 127,
1226 1229
1227 WLAN_EID_MOBILITY_DOMAIN = 54, 1230 WLAN_EID_MOBILITY_DOMAIN = 54,
1228 WLAN_EID_FAST_BSS_TRANSITION = 55, 1231 WLAN_EID_FAST_BSS_TRANSITION = 55,
@@ -1287,6 +1290,31 @@ enum ieee80211_key_len {
1287 WLAN_KEY_LEN_AES_CMAC = 16, 1290 WLAN_KEY_LEN_AES_CMAC = 16,
1288}; 1291};
1289 1292
1293/**
1294 * enum - mesh path selection protocol identifier
1295 *
1296 * @IEEE80211_PATH_PROTOCOL_HWMP: the default path selection protocol
1297 * @IEEE80211_PATH_PROTOCOL_VENDOR: a vendor specific protocol that will
1298 * be specified in a vendor specific information element
1299 */
1300enum {
1301 IEEE80211_PATH_PROTOCOL_HWMP = 0,
1302 IEEE80211_PATH_PROTOCOL_VENDOR = 255,
1303};
1304
1305/**
1306 * enum - mesh path selection metric identifier
1307 *
1308 * @IEEE80211_PATH_METRIC_AIRTIME: the default path selection metric
1309 * @IEEE80211_PATH_METRIC_VENDOR: a vendor specific metric that will be
1310 * specified in a vendor specific information element
1311 */
1312enum {
1313 IEEE80211_PATH_METRIC_AIRTIME = 0,
1314 IEEE80211_PATH_METRIC_VENDOR = 255,
1315};
1316
1317
1290/* 1318/*
1291 * IEEE 802.11-2007 7.3.2.9 Country information element 1319 * IEEE 802.11-2007 7.3.2.9 Country information element
1292 * 1320 *
diff --git a/include/linux/if_bridge.h b/include/linux/if_bridge.h
index 0d241a5c4909..f7e73c338c40 100644
--- a/include/linux/if_bridge.h
+++ b/include/linux/if_bridge.h
@@ -102,7 +102,9 @@ struct __fdb_entry {
102#include <linux/netdevice.h> 102#include <linux/netdevice.h>
103 103
104extern void brioctl_set(int (*ioctl_hook)(struct net *, unsigned int, void __user *)); 104extern void brioctl_set(int (*ioctl_hook)(struct net *, unsigned int, void __user *));
105extern int (*br_should_route_hook)(struct sk_buff *skb); 105
106typedef int (*br_should_route_hook_t)(struct sk_buff *skb);
107extern br_should_route_hook_t __rcu *br_should_route_hook;
106 108
107#endif 109#endif
108 110
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h
index f9c3df03db0f..be69043d2896 100644
--- a/include/linux/if_ether.h
+++ b/include/linux/if_ether.h
@@ -72,6 +72,7 @@
72#define ETH_P_MPLS_UC 0x8847 /* MPLS Unicast traffic */ 72#define ETH_P_MPLS_UC 0x8847 /* MPLS Unicast traffic */
73#define ETH_P_MPLS_MC 0x8848 /* MPLS Multicast traffic */ 73#define ETH_P_MPLS_MC 0x8848 /* MPLS Multicast traffic */
74#define ETH_P_ATMMPOA 0x884c /* MultiProtocol Over ATM */ 74#define ETH_P_ATMMPOA 0x884c /* MultiProtocol Over ATM */
75#define ETH_P_LINK_CTL 0x886c /* HPNA, wlan link local tunnel */
75#define ETH_P_ATMFATE 0x8884 /* Frame-based ATM Transport 76#define ETH_P_ATMFATE 0x8884 /* Frame-based ATM Transport
76 * over Ethernet 77 * over Ethernet
77 */ 78 */
diff --git a/include/linux/if_link.h b/include/linux/if_link.h
index 2fc66dd783ee..6485d2a89bec 100644
--- a/include/linux/if_link.h
+++ b/include/linux/if_link.h
@@ -80,6 +80,24 @@ struct rtnl_link_ifmap {
80 __u8 port; 80 __u8 port;
81}; 81};
82 82
83/*
84 * IFLA_AF_SPEC
85 * Contains nested attributes for address family specific attributes.
86 * Each address family may create a attribute with the address family
87 * number as type and create its own attribute structure in it.
88 *
89 * Example:
90 * [IFLA_AF_SPEC] = {
91 * [AF_INET] = {
92 * [IFLA_INET_CONF] = ...,
93 * },
94 * [AF_INET6] = {
95 * [IFLA_INET6_FLAGS] = ...,
96 * [IFLA_INET6_CONF] = ...,
97 * }
98 * }
99 */
100
83enum { 101enum {
84 IFLA_UNSPEC, 102 IFLA_UNSPEC,
85 IFLA_ADDRESS, 103 IFLA_ADDRESS,
@@ -116,6 +134,7 @@ enum {
116 IFLA_STATS64, 134 IFLA_STATS64,
117 IFLA_VF_PORTS, 135 IFLA_VF_PORTS,
118 IFLA_PORT_SELF, 136 IFLA_PORT_SELF,
137 IFLA_AF_SPEC,
119 __IFLA_MAX 138 __IFLA_MAX
120}; 139};
121 140
@@ -128,6 +147,14 @@ enum {
128#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg)) 147#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
129#endif 148#endif
130 149
150enum {
151 IFLA_INET_UNSPEC,
152 IFLA_INET_CONF,
153 __IFLA_INET_MAX,
154};
155
156#define IFLA_INET_MAX (__IFLA_INET_MAX - 1)
157
131/* ifi_flags. 158/* ifi_flags.
132 159
133 IFF_* flags. 160 IFF_* flags.
@@ -232,6 +259,7 @@ enum macvlan_mode {
232 MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */ 259 MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */
233 MACVLAN_MODE_VEPA = 2, /* talk to other ports through ext bridge */ 260 MACVLAN_MODE_VEPA = 2, /* talk to other ports through ext bridge */
234 MACVLAN_MODE_BRIDGE = 4, /* talk to bridge ports directly */ 261 MACVLAN_MODE_BRIDGE = 4, /* talk to bridge ports directly */
262 MACVLAN_MODE_PASSTHRU = 8,/* take over the underlying device */
235}; 263};
236 264
237/* SR-IOV virtual function management section */ 265/* SR-IOV virtual function management section */
diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h
index 8a2fd66a8b5f..e28b2e4959d4 100644
--- a/include/linux/if_macvlan.h
+++ b/include/linux/if_macvlan.h
@@ -25,19 +25,25 @@ struct macvlan_port;
25struct macvtap_queue; 25struct macvtap_queue;
26 26
27/** 27/**
28 * struct macvlan_rx_stats - MACVLAN percpu rx stats 28 * struct macvlan_pcpu_stats - MACVLAN percpu stats
29 * @rx_packets: number of received packets 29 * @rx_packets: number of received packets
30 * @rx_bytes: number of received bytes 30 * @rx_bytes: number of received bytes
31 * @rx_multicast: number of received multicast packets 31 * @rx_multicast: number of received multicast packets
32 * @tx_packets: number of transmitted packets
33 * @tx_bytes: number of transmitted bytes
32 * @syncp: synchronization point for 64bit counters 34 * @syncp: synchronization point for 64bit counters
33 * @rx_errors: number of errors 35 * @rx_errors: number of rx errors
36 * @tx_dropped: number of tx dropped packets
34 */ 37 */
35struct macvlan_rx_stats { 38struct macvlan_pcpu_stats {
36 u64 rx_packets; 39 u64 rx_packets;
37 u64 rx_bytes; 40 u64 rx_bytes;
38 u64 rx_multicast; 41 u64 rx_multicast;
42 u64 tx_packets;
43 u64 tx_bytes;
39 struct u64_stats_sync syncp; 44 struct u64_stats_sync syncp;
40 unsigned long rx_errors; 45 u32 rx_errors;
46 u32 tx_dropped;
41}; 47};
42 48
43/* 49/*
@@ -52,7 +58,7 @@ struct macvlan_dev {
52 struct hlist_node hlist; 58 struct hlist_node hlist;
53 struct macvlan_port *port; 59 struct macvlan_port *port;
54 struct net_device *lowerdev; 60 struct net_device *lowerdev;
55 struct macvlan_rx_stats __percpu *rx_stats; 61 struct macvlan_pcpu_stats __percpu *pcpu_stats;
56 enum macvlan_mode mode; 62 enum macvlan_mode mode;
57 int (*receive)(struct sk_buff *skb); 63 int (*receive)(struct sk_buff *skb);
58 int (*forward)(struct net_device *dev, struct sk_buff *skb); 64 int (*forward)(struct net_device *dev, struct sk_buff *skb);
@@ -64,18 +70,18 @@ static inline void macvlan_count_rx(const struct macvlan_dev *vlan,
64 unsigned int len, bool success, 70 unsigned int len, bool success,
65 bool multicast) 71 bool multicast)
66{ 72{
67 struct macvlan_rx_stats *rx_stats;
68
69 rx_stats = this_cpu_ptr(vlan->rx_stats);
70 if (likely(success)) { 73 if (likely(success)) {
71 u64_stats_update_begin(&rx_stats->syncp); 74 struct macvlan_pcpu_stats *pcpu_stats;
72 rx_stats->rx_packets++;; 75
73 rx_stats->rx_bytes += len; 76 pcpu_stats = this_cpu_ptr(vlan->pcpu_stats);
77 u64_stats_update_begin(&pcpu_stats->syncp);
78 pcpu_stats->rx_packets++;
79 pcpu_stats->rx_bytes += len;
74 if (multicast) 80 if (multicast)
75 rx_stats->rx_multicast++; 81 pcpu_stats->rx_multicast++;
76 u64_stats_update_end(&rx_stats->syncp); 82 u64_stats_update_end(&pcpu_stats->syncp);
77 } else { 83 } else {
78 rx_stats->rx_errors++; 84 this_cpu_inc(vlan->pcpu_stats->rx_errors);
79 } 85 }
80} 86}
81 87
diff --git a/include/linux/igmp.h b/include/linux/igmp.h
index 93fc2449af10..74cfcff0148b 100644
--- a/include/linux/igmp.h
+++ b/include/linux/igmp.h
@@ -85,9 +85,9 @@ struct igmpv3_query {
85#define IGMP_DVMRP 0x13 /* DVMRP routing */ 85#define IGMP_DVMRP 0x13 /* DVMRP routing */
86#define IGMP_PIM 0x14 /* PIM routing */ 86#define IGMP_PIM 0x14 /* PIM routing */
87#define IGMP_TRACE 0x15 87#define IGMP_TRACE 0x15
88#define IGMPV2_HOST_MEMBERSHIP_REPORT 0x16 /* V2 version of 0x11 */ 88#define IGMPV2_HOST_MEMBERSHIP_REPORT 0x16 /* V2 version of 0x12 */
89#define IGMP_HOST_LEAVE_MESSAGE 0x17 89#define IGMP_HOST_LEAVE_MESSAGE 0x17
90#define IGMPV3_HOST_MEMBERSHIP_REPORT 0x22 /* V3 version of 0x11 */ 90#define IGMPV3_HOST_MEMBERSHIP_REPORT 0x22 /* V3 version of 0x12 */
91 91
92#define IGMP_MTRACE_RESP 0x1e 92#define IGMP_MTRACE_RESP 0x1e
93#define IGMP_MTRACE 0x1f 93#define IGMP_MTRACE 0x1f
@@ -167,10 +167,10 @@ struct ip_sf_socklist {
167 */ 167 */
168 168
169struct ip_mc_socklist { 169struct ip_mc_socklist {
170 struct ip_mc_socklist *next; 170 struct ip_mc_socklist __rcu *next_rcu;
171 struct ip_mreqn multi; 171 struct ip_mreqn multi;
172 unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */ 172 unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */
173 struct ip_sf_socklist *sflist; 173 struct ip_sf_socklist __rcu *sflist;
174 struct rcu_head rcu; 174 struct rcu_head rcu;
175}; 175};
176 176
@@ -186,11 +186,14 @@ struct ip_sf_list {
186struct ip_mc_list { 186struct ip_mc_list {
187 struct in_device *interface; 187 struct in_device *interface;
188 __be32 multiaddr; 188 __be32 multiaddr;
189 unsigned int sfmode;
189 struct ip_sf_list *sources; 190 struct ip_sf_list *sources;
190 struct ip_sf_list *tomb; 191 struct ip_sf_list *tomb;
191 unsigned int sfmode;
192 unsigned long sfcount[2]; 192 unsigned long sfcount[2];
193 struct ip_mc_list *next; 193 union {
194 struct ip_mc_list *next;
195 struct ip_mc_list __rcu *next_rcu;
196 };
194 struct timer_list timer; 197 struct timer_list timer;
195 int users; 198 int users;
196 atomic_t refcnt; 199 atomic_t refcnt;
@@ -201,6 +204,7 @@ struct ip_mc_list {
201 char loaded; 204 char loaded;
202 unsigned char gsquery; /* check source marks? */ 205 unsigned char gsquery; /* check source marks? */
203 unsigned char crcount; 206 unsigned char crcount;
207 struct rcu_head rcu;
204}; 208};
205 209
206/* V3 exponential field decoding */ 210/* V3 exponential field decoding */
@@ -234,7 +238,7 @@ extern void ip_mc_unmap(struct in_device *);
234extern void ip_mc_remap(struct in_device *); 238extern void ip_mc_remap(struct in_device *);
235extern void ip_mc_dec_group(struct in_device *in_dev, __be32 addr); 239extern void ip_mc_dec_group(struct in_device *in_dev, __be32 addr);
236extern void ip_mc_inc_group(struct in_device *in_dev, __be32 addr); 240extern void ip_mc_inc_group(struct in_device *in_dev, __be32 addr);
237extern void ip_mc_rejoin_group(struct ip_mc_list *im); 241extern void ip_mc_rejoin_groups(struct in_device *in_dev);
238 242
239#endif 243#endif
240#endif 244#endif
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h
index ccd5b07d678d..ae8fdc54e0c0 100644
--- a/include/linux/inetdevice.h
+++ b/include/linux/inetdevice.h
@@ -41,10 +41,12 @@ enum
41 __IPV4_DEVCONF_MAX 41 __IPV4_DEVCONF_MAX
42}; 42};
43 43
44#define IPV4_DEVCONF_MAX (__IPV4_DEVCONF_MAX - 1)
45
44struct ipv4_devconf { 46struct ipv4_devconf {
45 void *sysctl; 47 void *sysctl;
46 int data[__IPV4_DEVCONF_MAX - 1]; 48 int data[IPV4_DEVCONF_MAX];
47 DECLARE_BITMAP(state, __IPV4_DEVCONF_MAX - 1); 49 DECLARE_BITMAP(state, IPV4_DEVCONF_MAX);
48}; 50};
49 51
50struct in_device { 52struct in_device {
@@ -52,9 +54,8 @@ struct in_device {
52 atomic_t refcnt; 54 atomic_t refcnt;
53 int dead; 55 int dead;
54 struct in_ifaddr *ifa_list; /* IP ifaddr chain */ 56 struct in_ifaddr *ifa_list; /* IP ifaddr chain */
55 rwlock_t mc_list_lock; 57 struct ip_mc_list __rcu *mc_list; /* IP multicast filter chain */
56 struct ip_mc_list *mc_list; /* IP multicast filter chain */ 58 int mc_count; /* Number of installed mcasts */
57 int mc_count; /* Number of installed mcasts */
58 spinlock_t mc_tomb_lock; 59 spinlock_t mc_tomb_lock;
59 struct ip_mc_list *mc_tomb; 60 struct ip_mc_list *mc_tomb;
60 unsigned long mr_v1_seen; 61 unsigned long mr_v1_seen;
@@ -91,7 +92,7 @@ static inline void ipv4_devconf_set(struct in_device *in_dev, int index,
91 92
92static inline void ipv4_devconf_setall(struct in_device *in_dev) 93static inline void ipv4_devconf_setall(struct in_device *in_dev)
93{ 94{
94 bitmap_fill(in_dev->cnf.state, __IPV4_DEVCONF_MAX - 1); 95 bitmap_fill(in_dev->cnf.state, IPV4_DEVCONF_MAX);
95} 96}
96 97
97#define IN_DEV_CONF_GET(in_dev, attr) \ 98#define IN_DEV_CONF_GET(in_dev, attr) \
@@ -221,7 +222,7 @@ static inline struct in_device *in_dev_get(const struct net_device *dev)
221 222
222static inline struct in_device *__in_dev_get_rtnl(const struct net_device *dev) 223static inline struct in_device *__in_dev_get_rtnl(const struct net_device *dev)
223{ 224{
224 return rcu_dereference_check(dev->ip_ptr, lockdep_rtnl_is_held()); 225 return rtnl_dereference(dev->ip_ptr);
225} 226}
226 227
227extern void in_dev_finish_destroy(struct in_device *idev); 228extern void in_dev_finish_destroy(struct in_device *idev);
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index 8e429d0e0405..0c997767429a 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -364,7 +364,7 @@ struct ipv6_pinfo {
364 364
365 __u32 dst_cookie; 365 __u32 dst_cookie;
366 366
367 struct ipv6_mc_socklist *ipv6_mc_list; 367 struct ipv6_mc_socklist __rcu *ipv6_mc_list;
368 struct ipv6_ac_socklist *ipv6_ac_list; 368 struct ipv6_ac_socklist *ipv6_ac_list;
369 struct ipv6_fl_socklist *ipv6_fl_list; 369 struct ipv6_fl_socklist *ipv6_fl_list;
370 370
diff --git a/include/linux/jhash.h b/include/linux/jhash.h
index ced1159fa4f2..47cb09edec1a 100644
--- a/include/linux/jhash.h
+++ b/include/linux/jhash.h
@@ -3,129 +3,156 @@
3 3
4/* jhash.h: Jenkins hash support. 4/* jhash.h: Jenkins hash support.
5 * 5 *
6 * Copyright (C) 1996 Bob Jenkins (bob_jenkins@burtleburtle.net) 6 * Copyright (C) 2006. Bob Jenkins (bob_jenkins@burtleburtle.net)
7 * 7 *
8 * http://burtleburtle.net/bob/hash/ 8 * http://burtleburtle.net/bob/hash/
9 * 9 *
10 * These are the credits from Bob's sources: 10 * These are the credits from Bob's sources:
11 * 11 *
12 * lookup2.c, by Bob Jenkins, December 1996, Public Domain. 12 * lookup3.c, by Bob Jenkins, May 2006, Public Domain.
13 * hash(), hash2(), hash3, and mix() are externally useful functions.
14 * Routines to test the hash are included if SELF_TEST is defined.
15 * You can use this free for any purpose. It has no warranty.
16 * 13 *
17 * Copyright (C) 2003 David S. Miller (davem@redhat.com) 14 * These are functions for producing 32-bit hashes for hash table lookup.
15 * hashword(), hashlittle(), hashlittle2(), hashbig(), mix(), and final()
16 * are externally useful functions. Routines to test the hash are included
17 * if SELF_TEST is defined. You can use this free for any purpose. It's in
18 * the public domain. It has no warranty.
19 *
20 * Copyright (C) 2009-2010 Jozsef Kadlecsik (kadlec@blackhole.kfki.hu)
18 * 21 *
19 * I've modified Bob's hash to be useful in the Linux kernel, and 22 * I've modified Bob's hash to be useful in the Linux kernel, and
20 * any bugs present are surely my fault. -DaveM 23 * any bugs present are my fault.
24 * Jozsef
21 */ 25 */
26#include <linux/bitops.h>
27#include <linux/unaligned/packed_struct.h>
28
29/* Best hash sizes are of power of two */
30#define jhash_size(n) ((u32)1<<(n))
31/* Mask the hash value, i.e (value & jhash_mask(n)) instead of (value % n) */
32#define jhash_mask(n) (jhash_size(n)-1)
33
34/* __jhash_mix -- mix 3 32-bit values reversibly. */
35#define __jhash_mix(a, b, c) \
36{ \
37 a -= c; a ^= rol32(c, 4); c += b; \
38 b -= a; b ^= rol32(a, 6); a += c; \
39 c -= b; c ^= rol32(b, 8); b += a; \
40 a -= c; a ^= rol32(c, 16); c += b; \
41 b -= a; b ^= rol32(a, 19); a += c; \
42 c -= b; c ^= rol32(b, 4); b += a; \
43}
22 44
23/* NOTE: Arguments are modified. */ 45/* __jhash_final - final mixing of 3 32-bit values (a,b,c) into c */
24#define __jhash_mix(a, b, c) \ 46#define __jhash_final(a, b, c) \
25{ \ 47{ \
26 a -= b; a -= c; a ^= (c>>13); \ 48 c ^= b; c -= rol32(b, 14); \
27 b -= c; b -= a; b ^= (a<<8); \ 49 a ^= c; a -= rol32(c, 11); \
28 c -= a; c -= b; c ^= (b>>13); \ 50 b ^= a; b -= rol32(a, 25); \
29 a -= b; a -= c; a ^= (c>>12); \ 51 c ^= b; c -= rol32(b, 16); \
30 b -= c; b -= a; b ^= (a<<16); \ 52 a ^= c; a -= rol32(c, 4); \
31 c -= a; c -= b; c ^= (b>>5); \ 53 b ^= a; b -= rol32(a, 14); \
32 a -= b; a -= c; a ^= (c>>3); \ 54 c ^= b; c -= rol32(b, 24); \
33 b -= c; b -= a; b ^= (a<<10); \
34 c -= a; c -= b; c ^= (b>>15); \
35} 55}
36 56
37/* The golden ration: an arbitrary value */ 57/* An arbitrary initial parameter */
38#define JHASH_GOLDEN_RATIO 0x9e3779b9 58#define JHASH_INITVAL 0xdeadbeef
39 59
40/* The most generic version, hashes an arbitrary sequence 60/* jhash - hash an arbitrary key
41 * of bytes. No alignment or length assumptions are made about 61 * @k: sequence of bytes as key
42 * the input key. 62 * @length: the length of the key
63 * @initval: the previous hash, or an arbitray value
64 *
65 * The generic version, hashes an arbitrary sequence of bytes.
66 * No alignment or length assumptions are made about the input key.
67 *
68 * Returns the hash value of the key. The result depends on endianness.
43 */ 69 */
44static inline u32 jhash(const void *key, u32 length, u32 initval) 70static inline u32 jhash(const void *key, u32 length, u32 initval)
45{ 71{
46 u32 a, b, c, len; 72 u32 a, b, c;
47 const u8 *k = key; 73 const u8 *k = key;
48 74
49 len = length; 75 /* Set up the internal state */
50 a = b = JHASH_GOLDEN_RATIO; 76 a = b = c = JHASH_INITVAL + length + initval;
51 c = initval;
52
53 while (len >= 12) {
54 a += (k[0] +((u32)k[1]<<8) +((u32)k[2]<<16) +((u32)k[3]<<24));
55 b += (k[4] +((u32)k[5]<<8) +((u32)k[6]<<16) +((u32)k[7]<<24));
56 c += (k[8] +((u32)k[9]<<8) +((u32)k[10]<<16)+((u32)k[11]<<24));
57
58 __jhash_mix(a,b,c);
59 77
78 /* All but the last block: affect some 32 bits of (a,b,c) */
79 while (length > 12) {
80 a += __get_unaligned_cpu32(k);
81 b += __get_unaligned_cpu32(k + 4);
82 c += __get_unaligned_cpu32(k + 8);
83 __jhash_mix(a, b, c);
84 length -= 12;
60 k += 12; 85 k += 12;
61 len -= 12;
62 } 86 }
63 87 /* Last block: affect all 32 bits of (c) */
64 c += length; 88 /* All the case statements fall through */
65 switch (len) { 89 switch (length) {
66 case 11: c += ((u32)k[10]<<24); 90 case 12: c += (u32)k[11]<<24;
67 case 10: c += ((u32)k[9]<<16); 91 case 11: c += (u32)k[10]<<16;
68 case 9 : c += ((u32)k[8]<<8); 92 case 10: c += (u32)k[9]<<8;
69 case 8 : b += ((u32)k[7]<<24); 93 case 9: c += k[8];
70 case 7 : b += ((u32)k[6]<<16); 94 case 8: b += (u32)k[7]<<24;
71 case 6 : b += ((u32)k[5]<<8); 95 case 7: b += (u32)k[6]<<16;
72 case 5 : b += k[4]; 96 case 6: b += (u32)k[5]<<8;
73 case 4 : a += ((u32)k[3]<<24); 97 case 5: b += k[4];
74 case 3 : a += ((u32)k[2]<<16); 98 case 4: a += (u32)k[3]<<24;
75 case 2 : a += ((u32)k[1]<<8); 99 case 3: a += (u32)k[2]<<16;
76 case 1 : a += k[0]; 100 case 2: a += (u32)k[1]<<8;
77 }; 101 case 1: a += k[0];
78 102 __jhash_final(a, b, c);
79 __jhash_mix(a,b,c); 103 case 0: /* Nothing left to add */
104 break;
105 }
80 106
81 return c; 107 return c;
82} 108}
83 109
84/* A special optimized version that handles 1 or more of u32s. 110/* jhash2 - hash an array of u32's
85 * The length parameter here is the number of u32s in the key. 111 * @k: the key which must be an array of u32's
112 * @length: the number of u32's in the key
113 * @initval: the previous hash, or an arbitray value
114 *
115 * Returns the hash value of the key.
86 */ 116 */
87static inline u32 jhash2(const u32 *k, u32 length, u32 initval) 117static inline u32 jhash2(const u32 *k, u32 length, u32 initval)
88{ 118{
89 u32 a, b, c, len; 119 u32 a, b, c;
90 120
91 a = b = JHASH_GOLDEN_RATIO; 121 /* Set up the internal state */
92 c = initval; 122 a = b = c = JHASH_INITVAL + (length<<2) + initval;
93 len = length;
94 123
95 while (len >= 3) { 124 /* Handle most of the key */
125 while (length > 3) {
96 a += k[0]; 126 a += k[0];
97 b += k[1]; 127 b += k[1];
98 c += k[2]; 128 c += k[2];
99 __jhash_mix(a, b, c); 129 __jhash_mix(a, b, c);
100 k += 3; len -= 3; 130 length -= 3;
131 k += 3;
101 } 132 }
102 133
103 c += length * 4; 134 /* Handle the last 3 u32's: all the case statements fall through */
104 135 switch (length) {
105 switch (len) { 136 case 3: c += k[2];
106 case 2 : b += k[1]; 137 case 2: b += k[1];
107 case 1 : a += k[0]; 138 case 1: a += k[0];
108 }; 139 __jhash_final(a, b, c);
109 140 case 0: /* Nothing left to add */
110 __jhash_mix(a,b,c); 141 break;
142 }
111 143
112 return c; 144 return c;
113} 145}
114 146
115 147
116/* A special ultra-optimized versions that knows they are hashing exactly 148/* jhash_3words - hash exactly 3, 2 or 1 word(s) */
117 * 3, 2 or 1 word(s).
118 *
119 * NOTE: In particular the "c += length; __jhash_mix(a,b,c);" normally
120 * done at the end is not done here.
121 */
122static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval) 149static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
123{ 150{
124 a += JHASH_GOLDEN_RATIO; 151 a += JHASH_INITVAL;
125 b += JHASH_GOLDEN_RATIO; 152 b += JHASH_INITVAL;
126 c += initval; 153 c += initval;
127 154
128 __jhash_mix(a, b, c); 155 __jhash_final(a, b, c);
129 156
130 return c; 157 return c;
131} 158}
diff --git a/include/linux/mdio.h b/include/linux/mdio.h
index c779b49a1fda..b1494aced217 100644
--- a/include/linux/mdio.h
+++ b/include/linux/mdio.h
@@ -55,6 +55,7 @@
55#define MDIO_PCS_10GBRT_STAT2 33 /* 10GBASE-R/-T PCS status 2 */ 55#define MDIO_PCS_10GBRT_STAT2 33 /* 10GBASE-R/-T PCS status 2 */
56#define MDIO_AN_10GBT_CTRL 32 /* 10GBASE-T auto-negotiation control */ 56#define MDIO_AN_10GBT_CTRL 32 /* 10GBASE-T auto-negotiation control */
57#define MDIO_AN_10GBT_STAT 33 /* 10GBASE-T auto-negotiation status */ 57#define MDIO_AN_10GBT_STAT 33 /* 10GBASE-T auto-negotiation status */
58#define MDIO_AN_EEE_ADV 60 /* EEE advertisement */
58 59
59/* LASI (Link Alarm Status Interrupt) registers, defined by XENPAK MSA. */ 60/* LASI (Link Alarm Status Interrupt) registers, defined by XENPAK MSA. */
60#define MDIO_PMA_LASI_RXCTRL 0x9000 /* RX_ALARM control */ 61#define MDIO_PMA_LASI_RXCTRL 0x9000 /* RX_ALARM control */
@@ -235,6 +236,10 @@
235#define MDIO_AN_10GBT_STAT_MS 0x4000 /* Master/slave config */ 236#define MDIO_AN_10GBT_STAT_MS 0x4000 /* Master/slave config */
236#define MDIO_AN_10GBT_STAT_MSFLT 0x8000 /* Master/slave config fault */ 237#define MDIO_AN_10GBT_STAT_MSFLT 0x8000 /* Master/slave config fault */
237 238
239/* AN EEE Advertisement register. */
240#define MDIO_AN_EEE_ADV_100TX 0x0002 /* Advertise 100TX EEE cap */
241#define MDIO_AN_EEE_ADV_1000T 0x0004 /* Advertise 1000T EEE cap */
242
238/* LASI RX_ALARM control/status registers. */ 243/* LASI RX_ALARM control/status registers. */
239#define MDIO_PMA_LASI_RX_PHYXSLFLT 0x0001 /* PHY XS RX local fault */ 244#define MDIO_PMA_LASI_RX_PHYXSLFLT 0x0001 /* PHY XS RX local fault */
240#define MDIO_PMA_LASI_RX_PCSLFLT 0x0008 /* PCS RX local fault */ 245#define MDIO_PMA_LASI_RX_PCSLFLT 0x0008 /* PCS RX local fault */
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index d8fd2c23a1b9..0f6b1c965815 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -493,6 +493,8 @@ static inline void napi_synchronize(const struct napi_struct *n)
493enum netdev_queue_state_t { 493enum netdev_queue_state_t {
494 __QUEUE_STATE_XOFF, 494 __QUEUE_STATE_XOFF,
495 __QUEUE_STATE_FROZEN, 495 __QUEUE_STATE_FROZEN,
496#define QUEUE_STATE_XOFF_OR_FROZEN ((1 << __QUEUE_STATE_XOFF) | \
497 (1 << __QUEUE_STATE_FROZEN))
496}; 498};
497 499
498struct netdev_queue { 500struct netdev_queue {
@@ -503,6 +505,12 @@ struct netdev_queue {
503 struct Qdisc *qdisc; 505 struct Qdisc *qdisc;
504 unsigned long state; 506 unsigned long state;
505 struct Qdisc *qdisc_sleeping; 507 struct Qdisc *qdisc_sleeping;
508#ifdef CONFIG_RPS
509 struct kobject kobj;
510#endif
511#if defined(CONFIG_XPS) && defined(CONFIG_NUMA)
512 int numa_node;
513#endif
506/* 514/*
507 * write mostly part 515 * write mostly part
508 */ 516 */
@@ -517,6 +525,22 @@ struct netdev_queue {
517 u64 tx_dropped; 525 u64 tx_dropped;
518} ____cacheline_aligned_in_smp; 526} ____cacheline_aligned_in_smp;
519 527
528static inline int netdev_queue_numa_node_read(const struct netdev_queue *q)
529{
530#if defined(CONFIG_XPS) && defined(CONFIG_NUMA)
531 return q->numa_node;
532#else
533 return NUMA_NO_NODE;
534#endif
535}
536
537static inline void netdev_queue_numa_node_write(struct netdev_queue *q, int node)
538{
539#if defined(CONFIG_XPS) && defined(CONFIG_NUMA)
540 q->numa_node = node;
541#endif
542}
543
520#ifdef CONFIG_RPS 544#ifdef CONFIG_RPS
521/* 545/*
522 * This structure holds an RPS map which can be of variable length. The 546 * This structure holds an RPS map which can be of variable length. The
@@ -592,11 +616,36 @@ struct netdev_rx_queue {
592 struct rps_map __rcu *rps_map; 616 struct rps_map __rcu *rps_map;
593 struct rps_dev_flow_table __rcu *rps_flow_table; 617 struct rps_dev_flow_table __rcu *rps_flow_table;
594 struct kobject kobj; 618 struct kobject kobj;
595 struct netdev_rx_queue *first; 619 struct net_device *dev;
596 atomic_t count;
597} ____cacheline_aligned_in_smp; 620} ____cacheline_aligned_in_smp;
598#endif /* CONFIG_RPS */ 621#endif /* CONFIG_RPS */
599 622
623#ifdef CONFIG_XPS
624/*
625 * This structure holds an XPS map which can be of variable length. The
626 * map is an array of queues.
627 */
628struct xps_map {
629 unsigned int len;
630 unsigned int alloc_len;
631 struct rcu_head rcu;
632 u16 queues[0];
633};
634#define XPS_MAP_SIZE(_num) (sizeof(struct xps_map) + (_num * sizeof(u16)))
635#define XPS_MIN_MAP_ALLOC ((L1_CACHE_BYTES - sizeof(struct xps_map)) \
636 / sizeof(u16))
637
638/*
639 * This structure holds all XPS maps for device. Maps are indexed by CPU.
640 */
641struct xps_dev_maps {
642 struct rcu_head rcu;
643 struct xps_map __rcu *cpu_map[0];
644};
645#define XPS_DEV_MAPS_SIZE (sizeof(struct xps_dev_maps) + \
646 (nr_cpu_ids * sizeof(struct xps_map *)))
647#endif /* CONFIG_XPS */
648
600/* 649/*
601 * This structure defines the management hooks for network devices. 650 * This structure defines the management hooks for network devices.
602 * The following hooks can be defined; unless noted otherwise, they are 651 * The following hooks can be defined; unless noted otherwise, they are
@@ -683,7 +732,7 @@ struct netdev_rx_queue {
683 * neither operation. 732 * neither operation.
684 * 733 *
685 * void (*ndo_vlan_rx_register)(struct net_device *dev, struct vlan_group *grp); 734 * void (*ndo_vlan_rx_register)(struct net_device *dev, struct vlan_group *grp);
686 * If device support VLAN receive accleration 735 * If device support VLAN receive acceleration
687 * (ie. dev->features & NETIF_F_HW_VLAN_RX), then this function is called 736 * (ie. dev->features & NETIF_F_HW_VLAN_RX), then this function is called
688 * when vlan groups for the device changes. Note: grp is NULL 737 * when vlan groups for the device changes. Note: grp is NULL
689 * if no vlan's groups are being used. 738 * if no vlan's groups are being used.
@@ -951,7 +1000,7 @@ struct net_device {
951#endif 1000#endif
952 void *atalk_ptr; /* AppleTalk link */ 1001 void *atalk_ptr; /* AppleTalk link */
953 struct in_device __rcu *ip_ptr; /* IPv4 specific data */ 1002 struct in_device __rcu *ip_ptr; /* IPv4 specific data */
954 void *dn_ptr; /* DECnet specific data */ 1003 struct dn_dev __rcu *dn_ptr; /* DECnet specific data */
955 struct inet6_dev __rcu *ip6_ptr; /* IPv6 specific data */ 1004 struct inet6_dev __rcu *ip6_ptr; /* IPv6 specific data */
956 void *ec_ptr; /* Econet specific data */ 1005 void *ec_ptr; /* Econet specific data */
957 void *ax25_ptr; /* AX.25 specific data */ 1006 void *ax25_ptr; /* AX.25 specific data */
@@ -995,8 +1044,8 @@ struct net_device {
995 unsigned int real_num_rx_queues; 1044 unsigned int real_num_rx_queues;
996#endif 1045#endif
997 1046
998 rx_handler_func_t *rx_handler; 1047 rx_handler_func_t __rcu *rx_handler;
999 void *rx_handler_data; 1048 void __rcu *rx_handler_data;
1000 1049
1001 struct netdev_queue __rcu *ingress_queue; 1050 struct netdev_queue __rcu *ingress_queue;
1002 1051
@@ -1017,6 +1066,10 @@ struct net_device {
1017 unsigned long tx_queue_len; /* Max frames per queue allowed */ 1066 unsigned long tx_queue_len; /* Max frames per queue allowed */
1018 spinlock_t tx_global_lock; 1067 spinlock_t tx_global_lock;
1019 1068
1069#ifdef CONFIG_XPS
1070 struct xps_dev_maps __rcu *xps_maps;
1071#endif
1072
1020 /* These may be needed for future network-power-down code. */ 1073 /* These may be needed for future network-power-down code. */
1021 1074
1022 /* 1075 /*
@@ -1307,7 +1360,8 @@ static inline struct net_device *first_net_device(struct net *net)
1307 1360
1308extern int netdev_boot_setup_check(struct net_device *dev); 1361extern int netdev_boot_setup_check(struct net_device *dev);
1309extern unsigned long netdev_boot_base(const char *prefix, int unit); 1362extern unsigned long netdev_boot_base(const char *prefix, int unit);
1310extern struct net_device *dev_getbyhwaddr(struct net *net, unsigned short type, char *hwaddr); 1363extern struct net_device *dev_getbyhwaddr_rcu(struct net *net, unsigned short type,
1364 const char *hwaddr);
1311extern struct net_device *dev_getfirstbyhwtype(struct net *net, unsigned short type); 1365extern struct net_device *dev_getfirstbyhwtype(struct net *net, unsigned short type);
1312extern struct net_device *__dev_getfirstbyhwtype(struct net *net, unsigned short type); 1366extern struct net_device *__dev_getfirstbyhwtype(struct net *net, unsigned short type);
1313extern void dev_add_pack(struct packet_type *pt); 1367extern void dev_add_pack(struct packet_type *pt);
@@ -1600,9 +1654,9 @@ static inline int netif_queue_stopped(const struct net_device *dev)
1600 return netif_tx_queue_stopped(netdev_get_tx_queue(dev, 0)); 1654 return netif_tx_queue_stopped(netdev_get_tx_queue(dev, 0));
1601} 1655}
1602 1656
1603static inline int netif_tx_queue_frozen(const struct netdev_queue *dev_queue) 1657static inline int netif_tx_queue_frozen_or_stopped(const struct netdev_queue *dev_queue)
1604{ 1658{
1605 return test_bit(__QUEUE_STATE_FROZEN, &dev_queue->state); 1659 return dev_queue->state & QUEUE_STATE_XOFF_OR_FROZEN;
1606} 1660}
1607 1661
1608/** 1662/**
@@ -1693,6 +1747,16 @@ static inline void netif_wake_subqueue(struct net_device *dev, u16 queue_index)
1693 __netif_schedule(txq->qdisc); 1747 __netif_schedule(txq->qdisc);
1694} 1748}
1695 1749
1750/*
1751 * Returns a Tx hash for the given packet when dev->real_num_tx_queues is used
1752 * as a distribution range limit for the returned value.
1753 */
1754static inline u16 skb_tx_hash(const struct net_device *dev,
1755 const struct sk_buff *skb)
1756{
1757 return __skb_tx_hash(dev, skb, dev->real_num_tx_queues);
1758}
1759
1696/** 1760/**
1697 * netif_is_multiqueue - test if device has multiple transmit queues 1761 * netif_is_multiqueue - test if device has multiple transmit queues
1698 * @dev: network device 1762 * @dev: network device
@@ -2239,6 +2303,8 @@ unsigned long netdev_fix_features(unsigned long features, const char *name);
2239void netif_stacked_transfer_operstate(const struct net_device *rootdev, 2303void netif_stacked_transfer_operstate(const struct net_device *rootdev,
2240 struct net_device *dev); 2304 struct net_device *dev);
2241 2305
2306int netif_get_vlan_features(struct sk_buff *skb, struct net_device *dev);
2307
2242static inline int net_gso_ok(int features, int gso_type) 2308static inline int net_gso_ok(int features, int gso_type)
2243{ 2309{
2244 int feature = gso_type << NETIF_F_GSO_SHIFT; 2310 int feature = gso_type << NETIF_F_GSO_SHIFT;
@@ -2254,10 +2320,7 @@ static inline int skb_gso_ok(struct sk_buff *skb, int features)
2254static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) 2320static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb)
2255{ 2321{
2256 if (skb_is_gso(skb)) { 2322 if (skb_is_gso(skb)) {
2257 int features = dev->features; 2323 int features = netif_get_vlan_features(skb, dev);
2258
2259 if (skb->protocol == htons(ETH_P_8021Q) || skb->vlan_tci)
2260 features &= dev->vlan_features;
2261 2324
2262 return (!skb_gso_ok(skb, features) || 2325 return (!skb_gso_ok(skb, features) ||
2263 unlikely(skb->ip_summed != CHECKSUM_PARTIAL)); 2326 unlikely(skb->ip_summed != CHECKSUM_PARTIAL));
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
index 03317c8d4077..1893837b3966 100644
--- a/include/linux/netfilter.h
+++ b/include/linux/netfilter.h
@@ -33,6 +33,8 @@
33 33
34#define NF_QUEUE_NR(x) ((((x) << NF_VERDICT_BITS) & NF_VERDICT_QMASK) | NF_QUEUE) 34#define NF_QUEUE_NR(x) ((((x) << NF_VERDICT_BITS) & NF_VERDICT_QMASK) | NF_QUEUE)
35 35
36#define NF_DROP_ERR(x) (((-x) << NF_VERDICT_BITS) | NF_DROP)
37
36/* only for userspace compatibility */ 38/* only for userspace compatibility */
37#ifndef __KERNEL__ 39#ifndef __KERNEL__
38/* Generic cache responses from hook functions. 40/* Generic cache responses from hook functions.
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h
index 0edb2566c14c..2b89b712565b 100644
--- a/include/linux/nl80211.h
+++ b/include/linux/nl80211.h
@@ -172,10 +172,10 @@
172 * to the specified ISO/IEC 3166-1 alpha2 country code. The core will 172 * to the specified ISO/IEC 3166-1 alpha2 country code. The core will
173 * store this as a valid request and then query userspace for it. 173 * store this as a valid request and then query userspace for it.
174 * 174 *
175 * @NL80211_CMD_GET_MESH_PARAMS: Get mesh networking properties for the 175 * @NL80211_CMD_GET_MESH_CONFIG: Get mesh networking properties for the
176 * interface identified by %NL80211_ATTR_IFINDEX 176 * interface identified by %NL80211_ATTR_IFINDEX
177 * 177 *
178 * @NL80211_CMD_SET_MESH_PARAMS: Set mesh networking properties for the 178 * @NL80211_CMD_SET_MESH_CONFIG: Set mesh networking properties for the
179 * interface identified by %NL80211_ATTR_IFINDEX 179 * interface identified by %NL80211_ATTR_IFINDEX
180 * 180 *
181 * @NL80211_CMD_SET_MGMT_EXTRA_IE: Set extra IEs for management frames. The 181 * @NL80211_CMD_SET_MGMT_EXTRA_IE: Set extra IEs for management frames. The
@@ -358,11 +358,16 @@
358 * user space application). %NL80211_ATTR_FRAME is used to specify the 358 * user space application). %NL80211_ATTR_FRAME is used to specify the
359 * frame contents (including header). %NL80211_ATTR_WIPHY_FREQ (and 359 * frame contents (including header). %NL80211_ATTR_WIPHY_FREQ (and
360 * optionally %NL80211_ATTR_WIPHY_CHANNEL_TYPE) is used to indicate on 360 * optionally %NL80211_ATTR_WIPHY_CHANNEL_TYPE) is used to indicate on
361 * which channel the frame is to be transmitted or was received. This 361 * which channel the frame is to be transmitted or was received. If this
362 * channel has to be the current channel (remain-on-channel or the 362 * channel is not the current channel (remain-on-channel or the
363 * operational channel). When called, this operation returns a cookie 363 * operational channel) the device will switch to the given channel and
364 * (%NL80211_ATTR_COOKIE) that will be included with the TX status event 364 * transmit the frame, optionally waiting for a response for the time
365 * pertaining to the TX request. 365 * specified using %NL80211_ATTR_DURATION. When called, this operation
366 * returns a cookie (%NL80211_ATTR_COOKIE) that will be included with the
367 * TX status event pertaining to the TX request.
368 * @NL80211_CMD_FRAME_WAIT_CANCEL: When an off-channel TX was requested, this
369 * command may be used with the corresponding cookie to cancel the wait
370 * time if it is known that it is no longer necessary.
366 * @NL80211_CMD_ACTION: Alias for @NL80211_CMD_FRAME for backward compatibility. 371 * @NL80211_CMD_ACTION: Alias for @NL80211_CMD_FRAME for backward compatibility.
367 * @NL80211_CMD_FRAME_TX_STATUS: Report TX status of a management frame 372 * @NL80211_CMD_FRAME_TX_STATUS: Report TX status of a management frame
368 * transmitted with %NL80211_CMD_FRAME. %NL80211_ATTR_COOKIE identifies 373 * transmitted with %NL80211_CMD_FRAME. %NL80211_ATTR_COOKIE identifies
@@ -389,6 +394,18 @@
389 * 394 *
390 * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface. 395 * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface.
391 * 396 *
397 * @NL80211_CMD_JOIN_MESH: Join a mesh. The mesh ID must be given, and initial
398 * mesh config parameters may be given.
399 * @NL80211_CMD_LEAVE_MESH: Leave the mesh network -- no special arguments, the
400 * network is determined by the network interface.
401 *
402 * @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame
403 * notification. This event is used to indicate that an unprotected
404 * deauthentication frame was dropped when MFP is in use.
405 * @NL80211_CMD_UNPROT_DISASSOCIATE: Unprotected disassociation frame
406 * notification. This event is used to indicate that an unprotected
407 * disassociation frame was dropped when MFP is in use.
408 *
392 * @NL80211_CMD_MAX: highest used command number 409 * @NL80211_CMD_MAX: highest used command number
393 * @__NL80211_CMD_AFTER_LAST: internal use 410 * @__NL80211_CMD_AFTER_LAST: internal use
394 */ 411 */
@@ -431,8 +448,8 @@ enum nl80211_commands {
431 NL80211_CMD_SET_REG, 448 NL80211_CMD_SET_REG,
432 NL80211_CMD_REQ_SET_REG, 449 NL80211_CMD_REQ_SET_REG,
433 450
434 NL80211_CMD_GET_MESH_PARAMS, 451 NL80211_CMD_GET_MESH_CONFIG,
435 NL80211_CMD_SET_MESH_PARAMS, 452 NL80211_CMD_SET_MESH_CONFIG,
436 453
437 NL80211_CMD_SET_MGMT_EXTRA_IE /* reserved; not used */, 454 NL80211_CMD_SET_MGMT_EXTRA_IE /* reserved; not used */,
438 455
@@ -493,6 +510,14 @@ enum nl80211_commands {
493 NL80211_CMD_SET_CHANNEL, 510 NL80211_CMD_SET_CHANNEL,
494 NL80211_CMD_SET_WDS_PEER, 511 NL80211_CMD_SET_WDS_PEER,
495 512
513 NL80211_CMD_FRAME_WAIT_CANCEL,
514
515 NL80211_CMD_JOIN_MESH,
516 NL80211_CMD_LEAVE_MESH,
517
518 NL80211_CMD_UNPROT_DEAUTHENTICATE,
519 NL80211_CMD_UNPROT_DISASSOCIATE,
520
496 /* add new commands above here */ 521 /* add new commands above here */
497 522
498 /* used to define NL80211_CMD_MAX below */ 523 /* used to define NL80211_CMD_MAX below */
@@ -513,6 +538,10 @@ enum nl80211_commands {
513#define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE 538#define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE
514#define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT 539#define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT
515 540
541/* source-level API compatibility */
542#define NL80211_CMD_GET_MESH_PARAMS NL80211_CMD_GET_MESH_CONFIG
543#define NL80211_CMD_SET_MESH_PARAMS NL80211_CMD_SET_MESH_CONFIG
544
516/** 545/**
517 * enum nl80211_attrs - nl80211 netlink attributes 546 * enum nl80211_attrs - nl80211 netlink attributes
518 * 547 *
@@ -758,6 +787,9 @@ enum nl80211_commands {
758 * cache, a wiphy attribute. 787 * cache, a wiphy attribute.
759 * 788 *
760 * @NL80211_ATTR_DURATION: Duration of an operation in milliseconds, u32. 789 * @NL80211_ATTR_DURATION: Duration of an operation in milliseconds, u32.
790 * @NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION: Device attribute that
791 * specifies the maximum duration that can be requested with the
792 * remain-on-channel operation, in milliseconds, u32.
761 * 793 *
762 * @NL80211_ATTR_COOKIE: Generic 64-bit cookie to identify objects. 794 * @NL80211_ATTR_COOKIE: Generic 64-bit cookie to identify objects.
763 * 795 *
@@ -804,6 +836,51 @@ enum nl80211_commands {
804 * @NL80211_ATTR_SUPPORT_IBSS_RSN: The device supports IBSS RSN, which mostly 836 * @NL80211_ATTR_SUPPORT_IBSS_RSN: The device supports IBSS RSN, which mostly
805 * means support for per-station GTKs. 837 * means support for per-station GTKs.
806 * 838 *
839 * @NL80211_ATTR_WIPHY_ANTENNA_TX: Bitmap of allowed antennas for transmitting.
840 * This can be used to mask out antennas which are not attached or should
841 * not be used for transmitting. If an antenna is not selected in this
842 * bitmap the hardware is not allowed to transmit on this antenna.
843 *
844 * Each bit represents one antenna, starting with antenna 1 at the first
845 * bit. Depending on which antennas are selected in the bitmap, 802.11n
846 * drivers can derive which chainmasks to use (if all antennas belonging to
847 * a particular chain are disabled this chain should be disabled) and if
848 * a chain has diversity antennas wether diversity should be used or not.
849 * HT capabilities (STBC, TX Beamforming, Antenna selection) can be
850 * derived from the available chains after applying the antenna mask.
851 * Non-802.11n drivers can derive wether to use diversity or not.
852 * Drivers may reject configurations or RX/TX mask combinations they cannot
853 * support by returning -EINVAL.
854 *
855 * @NL80211_ATTR_WIPHY_ANTENNA_RX: Bitmap of allowed antennas for receiving.
856 * This can be used to mask out antennas which are not attached or should
857 * not be used for receiving. If an antenna is not selected in this bitmap
858 * the hardware should not be configured to receive on this antenna.
859 * For a more detailed descripton see @NL80211_ATTR_WIPHY_ANTENNA_TX.
860 *
861 * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX: Bitmap of antennas which are available
862 * for configuration as TX antennas via the above parameters.
863 *
864 * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX: Bitmap of antennas which are available
865 * for configuration as RX antennas via the above parameters.
866 *
867 * @NL80211_ATTR_MCAST_RATE: Multicast tx rate (in 100 kbps) for IBSS
868 *
869 * @NL80211_ATTR_OFFCHANNEL_TX_OK: For management frame TX, the frame may be
870 * transmitted on another channel when the channel given doesn't match
871 * the current channel. If the current channel doesn't match and this
872 * flag isn't set, the frame will be rejected. This is also used as an
873 * nl80211 capability flag.
874 *
875 * @NL80211_ATTR_BSS_HTOPMODE: HT operation mode (u16)
876 *
877 * @NL80211_ATTR_KEY_DEFAULT_TYPES: A nested attribute containing flags
878 * attributes, specifying what a key should be set as default as.
879 * See &enum nl80211_key_default_types.
880 *
881 * @NL80211_ATTR_MESH_SETUP: Optional mesh setup parameters. These cannot be
882 * changed once the mesh is active.
883 *
807 * @NL80211_ATTR_MAX: highest attribute number currently defined 884 * @NL80211_ATTR_MAX: highest attribute number currently defined
808 * @__NL80211_ATTR_AFTER_LAST: internal use 885 * @__NL80211_ATTR_AFTER_LAST: internal use
809 */ 886 */
@@ -858,7 +935,7 @@ enum nl80211_attrs {
858 NL80211_ATTR_REG_ALPHA2, 935 NL80211_ATTR_REG_ALPHA2,
859 NL80211_ATTR_REG_RULES, 936 NL80211_ATTR_REG_RULES,
860 937
861 NL80211_ATTR_MESH_PARAMS, 938 NL80211_ATTR_MESH_CONFIG,
862 939
863 NL80211_ATTR_BSS_BASIC_RATES, 940 NL80211_ATTR_BSS_BASIC_RATES,
864 941
@@ -973,6 +1050,24 @@ enum nl80211_attrs {
973 1050
974 NL80211_ATTR_SUPPORT_IBSS_RSN, 1051 NL80211_ATTR_SUPPORT_IBSS_RSN,
975 1052
1053 NL80211_ATTR_WIPHY_ANTENNA_TX,
1054 NL80211_ATTR_WIPHY_ANTENNA_RX,
1055
1056 NL80211_ATTR_MCAST_RATE,
1057
1058 NL80211_ATTR_OFFCHANNEL_TX_OK,
1059
1060 NL80211_ATTR_BSS_HT_OPMODE,
1061
1062 NL80211_ATTR_KEY_DEFAULT_TYPES,
1063
1064 NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION,
1065
1066 NL80211_ATTR_MESH_SETUP,
1067
1068 NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX,
1069 NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX,
1070
976 /* add attributes here, update the policy in nl80211.c */ 1071 /* add attributes here, update the policy in nl80211.c */
977 1072
978 __NL80211_ATTR_AFTER_LAST, 1073 __NL80211_ATTR_AFTER_LAST,
@@ -981,6 +1076,7 @@ enum nl80211_attrs {
981 1076
982/* source-level API compatibility */ 1077/* source-level API compatibility */
983#define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION 1078#define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION
1079#define NL80211_ATTR_MESH_PARAMS NL80211_ATTR_MESH_CONFIG
984 1080
985/* 1081/*
986 * Allow user space programs to use #ifdef on new attributes by defining them 1082 * Allow user space programs to use #ifdef on new attributes by defining them
@@ -1139,6 +1235,7 @@ enum nl80211_rate_info {
1139 * station) 1235 * station)
1140 * @NL80211_STA_INFO_TX_RETRIES: total retries (u32, to this station) 1236 * @NL80211_STA_INFO_TX_RETRIES: total retries (u32, to this station)
1141 * @NL80211_STA_INFO_TX_FAILED: total failed packets (u32, to this station) 1237 * @NL80211_STA_INFO_TX_FAILED: total failed packets (u32, to this station)
1238 * @NL80211_STA_INFO_SIGNAL_AVG: signal strength average (u8, dBm)
1142 */ 1239 */
1143enum nl80211_sta_info { 1240enum nl80211_sta_info {
1144 __NL80211_STA_INFO_INVALID, 1241 __NL80211_STA_INFO_INVALID,
@@ -1154,6 +1251,7 @@ enum nl80211_sta_info {
1154 NL80211_STA_INFO_TX_PACKETS, 1251 NL80211_STA_INFO_TX_PACKETS,
1155 NL80211_STA_INFO_TX_RETRIES, 1252 NL80211_STA_INFO_TX_RETRIES,
1156 NL80211_STA_INFO_TX_FAILED, 1253 NL80211_STA_INFO_TX_FAILED,
1254 NL80211_STA_INFO_SIGNAL_AVG,
1157 1255
1158 /* keep last */ 1256 /* keep last */
1159 __NL80211_STA_INFO_AFTER_LAST, 1257 __NL80211_STA_INFO_AFTER_LAST,
@@ -1307,7 +1405,11 @@ enum nl80211_bitrate_attr {
1307 * wireless core it thinks its knows the regulatory domain we should be in. 1405 * wireless core it thinks its knows the regulatory domain we should be in.
1308 * @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an 1406 * @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an
1309 * 802.11 country information element with regulatory information it 1407 * 802.11 country information element with regulatory information it
1310 * thinks we should consider. 1408 * thinks we should consider. cfg80211 only processes the country
1409 * code from the IE, and relies on the regulatory domain information
1410 * structure pased by userspace (CRDA) from our wireless-regdb.
1411 * If a channel is enabled but the country code indicates it should
1412 * be disabled we disable the channel and re-enable it upon disassociation.
1311 */ 1413 */
1312enum nl80211_reg_initiator { 1414enum nl80211_reg_initiator {
1313 NL80211_REGDOM_SET_BY_CORE, 1415 NL80211_REGDOM_SET_BY_CORE,
@@ -1476,7 +1578,8 @@ enum nl80211_mntr_flags {
1476/** 1578/**
1477 * enum nl80211_meshconf_params - mesh configuration parameters 1579 * enum nl80211_meshconf_params - mesh configuration parameters
1478 * 1580 *
1479 * Mesh configuration parameters 1581 * Mesh configuration parameters. These can be changed while the mesh is
1582 * active.
1480 * 1583 *
1481 * @__NL80211_MESHCONF_INVALID: internal use 1584 * @__NL80211_MESHCONF_INVALID: internal use
1482 * 1585 *
@@ -1525,6 +1628,9 @@ enum nl80211_mntr_flags {
1525 * 1628 *
1526 * @NL80211_MESHCONF_ROOTMODE: whether root mode is enabled or not 1629 * @NL80211_MESHCONF_ROOTMODE: whether root mode is enabled or not
1527 * 1630 *
1631 * @NL80211_MESHCONF_ELEMENT_TTL: specifies the value of TTL field set at a
1632 * source mesh point for path selection elements.
1633 *
1528 * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute 1634 * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute
1529 * 1635 *
1530 * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use 1636 * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use
@@ -1545,6 +1651,7 @@ enum nl80211_meshconf_params {
1545 NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, 1651 NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL,
1546 NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME, 1652 NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME,
1547 NL80211_MESHCONF_HWMP_ROOTMODE, 1653 NL80211_MESHCONF_HWMP_ROOTMODE,
1654 NL80211_MESHCONF_ELEMENT_TTL,
1548 1655
1549 /* keep last */ 1656 /* keep last */
1550 __NL80211_MESHCONF_ATTR_AFTER_LAST, 1657 __NL80211_MESHCONF_ATTR_AFTER_LAST,
@@ -1552,6 +1659,39 @@ enum nl80211_meshconf_params {
1552}; 1659};
1553 1660
1554/** 1661/**
1662 * enum nl80211_mesh_setup_params - mesh setup parameters
1663 *
1664 * Mesh setup parameters. These are used to start/join a mesh and cannot be
1665 * changed while the mesh is active.
1666 *
1667 * @__NL80211_MESH_SETUP_INVALID: Internal use
1668 *
1669 * @NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL: Enable this option to use a
1670 * vendor specific path selection algorithm or disable it to use the default
1671 * HWMP.
1672 *
1673 * @NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC: Enable this option to use a
1674 * vendor specific path metric or disable it to use the default Airtime
1675 * metric.
1676 *
1677 * @NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE: A vendor specific information
1678 * element that vendors will use to identify the path selection methods and
1679 * metrics in use.
1680 *
1681 * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use
1682 */
1683enum nl80211_mesh_setup_params {
1684 __NL80211_MESH_SETUP_INVALID,
1685 NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL,
1686 NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC,
1687 NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE,
1688
1689 /* keep last */
1690 __NL80211_MESH_SETUP_ATTR_AFTER_LAST,
1691 NL80211_MESH_SETUP_ATTR_MAX = __NL80211_MESH_SETUP_ATTR_AFTER_LAST - 1
1692};
1693
1694/**
1555 * enum nl80211_txq_attr - TX queue parameter attributes 1695 * enum nl80211_txq_attr - TX queue parameter attributes
1556 * @__NL80211_TXQ_ATTR_INVALID: Attribute number 0 is reserved 1696 * @__NL80211_TXQ_ATTR_INVALID: Attribute number 0 is reserved
1557 * @NL80211_TXQ_ATTR_QUEUE: TX queue identifier (NL80211_TXQ_Q_*) 1697 * @NL80211_TXQ_ATTR_QUEUE: TX queue identifier (NL80211_TXQ_Q_*)
@@ -1709,6 +1849,23 @@ enum nl80211_wpa_versions {
1709}; 1849};
1710 1850
1711/** 1851/**
1852 * enum nl80211_key_default_types - key default types
1853 * @__NL80211_KEY_DEFAULT_TYPE_INVALID: invalid
1854 * @NL80211_KEY_DEFAULT_TYPE_UNICAST: key should be used as default
1855 * unicast key
1856 * @NL80211_KEY_DEFAULT_TYPE_MULTICAST: key should be used as default
1857 * multicast key
1858 * @NUM_NL80211_KEY_DEFAULT_TYPES: number of default types
1859 */
1860enum nl80211_key_default_types {
1861 __NL80211_KEY_DEFAULT_TYPE_INVALID,
1862 NL80211_KEY_DEFAULT_TYPE_UNICAST,
1863 NL80211_KEY_DEFAULT_TYPE_MULTICAST,
1864
1865 NUM_NL80211_KEY_DEFAULT_TYPES
1866};
1867
1868/**
1712 * enum nl80211_key_attributes - key attributes 1869 * enum nl80211_key_attributes - key attributes
1713 * @__NL80211_KEY_INVALID: invalid 1870 * @__NL80211_KEY_INVALID: invalid
1714 * @NL80211_KEY_DATA: (temporal) key data; for TKIP this consists of 1871 * @NL80211_KEY_DATA: (temporal) key data; for TKIP this consists of
@@ -1724,6 +1881,9 @@ enum nl80211_wpa_versions {
1724 * @NL80211_KEY_TYPE: the key type from enum nl80211_key_type, if not 1881 * @NL80211_KEY_TYPE: the key type from enum nl80211_key_type, if not
1725 * specified the default depends on whether a MAC address was 1882 * specified the default depends on whether a MAC address was
1726 * given with the command using the key or not (u32) 1883 * given with the command using the key or not (u32)
1884 * @NL80211_KEY_DEFAULT_TYPES: A nested attribute containing flags
1885 * attributes, specifying what a key should be set as default as.
1886 * See &enum nl80211_key_default_types.
1727 * @__NL80211_KEY_AFTER_LAST: internal 1887 * @__NL80211_KEY_AFTER_LAST: internal
1728 * @NL80211_KEY_MAX: highest key attribute 1888 * @NL80211_KEY_MAX: highest key attribute
1729 */ 1889 */
@@ -1736,6 +1896,7 @@ enum nl80211_key_attributes {
1736 NL80211_KEY_DEFAULT, 1896 NL80211_KEY_DEFAULT,
1737 NL80211_KEY_DEFAULT_MGMT, 1897 NL80211_KEY_DEFAULT_MGMT,
1738 NL80211_KEY_TYPE, 1898 NL80211_KEY_TYPE,
1899 NL80211_KEY_DEFAULT_TYPES,
1739 1900
1740 /* keep last */ 1901 /* keep last */
1741 __NL80211_KEY_AFTER_LAST, 1902 __NL80211_KEY_AFTER_LAST,
@@ -1786,6 +1947,8 @@ enum nl80211_ps_state {
1786 * the minimum amount the RSSI level must change after an event before a 1947 * the minimum amount the RSSI level must change after an event before a
1787 * new event may be issued (to reduce effects of RSSI oscillation). 1948 * new event may be issued (to reduce effects of RSSI oscillation).
1788 * @NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: RSSI threshold event 1949 * @NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: RSSI threshold event
1950 * @NL80211_ATTR_CQM_PKT_LOSS_EVENT: a u32 value indicating that this many
1951 * consecutive packets were not acknowledged by the peer
1789 * @__NL80211_ATTR_CQM_AFTER_LAST: internal 1952 * @__NL80211_ATTR_CQM_AFTER_LAST: internal
1790 * @NL80211_ATTR_CQM_MAX: highest key attribute 1953 * @NL80211_ATTR_CQM_MAX: highest key attribute
1791 */ 1954 */
@@ -1794,6 +1957,7 @@ enum nl80211_attr_cqm {
1794 NL80211_ATTR_CQM_RSSI_THOLD, 1957 NL80211_ATTR_CQM_RSSI_THOLD,
1795 NL80211_ATTR_CQM_RSSI_HYST, 1958 NL80211_ATTR_CQM_RSSI_HYST,
1796 NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT, 1959 NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT,
1960 NL80211_ATTR_CQM_PKT_LOSS_EVENT,
1797 1961
1798 /* keep last */ 1962 /* keep last */
1799 __NL80211_ATTR_CQM_AFTER_LAST, 1963 __NL80211_ATTR_CQM_AFTER_LAST,
diff --git a/include/linux/rfkill.h b/include/linux/rfkill.h
index 08c32e4f261a..c6c608482cba 100644
--- a/include/linux/rfkill.h
+++ b/include/linux/rfkill.h
@@ -354,37 +354,6 @@ static inline bool rfkill_blocked(struct rfkill *rfkill)
354} 354}
355#endif /* RFKILL || RFKILL_MODULE */ 355#endif /* RFKILL || RFKILL_MODULE */
356 356
357
358#ifdef CONFIG_RFKILL_LEDS
359/**
360 * rfkill_get_led_trigger_name - Get the LED trigger name for the button's LED.
361 * This function might return a NULL pointer if registering of the
362 * LED trigger failed. Use this as "default_trigger" for the LED.
363 */
364const char *rfkill_get_led_trigger_name(struct rfkill *rfkill);
365
366/**
367 * rfkill_set_led_trigger_name -- set the LED trigger name
368 * @rfkill: rfkill struct
369 * @name: LED trigger name
370 *
371 * This function sets the LED trigger name of the radio LED
372 * trigger that rfkill creates. It is optional, but if called
373 * must be called before rfkill_register() to be effective.
374 */
375void rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name);
376#else
377static inline const char *rfkill_get_led_trigger_name(struct rfkill *rfkill)
378{
379 return NULL;
380}
381
382static inline void
383rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name)
384{
385}
386#endif
387
388#endif /* __KERNEL__ */ 357#endif /* __KERNEL__ */
389 358
390#endif /* RFKILL_H */ 359#endif /* RFKILL_H */
diff --git a/include/linux/security.h b/include/linux/security.h
index fd4d55fb8845..d47a4c24b3e4 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -796,8 +796,9 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
796 * @unix_stream_connect: 796 * @unix_stream_connect:
797 * Check permissions before establishing a Unix domain stream connection 797 * Check permissions before establishing a Unix domain stream connection
798 * between @sock and @other. 798 * between @sock and @other.
799 * @sock contains the socket structure. 799 * @sock contains the sock structure.
800 * @other contains the peer socket structure. 800 * @other contains the peer sock structure.
801 * @newsk contains the new sock structure.
801 * Return 0 if permission is granted. 802 * Return 0 if permission is granted.
802 * @unix_may_send: 803 * @unix_may_send:
803 * Check permissions before connecting or sending datagrams from @sock to 804 * Check permissions before connecting or sending datagrams from @sock to
@@ -1568,8 +1569,7 @@ struct security_operations {
1568 int (*inode_getsecctx)(struct inode *inode, void **ctx, u32 *ctxlen); 1569 int (*inode_getsecctx)(struct inode *inode, void **ctx, u32 *ctxlen);
1569 1570
1570#ifdef CONFIG_SECURITY_NETWORK 1571#ifdef CONFIG_SECURITY_NETWORK
1571 int (*unix_stream_connect) (struct socket *sock, 1572 int (*unix_stream_connect) (struct sock *sock, struct sock *other, struct sock *newsk);
1572 struct socket *other, struct sock *newsk);
1573 int (*unix_may_send) (struct socket *sock, struct socket *other); 1573 int (*unix_may_send) (struct socket *sock, struct socket *other);
1574 1574
1575 int (*socket_create) (int family, int type, int protocol, int kern); 1575 int (*socket_create) (int family, int type, int protocol, int kern);
@@ -2525,8 +2525,7 @@ static inline int security_inode_getsecctx(struct inode *inode, void **ctx, u32
2525 2525
2526#ifdef CONFIG_SECURITY_NETWORK 2526#ifdef CONFIG_SECURITY_NETWORK
2527 2527
2528int security_unix_stream_connect(struct socket *sock, struct socket *other, 2528int security_unix_stream_connect(struct sock *sock, struct sock *other, struct sock *newsk);
2529 struct sock *newsk);
2530int security_unix_may_send(struct socket *sock, struct socket *other); 2529int security_unix_may_send(struct socket *sock, struct socket *other);
2531int security_socket_create(int family, int type, int protocol, int kern); 2530int security_socket_create(int family, int type, int protocol, int kern);
2532int security_socket_post_create(struct socket *sock, int family, 2531int security_socket_post_create(struct socket *sock, int family,
@@ -2567,8 +2566,8 @@ void security_tun_dev_post_create(struct sock *sk);
2567int security_tun_dev_attach(struct sock *sk); 2566int security_tun_dev_attach(struct sock *sk);
2568 2567
2569#else /* CONFIG_SECURITY_NETWORK */ 2568#else /* CONFIG_SECURITY_NETWORK */
2570static inline int security_unix_stream_connect(struct socket *sock, 2569static inline int security_unix_stream_connect(struct sock *sock,
2571 struct socket *other, 2570 struct sock *other,
2572 struct sock *newsk) 2571 struct sock *newsk)
2573{ 2572{
2574 return 0; 2573 return 0;
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index e6ba898de61c..20ec0a64cb9f 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -386,9 +386,10 @@ struct sk_buff {
386#else 386#else
387 __u8 deliver_no_wcard:1; 387 __u8 deliver_no_wcard:1;
388#endif 388#endif
389 __u8 ooo_okay:1;
389 kmemcheck_bitfield_end(flags2); 390 kmemcheck_bitfield_end(flags2);
390 391
391 /* 0/14 bit hole */ 392 /* 0/13 bit hole */
392 393
393#ifdef CONFIG_NET_DMA 394#ifdef CONFIG_NET_DMA
394 dma_cookie_t dma_cookie; 395 dma_cookie_t dma_cookie;
@@ -1354,6 +1355,11 @@ static inline void skb_set_mac_header(struct sk_buff *skb, const int offset)
1354} 1355}
1355#endif /* NET_SKBUFF_DATA_USES_OFFSET */ 1356#endif /* NET_SKBUFF_DATA_USES_OFFSET */
1356 1357
1358static inline int skb_checksum_start_offset(const struct sk_buff *skb)
1359{
1360 return skb->csum_start - skb_headroom(skb);
1361}
1362
1357static inline int skb_transport_offset(const struct sk_buff *skb) 1363static inline int skb_transport_offset(const struct sk_buff *skb)
1358{ 1364{
1359 return skb_transport_header(skb) - skb->data; 1365 return skb_transport_header(skb) - skb->data;
@@ -2164,8 +2170,9 @@ static inline bool skb_rx_queue_recorded(const struct sk_buff *skb)
2164 return skb->queue_mapping != 0; 2170 return skb->queue_mapping != 0;
2165} 2171}
2166 2172
2167extern u16 skb_tx_hash(const struct net_device *dev, 2173extern u16 __skb_tx_hash(const struct net_device *dev,
2168 const struct sk_buff *skb); 2174 const struct sk_buff *skb,
2175 unsigned int num_tx_queues);
2169 2176
2170#ifdef CONFIG_XFRM 2177#ifdef CONFIG_XFRM
2171static inline struct sec_path *skb_sec_path(struct sk_buff *skb) 2178static inline struct sec_path *skb_sec_path(struct sk_buff *skb)
diff --git a/include/linux/socket.h b/include/linux/socket.h
index 86b652fabf6e..5f65f14c4f44 100644
--- a/include/linux/socket.h
+++ b/include/linux/socket.h
@@ -30,12 +30,10 @@ struct cred;
30#define __sockaddr_check_size(size) \ 30#define __sockaddr_check_size(size) \
31 BUILD_BUG_ON(((size) > sizeof(struct __kernel_sockaddr_storage))) 31 BUILD_BUG_ON(((size) > sizeof(struct __kernel_sockaddr_storage)))
32 32
33#ifdef __KERNEL__ 33#ifdef CONFIG_PROC_FS
34# ifdef CONFIG_PROC_FS
35struct seq_file; 34struct seq_file;
36extern void socket_seq_show(struct seq_file *seq); 35extern void socket_seq_show(struct seq_file *seq);
37# endif 36#endif
38#endif /* __KERNEL__ */
39 37
40typedef unsigned short sa_family_t; 38typedef unsigned short sa_family_t;
41 39
@@ -311,7 +309,6 @@ struct ucred {
311/* IPX options */ 309/* IPX options */
312#define IPX_TYPE 1 310#define IPX_TYPE 1
313 311
314#ifdef __KERNEL__
315extern void cred_to_ucred(struct pid *pid, const struct cred *cred, struct ucred *ucred); 312extern void cred_to_ucred(struct pid *pid, const struct cred *cred, struct ucred *ucred);
316 313
317extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len); 314extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len);
@@ -333,6 +330,5 @@ struct timespec;
333 330
334extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen, 331extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
335 unsigned int flags, struct timespec *timeout); 332 unsigned int flags, struct timespec *timeout);
336#endif
337#endif /* not kernel and not glibc */ 333#endif /* not kernel and not glibc */
338#endif /* _LINUX_SOCKET_H */ 334#endif /* _LINUX_SOCKET_H */
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h
index 623b704fdc42..9659eff52ca2 100644
--- a/include/linux/ssb/ssb.h
+++ b/include/linux/ssb/ssb.h
@@ -55,6 +55,10 @@ struct ssb_sprom {
55 u8 tri5gl; /* 5.2GHz TX isolation */ 55 u8 tri5gl; /* 5.2GHz TX isolation */
56 u8 tri5g; /* 5.3GHz TX isolation */ 56 u8 tri5g; /* 5.3GHz TX isolation */
57 u8 tri5gh; /* 5.8GHz TX isolation */ 57 u8 tri5gh; /* 5.8GHz TX isolation */
58 u8 txpid2g[4]; /* 2GHz TX power index */
59 u8 txpid5gl[4]; /* 4.9 - 5.1GHz TX power index */
60 u8 txpid5g[4]; /* 5.1 - 5.5GHz TX power index */
61 u8 txpid5gh[4]; /* 5.5 - ...GHz TX power index */
58 u8 rxpo2g; /* 2GHz RX power offset */ 62 u8 rxpo2g; /* 2GHz RX power offset */
59 u8 rxpo5g; /* 5GHz RX power offset */ 63 u8 rxpo5g; /* 5GHz RX power offset */
60 u8 rssisav2g; /* 2GHz RSSI params */ 64 u8 rssisav2g; /* 2GHz RSSI params */
diff --git a/include/linux/ssb/ssb_regs.h b/include/linux/ssb/ssb_regs.h
index 11daf9c140e7..489f7b6d61c5 100644
--- a/include/linux/ssb/ssb_regs.h
+++ b/include/linux/ssb/ssb_regs.h
@@ -299,6 +299,46 @@
299#define SSB_SPROM4_AGAIN2_SHIFT 0 299#define SSB_SPROM4_AGAIN2_SHIFT 0
300#define SSB_SPROM4_AGAIN3 0xFF00 /* Antenna 3 */ 300#define SSB_SPROM4_AGAIN3 0xFF00 /* Antenna 3 */
301#define SSB_SPROM4_AGAIN3_SHIFT 8 301#define SSB_SPROM4_AGAIN3_SHIFT 8
302#define SSB_SPROM4_TXPID2G01 0x0062 /* TX Power Index 2GHz */
303#define SSB_SPROM4_TXPID2G0 0x00FF
304#define SSB_SPROM4_TXPID2G0_SHIFT 0
305#define SSB_SPROM4_TXPID2G1 0xFF00
306#define SSB_SPROM4_TXPID2G1_SHIFT 8
307#define SSB_SPROM4_TXPID2G23 0x0064 /* TX Power Index 2GHz */
308#define SSB_SPROM4_TXPID2G2 0x00FF
309#define SSB_SPROM4_TXPID2G2_SHIFT 0
310#define SSB_SPROM4_TXPID2G3 0xFF00
311#define SSB_SPROM4_TXPID2G3_SHIFT 8
312#define SSB_SPROM4_TXPID5G01 0x0066 /* TX Power Index 5GHz middle subband */
313#define SSB_SPROM4_TXPID5G0 0x00FF
314#define SSB_SPROM4_TXPID5G0_SHIFT 0
315#define SSB_SPROM4_TXPID5G1 0xFF00
316#define SSB_SPROM4_TXPID5G1_SHIFT 8
317#define SSB_SPROM4_TXPID5G23 0x0068 /* TX Power Index 5GHz middle subband */
318#define SSB_SPROM4_TXPID5G2 0x00FF
319#define SSB_SPROM4_TXPID5G2_SHIFT 0
320#define SSB_SPROM4_TXPID5G3 0xFF00
321#define SSB_SPROM4_TXPID5G3_SHIFT 8
322#define SSB_SPROM4_TXPID5GL01 0x006A /* TX Power Index 5GHz low subband */
323#define SSB_SPROM4_TXPID5GL0 0x00FF
324#define SSB_SPROM4_TXPID5GL0_SHIFT 0
325#define SSB_SPROM4_TXPID5GL1 0xFF00
326#define SSB_SPROM4_TXPID5GL1_SHIFT 8
327#define SSB_SPROM4_TXPID5GL23 0x006C /* TX Power Index 5GHz low subband */
328#define SSB_SPROM4_TXPID5GL2 0x00FF
329#define SSB_SPROM4_TXPID5GL2_SHIFT 0
330#define SSB_SPROM4_TXPID5GL3 0xFF00
331#define SSB_SPROM4_TXPID5GL3_SHIFT 8
332#define SSB_SPROM4_TXPID5GH01 0x006E /* TX Power Index 5GHz high subband */
333#define SSB_SPROM4_TXPID5GH0 0x00FF
334#define SSB_SPROM4_TXPID5GH0_SHIFT 0
335#define SSB_SPROM4_TXPID5GH1 0xFF00
336#define SSB_SPROM4_TXPID5GH1_SHIFT 8
337#define SSB_SPROM4_TXPID5GH23 0x0070 /* TX Power Index 5GHz high subband */
338#define SSB_SPROM4_TXPID5GH2 0x00FF
339#define SSB_SPROM4_TXPID5GH2_SHIFT 0
340#define SSB_SPROM4_TXPID5GH3 0xFF00
341#define SSB_SPROM4_TXPID5GH3_SHIFT 8
302#define SSB_SPROM4_MAXP_BG 0x0080 /* Max Power BG in path 1 */ 342#define SSB_SPROM4_MAXP_BG 0x0080 /* Max Power BG in path 1 */
303#define SSB_SPROM4_MAXP_BG_MASK 0x00FF /* Mask for Max Power BG */ 343#define SSB_SPROM4_MAXP_BG_MASK 0x00FF /* Mask for Max Power BG */
304#define SSB_SPROM4_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */ 344#define SSB_SPROM4_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
index d66c61774d95..e10352915698 100644
--- a/include/linux/stmmac.h
+++ b/include/linux/stmmac.h
@@ -40,9 +40,9 @@ struct plat_stmmacenet_data {
40 int pmt; 40 int pmt;
41 void (*fix_mac_speed)(void *priv, unsigned int speed); 41 void (*fix_mac_speed)(void *priv, unsigned int speed);
42 void (*bus_setup)(void __iomem *ioaddr); 42 void (*bus_setup)(void __iomem *ioaddr);
43#ifdef CONFIG_STM_DRIVERS 43 int (*init)(struct platform_device *pdev);
44 struct stm_pad_config *pad_config; 44 void (*exit)(struct platform_device *pdev);
45#endif 45 void *custom_cfg;
46 void *bsp_priv; 46 void *bsp_priv;
47}; 47};
48 48
diff --git a/include/linux/tipc.h b/include/linux/tipc.h
index d10614b29d59..1eefa3f6d1f4 100644
--- a/include/linux/tipc.h
+++ b/include/linux/tipc.h
@@ -1,6 +1,6 @@
1/* 1/*
2 * include/linux/tipc.h: Include file for TIPC socket interface 2 * include/linux/tipc.h: Include file for TIPC socket interface
3 * 3 *
4 * Copyright (c) 2003-2006, Ericsson AB 4 * Copyright (c) 2003-2006, Ericsson AB
5 * Copyright (c) 2005, Wind River Systems 5 * Copyright (c) 2005, Wind River Systems
6 * All rights reserved. 6 * All rights reserved.
@@ -42,7 +42,7 @@
42/* 42/*
43 * TIPC addressing primitives 43 * TIPC addressing primitives
44 */ 44 */
45 45
46struct tipc_portid { 46struct tipc_portid {
47 __u32 ref; 47 __u32 ref;
48 __u32 node; 48 __u32 node;
@@ -89,7 +89,7 @@ static inline unsigned int tipc_node(__u32 addr)
89#define TIPC_TOP_SRV 1 /* topology service name type */ 89#define TIPC_TOP_SRV 1 /* topology service name type */
90#define TIPC_RESERVED_TYPES 64 /* lowest user-publishable name type */ 90#define TIPC_RESERVED_TYPES 64 /* lowest user-publishable name type */
91 91
92/* 92/*
93 * Publication scopes when binding port names and port name sequences 93 * Publication scopes when binding port names and port name sequences
94 */ 94 */
95 95
@@ -112,7 +112,7 @@ static inline unsigned int tipc_node(__u32 addr)
112#define TIPC_HIGH_IMPORTANCE 2 112#define TIPC_HIGH_IMPORTANCE 2
113#define TIPC_CRITICAL_IMPORTANCE 3 113#define TIPC_CRITICAL_IMPORTANCE 3
114 114
115/* 115/*
116 * Msg rejection/connection shutdown reasons 116 * Msg rejection/connection shutdown reasons
117 */ 117 */
118 118
@@ -127,9 +127,9 @@ static inline unsigned int tipc_node(__u32 addr)
127 * TIPC topology subscription service definitions 127 * TIPC topology subscription service definitions
128 */ 128 */
129 129
130#define TIPC_SUB_PORTS 0x01 /* filter for port availability */ 130#define TIPC_SUB_PORTS 0x01 /* filter for port availability */
131#define TIPC_SUB_SERVICE 0x02 /* filter for service availability */ 131#define TIPC_SUB_SERVICE 0x02 /* filter for service availability */
132#define TIPC_SUB_CANCEL 0x04 /* cancel a subscription */ 132#define TIPC_SUB_CANCEL 0x04 /* cancel a subscription */
133#if 0 133#if 0
134/* The following filter options are not currently implemented */ 134/* The following filter options are not currently implemented */
135#define TIPC_SUB_NO_BIND_EVTS 0x04 /* filter out "publish" events */ 135#define TIPC_SUB_NO_BIND_EVTS 0x04 /* filter out "publish" events */
@@ -137,12 +137,12 @@ static inline unsigned int tipc_node(__u32 addr)
137#define TIPC_SUB_SINGLE_EVT 0x10 /* expire after first event */ 137#define TIPC_SUB_SINGLE_EVT 0x10 /* expire after first event */
138#endif 138#endif
139 139
140#define TIPC_WAIT_FOREVER ~0 /* timeout for permanent subscription */ 140#define TIPC_WAIT_FOREVER (~0) /* timeout for permanent subscription */
141 141
142struct tipc_subscr { 142struct tipc_subscr {
143 struct tipc_name_seq seq; /* name sequence of interest */ 143 struct tipc_name_seq seq; /* name sequence of interest */
144 __u32 timeout; /* subscription duration (in ms) */ 144 __u32 timeout; /* subscription duration (in ms) */
145 __u32 filter; /* bitmask of filter options */ 145 __u32 filter; /* bitmask of filter options */
146 char usr_handle[8]; /* available for subscriber use */ 146 char usr_handle[8]; /* available for subscriber use */
147}; 147};
148 148
diff --git a/include/linux/tipc_config.h b/include/linux/tipc_config.h
index 9cde86c32412..7d42460a5e3c 100644
--- a/include/linux/tipc_config.h
+++ b/include/linux/tipc_config.h
@@ -1,6 +1,6 @@
1/* 1/*
2 * include/linux/tipc_config.h: Include file for TIPC configuration interface 2 * include/linux/tipc_config.h: Include file for TIPC configuration interface
3 * 3 *
4 * Copyright (c) 2003-2006, Ericsson AB 4 * Copyright (c) 2003-2006, Ericsson AB
5 * Copyright (c) 2005-2007, Wind River Systems 5 * Copyright (c) 2005-2007, Wind River Systems
6 * All rights reserved. 6 * All rights reserved.
@@ -54,19 +54,19 @@
54 * which specify parameters or results for the operation. 54 * which specify parameters or results for the operation.
55 * 55 *
56 * For many operations, the request and reply messages have a fixed number 56 * For many operations, the request and reply messages have a fixed number
57 * of TLVs (usually zero or one); however, some reply messages may return 57 * of TLVs (usually zero or one); however, some reply messages may return
58 * a variable number of TLVs. A failed request is denoted by the presence 58 * a variable number of TLVs. A failed request is denoted by the presence
59 * of an "error string" TLV in the reply message instead of the TLV(s) the 59 * of an "error string" TLV in the reply message instead of the TLV(s) the
60 * reply should contain if the request succeeds. 60 * reply should contain if the request succeeds.
61 */ 61 */
62 62
63/* 63/*
64 * Public commands: 64 * Public commands:
65 * May be issued by any process. 65 * May be issued by any process.
66 * Accepted by own node, or by remote node only if remote management enabled. 66 * Accepted by own node, or by remote node only if remote management enabled.
67 */ 67 */
68 68
69#define TIPC_CMD_NOOP 0x0000 /* tx none, rx none */ 69#define TIPC_CMD_NOOP 0x0000 /* tx none, rx none */
70#define TIPC_CMD_GET_NODES 0x0001 /* tx net_addr, rx node_info(s) */ 70#define TIPC_CMD_GET_NODES 0x0001 /* tx net_addr, rx node_info(s) */
71#define TIPC_CMD_GET_MEDIA_NAMES 0x0002 /* tx none, rx media_name(s) */ 71#define TIPC_CMD_GET_MEDIA_NAMES 0x0002 /* tx none, rx media_name(s) */
72#define TIPC_CMD_GET_BEARER_NAMES 0x0003 /* tx none, rx bearer_name(s) */ 72#define TIPC_CMD_GET_BEARER_NAMES 0x0003 /* tx none, rx bearer_name(s) */
@@ -83,21 +83,21 @@
83#define TIPC_CMD_GET_LINK_PEER 0x000D /* tx link_name, rx ? */ 83#define TIPC_CMD_GET_LINK_PEER 0x000D /* tx link_name, rx ? */
84#endif 84#endif
85 85
86/* 86/*
87 * Protected commands: 87 * Protected commands:
88 * May only be issued by "network administration capable" process. 88 * May only be issued by "network administration capable" process.
89 * Accepted by own node, or by remote node only if remote management enabled 89 * Accepted by own node, or by remote node only if remote management enabled
90 * and this node is zone manager. 90 * and this node is zone manager.
91 */ 91 */
92 92
93#define TIPC_CMD_GET_REMOTE_MNG 0x4003 /* tx none, rx unsigned */ 93#define TIPC_CMD_GET_REMOTE_MNG 0x4003 /* tx none, rx unsigned */
94#define TIPC_CMD_GET_MAX_PORTS 0x4004 /* tx none, rx unsigned */ 94#define TIPC_CMD_GET_MAX_PORTS 0x4004 /* tx none, rx unsigned */
95#define TIPC_CMD_GET_MAX_PUBL 0x4005 /* tx none, rx unsigned */ 95#define TIPC_CMD_GET_MAX_PUBL 0x4005 /* tx none, rx unsigned */
96#define TIPC_CMD_GET_MAX_SUBSCR 0x4006 /* tx none, rx unsigned */ 96#define TIPC_CMD_GET_MAX_SUBSCR 0x4006 /* tx none, rx unsigned */
97#define TIPC_CMD_GET_MAX_ZONES 0x4007 /* tx none, rx unsigned */ 97#define TIPC_CMD_GET_MAX_ZONES 0x4007 /* obsoleted */
98#define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* tx none, rx unsigned */ 98#define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* obsoleted */
99#define TIPC_CMD_GET_MAX_NODES 0x4009 /* tx none, rx unsigned */ 99#define TIPC_CMD_GET_MAX_NODES 0x4009 /* tx none, rx unsigned */
100#define TIPC_CMD_GET_MAX_SLAVES 0x400A /* tx none, rx unsigned */ 100#define TIPC_CMD_GET_MAX_SLAVES 0x400A /* obsoleted */
101#define TIPC_CMD_GET_NETID 0x400B /* tx none, rx unsigned */ 101#define TIPC_CMD_GET_NETID 0x400B /* tx none, rx unsigned */
102 102
103#define TIPC_CMD_ENABLE_BEARER 0x4101 /* tx bearer_config, rx none */ 103#define TIPC_CMD_ENABLE_BEARER 0x4101 /* tx bearer_config, rx none */
@@ -116,10 +116,10 @@
116#define TIPC_CMD_UNBLOCK_LINK 0x4106 /* tx link_name, rx none */ 116#define TIPC_CMD_UNBLOCK_LINK 0x4106 /* tx link_name, rx none */
117#endif 117#endif
118 118
119/* 119/*
120 * Private commands: 120 * Private commands:
121 * May only be issued by "network administration capable" process. 121 * May only be issued by "network administration capable" process.
122 * Accepted by own node only; cannot be used on a remote node. 122 * Accepted by own node only; cannot be used on a remote node.
123 */ 123 */
124 124
125#define TIPC_CMD_SET_NODE_ADDR 0x8001 /* tx net_addr, rx none */ 125#define TIPC_CMD_SET_NODE_ADDR 0x8001 /* tx net_addr, rx none */
@@ -130,10 +130,10 @@
130#define TIPC_CMD_SET_MAX_PORTS 0x8004 /* tx unsigned, rx none */ 130#define TIPC_CMD_SET_MAX_PORTS 0x8004 /* tx unsigned, rx none */
131#define TIPC_CMD_SET_MAX_PUBL 0x8005 /* tx unsigned, rx none */ 131#define TIPC_CMD_SET_MAX_PUBL 0x8005 /* tx unsigned, rx none */
132#define TIPC_CMD_SET_MAX_SUBSCR 0x8006 /* tx unsigned, rx none */ 132#define TIPC_CMD_SET_MAX_SUBSCR 0x8006 /* tx unsigned, rx none */
133#define TIPC_CMD_SET_MAX_ZONES 0x8007 /* tx unsigned, rx none */ 133#define TIPC_CMD_SET_MAX_ZONES 0x8007 /* obsoleted */
134#define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* tx unsigned, rx none */ 134#define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* obsoleted */
135#define TIPC_CMD_SET_MAX_NODES 0x8009 /* tx unsigned, rx none */ 135#define TIPC_CMD_SET_MAX_NODES 0x8009 /* tx unsigned, rx none */
136#define TIPC_CMD_SET_MAX_SLAVES 0x800A /* tx unsigned, rx none */ 136#define TIPC_CMD_SET_MAX_SLAVES 0x800A /* obsoleted */
137#define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */ 137#define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */
138 138
139/* 139/*
@@ -156,20 +156,20 @@
156#define TIPC_TLV_ULTRA_STRING 5 /* char[32768] (max) */ 156#define TIPC_TLV_ULTRA_STRING 5 /* char[32768] (max) */
157 157
158#define TIPC_TLV_ERROR_STRING 16 /* char[128] containing "error code" */ 158#define TIPC_TLV_ERROR_STRING 16 /* char[128] containing "error code" */
159#define TIPC_TLV_NET_ADDR 17 /* 32-bit integer denoting <Z.C.N> */ 159#define TIPC_TLV_NET_ADDR 17 /* 32-bit integer denoting <Z.C.N> */
160#define TIPC_TLV_MEDIA_NAME 18 /* char[TIPC_MAX_MEDIA_NAME] */ 160#define TIPC_TLV_MEDIA_NAME 18 /* char[TIPC_MAX_MEDIA_NAME] */
161#define TIPC_TLV_BEARER_NAME 19 /* char[TIPC_MAX_BEARER_NAME] */ 161#define TIPC_TLV_BEARER_NAME 19 /* char[TIPC_MAX_BEARER_NAME] */
162#define TIPC_TLV_LINK_NAME 20 /* char[TIPC_MAX_LINK_NAME] */ 162#define TIPC_TLV_LINK_NAME 20 /* char[TIPC_MAX_LINK_NAME] */
163#define TIPC_TLV_NODE_INFO 21 /* struct tipc_node_info */ 163#define TIPC_TLV_NODE_INFO 21 /* struct tipc_node_info */
164#define TIPC_TLV_LINK_INFO 22 /* struct tipc_link_info */ 164#define TIPC_TLV_LINK_INFO 22 /* struct tipc_link_info */
165#define TIPC_TLV_BEARER_CONFIG 23 /* struct tipc_bearer_config */ 165#define TIPC_TLV_BEARER_CONFIG 23 /* struct tipc_bearer_config */
166#define TIPC_TLV_LINK_CONFIG 24 /* struct tipc_link_config */ 166#define TIPC_TLV_LINK_CONFIG 24 /* struct tipc_link_config */
167#define TIPC_TLV_NAME_TBL_QUERY 25 /* struct tipc_name_table_query */ 167#define TIPC_TLV_NAME_TBL_QUERY 25 /* struct tipc_name_table_query */
168#define TIPC_TLV_PORT_REF 26 /* 32-bit port reference */ 168#define TIPC_TLV_PORT_REF 26 /* 32-bit port reference */
169 169
170/* 170/*
171 * Maximum sizes of TIPC bearer-related names (including terminating NUL) 171 * Maximum sizes of TIPC bearer-related names (including terminating NUL)
172 */ 172 */
173 173
174#define TIPC_MAX_MEDIA_NAME 16 /* format = media */ 174#define TIPC_MAX_MEDIA_NAME 16 /* format = media */
175#define TIPC_MAX_IF_NAME 16 /* format = interface */ 175#define TIPC_MAX_IF_NAME 16 /* format = interface */
@@ -234,7 +234,7 @@ struct tipc_name_table_query {
234}; 234};
235 235
236/* 236/*
237 * The error string TLV is a null-terminated string describing the cause 237 * The error string TLV is a null-terminated string describing the cause
238 * of the request failure. To simplify error processing (and to save space) 238 * of the request failure. To simplify error processing (and to save space)
239 * the first character of the string can be a special error code character 239 * the first character of the string can be a special error code character
240 * (lying by the range 0x80 to 0xFF) which represents a pre-defined reason. 240 * (lying by the range 0x80 to 0xFF) which represents a pre-defined reason.
@@ -254,16 +254,11 @@ struct tipc_link_create {
254 struct tipc_media_addr peer_addr; 254 struct tipc_media_addr peer_addr;
255 char bearer_name[TIPC_MAX_BEARER_NAME]; 255 char bearer_name[TIPC_MAX_BEARER_NAME];
256}; 256};
257
258struct tipc_route_info {
259 __u32 dest;
260 __u32 router;
261};
262#endif 257#endif
263 258
264/* 259/*
265 * A TLV consists of a descriptor, followed by the TLV value. 260 * A TLV consists of a descriptor, followed by the TLV value.
266 * TLV descriptor fields are stored in network byte order; 261 * TLV descriptor fields are stored in network byte order;
267 * TLV values must also be stored in network byte order (where applicable). 262 * TLV values must also be stored in network byte order (where applicable).
268 * TLV descriptors must be aligned to addresses which are multiple of 4, 263 * TLV descriptors must be aligned to addresses which are multiple of 4,
269 * so up to 3 bytes of padding may exist at the end of the TLV value area. 264 * so up to 3 bytes of padding may exist at the end of the TLV value area.
@@ -299,7 +294,7 @@ static inline int TLV_OK(const void *tlv, __u16 space)
299 294
300static inline int TLV_CHECK(const void *tlv, __u16 space, __u16 exp_type) 295static inline int TLV_CHECK(const void *tlv, __u16 space, __u16 exp_type)
301{ 296{
302 return TLV_OK(tlv, space) && 297 return TLV_OK(tlv, space) &&
303 (ntohs(((struct tlv_desc *)tlv)->tlv_type) == exp_type); 298 (ntohs(((struct tlv_desc *)tlv)->tlv_type) == exp_type);
304} 299}
305 300
@@ -318,7 +313,7 @@ static inline int TLV_SET(void *tlv, __u16 type, void *data, __u16 len)
318} 313}
319 314
320/* 315/*
321 * A TLV list descriptor simplifies processing of messages 316 * A TLV list descriptor simplifies processing of messages
322 * containing multiple TLVs. 317 * containing multiple TLVs.
323 */ 318 */
324 319
@@ -327,15 +322,15 @@ struct tlv_list_desc {
327 __u32 tlv_space; /* # bytes from curr TLV to list end */ 322 __u32 tlv_space; /* # bytes from curr TLV to list end */
328}; 323};
329 324
330static inline void TLV_LIST_INIT(struct tlv_list_desc *list, 325static inline void TLV_LIST_INIT(struct tlv_list_desc *list,
331 void *data, __u32 space) 326 void *data, __u32 space)
332{ 327{
333 list->tlv_ptr = (struct tlv_desc *)data; 328 list->tlv_ptr = (struct tlv_desc *)data;
334 list->tlv_space = space; 329 list->tlv_space = space;
335} 330}
336 331
337static inline int TLV_LIST_EMPTY(struct tlv_list_desc *list) 332static inline int TLV_LIST_EMPTY(struct tlv_list_desc *list)
338{ 333{
339 return (list->tlv_space == 0); 334 return (list->tlv_space == 0);
340} 335}
341 336
@@ -353,7 +348,7 @@ static inline void TLV_LIST_STEP(struct tlv_list_desc *list)
353{ 348{
354 __u16 tlv_space = TLV_ALIGN(ntohs(list->tlv_ptr->tlv_len)); 349 __u16 tlv_space = TLV_ALIGN(ntohs(list->tlv_ptr->tlv_len));
355 350
356 list->tlv_ptr = (struct tlv_desc *)((char *)list->tlv_ptr + tlv_space); 351 list->tlv_ptr = (struct tlv_desc *)((char *)list->tlv_ptr + tlv_space);
357 list->tlv_space -= tlv_space; 352 list->tlv_space -= tlv_space;
358} 353}
359 354
@@ -377,15 +372,14 @@ struct tipc_genlmsghdr {
377#define TIPC_GENL_HDRLEN NLMSG_ALIGN(sizeof(struct tipc_genlmsghdr)) 372#define TIPC_GENL_HDRLEN NLMSG_ALIGN(sizeof(struct tipc_genlmsghdr))
378 373
379/* 374/*
380 * Configuration messages exchanged via TIPC sockets use the TIPC configuration 375 * Configuration messages exchanged via TIPC sockets use the TIPC configuration
381 * message header, which is defined below. This structure is analogous 376 * message header, which is defined below. This structure is analogous
382 * to the Netlink message header, but fields are stored in network byte order 377 * to the Netlink message header, but fields are stored in network byte order
383 * and no padding is permitted between the header and the message data 378 * and no padding is permitted between the header and the message data
384 * that follows. 379 * that follows.
385 */ 380 */
386 381
387struct tipc_cfg_msg_hdr 382struct tipc_cfg_msg_hdr {
388{
389 __be32 tcm_len; /* Message length (including header) */ 383 __be32 tcm_len; /* Message length (including header) */
390 __be16 tcm_type; /* Command type */ 384 __be16 tcm_type; /* Command type */
391 __be16 tcm_flags; /* Additional flags */ 385 __be16 tcm_flags; /* Additional flags */
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
index 7ae27a473818..44842c8d38c0 100644
--- a/include/linux/usb/usbnet.h
+++ b/include/linux/usb/usbnet.h
@@ -97,6 +97,12 @@ struct driver_info {
97 97
98#define FLAG_LINK_INTR 0x0800 /* updates link (carrier) status */ 98#define FLAG_LINK_INTR 0x0800 /* updates link (carrier) status */
99 99
100/*
101 * Indicates to usbnet, that USB driver accumulates multiple IP packets.
102 * Affects statistic (counters) and short packet handling.
103 */
104#define FLAG_MULTI_PACKET 0x1000
105
100 /* init device ... can sleep, or cause probe() failure */ 106 /* init device ... can sleep, or cause probe() failure */
101 int (*bind)(struct usbnet *, struct usb_interface *); 107 int (*bind)(struct usbnet *, struct usb_interface *);
102 108
diff --git a/include/linux/wl12xx.h b/include/linux/wl12xx.h
index 4f902e1908aa..bebb8efea0a6 100644
--- a/include/linux/wl12xx.h
+++ b/include/linux/wl12xx.h
@@ -24,6 +24,14 @@
24#ifndef _LINUX_WL12XX_H 24#ifndef _LINUX_WL12XX_H
25#define _LINUX_WL12XX_H 25#define _LINUX_WL12XX_H
26 26
27/* The board reference clock values */
28enum {
29 WL12XX_REFCLOCK_19 = 0, /* 19.2 MHz */
30 WL12XX_REFCLOCK_26 = 1, /* 26 MHz */
31 WL12XX_REFCLOCK_38 = 2, /* 38.4 MHz */
32 WL12XX_REFCLOCK_54 = 3, /* 54 MHz */
33};
34
27struct wl12xx_platform_data { 35struct wl12xx_platform_data {
28 void (*set_power)(bool enable); 36 void (*set_power)(bool enable);
29 /* SDIO only: IRQ number if WLAN_IRQ line is used, 0 for SDIO IRQs */ 37 /* SDIO only: IRQ number if WLAN_IRQ line is used, 0 for SDIO IRQs */
diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h
index b971e3848493..930fdd2de79c 100644
--- a/include/linux/xfrm.h
+++ b/include/linux/xfrm.h
@@ -283,6 +283,7 @@ enum xfrm_attr_type_t {
283 XFRMA_KMADDRESS, /* struct xfrm_user_kmaddress */ 283 XFRMA_KMADDRESS, /* struct xfrm_user_kmaddress */
284 XFRMA_ALG_AUTH_TRUNC, /* struct xfrm_algo_auth */ 284 XFRMA_ALG_AUTH_TRUNC, /* struct xfrm_algo_auth */
285 XFRMA_MARK, /* struct xfrm_mark */ 285 XFRMA_MARK, /* struct xfrm_mark */
286 XFRMA_TFCPAD, /* __u32 */
286 __XFRMA_MAX 287 __XFRMA_MAX
287 288
288#define XFRMA_MAX (__XFRMA_MAX - 1) 289#define XFRMA_MAX (__XFRMA_MAX - 1)
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
index a9441249306c..23710aa6a181 100644
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -1,8 +1,6 @@
1#ifndef _ADDRCONF_H 1#ifndef _ADDRCONF_H
2#define _ADDRCONF_H 2#define _ADDRCONF_H
3 3
4#define RETRANS_TIMER HZ
5
6#define MAX_RTR_SOLICITATIONS 3 4#define MAX_RTR_SOLICITATIONS 3
7#define RTR_SOLICITATION_INTERVAL (4*HZ) 5#define RTR_SOLICITATION_INTERVAL (4*HZ)
8 6
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
index d81ea7997701..0c5e72503b77 100644
--- a/include/net/bluetooth/bluetooth.h
+++ b/include/net/bluetooth/bluetooth.h
@@ -144,6 +144,7 @@ struct bt_skb_cb {
144 __u8 tx_seq; 144 __u8 tx_seq;
145 __u8 retries; 145 __u8 retries;
146 __u8 sar; 146 __u8 sar;
147 unsigned short channel;
147}; 148};
148#define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb)) 149#define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb))
149 150
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index e30e00834340..29a7a8ca0438 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -1,4 +1,4 @@
1/* 1/*
2 BlueZ - Bluetooth protocol stack for Linux 2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated 3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 4
@@ -12,13 +12,13 @@
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 19
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED. 22 SOFTWARE IS DISCLAIMED.
23*/ 23*/
24 24
@@ -489,7 +489,7 @@ struct hci_rp_read_local_name {
489 489
490#define HCI_OP_WRITE_PG_TIMEOUT 0x0c18 490#define HCI_OP_WRITE_PG_TIMEOUT 0x0c18
491 491
492#define HCI_OP_WRITE_SCAN_ENABLE 0x0c1a 492#define HCI_OP_WRITE_SCAN_ENABLE 0x0c1a
493 #define SCAN_DISABLED 0x00 493 #define SCAN_DISABLED 0x00
494 #define SCAN_INQUIRY 0x01 494 #define SCAN_INQUIRY 0x01
495 #define SCAN_PAGE 0x02 495 #define SCAN_PAGE 0x02
@@ -874,7 +874,7 @@ struct hci_ev_si_security {
874 874
875struct hci_command_hdr { 875struct hci_command_hdr {
876 __le16 opcode; /* OCF & OGF */ 876 __le16 opcode; /* OCF & OGF */
877 __u8 plen; 877 __u8 plen;
878} __packed; 878} __packed;
879 879
880struct hci_event_hdr { 880struct hci_event_hdr {
@@ -934,9 +934,13 @@ static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
934struct sockaddr_hci { 934struct sockaddr_hci {
935 sa_family_t hci_family; 935 sa_family_t hci_family;
936 unsigned short hci_dev; 936 unsigned short hci_dev;
937 unsigned short hci_channel;
937}; 938};
938#define HCI_DEV_NONE 0xffff 939#define HCI_DEV_NONE 0xffff
939 940
941#define HCI_CHANNEL_RAW 0
942#define HCI_CHANNEL_CONTROL 1
943
940struct hci_filter { 944struct hci_filter {
941 unsigned long type_mask; 945 unsigned long type_mask;
942 unsigned long event_mask[2]; 946 unsigned long event_mask[2];
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index ebec8c9a929d..a29feb01854e 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -44,15 +44,15 @@ struct inquiry_data {
44}; 44};
45 45
46struct inquiry_entry { 46struct inquiry_entry {
47 struct inquiry_entry *next; 47 struct inquiry_entry *next;
48 __u32 timestamp; 48 __u32 timestamp;
49 struct inquiry_data data; 49 struct inquiry_data data;
50}; 50};
51 51
52struct inquiry_cache { 52struct inquiry_cache {
53 spinlock_t lock; 53 spinlock_t lock;
54 __u32 timestamp; 54 __u32 timestamp;
55 struct inquiry_entry *list; 55 struct inquiry_entry *list;
56}; 56};
57 57
58struct hci_conn_hash { 58struct hci_conn_hash {
@@ -129,6 +129,7 @@ struct hci_dev {
129 wait_queue_head_t req_wait_q; 129 wait_queue_head_t req_wait_q;
130 __u32 req_status; 130 __u32 req_status;
131 __u32 req_result; 131 __u32 req_result;
132 __u16 req_last_cmd;
132 133
133 struct inquiry_cache inq_cache; 134 struct inquiry_cache inq_cache;
134 struct hci_conn_hash conn_hash; 135 struct hci_conn_hash conn_hash;
@@ -141,7 +142,7 @@ struct hci_dev {
141 void *driver_data; 142 void *driver_data;
142 void *core_data; 143 void *core_data;
143 144
144 atomic_t promisc; 145 atomic_t promisc;
145 146
146 struct dentry *debugfs; 147 struct dentry *debugfs;
147 148
@@ -150,7 +151,7 @@ struct hci_dev {
150 151
151 struct rfkill *rfkill; 152 struct rfkill *rfkill;
152 153
153 struct module *owner; 154 struct module *owner;
154 155
155 int (*open)(struct hci_dev *hdev); 156 int (*open)(struct hci_dev *hdev);
156 int (*close)(struct hci_dev *hdev); 157 int (*close)(struct hci_dev *hdev);
@@ -215,8 +216,8 @@ extern rwlock_t hci_dev_list_lock;
215extern rwlock_t hci_cb_list_lock; 216extern rwlock_t hci_cb_list_lock;
216 217
217/* ----- Inquiry cache ----- */ 218/* ----- Inquiry cache ----- */
218#define INQUIRY_CACHE_AGE_MAX (HZ*30) // 30 seconds 219#define INQUIRY_CACHE_AGE_MAX (HZ*30) /* 30 seconds */
219#define INQUIRY_ENTRY_AGE_MAX (HZ*60) // 60 seconds 220#define INQUIRY_ENTRY_AGE_MAX (HZ*60) /* 60 seconds */
220 221
221#define inquiry_cache_lock(c) spin_lock(&c->lock) 222#define inquiry_cache_lock(c) spin_lock(&c->lock)
222#define inquiry_cache_unlock(c) spin_unlock(&c->lock) 223#define inquiry_cache_unlock(c) spin_unlock(&c->lock)
@@ -660,6 +661,11 @@ void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data);
660/* ----- HCI Sockets ----- */ 661/* ----- HCI Sockets ----- */
661void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb); 662void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
662 663
664/* Management interface */
665int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len);
666int mgmt_index_added(u16 index);
667int mgmt_index_removed(u16 index);
668
663/* HCI info for socket */ 669/* HCI info for socket */
664#define hci_pi(sk) ((struct hci_pinfo *) sk) 670#define hci_pi(sk) ((struct hci_pinfo *) sk)
665 671
@@ -668,6 +674,7 @@ struct hci_pinfo {
668 struct hci_dev *hdev; 674 struct hci_dev *hdev;
669 struct hci_filter filter; 675 struct hci_filter filter;
670 __u32 cmsg_mask; 676 __u32 cmsg_mask;
677 unsigned short channel;
671}; 678};
672 679
673/* HCI security filter */ 680/* HCI security filter */
@@ -687,6 +694,6 @@ struct hci_sec_filter {
687#define hci_req_lock(d) mutex_lock(&d->req_lock) 694#define hci_req_lock(d) mutex_lock(&d->req_lock)
688#define hci_req_unlock(d) mutex_unlock(&d->req_lock) 695#define hci_req_unlock(d) mutex_unlock(&d->req_lock)
689 696
690void hci_req_complete(struct hci_dev *hdev, int result); 697void hci_req_complete(struct hci_dev *hdev, __u16 cmd, int result);
691 698
692#endif /* __HCI_CORE_H */ 699#endif /* __HCI_CORE_H */
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index c819c8bf9b68..7ad25ca60ec0 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -1,4 +1,4 @@
1/* 1/*
2 BlueZ - Bluetooth protocol stack for Linux 2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated 3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org> 4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
@@ -14,13 +14,13 @@
14 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 14 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 15 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
16 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 16 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
17 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 17 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
18 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 21
22 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 22 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
23 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 23 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
24 SOFTWARE IS DISCLAIMED. 24 SOFTWARE IS DISCLAIMED.
25*/ 25*/
26 26
@@ -417,11 +417,11 @@ static inline int l2cap_tx_window_full(struct sock *sk)
417 return sub == pi->remote_tx_win; 417 return sub == pi->remote_tx_win;
418} 418}
419 419
420#define __get_txseq(ctrl) ((ctrl) & L2CAP_CTRL_TXSEQ) >> 1 420#define __get_txseq(ctrl) (((ctrl) & L2CAP_CTRL_TXSEQ) >> 1)
421#define __get_reqseq(ctrl) ((ctrl) & L2CAP_CTRL_REQSEQ) >> 8 421#define __get_reqseq(ctrl) (((ctrl) & L2CAP_CTRL_REQSEQ) >> 8)
422#define __is_iframe(ctrl) !((ctrl) & L2CAP_CTRL_FRAME_TYPE) 422#define __is_iframe(ctrl) (!((ctrl) & L2CAP_CTRL_FRAME_TYPE))
423#define __is_sframe(ctrl) (ctrl) & L2CAP_CTRL_FRAME_TYPE 423#define __is_sframe(ctrl) ((ctrl) & L2CAP_CTRL_FRAME_TYPE)
424#define __is_sar_start(ctrl) ((ctrl) & L2CAP_CTRL_SAR) == L2CAP_SDU_START 424#define __is_sar_start(ctrl) (((ctrl) & L2CAP_CTRL_SAR) == L2CAP_SDU_START)
425 425
426void l2cap_load(void); 426void l2cap_load(void);
427 427
diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h
new file mode 100644
index 000000000000..ca29c1367ffd
--- /dev/null
+++ b/include/net/bluetooth/mgmt.h
@@ -0,0 +1,87 @@
1/*
2 BlueZ - Bluetooth protocol stack for Linux
3
4 Copyright (C) 2010 Nokia Corporation
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License version 2 as
8 published by the Free Software Foundation;
9
10 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
13 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
14 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
15 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18
19 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
20 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
21 SOFTWARE IS DISCLAIMED.
22*/
23
24struct mgmt_hdr {
25 __le16 opcode;
26 __le16 len;
27} __packed;
28#define MGMT_HDR_SIZE 4
29
30#define MGMT_OP_READ_VERSION 0x0001
31struct mgmt_rp_read_version {
32 __u8 version;
33 __le16 revision;
34} __packed;
35
36#define MGMT_OP_READ_INDEX_LIST 0x0003
37struct mgmt_rp_read_index_list {
38 __le16 num_controllers;
39 __le16 index[0];
40} __packed;
41
42#define MGMT_OP_READ_INFO 0x0004
43struct mgmt_cp_read_info {
44 __le16 index;
45} __packed;
46struct mgmt_rp_read_info {
47 __le16 index;
48 __u8 type;
49 __u8 powered;
50 __u8 discoverable;
51 __u8 pairable;
52 __u8 sec_mode;
53 bdaddr_t bdaddr;
54 __u8 dev_class[3];
55 __u8 features[8];
56 __u16 manufacturer;
57 __u8 hci_ver;
58 __u16 hci_rev;
59} __packed;
60
61#define MGMT_EV_CMD_COMPLETE 0x0001
62struct mgmt_ev_cmd_complete {
63 __le16 opcode;
64 __u8 data[0];
65} __packed;
66
67#define MGMT_EV_CMD_STATUS 0x0002
68struct mgmt_ev_cmd_status {
69 __u8 status;
70 __le16 opcode;
71} __packed;
72
73#define MGMT_EV_CONTROLLER_ERROR 0x0003
74struct mgmt_ev_controller_error {
75 __le16 index;
76 __u8 error_code;
77} __packed;
78
79#define MGMT_EV_INDEX_ADDED 0x0004
80struct mgmt_ev_index_added {
81 __le16 index;
82} __packed;
83
84#define MGMT_EV_INDEX_REMOVED 0x0005
85struct mgmt_ev_index_removed {
86 __le16 index;
87} __packed;
diff --git a/include/net/bluetooth/rfcomm.h b/include/net/bluetooth/rfcomm.h
index 71047bc0af84..6eac4a760c3b 100644
--- a/include/net/bluetooth/rfcomm.h
+++ b/include/net/bluetooth/rfcomm.h
@@ -1,5 +1,5 @@
1/* 1/*
2 RFCOMM implementation for Linux Bluetooth stack (BlueZ). 2 RFCOMM implementation for Linux Bluetooth stack (BlueZ)
3 Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com> 3 Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
4 Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org> 4 Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
5 5
@@ -11,13 +11,13 @@
11 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 11 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 12 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
13 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 13 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
14 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 14 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
15 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 18
19 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 19 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
20 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 20 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
21 SOFTWARE IS DISCLAIMED. 21 SOFTWARE IS DISCLAIMED.
22*/ 22*/
23 23
@@ -105,7 +105,7 @@
105struct rfcomm_hdr { 105struct rfcomm_hdr {
106 u8 addr; 106 u8 addr;
107 u8 ctrl; 107 u8 ctrl;
108 u8 len; // Actual size can be 2 bytes 108 u8 len; /* Actual size can be 2 bytes */
109} __packed; 109} __packed;
110 110
111struct rfcomm_cmd { 111struct rfcomm_cmd {
@@ -228,7 +228,7 @@ struct rfcomm_dlc {
228/* ---- RFCOMM SEND RPN ---- */ 228/* ---- RFCOMM SEND RPN ---- */
229int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci, 229int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci,
230 u8 bit_rate, u8 data_bits, u8 stop_bits, 230 u8 bit_rate, u8 data_bits, u8 stop_bits,
231 u8 parity, u8 flow_ctrl_settings, 231 u8 parity, u8 flow_ctrl_settings,
232 u8 xon_char, u8 xoff_char, u16 param_mask); 232 u8 xon_char, u8 xoff_char, u16 param_mask);
233 233
234/* ---- RFCOMM DLCs (channels) ---- */ 234/* ---- RFCOMM DLCs (channels) ---- */
diff --git a/include/net/bluetooth/sco.h b/include/net/bluetooth/sco.h
index e28a2a771471..1e35c43657c8 100644
--- a/include/net/bluetooth/sco.h
+++ b/include/net/bluetooth/sco.h
@@ -1,4 +1,4 @@
1/* 1/*
2 BlueZ - Bluetooth protocol stack for Linux 2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated 3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 4
@@ -12,13 +12,13 @@
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 19
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED. 22 SOFTWARE IS DISCLAIMED.
23*/ 23*/
24 24
@@ -55,11 +55,11 @@ struct sco_conninfo {
55struct sco_conn { 55struct sco_conn {
56 struct hci_conn *hcon; 56 struct hci_conn *hcon;
57 57
58 bdaddr_t *dst; 58 bdaddr_t *dst;
59 bdaddr_t *src; 59 bdaddr_t *src;
60 60
61 spinlock_t lock; 61 spinlock_t lock;
62 struct sock *sk; 62 struct sock *sk;
63 63
64 unsigned int mtu; 64 unsigned int mtu;
65}; 65};
diff --git a/include/net/caif/cfctrl.h b/include/net/caif/cfctrl.h
index 9402543fc20d..e54f6396fa4c 100644
--- a/include/net/caif/cfctrl.h
+++ b/include/net/caif/cfctrl.h
@@ -51,7 +51,7 @@ struct cfctrl_rsp {
51 void (*restart_rsp)(void); 51 void (*restart_rsp)(void);
52 void (*radioset_rsp)(void); 52 void (*radioset_rsp)(void);
53 void (*reject_rsp)(struct cflayer *layer, u8 linkid, 53 void (*reject_rsp)(struct cflayer *layer, u8 linkid,
54 struct cflayer *client_layer);; 54 struct cflayer *client_layer);
55}; 55};
56 56
57/* Link Setup Parameters for CAIF-Links. */ 57/* Link Setup Parameters for CAIF-Links. */
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 97b8b7c9b63c..bcc9f448ec4e 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -258,13 +258,9 @@ struct ieee80211_supported_band {
258 258
259/** 259/**
260 * struct vif_params - describes virtual interface parameters 260 * struct vif_params - describes virtual interface parameters
261 * @mesh_id: mesh ID to use
262 * @mesh_id_len: length of the mesh ID
263 * @use_4addr: use 4-address frames 261 * @use_4addr: use 4-address frames
264 */ 262 */
265struct vif_params { 263struct vif_params {
266 u8 *mesh_id;
267 int mesh_id_len;
268 int use_4addr; 264 int use_4addr;
269}; 265};
270 266
@@ -424,6 +420,7 @@ struct station_parameters {
424 * @STATION_INFO_TX_RETRIES: @tx_retries filled 420 * @STATION_INFO_TX_RETRIES: @tx_retries filled
425 * @STATION_INFO_TX_FAILED: @tx_failed filled 421 * @STATION_INFO_TX_FAILED: @tx_failed filled
426 * @STATION_INFO_RX_DROP_MISC: @rx_dropped_misc filled 422 * @STATION_INFO_RX_DROP_MISC: @rx_dropped_misc filled
423 * @STATION_INFO_SIGNAL_AVG: @signal_avg filled
427 */ 424 */
428enum station_info_flags { 425enum station_info_flags {
429 STATION_INFO_INACTIVE_TIME = 1<<0, 426 STATION_INFO_INACTIVE_TIME = 1<<0,
@@ -439,6 +436,7 @@ enum station_info_flags {
439 STATION_INFO_TX_RETRIES = 1<<10, 436 STATION_INFO_TX_RETRIES = 1<<10,
440 STATION_INFO_TX_FAILED = 1<<11, 437 STATION_INFO_TX_FAILED = 1<<11,
441 STATION_INFO_RX_DROP_MISC = 1<<12, 438 STATION_INFO_RX_DROP_MISC = 1<<12,
439 STATION_INFO_SIGNAL_AVG = 1<<13,
442}; 440};
443 441
444/** 442/**
@@ -485,6 +483,7 @@ struct rate_info {
485 * @plid: mesh peer link id 483 * @plid: mesh peer link id
486 * @plink_state: mesh peer link state 484 * @plink_state: mesh peer link state
487 * @signal: signal strength of last received packet in dBm 485 * @signal: signal strength of last received packet in dBm
486 * @signal_avg: signal strength average in dBm
488 * @txrate: current unicast bitrate to this station 487 * @txrate: current unicast bitrate to this station
489 * @rx_packets: packets received from this station 488 * @rx_packets: packets received from this station
490 * @tx_packets: packets transmitted to this station 489 * @tx_packets: packets transmitted to this station
@@ -505,6 +504,7 @@ struct station_info {
505 u16 plid; 504 u16 plid;
506 u8 plink_state; 505 u8 plink_state;
507 s8 signal; 506 s8 signal;
507 s8 signal_avg;
508 struct rate_info txrate; 508 struct rate_info txrate;
509 u32 rx_packets; 509 u32 rx_packets;
510 u32 tx_packets; 510 u32 tx_packets;
@@ -605,6 +605,8 @@ struct mpath_info {
605 * (or NULL for no change) 605 * (or NULL for no change)
606 * @basic_rates_len: number of basic rates 606 * @basic_rates_len: number of basic rates
607 * @ap_isolate: do not forward packets between connected stations 607 * @ap_isolate: do not forward packets between connected stations
608 * @ht_opmode: HT Operation mode
609 * (u16 = opmode, -1 = do not change)
608 */ 610 */
609struct bss_parameters { 611struct bss_parameters {
610 int use_cts_prot; 612 int use_cts_prot;
@@ -613,8 +615,14 @@ struct bss_parameters {
613 u8 *basic_rates; 615 u8 *basic_rates;
614 u8 basic_rates_len; 616 u8 basic_rates_len;
615 int ap_isolate; 617 int ap_isolate;
618 int ht_opmode;
616}; 619};
617 620
621/*
622 * struct mesh_config - 802.11s mesh configuration
623 *
624 * These parameters can be changed while the mesh is active.
625 */
618struct mesh_config { 626struct mesh_config {
619 /* Timeouts in ms */ 627 /* Timeouts in ms */
620 /* Mesh plink management parameters */ 628 /* Mesh plink management parameters */
@@ -624,6 +632,8 @@ struct mesh_config {
624 u16 dot11MeshMaxPeerLinks; 632 u16 dot11MeshMaxPeerLinks;
625 u8 dot11MeshMaxRetries; 633 u8 dot11MeshMaxRetries;
626 u8 dot11MeshTTL; 634 u8 dot11MeshTTL;
635 /* ttl used in path selection information elements */
636 u8 element_ttl;
627 bool auto_open_plinks; 637 bool auto_open_plinks;
628 /* HWMP parameters */ 638 /* HWMP parameters */
629 u8 dot11MeshHWMPmaxPREQretries; 639 u8 dot11MeshHWMPmaxPREQretries;
@@ -636,6 +646,26 @@ struct mesh_config {
636}; 646};
637 647
638/** 648/**
649 * struct mesh_setup - 802.11s mesh setup configuration
650 * @mesh_id: the mesh ID
651 * @mesh_id_len: length of the mesh ID, at least 1 and at most 32 bytes
652 * @path_sel_proto: which path selection protocol to use
653 * @path_metric: which metric to use
654 * @vendor_ie: vendor information elements (optional)
655 * @vendor_ie_len: length of vendor information elements
656 *
657 * These parameters are fixed when the mesh is created.
658 */
659struct mesh_setup {
660 const u8 *mesh_id;
661 u8 mesh_id_len;
662 u8 path_sel_proto;
663 u8 path_metric;
664 const u8 *vendor_ie;
665 u8 vendor_ie_len;
666};
667
668/**
639 * struct ieee80211_txq_params - TX queue parameters 669 * struct ieee80211_txq_params - TX queue parameters
640 * @queue: TX queue identifier (NL80211_TXQ_Q_*) 670 * @queue: TX queue identifier (NL80211_TXQ_Q_*)
641 * @txop: Maximum burst time in units of 32 usecs, 0 meaning disabled 671 * @txop: Maximum burst time in units of 32 usecs, 0 meaning disabled
@@ -923,6 +953,7 @@ struct cfg80211_disassoc_request {
923 * @privacy: this is a protected network, keys will be configured 953 * @privacy: this is a protected network, keys will be configured
924 * after joining 954 * after joining
925 * @basic_rates: bitmap of basic rates to use when creating the IBSS 955 * @basic_rates: bitmap of basic rates to use when creating the IBSS
956 * @mcast_rate: per-band multicast rate index + 1 (0: disabled)
926 */ 957 */
927struct cfg80211_ibss_params { 958struct cfg80211_ibss_params {
928 u8 *ssid; 959 u8 *ssid;
@@ -934,6 +965,7 @@ struct cfg80211_ibss_params {
934 u32 basic_rates; 965 u32 basic_rates;
935 bool channel_fixed; 966 bool channel_fixed;
936 bool privacy; 967 bool privacy;
968 int mcast_rate[IEEE80211_NUM_BANDS];
937}; 969};
938 970
939/** 971/**
@@ -1029,7 +1061,8 @@ struct cfg80211_pmksa {
1029 * 1061 *
1030 * @add_virtual_intf: create a new virtual interface with the given name, 1062 * @add_virtual_intf: create a new virtual interface with the given name,
1031 * must set the struct wireless_dev's iftype. Beware: You must create 1063 * must set the struct wireless_dev's iftype. Beware: You must create
1032 * the new netdev in the wiphy's network namespace! 1064 * the new netdev in the wiphy's network namespace! Returns the netdev,
1065 * or an ERR_PTR.
1033 * 1066 *
1034 * @del_virtual_intf: remove the virtual interface determined by ifindex. 1067 * @del_virtual_intf: remove the virtual interface determined by ifindex.
1035 * 1068 *
@@ -1071,9 +1104,9 @@ struct cfg80211_pmksa {
1071 * @get_mpath: get a mesh path for the given parameters 1104 * @get_mpath: get a mesh path for the given parameters
1072 * @dump_mpath: dump mesh path callback -- resume dump at index @idx 1105 * @dump_mpath: dump mesh path callback -- resume dump at index @idx
1073 * 1106 *
1074 * @get_mesh_params: Put the current mesh parameters into *params 1107 * @get_mesh_config: Get the current mesh configuration
1075 * 1108 *
1076 * @set_mesh_params: Set mesh parameters. 1109 * @update_mesh_config: Update mesh parameters on a running mesh.
1077 * The mask is a bitfield which tells us which parameters to 1110 * The mask is a bitfield which tells us which parameters to
1078 * set, and which to leave alone. 1111 * set, and which to leave alone.
1079 * 1112 *
@@ -1132,7 +1165,9 @@ struct cfg80211_pmksa {
1132 * @cancel_remain_on_channel: Cancel an on-going remain-on-channel operation. 1165 * @cancel_remain_on_channel: Cancel an on-going remain-on-channel operation.
1133 * This allows the operation to be terminated prior to timeout based on 1166 * This allows the operation to be terminated prior to timeout based on
1134 * the duration value. 1167 * the duration value.
1135 * @mgmt_tx: Transmit a management frame 1168 * @mgmt_tx: Transmit a management frame.
1169 * @mgmt_tx_cancel_wait: Cancel the wait time from transmitting a management
1170 * frame on another channel
1136 * 1171 *
1137 * @testmode_cmd: run a test mode command 1172 * @testmode_cmd: run a test mode command
1138 * 1173 *
@@ -1150,14 +1185,23 @@ struct cfg80211_pmksa {
1150 * @mgmt_frame_register: Notify driver that a management frame type was 1185 * @mgmt_frame_register: Notify driver that a management frame type was
1151 * registered. Note that this callback may not sleep, and cannot run 1186 * registered. Note that this callback may not sleep, and cannot run
1152 * concurrently with itself. 1187 * concurrently with itself.
1188 *
1189 * @set_antenna: Set antenna configuration (tx_ant, rx_ant) on the device.
1190 * Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may
1191 * reject TX/RX mask combinations they cannot support by returning -EINVAL
1192 * (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX).
1193 *
1194 * @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant).
1153 */ 1195 */
1154struct cfg80211_ops { 1196struct cfg80211_ops {
1155 int (*suspend)(struct wiphy *wiphy); 1197 int (*suspend)(struct wiphy *wiphy);
1156 int (*resume)(struct wiphy *wiphy); 1198 int (*resume)(struct wiphy *wiphy);
1157 1199
1158 int (*add_virtual_intf)(struct wiphy *wiphy, char *name, 1200 struct net_device * (*add_virtual_intf)(struct wiphy *wiphy,
1159 enum nl80211_iftype type, u32 *flags, 1201 char *name,
1160 struct vif_params *params); 1202 enum nl80211_iftype type,
1203 u32 *flags,
1204 struct vif_params *params);
1161 int (*del_virtual_intf)(struct wiphy *wiphy, struct net_device *dev); 1205 int (*del_virtual_intf)(struct wiphy *wiphy, struct net_device *dev);
1162 int (*change_virtual_intf)(struct wiphy *wiphy, 1206 int (*change_virtual_intf)(struct wiphy *wiphy,
1163 struct net_device *dev, 1207 struct net_device *dev,
@@ -1175,7 +1219,7 @@ struct cfg80211_ops {
1175 u8 key_index, bool pairwise, const u8 *mac_addr); 1219 u8 key_index, bool pairwise, const u8 *mac_addr);
1176 int (*set_default_key)(struct wiphy *wiphy, 1220 int (*set_default_key)(struct wiphy *wiphy,
1177 struct net_device *netdev, 1221 struct net_device *netdev,
1178 u8 key_index); 1222 u8 key_index, bool unicast, bool multicast);
1179 int (*set_default_mgmt_key)(struct wiphy *wiphy, 1223 int (*set_default_mgmt_key)(struct wiphy *wiphy,
1180 struct net_device *netdev, 1224 struct net_device *netdev,
1181 u8 key_index); 1225 u8 key_index);
@@ -1210,12 +1254,17 @@ struct cfg80211_ops {
1210 int (*dump_mpath)(struct wiphy *wiphy, struct net_device *dev, 1254 int (*dump_mpath)(struct wiphy *wiphy, struct net_device *dev,
1211 int idx, u8 *dst, u8 *next_hop, 1255 int idx, u8 *dst, u8 *next_hop,
1212 struct mpath_info *pinfo); 1256 struct mpath_info *pinfo);
1213 int (*get_mesh_params)(struct wiphy *wiphy, 1257 int (*get_mesh_config)(struct wiphy *wiphy,
1214 struct net_device *dev, 1258 struct net_device *dev,
1215 struct mesh_config *conf); 1259 struct mesh_config *conf);
1216 int (*set_mesh_params)(struct wiphy *wiphy, 1260 int (*update_mesh_config)(struct wiphy *wiphy,
1217 struct net_device *dev, 1261 struct net_device *dev, u32 mask,
1218 const struct mesh_config *nconf, u32 mask); 1262 const struct mesh_config *nconf);
1263 int (*join_mesh)(struct wiphy *wiphy, struct net_device *dev,
1264 const struct mesh_config *conf,
1265 const struct mesh_setup *setup);
1266 int (*leave_mesh)(struct wiphy *wiphy, struct net_device *dev);
1267
1219 int (*change_bss)(struct wiphy *wiphy, struct net_device *dev, 1268 int (*change_bss)(struct wiphy *wiphy, struct net_device *dev,
1220 struct bss_parameters *params); 1269 struct bss_parameters *params);
1221 1270
@@ -1289,10 +1338,13 @@ struct cfg80211_ops {
1289 u64 cookie); 1338 u64 cookie);
1290 1339
1291 int (*mgmt_tx)(struct wiphy *wiphy, struct net_device *dev, 1340 int (*mgmt_tx)(struct wiphy *wiphy, struct net_device *dev,
1292 struct ieee80211_channel *chan, 1341 struct ieee80211_channel *chan, bool offchan,
1293 enum nl80211_channel_type channel_type, 1342 enum nl80211_channel_type channel_type,
1294 bool channel_type_valid, 1343 bool channel_type_valid, unsigned int wait,
1295 const u8 *buf, size_t len, u64 *cookie); 1344 const u8 *buf, size_t len, u64 *cookie);
1345 int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy,
1346 struct net_device *dev,
1347 u64 cookie);
1296 1348
1297 int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, 1349 int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev,
1298 bool enabled, int timeout); 1350 bool enabled, int timeout);
@@ -1304,6 +1356,9 @@ struct cfg80211_ops {
1304 void (*mgmt_frame_register)(struct wiphy *wiphy, 1356 void (*mgmt_frame_register)(struct wiphy *wiphy,
1305 struct net_device *dev, 1357 struct net_device *dev,
1306 u16 frame_type, bool reg); 1358 u16 frame_type, bool reg);
1359
1360 int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant);
1361 int (*get_antenna)(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant);
1307}; 1362};
1308 1363
1309/* 1364/*
@@ -1321,13 +1376,14 @@ struct cfg80211_ops {
1321 * initiator is %REGDOM_SET_BY_CORE). 1376 * initiator is %REGDOM_SET_BY_CORE).
1322 * @WIPHY_FLAG_STRICT_REGULATORY: tells us the driver for this device will 1377 * @WIPHY_FLAG_STRICT_REGULATORY: tells us the driver for this device will
1323 * ignore regulatory domain settings until it gets its own regulatory 1378 * ignore regulatory domain settings until it gets its own regulatory
1324 * domain via its regulatory_hint(). After its gets its own regulatory 1379 * domain via its regulatory_hint() unless the regulatory hint is
1325 * domain it will only allow further regulatory domain settings to 1380 * from a country IE. After its gets its own regulatory domain it will
1326 * further enhance compliance. For example if channel 13 and 14 are 1381 * only allow further regulatory domain settings to further enhance
1327 * disabled by this regulatory domain no user regulatory domain can 1382 * compliance. For example if channel 13 and 14 are disabled by this
1328 * enable these channels at a later time. This can be used for devices 1383 * regulatory domain no user regulatory domain can enable these channels
1329 * which do not have calibration information gauranteed for frequencies 1384 * at a later time. This can be used for devices which do not have
1330 * or settings outside of its regulatory domain. 1385 * calibration information guaranteed for frequencies or settings
1386 * outside of its regulatory domain.
1331 * @WIPHY_FLAG_DISABLE_BEACON_HINTS: enable this if your driver needs to ensure 1387 * @WIPHY_FLAG_DISABLE_BEACON_HINTS: enable this if your driver needs to ensure
1332 * that passive scan flags and beaconing flags may not be lifted by 1388 * that passive scan flags and beaconing flags may not be lifted by
1333 * cfg80211 due to regulatory beacon hints. For more information on beacon 1389 * cfg80211 due to regulatory beacon hints. For more information on beacon
@@ -1345,6 +1401,8 @@ struct cfg80211_ops {
1345 * control port protocol ethertype. The device also honours the 1401 * control port protocol ethertype. The device also honours the
1346 * control_port_no_encrypt flag. 1402 * control_port_no_encrypt flag.
1347 * @WIPHY_FLAG_IBSS_RSN: The device supports IBSS RSN. 1403 * @WIPHY_FLAG_IBSS_RSN: The device supports IBSS RSN.
1404 * @WIPHY_FLAG_SUPPORTS_SEPARATE_DEFAULT_KEYS: The device supports separate
1405 * unicast and multicast TX keys.
1348 */ 1406 */
1349enum wiphy_flags { 1407enum wiphy_flags {
1350 WIPHY_FLAG_CUSTOM_REGULATORY = BIT(0), 1408 WIPHY_FLAG_CUSTOM_REGULATORY = BIT(0),
@@ -1356,6 +1414,7 @@ enum wiphy_flags {
1356 WIPHY_FLAG_4ADDR_STATION = BIT(6), 1414 WIPHY_FLAG_4ADDR_STATION = BIT(6),
1357 WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7), 1415 WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7),
1358 WIPHY_FLAG_IBSS_RSN = BIT(8), 1416 WIPHY_FLAG_IBSS_RSN = BIT(8),
1417 WIPHY_FLAG_SUPPORTS_SEPARATE_DEFAULT_KEYS= BIT(9),
1359}; 1418};
1360 1419
1361struct mac_address { 1420struct mac_address {
@@ -1368,7 +1427,9 @@ struct ieee80211_txrx_stypes {
1368 1427
1369/** 1428/**
1370 * struct wiphy - wireless hardware description 1429 * struct wiphy - wireless hardware description
1371 * @reg_notifier: the driver's regulatory notification callback 1430 * @reg_notifier: the driver's regulatory notification callback,
1431 * note that if your driver uses wiphy_apply_custom_regulatory()
1432 * the reg_notifier's request can be passed as NULL
1372 * @regd: the driver's regulatory domain, if one was requested via 1433 * @regd: the driver's regulatory domain, if one was requested via
1373 * the regulatory_hint() API. This can be used by the driver 1434 * the regulatory_hint() API. This can be used by the driver
1374 * on the reg_notifier() if it chooses to ignore future 1435 * on the reg_notifier() if it chooses to ignore future
@@ -1420,6 +1481,17 @@ struct ieee80211_txrx_stypes {
1420 * @mgmt_stypes: bitmasks of frame subtypes that can be subscribed to or 1481 * @mgmt_stypes: bitmasks of frame subtypes that can be subscribed to or
1421 * transmitted through nl80211, points to an array indexed by interface 1482 * transmitted through nl80211, points to an array indexed by interface
1422 * type 1483 * type
1484 *
1485 * @available_antennas_tx: bitmap of antennas which are available to be
1486 * configured as TX antennas. Antenna configuration commands will be
1487 * rejected unless this or @available_antennas_rx is set.
1488 *
1489 * @available_antennas_rx: bitmap of antennas which are available to be
1490 * configured as RX antennas. Antenna configuration commands will be
1491 * rejected unless this or @available_antennas_tx is set.
1492 *
1493 * @max_remain_on_channel_duration: Maximum time a remain-on-channel operation
1494 * may request, if implemented.
1423 */ 1495 */
1424struct wiphy { 1496struct wiphy {
1425 /* assign these fields before you register the wiphy */ 1497 /* assign these fields before you register the wiphy */
@@ -1457,8 +1529,13 @@ struct wiphy {
1457 char fw_version[ETHTOOL_BUSINFO_LEN]; 1529 char fw_version[ETHTOOL_BUSINFO_LEN];
1458 u32 hw_version; 1530 u32 hw_version;
1459 1531
1532 u16 max_remain_on_channel_duration;
1533
1460 u8 max_num_pmkids; 1534 u8 max_num_pmkids;
1461 1535
1536 u32 available_antennas_tx;
1537 u32 available_antennas_rx;
1538
1462 /* If multiple wiphys are registered and you're handed e.g. 1539 /* If multiple wiphys are registered and you're handed e.g.
1463 * a regular netdev with assigned ieee80211_ptr, you won't 1540 * a regular netdev with assigned ieee80211_ptr, you won't
1464 * know whether it points to a wiphy your driver has registered 1541 * know whether it points to a wiphy your driver has registered
@@ -1624,6 +1701,8 @@ struct cfg80211_cached_keys;
1624 * @bssid: (private) Used by the internal configuration code 1701 * @bssid: (private) Used by the internal configuration code
1625 * @ssid: (private) Used by the internal configuration code 1702 * @ssid: (private) Used by the internal configuration code
1626 * @ssid_len: (private) Used by the internal configuration code 1703 * @ssid_len: (private) Used by the internal configuration code
1704 * @mesh_id_len: (private) Used by the internal configuration code
1705 * @mesh_id_up_len: (private) Used by the internal configuration code
1627 * @wext: (private) Used by the internal wireless extensions compat code 1706 * @wext: (private) Used by the internal wireless extensions compat code
1628 * @use_4addr: indicates 4addr mode is used on this interface, must be 1707 * @use_4addr: indicates 4addr mode is used on this interface, must be
1629 * set by driver (if supported) on add_interface BEFORE registering the 1708 * set by driver (if supported) on add_interface BEFORE registering the
@@ -1653,7 +1732,7 @@ struct wireless_dev {
1653 1732
1654 /* currently used for IBSS and SME - might be rearranged later */ 1733 /* currently used for IBSS and SME - might be rearranged later */
1655 u8 ssid[IEEE80211_MAX_SSID_LEN]; 1734 u8 ssid[IEEE80211_MAX_SSID_LEN];
1656 u8 ssid_len; 1735 u8 ssid_len, mesh_id_len, mesh_id_up_len;
1657 enum { 1736 enum {
1658 CFG80211_SME_IDLE, 1737 CFG80211_SME_IDLE,
1659 CFG80211_SME_CONNECTING, 1738 CFG80211_SME_CONNECTING,
@@ -2297,6 +2376,32 @@ void __cfg80211_send_disassoc(struct net_device *dev, const u8 *buf,
2297 size_t len); 2376 size_t len);
2298 2377
2299/** 2378/**
2379 * cfg80211_send_unprot_deauth - notification of unprotected deauthentication
2380 * @dev: network device
2381 * @buf: deauthentication frame (header + body)
2382 * @len: length of the frame data
2383 *
2384 * This function is called whenever a received Deauthentication frame has been
2385 * dropped in station mode because of MFP being used but the Deauthentication
2386 * frame was not protected. This function may sleep.
2387 */
2388void cfg80211_send_unprot_deauth(struct net_device *dev, const u8 *buf,
2389 size_t len);
2390
2391/**
2392 * cfg80211_send_unprot_disassoc - notification of unprotected disassociation
2393 * @dev: network device
2394 * @buf: disassociation frame (header + body)
2395 * @len: length of the frame data
2396 *
2397 * This function is called whenever a received Disassociation frame has been
2398 * dropped in station mode because of MFP being used but the Disassociation
2399 * frame was not protected. This function may sleep.
2400 */
2401void cfg80211_send_unprot_disassoc(struct net_device *dev, const u8 *buf,
2402 size_t len);
2403
2404/**
2300 * cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP) 2405 * cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP)
2301 * @dev: network device 2406 * @dev: network device
2302 * @addr: The source MAC address of the frame 2407 * @addr: The source MAC address of the frame
@@ -2595,6 +2700,18 @@ void cfg80211_cqm_rssi_notify(struct net_device *dev,
2595 enum nl80211_cqm_rssi_threshold_event rssi_event, 2700 enum nl80211_cqm_rssi_threshold_event rssi_event,
2596 gfp_t gfp); 2701 gfp_t gfp);
2597 2702
2703/**
2704 * cfg80211_cqm_pktloss_notify - notify userspace about packetloss to peer
2705 * @dev: network device
2706 * @peer: peer's MAC address
2707 * @num_packets: how many packets were lost -- should be a fixed threshold
2708 * but probably no less than maybe 50, or maybe a throughput dependent
2709 * threshold (to account for temporary interference)
2710 * @gfp: context flags
2711 */
2712void cfg80211_cqm_pktloss_notify(struct net_device *dev,
2713 const u8 *peer, u32 num_packets, gfp_t gfp);
2714
2598/* Logging, debugging and troubleshooting/diagnostic helpers. */ 2715/* Logging, debugging and troubleshooting/diagnostic helpers. */
2599 2716
2600/* wiphy_printk helpers, similar to dev_printk */ 2717/* wiphy_printk helpers, similar to dev_printk */
diff --git a/include/net/dcbevent.h b/include/net/dcbevent.h
new file mode 100644
index 000000000000..bc1e7ef40171
--- /dev/null
+++ b/include/net/dcbevent.h
@@ -0,0 +1,31 @@
1/*
2 * Copyright (c) 2010, Intel Corporation.
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License,
6 * version 2, as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11 * more details.
12 *
13 * You should have received a copy of the GNU General Public License along with
14 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
15 * Place - Suite 330, Boston, MA 02111-1307 USA.
16 *
17 * Author: John Fastabend <john.r.fastabend@intel.com>
18 */
19
20#ifndef _DCB_EVENT_H
21#define _DCB_EVENT_H
22
23enum dcbevent_notif_type {
24 DCB_APP_EVENT = 1,
25};
26
27extern int register_dcbevent_notifier(struct notifier_block *nb);
28extern int unregister_dcbevent_notifier(struct notifier_block *nb);
29extern int call_dcbevent_notifiers(unsigned long val, void *v);
30
31#endif
diff --git a/include/net/dcbnl.h b/include/net/dcbnl.h
index b36ac7e0914d..a8e7852b10ab 100644
--- a/include/net/dcbnl.h
+++ b/include/net/dcbnl.h
@@ -20,11 +20,31 @@
20#ifndef __NET_DCBNL_H__ 20#ifndef __NET_DCBNL_H__
21#define __NET_DCBNL_H__ 21#define __NET_DCBNL_H__
22 22
23#include <linux/dcbnl.h>
24
25struct dcb_app_type {
26 char name[IFNAMSIZ];
27 struct dcb_app app;
28 struct list_head list;
29};
30
31u8 dcb_setapp(struct net_device *, struct dcb_app *);
32u8 dcb_getapp(struct net_device *, struct dcb_app *);
33
23/* 34/*
24 * Ops struct for the netlink callbacks. Used by DCB-enabled drivers through 35 * Ops struct for the netlink callbacks. Used by DCB-enabled drivers through
25 * the netdevice struct. 36 * the netdevice struct.
26 */ 37 */
27struct dcbnl_rtnl_ops { 38struct dcbnl_rtnl_ops {
39 /* IEEE 802.1Qaz std */
40 int (*ieee_getets) (struct net_device *, struct ieee_ets *);
41 int (*ieee_setets) (struct net_device *, struct ieee_ets *);
42 int (*ieee_getpfc) (struct net_device *, struct ieee_pfc *);
43 int (*ieee_setpfc) (struct net_device *, struct ieee_pfc *);
44 int (*ieee_getapp) (struct net_device *, struct dcb_app *);
45 int (*ieee_setapp) (struct net_device *, struct dcb_app *);
46
47 /* CEE std */
28 u8 (*getstate)(struct net_device *); 48 u8 (*getstate)(struct net_device *);
29 u8 (*setstate)(struct net_device *, u8); 49 u8 (*setstate)(struct net_device *, u8);
30 void (*getpermhwaddr)(struct net_device *, u8 *); 50 void (*getpermhwaddr)(struct net_device *, u8 *);
@@ -50,6 +70,14 @@ struct dcbnl_rtnl_ops {
50 void (*setbcnrp)(struct net_device *, int, u8); 70 void (*setbcnrp)(struct net_device *, int, u8);
51 u8 (*setapp)(struct net_device *, u8, u16, u8); 71 u8 (*setapp)(struct net_device *, u8, u16, u8);
52 u8 (*getapp)(struct net_device *, u8, u16); 72 u8 (*getapp)(struct net_device *, u8, u16);
73 u8 (*getfeatcfg)(struct net_device *, int, u8 *);
74 u8 (*setfeatcfg)(struct net_device *, int, u8);
75
76 /* DCBX configuration */
77 u8 (*getdcbx)(struct net_device *);
78 u8 (*setdcbx)(struct net_device *, u8);
79
80
53}; 81};
54 82
55#endif /* __NET_DCBNL_H__ */ 83#endif /* __NET_DCBNL_H__ */
diff --git a/include/net/dn_dev.h b/include/net/dn_dev.h
index 0916bbf3bdff..b9e32db03f20 100644
--- a/include/net/dn_dev.h
+++ b/include/net/dn_dev.h
@@ -5,13 +5,14 @@
5struct dn_dev; 5struct dn_dev;
6 6
7struct dn_ifaddr { 7struct dn_ifaddr {
8 struct dn_ifaddr *ifa_next; 8 struct dn_ifaddr __rcu *ifa_next;
9 struct dn_dev *ifa_dev; 9 struct dn_dev *ifa_dev;
10 __le16 ifa_local; 10 __le16 ifa_local;
11 __le16 ifa_address; 11 __le16 ifa_address;
12 __u8 ifa_flags; 12 __u8 ifa_flags;
13 __u8 ifa_scope; 13 __u8 ifa_scope;
14 char ifa_label[IFNAMSIZ]; 14 char ifa_label[IFNAMSIZ];
15 struct rcu_head rcu;
15}; 16};
16 17
17#define DN_DEV_S_RU 0 /* Run - working normally */ 18#define DN_DEV_S_RU 0 /* Run - working normally */
@@ -83,7 +84,7 @@ struct dn_dev_parms {
83 84
84 85
85struct dn_dev { 86struct dn_dev {
86 struct dn_ifaddr *ifa_list; 87 struct dn_ifaddr __rcu *ifa_list;
87 struct net_device *dev; 88 struct net_device *dev;
88 struct dn_dev_parms parms; 89 struct dn_dev_parms parms;
89 char use_long; 90 char use_long;
@@ -171,19 +172,27 @@ extern int unregister_dnaddr_notifier(struct notifier_block *nb);
171 172
172static inline int dn_dev_islocal(struct net_device *dev, __le16 addr) 173static inline int dn_dev_islocal(struct net_device *dev, __le16 addr)
173{ 174{
174 struct dn_dev *dn_db = dev->dn_ptr; 175 struct dn_dev *dn_db;
175 struct dn_ifaddr *ifa; 176 struct dn_ifaddr *ifa;
177 int res = 0;
176 178
179 rcu_read_lock();
180 dn_db = rcu_dereference(dev->dn_ptr);
177 if (dn_db == NULL) { 181 if (dn_db == NULL) {
178 printk(KERN_DEBUG "dn_dev_islocal: Called for non DECnet device\n"); 182 printk(KERN_DEBUG "dn_dev_islocal: Called for non DECnet device\n");
179 return 0; 183 goto out;
180 } 184 }
181 185
182 for(ifa = dn_db->ifa_list; ifa; ifa = ifa->ifa_next) 186 for (ifa = rcu_dereference(dn_db->ifa_list);
183 if ((addr ^ ifa->ifa_local) == 0) 187 ifa != NULL;
184 return 1; 188 ifa = rcu_dereference(ifa->ifa_next))
185 189 if ((addr ^ ifa->ifa_local) == 0) {
186 return 0; 190 res = 1;
191 break;
192 }
193out:
194 rcu_read_unlock();
195 return res;
187} 196}
188 197
189#endif /* _NET_DN_DEV_H */ 198#endif /* _NET_DN_DEV_H */
diff --git a/include/net/dn_route.h b/include/net/dn_route.h
index ccadab3aa3f6..9b185df265fb 100644
--- a/include/net/dn_route.h
+++ b/include/net/dn_route.h
@@ -80,6 +80,16 @@ struct dn_route {
80 unsigned rt_type; 80 unsigned rt_type;
81}; 81};
82 82
83static inline bool dn_is_input_route(struct dn_route *rt)
84{
85 return rt->fl.iif != 0;
86}
87
88static inline bool dn_is_output_route(struct dn_route *rt)
89{
90 return rt->fl.iif == 0;
91}
92
83extern void dn_route_init(void); 93extern void dn_route_init(void);
84extern void dn_route_cleanup(void); 94extern void dn_route_cleanup(void);
85 95
diff --git a/include/net/dst.h b/include/net/dst.h
index ffe9cb719c0e..93b0310317be 100644
--- a/include/net/dst.h
+++ b/include/net/dst.h
@@ -70,7 +70,7 @@ struct dst_entry {
70 70
71 struct dst_ops *ops; 71 struct dst_ops *ops;
72 72
73 u32 metrics[RTAX_MAX]; 73 u32 _metrics[RTAX_MAX];
74 74
75#ifdef CONFIG_NET_CLS_ROUTE 75#ifdef CONFIG_NET_CLS_ROUTE
76 __u32 tclassid; 76 __u32 tclassid;
@@ -94,19 +94,59 @@ struct dst_entry {
94 int __use; 94 int __use;
95 unsigned long lastuse; 95 unsigned long lastuse;
96 union { 96 union {
97 struct dst_entry *next; 97 struct dst_entry *next;
98 struct rtable __rcu *rt_next; 98 struct rtable __rcu *rt_next;
99 struct rt6_info *rt6_next; 99 struct rt6_info *rt6_next;
100 struct dn_route *dn_next; 100 struct dn_route __rcu *dn_next;
101 }; 101 };
102}; 102};
103 103
104#ifdef __KERNEL__ 104#ifdef __KERNEL__
105 105
106static inline u32 106static inline u32
107dst_metric(const struct dst_entry *dst, int metric) 107dst_metric_raw(const struct dst_entry *dst, const int metric)
108{ 108{
109 return dst->metrics[metric-1]; 109 return dst->_metrics[metric-1];
110}
111
112static inline u32
113dst_metric(const struct dst_entry *dst, const int metric)
114{
115 WARN_ON_ONCE(metric == RTAX_HOPLIMIT ||
116 metric == RTAX_ADVMSS ||
117 metric == RTAX_MTU);
118 return dst_metric_raw(dst, metric);
119}
120
121static inline u32
122dst_metric_advmss(const struct dst_entry *dst)
123{
124 u32 advmss = dst_metric_raw(dst, RTAX_ADVMSS);
125
126 if (!advmss)
127 advmss = dst->ops->default_advmss(dst);
128
129 return advmss;
130}
131
132static inline void dst_metric_set(struct dst_entry *dst, int metric, u32 val)
133{
134 dst->_metrics[metric-1] = val;
135}
136
137static inline void dst_import_metrics(struct dst_entry *dst, const u32 *src_metrics)
138{
139 memcpy(dst->_metrics, src_metrics, RTAX_MAX * sizeof(u32));
140}
141
142static inline void dst_copy_metrics(struct dst_entry *dest, const struct dst_entry *src)
143{
144 dst_import_metrics(dest, src->_metrics);
145}
146
147static inline u32 *dst_metrics_ptr(struct dst_entry *dst)
148{
149 return dst->_metrics;
110} 150}
111 151
112static inline u32 152static inline u32
@@ -117,11 +157,11 @@ dst_feature(const struct dst_entry *dst, u32 feature)
117 157
118static inline u32 dst_mtu(const struct dst_entry *dst) 158static inline u32 dst_mtu(const struct dst_entry *dst)
119{ 159{
120 u32 mtu = dst_metric(dst, RTAX_MTU); 160 u32 mtu = dst_metric_raw(dst, RTAX_MTU);
121 /* 161
122 * Alexey put it here, so ask him about it :) 162 if (!mtu)
123 */ 163 mtu = dst->ops->default_mtu(dst);
124 barrier(); 164
125 return mtu; 165 return mtu;
126} 166}
127 167
@@ -134,7 +174,7 @@ static inline unsigned long dst_metric_rtt(const struct dst_entry *dst, int metr
134static inline void set_dst_metric_rtt(struct dst_entry *dst, int metric, 174static inline void set_dst_metric_rtt(struct dst_entry *dst, int metric,
135 unsigned long rtt) 175 unsigned long rtt)
136{ 176{
137 dst->metrics[metric-1] = jiffies_to_msecs(rtt); 177 dst_metric_set(dst, metric, jiffies_to_msecs(rtt));
138} 178}
139 179
140static inline u32 180static inline u32
@@ -147,7 +187,7 @@ dst_allfrag(const struct dst_entry *dst)
147} 187}
148 188
149static inline int 189static inline int
150dst_metric_locked(struct dst_entry *dst, int metric) 190dst_metric_locked(const struct dst_entry *dst, int metric)
151{ 191{
152 return dst_metric(dst, RTAX_LOCK) & (1<<metric); 192 return dst_metric(dst, RTAX_LOCK) & (1<<metric);
153} 193}
diff --git a/include/net/dst_ops.h b/include/net/dst_ops.h
index 51665b3461b8..21a320b8708e 100644
--- a/include/net/dst_ops.h
+++ b/include/net/dst_ops.h
@@ -16,6 +16,8 @@ struct dst_ops {
16 16
17 int (*gc)(struct dst_ops *ops); 17 int (*gc)(struct dst_ops *ops);
18 struct dst_entry * (*check)(struct dst_entry *, __u32 cookie); 18 struct dst_entry * (*check)(struct dst_entry *, __u32 cookie);
19 unsigned int (*default_advmss)(const struct dst_entry *);
20 unsigned int (*default_mtu)(const struct dst_entry *);
19 void (*destroy)(struct dst_entry *); 21 void (*destroy)(struct dst_entry *);
20 void (*ifdown)(struct dst_entry *, 22 void (*ifdown)(struct dst_entry *,
21 struct net_device *dev, int how); 23 struct net_device *dev, int how);
diff --git a/include/net/flow.h b/include/net/flow.h
index bb08692a20b0..240b7f356c71 100644
--- a/include/net/flow.h
+++ b/include/net/flow.h
@@ -66,6 +66,7 @@ struct flowi {
66 } dnports; 66 } dnports;
67 67
68 __be32 spi; 68 __be32 spi;
69 __be32 gre_key;
69 70
70 struct { 71 struct {
71 __u8 type; 72 __u8 type;
@@ -77,6 +78,7 @@ struct flowi {
77#define fl_icmp_code uli_u.icmpt.code 78#define fl_icmp_code uli_u.icmpt.code
78#define fl_ipsec_spi uli_u.spi 79#define fl_ipsec_spi uli_u.spi
79#define fl_mh_type uli_u.mht.type 80#define fl_mh_type uli_u.mht.type
81#define fl_gre_key uli_u.gre_key
80 __u32 secid; /* used by xfrm; see secid.txt */ 82 __u32 secid; /* used by xfrm; see secid.txt */
81} __attribute__((__aligned__(BITS_PER_LONG/8))); 83} __attribute__((__aligned__(BITS_PER_LONG/8)));
82 84
diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h
index f95ff8d9aa47..04977eefb0ee 100644
--- a/include/net/if_inet6.h
+++ b/include/net/if_inet6.h
@@ -89,10 +89,11 @@ struct ip6_sf_socklist {
89struct ipv6_mc_socklist { 89struct ipv6_mc_socklist {
90 struct in6_addr addr; 90 struct in6_addr addr;
91 int ifindex; 91 int ifindex;
92 struct ipv6_mc_socklist *next; 92 struct ipv6_mc_socklist __rcu *next;
93 rwlock_t sflock; 93 rwlock_t sflock;
94 unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */ 94 unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */
95 struct ip6_sf_socklist *sflist; 95 struct ip6_sf_socklist *sflist;
96 struct rcu_head rcu;
96}; 97};
97 98
98struct ip6_sf_list { 99struct ip6_sf_list {
diff --git a/include/net/inet6_connection_sock.h b/include/net/inet6_connection_sock.h
index aae08f686633..ff013505236b 100644
--- a/include/net/inet6_connection_sock.h
+++ b/include/net/inet6_connection_sock.h
@@ -25,6 +25,9 @@ struct sockaddr;
25extern int inet6_csk_bind_conflict(const struct sock *sk, 25extern int inet6_csk_bind_conflict(const struct sock *sk,
26 const struct inet_bind_bucket *tb); 26 const struct inet_bind_bucket *tb);
27 27
28extern struct dst_entry* inet6_csk_route_req(struct sock *sk,
29 const struct request_sock *req);
30
28extern struct request_sock *inet6_csk_search_req(const struct sock *sk, 31extern struct request_sock *inet6_csk_search_req(const struct sock *sk,
29 struct request_sock ***prevp, 32 struct request_sock ***prevp,
30 const __be16 rport, 33 const __be16 rport,
diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h
index e4f494b42e06..6ac4e3b5007f 100644
--- a/include/net/inet_connection_sock.h
+++ b/include/net/inet_connection_sock.h
@@ -43,7 +43,7 @@ struct inet_connection_sock_af_ops {
43 struct sock *(*syn_recv_sock)(struct sock *sk, struct sk_buff *skb, 43 struct sock *(*syn_recv_sock)(struct sock *sk, struct sk_buff *skb,
44 struct request_sock *req, 44 struct request_sock *req,
45 struct dst_entry *dst); 45 struct dst_entry *dst);
46 int (*remember_stamp)(struct sock *sk); 46 struct inet_peer *(*get_peer)(struct sock *sk, bool *release_it);
47 u16 net_header_len; 47 u16 net_header_len;
48 u16 sockaddr_len; 48 u16 sockaddr_len;
49 int (*setsockopt)(struct sock *sk, int level, int optname, 49 int (*setsockopt)(struct sock *sk, int level, int optname,
@@ -132,7 +132,6 @@ struct inet_connection_sock {
132#define ICSK_TIME_RETRANS 1 /* Retransmit timer */ 132#define ICSK_TIME_RETRANS 1 /* Retransmit timer */
133#define ICSK_TIME_DACK 2 /* Delayed ack timer */ 133#define ICSK_TIME_DACK 2 /* Delayed ack timer */
134#define ICSK_TIME_PROBE0 3 /* Zero window probe timer */ 134#define ICSK_TIME_PROBE0 3 /* Zero window probe timer */
135#define ICSK_TIME_KEEPOPEN 4 /* Keepalive timer */
136 135
137static inline struct inet_connection_sock *inet_csk(const struct sock *sk) 136static inline struct inet_connection_sock *inet_csk(const struct sock *sk)
138{ 137{
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h
index 1989cfd7405f..8181498fa96c 100644
--- a/include/net/inet_sock.h
+++ b/include/net/inet_sock.h
@@ -116,8 +116,9 @@ struct inet_sock {
116 struct ipv6_pinfo *pinet6; 116 struct ipv6_pinfo *pinet6;
117#endif 117#endif
118 /* Socket demultiplex comparisons on incoming packets. */ 118 /* Socket demultiplex comparisons on incoming packets. */
119 __be32 inet_daddr; 119#define inet_daddr sk.__sk_common.skc_daddr
120 __be32 inet_rcv_saddr; 120#define inet_rcv_saddr sk.__sk_common.skc_rcv_saddr
121
121 __be16 inet_dport; 122 __be16 inet_dport;
122 __u16 inet_num; 123 __u16 inet_num;
123 __be32 inet_saddr; 124 __be32 inet_saddr;
@@ -141,7 +142,7 @@ struct inet_sock {
141 nodefrag:1; 142 nodefrag:1;
142 int mc_index; 143 int mc_index;
143 __be32 mc_addr; 144 __be32 mc_addr;
144 struct ip_mc_socklist *mc_list; 145 struct ip_mc_socklist __rcu *mc_list;
145 struct { 146 struct {
146 unsigned int flags; 147 unsigned int flags;
147 unsigned int fragsize; 148 unsigned int fragsize;
diff --git a/include/net/inet_timewait_sock.h b/include/net/inet_timewait_sock.h
index a066fdd50da6..17404b5388a7 100644
--- a/include/net/inet_timewait_sock.h
+++ b/include/net/inet_timewait_sock.h
@@ -88,12 +88,6 @@ extern void inet_twdr_hangman(unsigned long data);
88extern void inet_twdr_twkill_work(struct work_struct *work); 88extern void inet_twdr_twkill_work(struct work_struct *work);
89extern void inet_twdr_twcal_tick(unsigned long data); 89extern void inet_twdr_twcal_tick(unsigned long data);
90 90
91#if (BITS_PER_LONG == 64)
92#define INET_TIMEWAIT_ADDRCMP_ALIGN_BYTES 8
93#else
94#define INET_TIMEWAIT_ADDRCMP_ALIGN_BYTES 4
95#endif
96
97struct inet_bind_bucket; 91struct inet_bind_bucket;
98 92
99/* 93/*
@@ -117,15 +111,15 @@ struct inet_timewait_sock {
117#define tw_hash __tw_common.skc_hash 111#define tw_hash __tw_common.skc_hash
118#define tw_prot __tw_common.skc_prot 112#define tw_prot __tw_common.skc_prot
119#define tw_net __tw_common.skc_net 113#define tw_net __tw_common.skc_net
114#define tw_daddr __tw_common.skc_daddr
115#define tw_rcv_saddr __tw_common.skc_rcv_saddr
120 int tw_timeout; 116 int tw_timeout;
121 volatile unsigned char tw_substate; 117 volatile unsigned char tw_substate;
122 /* 3 bits hole, try to pack */
123 unsigned char tw_rcv_wscale; 118 unsigned char tw_rcv_wscale;
119
124 /* Socket demultiplex comparisons on incoming packets. */ 120 /* Socket demultiplex comparisons on incoming packets. */
125 /* these five are in inet_sock */ 121 /* these three are in inet_sock */
126 __be16 tw_sport; 122 __be16 tw_sport;
127 __be32 tw_daddr __attribute__((aligned(INET_TIMEWAIT_ADDRCMP_ALIGN_BYTES)));
128 __be32 tw_rcv_saddr;
129 __be16 tw_dport; 123 __be16 tw_dport;
130 __u16 tw_num; 124 __u16 tw_num;
131 kmemcheck_bitfield_begin(flags); 125 kmemcheck_bitfield_begin(flags);
@@ -191,10 +185,10 @@ static inline struct inet_timewait_sock *inet_twsk(const struct sock *sk)
191 return (struct inet_timewait_sock *)sk; 185 return (struct inet_timewait_sock *)sk;
192} 186}
193 187
194static inline __be32 inet_rcv_saddr(const struct sock *sk) 188static inline __be32 sk_rcv_saddr(const struct sock *sk)
195{ 189{
196 return likely(sk->sk_state != TCP_TIME_WAIT) ? 190/* both inet_sk() and inet_twsk() store rcv_saddr in skc_rcv_saddr */
197 inet_sk(sk)->inet_rcv_saddr : inet_twsk(sk)->tw_rcv_saddr; 191 return sk->__sk_common.skc_rcv_saddr;
198} 192}
199 193
200extern void inet_twsk_put(struct inet_timewait_sock *tw); 194extern void inet_twsk_put(struct inet_timewait_sock *tw);
diff --git a/include/net/inetpeer.h b/include/net/inetpeer.h
index fe239bfe5f7f..599d96e74114 100644
--- a/include/net/inetpeer.h
+++ b/include/net/inetpeer.h
@@ -11,12 +11,21 @@
11#include <linux/init.h> 11#include <linux/init.h>
12#include <linux/jiffies.h> 12#include <linux/jiffies.h>
13#include <linux/spinlock.h> 13#include <linux/spinlock.h>
14#include <net/ipv6.h>
14#include <asm/atomic.h> 15#include <asm/atomic.h>
15 16
17struct inetpeer_addr {
18 union {
19 __be32 a4;
20 __be32 a6[4];
21 };
22 __u16 family;
23};
24
16struct inet_peer { 25struct inet_peer {
17 /* group together avl_left,avl_right,v4daddr to speedup lookups */ 26 /* group together avl_left,avl_right,v4daddr to speedup lookups */
18 struct inet_peer __rcu *avl_left, *avl_right; 27 struct inet_peer __rcu *avl_left, *avl_right;
19 __be32 v4daddr; /* peer's address */ 28 struct inetpeer_addr daddr;
20 __u32 avl_height; 29 __u32 avl_height;
21 struct list_head unused; 30 struct list_head unused;
22 __u32 dtime; /* the time of last use of not 31 __u32 dtime; /* the time of last use of not
@@ -26,7 +35,6 @@ struct inet_peer {
26 * Once inet_peer is queued for deletion (refcnt == -1), following fields 35 * Once inet_peer is queued for deletion (refcnt == -1), following fields
27 * are not available: rid, ip_id_count, tcp_ts, tcp_ts_stamp 36 * are not available: rid, ip_id_count, tcp_ts, tcp_ts_stamp
28 * We can share memory with rcu_head to keep inet_peer small 37 * We can share memory with rcu_head to keep inet_peer small
29 * (less then 64 bytes)
30 */ 38 */
31 union { 39 union {
32 struct { 40 struct {
@@ -42,7 +50,25 @@ struct inet_peer {
42void inet_initpeers(void) __init; 50void inet_initpeers(void) __init;
43 51
44/* can be called with or without local BH being disabled */ 52/* can be called with or without local BH being disabled */
45struct inet_peer *inet_getpeer(__be32 daddr, int create); 53struct inet_peer *inet_getpeer(struct inetpeer_addr *daddr, int create);
54
55static inline struct inet_peer *inet_getpeer_v4(__be32 v4daddr, int create)
56{
57 struct inetpeer_addr daddr;
58
59 daddr.a4 = v4daddr;
60 daddr.family = AF_INET;
61 return inet_getpeer(&daddr, create);
62}
63
64static inline struct inet_peer *inet_getpeer_v6(struct in6_addr *v6daddr, int create)
65{
66 struct inetpeer_addr daddr;
67
68 ipv6_addr_copy((struct in6_addr *)daddr.a6, v6daddr);
69 daddr.family = AF_INET6;
70 return inet_getpeer(&daddr, create);
71}
46 72
47/* can be called from BH context or outside */ 73/* can be called from BH context or outside */
48extern void inet_putpeer(struct inet_peer *p); 74extern void inet_putpeer(struct inet_peer *p);
diff --git a/include/net/ip.h b/include/net/ip.h
index 86e2b182a0c0..67fac78a186b 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -201,7 +201,6 @@ static inline int inet_is_reserved_local_port(int port)
201 return test_bit(port, sysctl_local_reserved_ports); 201 return test_bit(port, sysctl_local_reserved_ports);
202} 202}
203 203
204extern int sysctl_ip_default_ttl;
205extern int sysctl_ip_nonlocal_bind; 204extern int sysctl_ip_nonlocal_bind;
206 205
207extern struct ctl_path net_core_path[]; 206extern struct ctl_path net_core_path[];
@@ -428,15 +427,6 @@ extern void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err,
428extern void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport, 427extern void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport,
429 u32 info); 428 u32 info);
430 429
431/* sysctl helpers - any sysctl which holds a value that ends up being
432 * fed into the routing cache should use these handlers.
433 */
434int ipv4_doint_and_flush(ctl_table *ctl, int write,
435 void __user *buffer,
436 size_t *lenp, loff_t *ppos);
437int ipv4_doint_and_flush_strategy(ctl_table *table,
438 void __user *oldval, size_t __user *oldlenp,
439 void __user *newval, size_t newlen);
440#ifdef CONFIG_PROC_FS 430#ifdef CONFIG_PROC_FS
441extern int ip_misc_proc_init(void); 431extern int ip_misc_proc_init(void);
442#endif 432#endif
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h
index 062a823d311c..708ff7cb8806 100644
--- a/include/net/ip6_fib.h
+++ b/include/net/ip6_fib.h
@@ -21,6 +21,7 @@
21#include <net/dst.h> 21#include <net/dst.h>
22#include <net/flow.h> 22#include <net/flow.h>
23#include <net/netlink.h> 23#include <net/netlink.h>
24#include <net/inetpeer.h>
24 25
25#ifdef CONFIG_IPV6_MULTIPLE_TABLES 26#ifdef CONFIG_IPV6_MULTIPLE_TABLES
26#define FIB6_TABLE_HASHSZ 256 27#define FIB6_TABLE_HASHSZ 256
@@ -109,6 +110,7 @@ struct rt6_info {
109 u32 rt6i_metric; 110 u32 rt6i_metric;
110 111
111 struct inet6_dev *rt6i_idev; 112 struct inet6_dev *rt6i_idev;
113 struct inet_peer *rt6i_peer;
112 114
113#ifdef CONFIG_XFRM 115#ifdef CONFIG_XFRM
114 u32 rt6i_flow_cache_genid; 116 u32 rt6i_flow_cache_genid;
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
index 2ab926860cd8..8552f0a2e854 100644
--- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h
@@ -3,7 +3,6 @@
3 3
4#define IP6_RT_PRIO_USER 1024 4#define IP6_RT_PRIO_USER 1024
5#define IP6_RT_PRIO_ADDRCONF 256 5#define IP6_RT_PRIO_ADDRCONF 256
6#define IP6_RT_PRIO_KERN 512
7 6
8struct route_info { 7struct route_info {
9 __u8 type; 8 __u8 type;
@@ -56,6 +55,18 @@ static inline unsigned int rt6_flags2srcprefs(int flags)
56 return (flags >> 3) & 7; 55 return (flags >> 3) & 7;
57} 56}
58 57
58extern void rt6_bind_peer(struct rt6_info *rt,
59 int create);
60
61static inline struct inet_peer *rt6_get_peer(struct rt6_info *rt)
62{
63 if (rt->rt6i_peer)
64 return rt->rt6i_peer;
65
66 rt6_bind_peer(rt, 0);
67 return rt->rt6i_peer;
68}
69
59extern void ip6_route_input(struct sk_buff *skb); 70extern void ip6_route_input(struct sk_buff *skb);
60 71
61extern struct dst_entry * ip6_route_output(struct net *net, 72extern struct dst_entry * ip6_route_output(struct net *net,
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 365359b24177..5b3fd5add7a4 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -97,6 +97,20 @@ enum ieee80211_max_queues {
97}; 97};
98 98
99/** 99/**
100 * enum ieee80211_ac_numbers - AC numbers as used in mac80211
101 * @IEEE80211_AC_VO: voice
102 * @IEEE80211_AC_VI: video
103 * @IEEE80211_AC_BE: best effort
104 * @IEEE80211_AC_BK: background
105 */
106enum ieee80211_ac_numbers {
107 IEEE80211_AC_VO = 0,
108 IEEE80211_AC_VI = 1,
109 IEEE80211_AC_BE = 2,
110 IEEE80211_AC_BK = 3,
111};
112
113/**
100 * struct ieee80211_tx_queue_params - transmit queue configuration 114 * struct ieee80211_tx_queue_params - transmit queue configuration
101 * 115 *
102 * The information provided in this structure is required for QoS 116 * The information provided in this structure is required for QoS
@@ -205,6 +219,7 @@ enum ieee80211_bss_change {
205 * @basic_rates: bitmap of basic rates, each bit stands for an 219 * @basic_rates: bitmap of basic rates, each bit stands for an
206 * index into the rate table configured by the driver in 220 * index into the rate table configured by the driver in
207 * the current band. 221 * the current band.
222 * @mcast_rate: per-band multicast rate index + 1 (0: disabled)
208 * @bssid: The BSSID for this BSS 223 * @bssid: The BSSID for this BSS
209 * @enable_beacon: whether beaconing should be enabled or not 224 * @enable_beacon: whether beaconing should be enabled or not
210 * @channel_type: Channel type for this BSS -- the hardware might be 225 * @channel_type: Channel type for this BSS -- the hardware might be
@@ -244,6 +259,7 @@ struct ieee80211_bss_conf {
244 u16 assoc_capability; 259 u16 assoc_capability;
245 u64 timestamp; 260 u64 timestamp;
246 u32 basic_rates; 261 u32 basic_rates;
262 int mcast_rate[IEEE80211_NUM_BANDS];
247 u16 ht_operation_mode; 263 u16 ht_operation_mode;
248 s32 cqm_rssi_thold; 264 s32 cqm_rssi_thold;
249 u32 cqm_rssi_hyst; 265 u32 cqm_rssi_hyst;
@@ -349,6 +365,7 @@ enum mac80211_tx_control_flags {
349 IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(21), 365 IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(21),
350 IEEE80211_TX_CTL_LDPC = BIT(22), 366 IEEE80211_TX_CTL_LDPC = BIT(22),
351 IEEE80211_TX_CTL_STBC = BIT(23) | BIT(24), 367 IEEE80211_TX_CTL_STBC = BIT(23) | BIT(24),
368 IEEE80211_TX_CTL_TX_OFFCHAN = BIT(25),
352}; 369};
353 370
354#define IEEE80211_TX_CTL_STBC_SHIFT 23 371#define IEEE80211_TX_CTL_STBC_SHIFT 23
@@ -1652,6 +1669,11 @@ enum ieee80211_ampdu_mlme_action {
1652 * and IV16) for the given key from hardware. 1669 * and IV16) for the given key from hardware.
1653 * The callback must be atomic. 1670 * The callback must be atomic.
1654 * 1671 *
1672 * @set_frag_threshold: Configuration of fragmentation threshold. Assign this
1673 * if the device does fragmentation by itself; if this callback is
1674 * implemented then the stack will not do fragmentation.
1675 * The callback can sleep.
1676 *
1655 * @set_rts_threshold: Configuration of RTS threshold (if device needs it) 1677 * @set_rts_threshold: Configuration of RTS threshold (if device needs it)
1656 * The callback can sleep. 1678 * The callback can sleep.
1657 * 1679 *
@@ -1724,6 +1746,13 @@ enum ieee80211_ampdu_mlme_action {
1724 * completion of the channel switch. 1746 * completion of the channel switch.
1725 * 1747 *
1726 * @napi_poll: Poll Rx queue for incoming data frames. 1748 * @napi_poll: Poll Rx queue for incoming data frames.
1749 *
1750 * @set_antenna: Set antenna configuration (tx_ant, rx_ant) on the device.
1751 * Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may
1752 * reject TX/RX mask combinations they cannot support by returning -EINVAL
1753 * (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX).
1754 *
1755 * @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant).
1727 */ 1756 */
1728struct ieee80211_ops { 1757struct ieee80211_ops {
1729 int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); 1758 int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
@@ -1765,6 +1794,7 @@ struct ieee80211_ops {
1765 struct ieee80211_low_level_stats *stats); 1794 struct ieee80211_low_level_stats *stats);
1766 void (*get_tkip_seq)(struct ieee80211_hw *hw, u8 hw_key_idx, 1795 void (*get_tkip_seq)(struct ieee80211_hw *hw, u8 hw_key_idx,
1767 u32 *iv32, u16 *iv16); 1796 u32 *iv32, u16 *iv16);
1797 int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value);
1768 int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value); 1798 int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value);
1769 int (*sta_add)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 1799 int (*sta_add)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
1770 struct ieee80211_sta *sta); 1800 struct ieee80211_sta *sta);
@@ -1793,6 +1823,14 @@ struct ieee80211_ops {
1793 void (*channel_switch)(struct ieee80211_hw *hw, 1823 void (*channel_switch)(struct ieee80211_hw *hw,
1794 struct ieee80211_channel_switch *ch_switch); 1824 struct ieee80211_channel_switch *ch_switch);
1795 int (*napi_poll)(struct ieee80211_hw *hw, int budget); 1825 int (*napi_poll)(struct ieee80211_hw *hw, int budget);
1826 int (*set_antenna)(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant);
1827 int (*get_antenna)(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant);
1828
1829 int (*remain_on_channel)(struct ieee80211_hw *hw,
1830 struct ieee80211_channel *chan,
1831 enum nl80211_channel_type channel_type,
1832 int duration);
1833 int (*cancel_remain_on_channel)(struct ieee80211_hw *hw);
1796}; 1834};
1797 1835
1798/** 1836/**
@@ -1821,11 +1859,39 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
1821 */ 1859 */
1822int ieee80211_register_hw(struct ieee80211_hw *hw); 1860int ieee80211_register_hw(struct ieee80211_hw *hw);
1823 1861
1862/**
1863 * struct ieee80211_tpt_blink - throughput blink description
1864 * @throughput: throughput in Kbit/sec
1865 * @blink_time: blink time in milliseconds
1866 * (full cycle, ie. one off + one on period)
1867 */
1868struct ieee80211_tpt_blink {
1869 int throughput;
1870 int blink_time;
1871};
1872
1873/**
1874 * enum ieee80211_tpt_led_trigger_flags - throughput trigger flags
1875 * @IEEE80211_TPT_LEDTRIG_FL_RADIO: enable blinking with radio
1876 * @IEEE80211_TPT_LEDTRIG_FL_WORK: enable blinking when working
1877 * @IEEE80211_TPT_LEDTRIG_FL_CONNECTED: enable blinking when at least one
1878 * interface is connected in some way, including being an AP
1879 */
1880enum ieee80211_tpt_led_trigger_flags {
1881 IEEE80211_TPT_LEDTRIG_FL_RADIO = BIT(0),
1882 IEEE80211_TPT_LEDTRIG_FL_WORK = BIT(1),
1883 IEEE80211_TPT_LEDTRIG_FL_CONNECTED = BIT(2),
1884};
1885
1824#ifdef CONFIG_MAC80211_LEDS 1886#ifdef CONFIG_MAC80211_LEDS
1825extern char *__ieee80211_get_tx_led_name(struct ieee80211_hw *hw); 1887extern char *__ieee80211_get_tx_led_name(struct ieee80211_hw *hw);
1826extern char *__ieee80211_get_rx_led_name(struct ieee80211_hw *hw); 1888extern char *__ieee80211_get_rx_led_name(struct ieee80211_hw *hw);
1827extern char *__ieee80211_get_assoc_led_name(struct ieee80211_hw *hw); 1889extern char *__ieee80211_get_assoc_led_name(struct ieee80211_hw *hw);
1828extern char *__ieee80211_get_radio_led_name(struct ieee80211_hw *hw); 1890extern char *__ieee80211_get_radio_led_name(struct ieee80211_hw *hw);
1891extern char *__ieee80211_create_tpt_led_trigger(
1892 struct ieee80211_hw *hw, unsigned int flags,
1893 const struct ieee80211_tpt_blink *blink_table,
1894 unsigned int blink_table_len);
1829#endif 1895#endif
1830/** 1896/**
1831 * ieee80211_get_tx_led_name - get name of TX LED 1897 * ieee80211_get_tx_led_name - get name of TX LED
@@ -1904,6 +1970,30 @@ static inline char *ieee80211_get_radio_led_name(struct ieee80211_hw *hw)
1904} 1970}
1905 1971
1906/** 1972/**
1973 * ieee80211_create_tpt_led_trigger - create throughput LED trigger
1974 * @hw: the hardware to create the trigger for
1975 * @flags: trigger flags, see &enum ieee80211_tpt_led_trigger_flags
1976 * @blink_table: the blink table -- needs to be ordered by throughput
1977 * @blink_table_len: size of the blink table
1978 *
1979 * This function returns %NULL (in case of error, or if no LED
1980 * triggers are configured) or the name of the new trigger.
1981 * This function must be called before ieee80211_register_hw().
1982 */
1983static inline char *
1984ieee80211_create_tpt_led_trigger(struct ieee80211_hw *hw, unsigned int flags,
1985 const struct ieee80211_tpt_blink *blink_table,
1986 unsigned int blink_table_len)
1987{
1988#ifdef CONFIG_MAC80211_LEDS
1989 return __ieee80211_create_tpt_led_trigger(hw, flags, blink_table,
1990 blink_table_len);
1991#else
1992 return NULL;
1993#endif
1994}
1995
1996/**
1907 * ieee80211_unregister_hw - Unregister a hardware device 1997 * ieee80211_unregister_hw - Unregister a hardware device
1908 * 1998 *
1909 * This function instructs mac80211 to free allocated resources 1999 * This function instructs mac80211 to free allocated resources
@@ -2404,6 +2494,7 @@ void ieee80211_queue_delayed_work(struct ieee80211_hw *hw,
2404 * ieee80211_start_tx_ba_session - Start a tx Block Ack session. 2494 * ieee80211_start_tx_ba_session - Start a tx Block Ack session.
2405 * @sta: the station for which to start a BA session 2495 * @sta: the station for which to start a BA session
2406 * @tid: the TID to BA on. 2496 * @tid: the TID to BA on.
2497 * @timeout: session timeout value (in TUs)
2407 * 2498 *
2408 * Return: success if addBA request was sent, failure otherwise 2499 * Return: success if addBA request was sent, failure otherwise
2409 * 2500 *
@@ -2411,7 +2502,8 @@ void ieee80211_queue_delayed_work(struct ieee80211_hw *hw,
2411 * the need to start aggregation on a certain RA/TID, the session level 2502 * the need to start aggregation on a certain RA/TID, the session level
2412 * will be managed by the mac80211. 2503 * will be managed by the mac80211.
2413 */ 2504 */
2414int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid); 2505int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid,
2506 u16 timeout);
2415 2507
2416/** 2508/**
2417 * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate. 2509 * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate.
@@ -2521,6 +2613,21 @@ void ieee80211_sta_block_awake(struct ieee80211_hw *hw,
2521 struct ieee80211_sta *pubsta, bool block); 2613 struct ieee80211_sta *pubsta, bool block);
2522 2614
2523/** 2615/**
2616 * ieee80211_ap_probereq_get - retrieve a Probe Request template
2617 * @hw: pointer obtained from ieee80211_alloc_hw().
2618 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
2619 *
2620 * Creates a Probe Request template which can, for example, be uploaded to
2621 * hardware. The template is filled with bssid, ssid and supported rate
2622 * information. This function must only be called from within the
2623 * .bss_info_changed callback function and only in managed mode. The function
2624 * is only useful when the interface is associated, otherwise it will return
2625 * NULL.
2626 */
2627struct sk_buff *ieee80211_ap_probereq_get(struct ieee80211_hw *hw,
2628 struct ieee80211_vif *vif);
2629
2630/**
2524 * ieee80211_beacon_loss - inform hardware does not receive beacons 2631 * ieee80211_beacon_loss - inform hardware does not receive beacons
2525 * 2632 *
2526 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 2633 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
@@ -2629,6 +2736,18 @@ void ieee80211_request_smps(struct ieee80211_vif *vif,
2629 */ 2736 */
2630void ieee80211_key_removed(struct ieee80211_key_conf *key_conf); 2737void ieee80211_key_removed(struct ieee80211_key_conf *key_conf);
2631 2738
2739/**
2740 * ieee80211_ready_on_channel - notification of remain-on-channel start
2741 * @hw: pointer as obtained from ieee80211_alloc_hw()
2742 */
2743void ieee80211_ready_on_channel(struct ieee80211_hw *hw);
2744
2745/**
2746 * ieee80211_remain_on_channel_expired - remain_on_channel duration expired
2747 * @hw: pointer as obtained from ieee80211_alloc_hw()
2748 */
2749void ieee80211_remain_on_channel_expired(struct ieee80211_hw *hw);
2750
2632/* Rate control API */ 2751/* Rate control API */
2633 2752
2634/** 2753/**
@@ -2660,7 +2779,7 @@ enum rate_control_changed {
2660 * @rate_idx_mask: user-requested rate mask (not MCS for now) 2779 * @rate_idx_mask: user-requested rate mask (not MCS for now)
2661 * @skb: the skb that will be transmitted, the control information in it needs 2780 * @skb: the skb that will be transmitted, the control information in it needs
2662 * to be filled in 2781 * to be filled in
2663 * @ap: whether this frame is sent out in AP mode 2782 * @bss: whether this frame is sent out in AP or IBSS mode
2664 */ 2783 */
2665struct ieee80211_tx_rate_control { 2784struct ieee80211_tx_rate_control {
2666 struct ieee80211_hw *hw; 2785 struct ieee80211_hw *hw;
@@ -2671,7 +2790,7 @@ struct ieee80211_tx_rate_control {
2671 bool rts, short_preamble; 2790 bool rts, short_preamble;
2672 u8 max_rate_idx; 2791 u8 max_rate_idx;
2673 u32 rate_idx_mask; 2792 u32 rate_idx_mask;
2674 bool ap; 2793 bool bss;
2675}; 2794};
2676 2795
2677struct rate_control_ops { 2796struct rate_control_ops {
diff --git a/include/net/ndisc.h b/include/net/ndisc.h
index 895997bc2ead..e0e594f8e9d9 100644
--- a/include/net/ndisc.h
+++ b/include/net/ndisc.h
@@ -42,9 +42,6 @@ enum {
42#define ND_REACHABLE_TIME (30*HZ) 42#define ND_REACHABLE_TIME (30*HZ)
43#define ND_RETRANS_TIMER HZ 43#define ND_RETRANS_TIMER HZ
44 44
45#define ND_MIN_RANDOM_FACTOR (1/2)
46#define ND_MAX_RANDOM_FACTOR (3/2)
47
48#ifdef __KERNEL__ 45#ifdef __KERNEL__
49 46
50#include <linux/compiler.h> 47#include <linux/compiler.h>
diff --git a/include/net/neighbour.h b/include/net/neighbour.h
index 6beb1ffc2b7f..4014b623880c 100644
--- a/include/net/neighbour.h
+++ b/include/net/neighbour.h
@@ -96,16 +96,16 @@ struct neighbour {
96 struct neigh_parms *parms; 96 struct neigh_parms *parms;
97 unsigned long confirmed; 97 unsigned long confirmed;
98 unsigned long updated; 98 unsigned long updated;
99 __u8 flags; 99 rwlock_t lock;
100 __u8 nud_state;
101 __u8 type;
102 __u8 dead;
103 atomic_t refcnt; 100 atomic_t refcnt;
104 struct sk_buff_head arp_queue; 101 struct sk_buff_head arp_queue;
105 struct timer_list timer; 102 struct timer_list timer;
106 unsigned long used; 103 unsigned long used;
107 atomic_t probes; 104 atomic_t probes;
108 rwlock_t lock; 105 __u8 flags;
106 __u8 nud_state;
107 __u8 type;
108 __u8 dead;
109 seqlock_t ha_lock; 109 seqlock_t ha_lock;
110 unsigned char ha[ALIGN(MAX_ADDR_LEN, sizeof(unsigned long))]; 110 unsigned char ha[ALIGN(MAX_ADDR_LEN, sizeof(unsigned long))];
111 struct hh_cache *hh; 111 struct hh_cache *hh;
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h
index caf17db87dbc..d85cff10e169 100644
--- a/include/net/netfilter/nf_conntrack.h
+++ b/include/net/netfilter/nf_conntrack.h
@@ -298,6 +298,8 @@ static inline int nf_ct_is_untracked(const struct nf_conn *ct)
298extern int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp); 298extern int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp);
299extern unsigned int nf_conntrack_htable_size; 299extern unsigned int nf_conntrack_htable_size;
300extern unsigned int nf_conntrack_max; 300extern unsigned int nf_conntrack_max;
301extern unsigned int nf_conntrack_hash_rnd;
302void init_nf_conntrack_hash_rnd(void);
301 303
302#define NF_CT_STAT_INC(net, count) \ 304#define NF_CT_STAT_INC(net, count) \
303 __this_cpu_inc((net)->ct.stat->count) 305 __this_cpu_inc((net)->ct.stat->count)
diff --git a/include/net/netlink.h b/include/net/netlink.h
index 9801c55de5d6..373f1a900cf4 100644
--- a/include/net/netlink.h
+++ b/include/net/netlink.h
@@ -225,13 +225,15 @@ extern int nlmsg_notify(struct sock *sk, struct sk_buff *skb,
225 u32 pid, unsigned int group, int report, 225 u32 pid, unsigned int group, int report,
226 gfp_t flags); 226 gfp_t flags);
227 227
228extern int nla_validate(struct nlattr *head, int len, int maxtype, 228extern int nla_validate(const struct nlattr *head,
229 int len, int maxtype,
229 const struct nla_policy *policy); 230 const struct nla_policy *policy);
230extern int nla_parse(struct nlattr *tb[], int maxtype, 231extern int nla_parse(struct nlattr **tb, int maxtype,
231 struct nlattr *head, int len, 232 const struct nlattr *head, int len,
232 const struct nla_policy *policy); 233 const struct nla_policy *policy);
233extern int nla_policy_len(const struct nla_policy *, int); 234extern int nla_policy_len(const struct nla_policy *, int);
234extern struct nlattr * nla_find(struct nlattr *head, int len, int attrtype); 235extern struct nlattr * nla_find(const struct nlattr *head,
236 int len, int attrtype);
235extern size_t nla_strlcpy(char *dst, const struct nlattr *nla, 237extern size_t nla_strlcpy(char *dst, const struct nlattr *nla,
236 size_t dstsize); 238 size_t dstsize);
237extern int nla_memcpy(void *dest, const struct nlattr *src, int count); 239extern int nla_memcpy(void *dest, const struct nlattr *src, int count);
@@ -346,7 +348,8 @@ static inline int nlmsg_ok(const struct nlmsghdr *nlh, int remaining)
346 * Returns the next netlink message in the message stream and 348 * Returns the next netlink message in the message stream and
347 * decrements remaining by the size of the current message. 349 * decrements remaining by the size of the current message.
348 */ 350 */
349static inline struct nlmsghdr *nlmsg_next(struct nlmsghdr *nlh, int *remaining) 351static inline struct nlmsghdr *
352nlmsg_next(const struct nlmsghdr *nlh, int *remaining)
350{ 353{
351 int totlen = NLMSG_ALIGN(nlh->nlmsg_len); 354 int totlen = NLMSG_ALIGN(nlh->nlmsg_len);
352 355
@@ -398,7 +401,8 @@ static inline struct nlattr *nlmsg_find_attr(const struct nlmsghdr *nlh,
398 * @maxtype: maximum attribute type to be expected 401 * @maxtype: maximum attribute type to be expected
399 * @policy: validation policy 402 * @policy: validation policy
400 */ 403 */
401static inline int nlmsg_validate(struct nlmsghdr *nlh, int hdrlen, int maxtype, 404static inline int nlmsg_validate(const struct nlmsghdr *nlh,
405 int hdrlen, int maxtype,
402 const struct nla_policy *policy) 406 const struct nla_policy *policy)
403{ 407{
404 if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen)) 408 if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen))
@@ -727,7 +731,8 @@ static inline struct nlattr *nla_next(const struct nlattr *nla, int *remaining)
727 * 731 *
728 * Returns the first attribute which matches the specified type. 732 * Returns the first attribute which matches the specified type.
729 */ 733 */
730static inline struct nlattr *nla_find_nested(struct nlattr *nla, int attrtype) 734static inline struct nlattr *
735nla_find_nested(const struct nlattr *nla, int attrtype)
731{ 736{
732 return nla_find(nla_data(nla), nla_len(nla), attrtype); 737 return nla_find(nla_data(nla), nla_len(nla), attrtype);
733} 738}
@@ -1032,7 +1037,7 @@ static inline void nla_nest_cancel(struct sk_buff *skb, struct nlattr *start)
1032 * 1037 *
1033 * Returns 0 on success or a negative error code. 1038 * Returns 0 on success or a negative error code.
1034 */ 1039 */
1035static inline int nla_validate_nested(struct nlattr *start, int maxtype, 1040static inline int nla_validate_nested(const struct nlattr *start, int maxtype,
1036 const struct nla_policy *policy) 1041 const struct nla_policy *policy)
1037{ 1042{
1038 return nla_validate(nla_data(start), nla_len(start), maxtype, policy); 1043 return nla_validate(nla_data(start), nla_len(start), maxtype, policy);
diff --git a/include/net/netns/generic.h b/include/net/netns/generic.h
index 81a31c0db3e7..3419bf5cd154 100644
--- a/include/net/netns/generic.h
+++ b/include/net/netns/generic.h
@@ -30,7 +30,7 @@ struct net_generic {
30 void *ptr[0]; 30 void *ptr[0];
31}; 31};
32 32
33static inline void *net_generic(struct net *net, int id) 33static inline void *net_generic(const struct net *net, int id)
34{ 34{
35 struct net_generic *ng; 35 struct net_generic *ng;
36 void *ptr; 36 void *ptr;
diff --git a/include/net/regulatory.h b/include/net/regulatory.h
index 9e103a4e91ee..356d6e3dc20a 100644
--- a/include/net/regulatory.h
+++ b/include/net/regulatory.h
@@ -43,6 +43,12 @@ enum environment_cap {
43 * @intersect: indicates whether the wireless core should intersect 43 * @intersect: indicates whether the wireless core should intersect
44 * the requested regulatory domain with the presently set regulatory 44 * the requested regulatory domain with the presently set regulatory
45 * domain. 45 * domain.
46 * @processed: indicates whether or not this requests has already been
47 * processed. When the last request is processed it means that the
48 * currently regulatory domain set on cfg80211 is updated from
49 * CRDA and can be used by other regulatory requests. When a
50 * the last request is not yet processed we must yield until it
51 * is processed before processing any new requests.
46 * @country_ie_checksum: checksum of the last processed and accepted 52 * @country_ie_checksum: checksum of the last processed and accepted
47 * country IE 53 * country IE
48 * @country_ie_env: lets us know if the AP is telling us we are outdoor, 54 * @country_ie_env: lets us know if the AP is telling us we are outdoor,
@@ -54,6 +60,7 @@ struct regulatory_request {
54 enum nl80211_reg_initiator initiator; 60 enum nl80211_reg_initiator initiator;
55 char alpha2[2]; 61 char alpha2[2];
56 bool intersect; 62 bool intersect;
63 bool processed;
57 enum environment_cap country_ie_env; 64 enum environment_cap country_ie_env;
58 struct list_head list; 65 struct list_head list;
59}; 66};
diff --git a/include/net/route.h b/include/net/route.h
index 7e5e73bfa4de..93e10c453f6b 100644
--- a/include/net/route.h
+++ b/include/net/route.h
@@ -55,8 +55,6 @@ struct rtable {
55 /* Cache lookup keys */ 55 /* Cache lookup keys */
56 struct flowi fl; 56 struct flowi fl;
57 57
58 struct in_device *idev;
59
60 int rt_genid; 58 int rt_genid;
61 unsigned rt_flags; 59 unsigned rt_flags;
62 __u16 rt_type; 60 __u16 rt_type;
@@ -73,6 +71,16 @@ struct rtable {
73 struct inet_peer *peer; /* long-living peer info */ 71 struct inet_peer *peer; /* long-living peer info */
74}; 72};
75 73
74static inline bool rt_is_input_route(struct rtable *rt)
75{
76 return rt->fl.iif != 0;
77}
78
79static inline bool rt_is_output_route(struct rtable *rt)
80{
81 return rt->fl.iif == 0;
82}
83
76struct ip_rt_acct { 84struct ip_rt_acct {
77 __u32 o_bytes; 85 __u32 o_bytes;
78 __u32 o_packets; 86 __u32 o_packets;
@@ -106,7 +114,7 @@ extern int ip_rt_init(void);
106extern void ip_rt_redirect(__be32 old_gw, __be32 dst, __be32 new_gw, 114extern void ip_rt_redirect(__be32 old_gw, __be32 dst, __be32 new_gw,
107 __be32 src, struct net_device *dev); 115 __be32 src, struct net_device *dev);
108extern void rt_cache_flush(struct net *net, int how); 116extern void rt_cache_flush(struct net *net, int how);
109extern void rt_cache_flush_batch(void); 117extern void rt_cache_flush_batch(struct net *net);
110extern int __ip_route_output_key(struct net *, struct rtable **, const struct flowi *flp); 118extern int __ip_route_output_key(struct net *, struct rtable **, const struct flowi *flp);
111extern int ip_route_output_key(struct net *, struct rtable **, struct flowi *flp); 119extern int ip_route_output_key(struct net *, struct rtable **, struct flowi *flp);
112extern int ip_route_output_flow(struct net *, struct rtable **rp, struct flowi *flp, struct sock *sk, int flags); 120extern int ip_route_output_flow(struct net *, struct rtable **rp, struct flowi *flp, struct sock *sk, int flags);
@@ -161,14 +169,12 @@ static inline int ip_route_connect(struct rtable **rp, __be32 dst,
161{ 169{
162 struct flowi fl = { .oif = oif, 170 struct flowi fl = { .oif = oif,
163 .mark = sk->sk_mark, 171 .mark = sk->sk_mark,
164 .nl_u = { .ip4_u = { .daddr = dst, 172 .fl4_dst = dst,
165 .saddr = src, 173 .fl4_src = src,
166 .tos = tos } }, 174 .fl4_tos = tos,
167 .proto = protocol, 175 .proto = protocol,
168 .uli_u = { .ports = 176 .fl_ip_sport = sport,
169 { .sport = sport, 177 .fl_ip_dport = dport };
170 .dport = dport } } };
171
172 int err; 178 int err;
173 struct net *net = sock_net(sk); 179 struct net *net = sock_net(sk);
174 180
@@ -225,4 +231,15 @@ static inline int inet_iif(const struct sk_buff *skb)
225 return skb_rtable(skb)->rt_iif; 231 return skb_rtable(skb)->rt_iif;
226} 232}
227 233
234extern int sysctl_ip_default_ttl;
235
236static inline int ip4_dst_hoplimit(const struct dst_entry *dst)
237{
238 int hoplimit = dst_metric_raw(dst, RTAX_HOPLIMIT);
239
240 if (hoplimit == 0)
241 hoplimit = sysctl_ip_default_ttl;
242 return hoplimit;
243}
244
228#endif /* _ROUTE_H */ 245#endif /* _ROUTE_H */
diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h
index e013c68bfb00..4093ca78cf60 100644
--- a/include/net/rtnetlink.h
+++ b/include/net/rtnetlink.h
@@ -83,6 +83,41 @@ extern void __rtnl_link_unregister(struct rtnl_link_ops *ops);
83extern int rtnl_link_register(struct rtnl_link_ops *ops); 83extern int rtnl_link_register(struct rtnl_link_ops *ops);
84extern void rtnl_link_unregister(struct rtnl_link_ops *ops); 84extern void rtnl_link_unregister(struct rtnl_link_ops *ops);
85 85
86/**
87 * struct rtnl_af_ops - rtnetlink address family operations
88 *
89 * @list: Used internally
90 * @family: Address family
91 * @fill_link_af: Function to fill IFLA_AF_SPEC with address family
92 * specific netlink attributes.
93 * @get_link_af_size: Function to calculate size of address family specific
94 * netlink attributes exlusive the container attribute.
95 * @validate_link_af: Validate a IFLA_AF_SPEC attribute, must check attr
96 * for invalid configuration settings.
97 * @set_link_af: Function to parse a IFLA_AF_SPEC attribute and modify
98 * net_device accordingly.
99 */
100struct rtnl_af_ops {
101 struct list_head list;
102 int family;
103
104 int (*fill_link_af)(struct sk_buff *skb,
105 const struct net_device *dev);
106 size_t (*get_link_af_size)(const struct net_device *dev);
107
108 int (*validate_link_af)(const struct net_device *dev,
109 const struct nlattr *attr);
110 int (*set_link_af)(struct net_device *dev,
111 const struct nlattr *attr);
112};
113
114extern int __rtnl_af_register(struct rtnl_af_ops *ops);
115extern void __rtnl_af_unregister(struct rtnl_af_ops *ops);
116
117extern int rtnl_af_register(struct rtnl_af_ops *ops);
118extern void rtnl_af_unregister(struct rtnl_af_ops *ops);
119
120
86extern struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[]); 121extern struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[]);
87extern struct net_device *rtnl_create_link(struct net *src_net, struct net *net, 122extern struct net_device *rtnl_create_link(struct net *src_net, struct net *net,
88 char *ifname, const struct rtnl_link_ops *ops, struct nlattr *tb[]); 123 char *ifname, const struct rtnl_link_ops *ops, struct nlattr *tb[]);
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index 79f34e2b752f..0af57ebae762 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -321,6 +321,7 @@ extern void dev_init_scheduler(struct net_device *dev);
321extern void dev_shutdown(struct net_device *dev); 321extern void dev_shutdown(struct net_device *dev);
322extern void dev_activate(struct net_device *dev); 322extern void dev_activate(struct net_device *dev);
323extern void dev_deactivate(struct net_device *dev); 323extern void dev_deactivate(struct net_device *dev);
324extern void dev_deactivate_many(struct list_head *head);
324extern struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue, 325extern struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue,
325 struct Qdisc *qdisc); 326 struct Qdisc *qdisc);
326extern void qdisc_reset(struct Qdisc *qdisc); 327extern void qdisc_reset(struct Qdisc *qdisc);
diff --git a/include/net/scm.h b/include/net/scm.h
index 31656506d967..745460fa2f02 100644
--- a/include/net/scm.h
+++ b/include/net/scm.h
@@ -10,11 +10,12 @@
10/* Well, we should have at least one descriptor open 10/* Well, we should have at least one descriptor open
11 * to accept passed FDs 8) 11 * to accept passed FDs 8)
12 */ 12 */
13#define SCM_MAX_FD 255 13#define SCM_MAX_FD 253
14 14
15struct scm_fp_list { 15struct scm_fp_list {
16 struct list_head list; 16 struct list_head list;
17 int count; 17 short count;
18 short max;
18 struct file *fp[SCM_MAX_FD]; 19 struct file *fp[SCM_MAX_FD];
19}; 20};
20 21
diff --git a/include/net/sctp/command.h b/include/net/sctp/command.h
index 2c55a7ea20af..c01dc99def07 100644
--- a/include/net/sctp/command.h
+++ b/include/net/sctp/command.h
@@ -111,9 +111,6 @@ typedef enum {
111 SCTP_CMD_LAST 111 SCTP_CMD_LAST
112} sctp_verb_t; 112} sctp_verb_t;
113 113
114#define SCTP_CMD_MAX (SCTP_CMD_LAST - 1)
115#define SCTP_CMD_NUM_VERBS (SCTP_CMD_MAX + 1)
116
117/* How many commands can you put in an sctp_cmd_seq_t? 114/* How many commands can you put in an sctp_cmd_seq_t?
118 * This is a rather arbitrary number, ideally derived from a careful 115 * This is a rather arbitrary number, ideally derived from a careful
119 * analysis of the state functions, but in reality just taken from 116 * analysis of the state functions, but in reality just taken from
diff --git a/include/net/sctp/constants.h b/include/net/sctp/constants.h
index 63908840eef0..c70d8ccc55cb 100644
--- a/include/net/sctp/constants.h
+++ b/include/net/sctp/constants.h
@@ -61,7 +61,6 @@ enum { SCTP_DEFAULT_INSTREAMS = SCTP_MAX_STREAM };
61 * symbols. CIDs are dense through SCTP_CID_BASE_MAX. 61 * symbols. CIDs are dense through SCTP_CID_BASE_MAX.
62 */ 62 */
63#define SCTP_CID_BASE_MAX SCTP_CID_SHUTDOWN_COMPLETE 63#define SCTP_CID_BASE_MAX SCTP_CID_SHUTDOWN_COMPLETE
64#define SCTP_CID_MAX SCTP_CID_ASCONF_ACK
65 64
66#define SCTP_NUM_BASE_CHUNK_TYPES (SCTP_CID_BASE_MAX + 1) 65#define SCTP_NUM_BASE_CHUNK_TYPES (SCTP_CID_BASE_MAX + 1)
67 66
@@ -86,9 +85,6 @@ typedef enum {
86 85
87} sctp_event_t; 86} sctp_event_t;
88 87
89#define SCTP_EVENT_T_MAX SCTP_EVENT_T_PRIMITIVE
90#define SCTP_EVENT_T_NUM (SCTP_EVENT_T_MAX + 1)
91
92/* As a convenience for the state machine, we append SCTP_EVENT_* and 88/* As a convenience for the state machine, we append SCTP_EVENT_* and
93 * SCTP_ULP_* to the list of possible chunks. 89 * SCTP_ULP_* to the list of possible chunks.
94 */ 90 */
@@ -162,9 +158,6 @@ SCTP_SUBTYPE_CONSTRUCTOR(PRIMITIVE, sctp_event_primitive_t, primitive)
162 - (unsigned long)(c->chunk_hdr)\ 158 - (unsigned long)(c->chunk_hdr)\
163 - sizeof(sctp_data_chunk_t))) 159 - sizeof(sctp_data_chunk_t)))
164 160
165#define SCTP_MAX_ERROR_CAUSE SCTP_ERROR_NONEXIST_IP
166#define SCTP_NUM_ERROR_CAUSE 10
167
168/* Internal error codes */ 161/* Internal error codes */
169typedef enum { 162typedef enum {
170 163
@@ -266,7 +259,6 @@ enum { SCTP_ARBITRARY_COOKIE_ECHO_LEN = 200 };
266#define SCTP_TSN_MAP_INITIAL BITS_PER_LONG 259#define SCTP_TSN_MAP_INITIAL BITS_PER_LONG
267#define SCTP_TSN_MAP_INCREMENT SCTP_TSN_MAP_INITIAL 260#define SCTP_TSN_MAP_INCREMENT SCTP_TSN_MAP_INITIAL
268#define SCTP_TSN_MAP_SIZE 4096 261#define SCTP_TSN_MAP_SIZE 4096
269#define SCTP_TSN_MAX_GAP 65535
270 262
271/* We will not record more than this many duplicate TSNs between two 263/* We will not record more than this many duplicate TSNs between two
272 * SACKs. The minimum PMTU is 576. Remove all the headers and there 264 * SACKs. The minimum PMTU is 576. Remove all the headers and there
@@ -301,9 +293,6 @@ enum { SCTP_MAX_GABS = 16 };
301 293
302#define SCTP_CLOCK_GRANULARITY 1 /* 1 jiffy */ 294#define SCTP_CLOCK_GRANULARITY 1 /* 1 jiffy */
303 295
304#define SCTP_DEF_MAX_INIT 6
305#define SCTP_DEF_MAX_SEND 10
306
307#define SCTP_DEFAULT_COOKIE_LIFE (60 * 1000) /* 60 seconds */ 296#define SCTP_DEFAULT_COOKIE_LIFE (60 * 1000) /* 60 seconds */
308 297
309#define SCTP_DEFAULT_MINWINDOW 1500 /* default minimum rwnd size */ 298#define SCTP_DEFAULT_MINWINDOW 1500 /* default minimum rwnd size */
@@ -317,9 +306,6 @@ enum { SCTP_MAX_GABS = 16 };
317 */ 306 */
318#define SCTP_DEFAULT_MINSEGMENT 512 /* MTU size ... if no mtu disc */ 307#define SCTP_DEFAULT_MINSEGMENT 512 /* MTU size ... if no mtu disc */
319#define SCTP_HOW_MANY_SECRETS 2 /* How many secrets I keep */ 308#define SCTP_HOW_MANY_SECRETS 2 /* How many secrets I keep */
320#define SCTP_HOW_LONG_COOKIE_LIVE 3600 /* How many seconds the current
321 * secret will live?
322 */
323#define SCTP_SECRET_SIZE 32 /* Number of octets in a 256 bits. */ 309#define SCTP_SECRET_SIZE 32 /* Number of octets in a 256 bits. */
324 310
325#define SCTP_SIGNATURE_SIZE 20 /* size of a SLA-1 signature */ 311#define SCTP_SIGNATURE_SIZE 20 /* size of a SLA-1 signature */
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index 69fef4fb79c0..cc9185ca8fd1 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -261,8 +261,6 @@ extern struct sctp_globals {
261#define sctp_assoc_hashsize (sctp_globals.assoc_hashsize) 261#define sctp_assoc_hashsize (sctp_globals.assoc_hashsize)
262#define sctp_assoc_hashtable (sctp_globals.assoc_hashtable) 262#define sctp_assoc_hashtable (sctp_globals.assoc_hashtable)
263#define sctp_port_hashsize (sctp_globals.port_hashsize) 263#define sctp_port_hashsize (sctp_globals.port_hashsize)
264#define sctp_port_rover (sctp_globals.port_rover)
265#define sctp_port_alloc_lock (sctp_globals.port_alloc_lock)
266#define sctp_port_hashtable (sctp_globals.port_hashtable) 264#define sctp_port_hashtable (sctp_globals.port_hashtable)
267#define sctp_local_addr_list (sctp_globals.local_addr_list) 265#define sctp_local_addr_list (sctp_globals.local_addr_list)
268#define sctp_local_addr_lock (sctp_globals.addr_list_lock) 266#define sctp_local_addr_lock (sctp_globals.addr_list_lock)
diff --git a/include/net/snmp.h b/include/net/snmp.h
index a0e61806d480..762e2abce889 100644
--- a/include/net/snmp.h
+++ b/include/net/snmp.h
@@ -60,9 +60,7 @@ struct ipstats_mib {
60}; 60};
61 61
62/* ICMP */ 62/* ICMP */
63#define ICMP_MIB_DUMMY __ICMP_MIB_MAX 63#define ICMP_MIB_MAX __ICMP_MIB_MAX
64#define ICMP_MIB_MAX (__ICMP_MIB_MAX + 1)
65
66struct icmp_mib { 64struct icmp_mib {
67 unsigned long mibs[ICMP_MIB_MAX]; 65 unsigned long mibs[ICMP_MIB_MAX];
68}; 66};
diff --git a/include/net/sock.h b/include/net/sock.h
index 7d3f7ce239b5..21a02f7e4f45 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -57,7 +57,7 @@
57#include <linux/rculist_nulls.h> 57#include <linux/rculist_nulls.h>
58#include <linux/poll.h> 58#include <linux/poll.h>
59 59
60#include <asm/atomic.h> 60#include <linux/atomic.h>
61#include <net/dst.h> 61#include <net/dst.h>
62#include <net/checksum.h> 62#include <net/checksum.h>
63 63
@@ -105,10 +105,8 @@ struct net;
105 105
106/** 106/**
107 * struct sock_common - minimal network layer representation of sockets 107 * struct sock_common - minimal network layer representation of sockets
108 * @skc_node: main hash linkage for various protocol lookup tables 108 * @skc_daddr: Foreign IPv4 addr
109 * @skc_nulls_node: main hash linkage for TCP/UDP/UDP-Lite protocol 109 * @skc_rcv_saddr: Bound local IPv4 addr
110 * @skc_refcnt: reference count
111 * @skc_tx_queue_mapping: tx queue number for this connection
112 * @skc_hash: hash value used with various protocol lookup tables 110 * @skc_hash: hash value used with various protocol lookup tables
113 * @skc_u16hashes: two u16 hash values used by UDP lookup tables 111 * @skc_u16hashes: two u16 hash values used by UDP lookup tables
114 * @skc_family: network address family 112 * @skc_family: network address family
@@ -119,20 +117,20 @@ struct net;
119 * @skc_portaddr_node: second hash linkage for UDP/UDP-Lite protocol 117 * @skc_portaddr_node: second hash linkage for UDP/UDP-Lite protocol
120 * @skc_prot: protocol handlers inside a network family 118 * @skc_prot: protocol handlers inside a network family
121 * @skc_net: reference to the network namespace of this socket 119 * @skc_net: reference to the network namespace of this socket
120 * @skc_node: main hash linkage for various protocol lookup tables
121 * @skc_nulls_node: main hash linkage for TCP/UDP/UDP-Lite protocol
122 * @skc_tx_queue_mapping: tx queue number for this connection
123 * @skc_refcnt: reference count
122 * 124 *
123 * This is the minimal network layer representation of sockets, the header 125 * This is the minimal network layer representation of sockets, the header
124 * for struct sock and struct inet_timewait_sock. 126 * for struct sock and struct inet_timewait_sock.
125 */ 127 */
126struct sock_common { 128struct sock_common {
127 /* 129 /* skc_daddr and skc_rcv_saddr must be grouped :
128 * first fields are not copied in sock_copy() 130 * cf INET_MATCH() and INET_TW_MATCH()
129 */ 131 */
130 union { 132 __be32 skc_daddr;
131 struct hlist_node skc_node; 133 __be32 skc_rcv_saddr;
132 struct hlist_nulls_node skc_nulls_node;
133 };
134 atomic_t skc_refcnt;
135 int skc_tx_queue_mapping;
136 134
137 union { 135 union {
138 unsigned int skc_hash; 136 unsigned int skc_hash;
@@ -150,6 +148,18 @@ struct sock_common {
150#ifdef CONFIG_NET_NS 148#ifdef CONFIG_NET_NS
151 struct net *skc_net; 149 struct net *skc_net;
152#endif 150#endif
151 /*
152 * fields between dontcopy_begin/dontcopy_end
153 * are not copied in sock_copy()
154 */
155 int skc_dontcopy_begin[0];
156 union {
157 struct hlist_node skc_node;
158 struct hlist_nulls_node skc_nulls_node;
159 };
160 int skc_tx_queue_mapping;
161 atomic_t skc_refcnt;
162 int skc_dontcopy_end[0];
153}; 163};
154 164
155/** 165/**
@@ -232,7 +242,8 @@ struct sock {
232#define sk_refcnt __sk_common.skc_refcnt 242#define sk_refcnt __sk_common.skc_refcnt
233#define sk_tx_queue_mapping __sk_common.skc_tx_queue_mapping 243#define sk_tx_queue_mapping __sk_common.skc_tx_queue_mapping
234 244
235#define sk_copy_start __sk_common.skc_hash 245#define sk_dontcopy_begin __sk_common.skc_dontcopy_begin
246#define sk_dontcopy_end __sk_common.skc_dontcopy_end
236#define sk_hash __sk_common.skc_hash 247#define sk_hash __sk_common.skc_hash
237#define sk_family __sk_common.skc_family 248#define sk_family __sk_common.skc_family
238#define sk_state __sk_common.skc_state 249#define sk_state __sk_common.skc_state
@@ -241,59 +252,67 @@ struct sock {
241#define sk_bind_node __sk_common.skc_bind_node 252#define sk_bind_node __sk_common.skc_bind_node
242#define sk_prot __sk_common.skc_prot 253#define sk_prot __sk_common.skc_prot
243#define sk_net __sk_common.skc_net 254#define sk_net __sk_common.skc_net
244 kmemcheck_bitfield_begin(flags);
245 unsigned int sk_shutdown : 2,
246 sk_no_check : 2,
247 sk_userlocks : 4,
248 sk_protocol : 8,
249 sk_type : 16;
250 kmemcheck_bitfield_end(flags);
251 int sk_rcvbuf;
252 socket_lock_t sk_lock; 255 socket_lock_t sk_lock;
256 struct sk_buff_head sk_receive_queue;
253 /* 257 /*
254 * The backlog queue is special, it is always used with 258 * The backlog queue is special, it is always used with
255 * the per-socket spinlock held and requires low latency 259 * the per-socket spinlock held and requires low latency
256 * access. Therefore we special case it's implementation. 260 * access. Therefore we special case it's implementation.
261 * Note : rmem_alloc is in this structure to fill a hole
262 * on 64bit arches, not because its logically part of
263 * backlog.
257 */ 264 */
258 struct { 265 struct {
259 struct sk_buff *head; 266 atomic_t rmem_alloc;
260 struct sk_buff *tail; 267 int len;
261 int len; 268 struct sk_buff *head;
269 struct sk_buff *tail;
262 } sk_backlog; 270 } sk_backlog;
271#define sk_rmem_alloc sk_backlog.rmem_alloc
272 int sk_forward_alloc;
273#ifdef CONFIG_RPS
274 __u32 sk_rxhash;
275#endif
276 atomic_t sk_drops;
277 int sk_rcvbuf;
278
279 struct sk_filter __rcu *sk_filter;
263 struct socket_wq *sk_wq; 280 struct socket_wq *sk_wq;
264 struct dst_entry *sk_dst_cache; 281
282#ifdef CONFIG_NET_DMA
283 struct sk_buff_head sk_async_wait_queue;
284#endif
285
265#ifdef CONFIG_XFRM 286#ifdef CONFIG_XFRM
266 struct xfrm_policy *sk_policy[2]; 287 struct xfrm_policy *sk_policy[2];
267#endif 288#endif
289 unsigned long sk_flags;
290 struct dst_entry *sk_dst_cache;
268 spinlock_t sk_dst_lock; 291 spinlock_t sk_dst_lock;
269 atomic_t sk_rmem_alloc;
270 atomic_t sk_wmem_alloc; 292 atomic_t sk_wmem_alloc;
271 atomic_t sk_omem_alloc; 293 atomic_t sk_omem_alloc;
272 int sk_sndbuf; 294 int sk_sndbuf;
273 struct sk_buff_head sk_receive_queue;
274 struct sk_buff_head sk_write_queue; 295 struct sk_buff_head sk_write_queue;
275#ifdef CONFIG_NET_DMA 296 kmemcheck_bitfield_begin(flags);
276 struct sk_buff_head sk_async_wait_queue; 297 unsigned int sk_shutdown : 2,
277#endif 298 sk_no_check : 2,
299 sk_userlocks : 4,
300 sk_protocol : 8,
301 sk_type : 16;
302 kmemcheck_bitfield_end(flags);
278 int sk_wmem_queued; 303 int sk_wmem_queued;
279 int sk_forward_alloc;
280 gfp_t sk_allocation; 304 gfp_t sk_allocation;
281 int sk_route_caps; 305 int sk_route_caps;
282 int sk_route_nocaps; 306 int sk_route_nocaps;
283 int sk_gso_type; 307 int sk_gso_type;
284 unsigned int sk_gso_max_size; 308 unsigned int sk_gso_max_size;
285 int sk_rcvlowat; 309 int sk_rcvlowat;
286#ifdef CONFIG_RPS
287 __u32 sk_rxhash;
288#endif
289 unsigned long sk_flags;
290 unsigned long sk_lingertime; 310 unsigned long sk_lingertime;
291 struct sk_buff_head sk_error_queue; 311 struct sk_buff_head sk_error_queue;
292 struct proto *sk_prot_creator; 312 struct proto *sk_prot_creator;
293 rwlock_t sk_callback_lock; 313 rwlock_t sk_callback_lock;
294 int sk_err, 314 int sk_err,
295 sk_err_soft; 315 sk_err_soft;
296 atomic_t sk_drops;
297 unsigned short sk_ack_backlog; 316 unsigned short sk_ack_backlog;
298 unsigned short sk_max_ack_backlog; 317 unsigned short sk_max_ack_backlog;
299 __u32 sk_priority; 318 __u32 sk_priority;
@@ -301,7 +320,6 @@ struct sock {
301 const struct cred *sk_peer_cred; 320 const struct cred *sk_peer_cred;
302 long sk_rcvtimeo; 321 long sk_rcvtimeo;
303 long sk_sndtimeo; 322 long sk_sndtimeo;
304 struct sk_filter __rcu *sk_filter;
305 void *sk_protinfo; 323 void *sk_protinfo;
306 struct timer_list sk_timer; 324 struct timer_list sk_timer;
307 ktime_t sk_stamp; 325 ktime_t sk_stamp;
@@ -509,9 +527,6 @@ static __inline__ void sk_add_bind_node(struct sock *sk,
509#define sk_nulls_for_each_from(__sk, node) \ 527#define sk_nulls_for_each_from(__sk, node) \
510 if (__sk && ({ node = &(__sk)->sk_nulls_node; 1; })) \ 528 if (__sk && ({ node = &(__sk)->sk_nulls_node; 1; })) \
511 hlist_nulls_for_each_entry_from(__sk, node, sk_nulls_node) 529 hlist_nulls_for_each_entry_from(__sk, node, sk_nulls_node)
512#define sk_for_each_continue(__sk, node) \
513 if (__sk && ({ node = &(__sk)->sk_node; 1; })) \
514 hlist_for_each_entry_continue(__sk, node, sk_node)
515#define sk_for_each_safe(__sk, node, tmp, list) \ 530#define sk_for_each_safe(__sk, node, tmp, list) \
516 hlist_for_each_entry_safe(__sk, node, tmp, list, sk_node) 531 hlist_for_each_entry_safe(__sk, node, tmp, list, sk_node)
517#define sk_for_each_bound(__sk, node, list) \ 532#define sk_for_each_bound(__sk, node, list) \
diff --git a/include/net/tcp.h b/include/net/tcp.h
index e36c874c7fb1..38509f047382 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -60,6 +60,9 @@ extern void tcp_time_wait(struct sock *sk, int state, int timeo);
60 */ 60 */
61#define MAX_TCP_WINDOW 32767U 61#define MAX_TCP_WINDOW 32767U
62 62
63/* Offer an initial receive window of 10 mss. */
64#define TCP_DEFAULT_INIT_RCVWND 10
65
63/* Minimal accepted MSS. It is (60+60+8) - (20+20). */ 66/* Minimal accepted MSS. It is (60+60+8) - (20+20). */
64#define TCP_MIN_MSS 88U 67#define TCP_MIN_MSS 88U
65 68
@@ -100,12 +103,6 @@ extern void tcp_time_wait(struct sock *sk, int state, int timeo);
100#define TCP_SYNACK_RETRIES 5 /* number of times to retry passive opening a 103#define TCP_SYNACK_RETRIES 5 /* number of times to retry passive opening a
101 * connection: ~180sec is RFC minimum */ 104 * connection: ~180sec is RFC minimum */
102 105
103
104#define TCP_ORPHAN_RETRIES 7 /* number of times to retry on an orphaned
105 * socket. 7 is ~50sec-16min.
106 */
107
108
109#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT 106#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
110 * state, about 60 seconds */ 107 * state, about 60 seconds */
111#define TCP_FIN_TIMEOUT TCP_TIMEWAIT_LEN 108#define TCP_FIN_TIMEOUT TCP_TIMEWAIT_LEN
@@ -312,7 +309,8 @@ extern void tcp_shutdown (struct sock *sk, int how);
312 309
313extern int tcp_v4_rcv(struct sk_buff *skb); 310extern int tcp_v4_rcv(struct sk_buff *skb);
314 311
315extern int tcp_v4_remember_stamp(struct sock *sk); 312extern struct inet_peer *tcp_v4_get_peer(struct sock *sk, bool *release_it);
313extern void *tcp_v4_tw_get_peer(struct sock *sk);
316extern int tcp_v4_tw_remember_stamp(struct inet_timewait_sock *tw); 314extern int tcp_v4_tw_remember_stamp(struct inet_timewait_sock *tw);
317extern int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, 315extern int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
318 size_t size); 316 size_t size);
@@ -1043,7 +1041,13 @@ static inline int tcp_paws_check(const struct tcp_options_received *rx_opt,
1043 return 1; 1041 return 1;
1044 if (unlikely(get_seconds() >= rx_opt->ts_recent_stamp + TCP_PAWS_24DAYS)) 1042 if (unlikely(get_seconds() >= rx_opt->ts_recent_stamp + TCP_PAWS_24DAYS))
1045 return 1; 1043 return 1;
1046 1044 /*
1045 * Some OSes send SYN and SYNACK messages with tsval=0 tsecr=0,
1046 * then following tcp messages have valid values. Ignore 0 value,
1047 * or else 'negative' tsval might forbid us to accept their packets.
1048 */
1049 if (!rx_opt->ts_recent)
1050 return 1;
1047 return 0; 1051 return 0;
1048} 1052}
1049 1053
@@ -1157,8 +1161,6 @@ struct tcp_md5sig_pool {
1157 union tcp_md5sum_block md5_blk; 1161 union tcp_md5sum_block md5_blk;
1158}; 1162};
1159 1163
1160#define TCP_MD5SIG_MAXKEYS (~(u32)0) /* really?! */
1161
1162/* - functions */ 1164/* - functions */
1163extern int tcp_v4_md5_hash_skb(char *md5_hash, struct tcp_md5sig_key *key, 1165extern int tcp_v4_md5_hash_skb(char *md5_hash, struct tcp_md5sig_key *key,
1164 struct sock *sk, struct request_sock *req, 1166 struct sock *sk, struct request_sock *req,
diff --git a/include/net/timewait_sock.h b/include/net/timewait_sock.h
index 97c3b14da55d..053b3cf2c66a 100644
--- a/include/net/timewait_sock.h
+++ b/include/net/timewait_sock.h
@@ -21,6 +21,7 @@ struct timewait_sock_ops {
21 int (*twsk_unique)(struct sock *sk, 21 int (*twsk_unique)(struct sock *sk,
22 struct sock *sktw, void *twp); 22 struct sock *sktw, void *twp);
23 void (*twsk_destructor)(struct sock *sk); 23 void (*twsk_destructor)(struct sock *sk);
24 void *(*twsk_getpeer)(struct sock *sk);
24}; 25};
25 26
26static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp) 27static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp)
@@ -39,4 +40,11 @@ static inline void twsk_destructor(struct sock *sk)
39 sk->sk_prot->twsk_prot->twsk_destructor(sk); 40 sk->sk_prot->twsk_prot->twsk_destructor(sk);
40} 41}
41 42
43static inline void *twsk_getpeer(struct sock *sk)
44{
45 if (sk->sk_prot->twsk_prot->twsk_getpeer)
46 return sk->sk_prot->twsk_prot->twsk_getpeer(sk);
47 return NULL;
48}
49
42#endif /* _TIMEWAIT_SOCK_H */ 50#endif /* _TIMEWAIT_SOCK_H */
diff --git a/include/net/tipc/tipc.h b/include/net/tipc/tipc.h
deleted file mode 100644
index 1e0645e1eed2..000000000000
--- a/include/net/tipc/tipc.h
+++ /dev/null
@@ -1,186 +0,0 @@
1/*
2 * include/net/tipc/tipc.h: Main include file for TIPC users
3 *
4 * Copyright (c) 2003-2006, Ericsson AB
5 * Copyright (c) 2005,2010 Wind River Systems
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions are met:
10 *
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. Neither the names of the copyright holders nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * Alternatively, this software may be distributed under the terms of the
21 * GNU General Public License ("GPL") version 2 as published by the Free
22 * Software Foundation.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 */
36
37#ifndef _NET_TIPC_H_
38#define _NET_TIPC_H_
39
40#ifdef __KERNEL__
41
42#include <linux/tipc.h>
43#include <linux/skbuff.h>
44
45/*
46 * Native API
47 */
48
49/*
50 * TIPC operating mode routines
51 */
52
53#define TIPC_NOT_RUNNING 0
54#define TIPC_NODE_MODE 1
55#define TIPC_NET_MODE 2
56
57typedef void (*tipc_mode_event)(void *usr_handle, int mode, u32 addr);
58
59int tipc_attach(unsigned int *userref, tipc_mode_event, void *usr_handle);
60
61void tipc_detach(unsigned int userref);
62
63/*
64 * TIPC port manipulation routines
65 */
66
67typedef void (*tipc_msg_err_event) (void *usr_handle,
68 u32 portref,
69 struct sk_buff **buf,
70 unsigned char const *data,
71 unsigned int size,
72 int reason,
73 struct tipc_portid const *attmpt_destid);
74
75typedef void (*tipc_named_msg_err_event) (void *usr_handle,
76 u32 portref,
77 struct sk_buff **buf,
78 unsigned char const *data,
79 unsigned int size,
80 int reason,
81 struct tipc_name_seq const *attmpt_dest);
82
83typedef void (*tipc_conn_shutdown_event) (void *usr_handle,
84 u32 portref,
85 struct sk_buff **buf,
86 unsigned char const *data,
87 unsigned int size,
88 int reason);
89
90typedef void (*tipc_msg_event) (void *usr_handle,
91 u32 portref,
92 struct sk_buff **buf,
93 unsigned char const *data,
94 unsigned int size,
95 unsigned int importance,
96 struct tipc_portid const *origin);
97
98typedef void (*tipc_named_msg_event) (void *usr_handle,
99 u32 portref,
100 struct sk_buff **buf,
101 unsigned char const *data,
102 unsigned int size,
103 unsigned int importance,
104 struct tipc_portid const *orig,
105 struct tipc_name_seq const *dest);
106
107typedef void (*tipc_conn_msg_event) (void *usr_handle,
108 u32 portref,
109 struct sk_buff **buf,
110 unsigned char const *data,
111 unsigned int size);
112
113typedef void (*tipc_continue_event) (void *usr_handle,
114 u32 portref);
115
116int tipc_createport(unsigned int tipc_user,
117 void *usr_handle,
118 unsigned int importance,
119 tipc_msg_err_event error_cb,
120 tipc_named_msg_err_event named_error_cb,
121 tipc_conn_shutdown_event conn_error_cb,
122 tipc_msg_event message_cb,
123 tipc_named_msg_event named_message_cb,
124 tipc_conn_msg_event conn_message_cb,
125 tipc_continue_event continue_event_cb,
126 u32 *portref);
127
128int tipc_deleteport(u32 portref);
129
130int tipc_ownidentity(u32 portref, struct tipc_portid *port);
131
132int tipc_portimportance(u32 portref, unsigned int *importance);
133int tipc_set_portimportance(u32 portref, unsigned int importance);
134
135int tipc_portunreliable(u32 portref, unsigned int *isunreliable);
136int tipc_set_portunreliable(u32 portref, unsigned int isunreliable);
137
138int tipc_portunreturnable(u32 portref, unsigned int *isunreturnable);
139int tipc_set_portunreturnable(u32 portref, unsigned int isunreturnable);
140
141int tipc_publish(u32 portref, unsigned int scope,
142 struct tipc_name_seq const *name_seq);
143int tipc_withdraw(u32 portref, unsigned int scope,
144 struct tipc_name_seq const *name_seq);
145
146int tipc_connect2port(u32 portref, struct tipc_portid const *port);
147
148int tipc_disconnect(u32 portref);
149
150int tipc_shutdown(u32 ref);
151
152/*
153 * TIPC messaging routines
154 */
155
156#define TIPC_PORT_IMPORTANCE 100 /* send using current port setting */
157
158
159int tipc_send(u32 portref,
160 unsigned int num_sect,
161 struct iovec const *msg_sect);
162
163int tipc_send2name(u32 portref,
164 struct tipc_name const *name,
165 u32 domain,
166 unsigned int num_sect,
167 struct iovec const *msg_sect);
168
169int tipc_send2port(u32 portref,
170 struct tipc_portid const *dest,
171 unsigned int num_sect,
172 struct iovec const *msg_sect);
173
174int tipc_send_buf2port(u32 portref,
175 struct tipc_portid const *dest,
176 struct sk_buff *buf,
177 unsigned int dsz);
178
179int tipc_multicast(u32 portref,
180 struct tipc_name_seq const *seq,
181 u32 domain, /* currently unused */
182 unsigned int section_count,
183 struct iovec const *msg);
184#endif
185
186#endif
diff --git a/include/net/tipc/tipc_bearer.h b/include/net/tipc/tipc_bearer.h
deleted file mode 100644
index ee2f304e4919..000000000000
--- a/include/net/tipc/tipc_bearer.h
+++ /dev/null
@@ -1,138 +0,0 @@
1/*
2 * include/net/tipc/tipc_bearer.h: Include file for privileged access to TIPC bearers
3 *
4 * Copyright (c) 2003-2006, Ericsson AB
5 * Copyright (c) 2005, Wind River Systems
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions are met:
10 *
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. Neither the names of the copyright holders nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * Alternatively, this software may be distributed under the terms of the
21 * GNU General Public License ("GPL") version 2 as published by the Free
22 * Software Foundation.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 */
36
37#ifndef _NET_TIPC_BEARER_H_
38#define _NET_TIPC_BEARER_H_
39
40#ifdef __KERNEL__
41
42#include <linux/tipc_config.h>
43#include <linux/skbuff.h>
44#include <linux/spinlock.h>
45
46/*
47 * Identifiers of supported TIPC media types
48 */
49
50#define TIPC_MEDIA_TYPE_ETH 1
51
52/*
53 * Destination address structure used by TIPC bearers when sending messages
54 *
55 * IMPORTANT: The fields of this structure MUST be stored using the specified
56 * byte order indicated below, as the structure is exchanged between nodes
57 * as part of a link setup process.
58 */
59
60struct tipc_media_addr {
61 __be32 type; /* bearer type (network byte order) */
62 union {
63 __u8 eth_addr[6]; /* 48 bit Ethernet addr (byte array) */
64#if 0
65 /* Prototypes for other possible bearer types */
66
67 struct {
68 __u16 sin_family;
69 __u16 sin_port;
70 struct {
71 __u32 s_addr;
72 } sin_addr;
73 char pad[4];
74 } addr_in; /* IP-based bearer */
75 __u16 sock_descr; /* generic socket bearer */
76#endif
77 } dev_addr;
78};
79
80/**
81 * struct tipc_bearer - TIPC bearer info available to privileged users
82 * @usr_handle: pointer to additional user-defined information about bearer
83 * @mtu: max packet size bearer can support
84 * @blocked: non-zero if bearer is blocked
85 * @lock: spinlock for controlling access to bearer
86 * @addr: media-specific address associated with bearer
87 * @name: bearer name (format = media:interface)
88 *
89 * Note: TIPC initializes "name" and "lock" fields; user is responsible for
90 * initialization all other fields when a bearer is enabled.
91 */
92
93struct tipc_bearer {
94 void *usr_handle;
95 u32 mtu;
96 int blocked;
97 spinlock_t lock;
98 struct tipc_media_addr addr;
99 char name[TIPC_MAX_BEARER_NAME];
100};
101
102/*
103 * TIPC routines available to supported media types
104 */
105
106int tipc_register_media(u32 media_type,
107 char *media_name,
108 int (*enable)(struct tipc_bearer *),
109 void (*disable)(struct tipc_bearer *),
110 int (*send_msg)(struct sk_buff *,
111 struct tipc_bearer *,
112 struct tipc_media_addr *),
113 char *(*addr2str)(struct tipc_media_addr *a,
114 char *str_buf,
115 int str_size),
116 struct tipc_media_addr *bcast_addr,
117 const u32 bearer_priority,
118 const u32 link_tolerance, /* [ms] */
119 const u32 send_window_limit);
120
121void tipc_recv_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr);
122
123int tipc_block_bearer(const char *name);
124void tipc_continue(struct tipc_bearer *tb_ptr);
125
126int tipc_enable_bearer(const char *bearer_name, u32 bcast_scope, u32 priority);
127int tipc_disable_bearer(const char *name);
128
129/*
130 * Routines made available to TIPC by supported media types
131 */
132
133int tipc_eth_media_start(void);
134void tipc_eth_media_stop(void);
135
136#endif
137
138#endif
diff --git a/include/net/tipc/tipc_msg.h b/include/net/tipc/tipc_msg.h
deleted file mode 100644
index ffe50b4e7b93..000000000000
--- a/include/net/tipc/tipc_msg.h
+++ /dev/null
@@ -1,207 +0,0 @@
1/*
2 * include/net/tipc/tipc_msg.h: Include file for privileged access to TIPC message headers
3 *
4 * Copyright (c) 2003-2006, Ericsson AB
5 * Copyright (c) 2005, Wind River Systems
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions are met:
10 *
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. Neither the names of the copyright holders nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * Alternatively, this software may be distributed under the terms of the
21 * GNU General Public License ("GPL") version 2 as published by the Free
22 * Software Foundation.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 */
36
37#ifndef _NET_TIPC_MSG_H_
38#define _NET_TIPC_MSG_H_
39
40#ifdef __KERNEL__
41
42struct tipc_msg {
43 __be32 hdr[15];
44};
45
46
47/*
48 TIPC user data message header format, version 2:
49
50
51 1 0 9 8 7 6 5 4|3 2 1 0 9 8 7 6|5 4 3 2 1 0 9 8|7 6 5 4 3 2 1 0
52 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
53 w0:|vers | user |hdr sz |n|d|s|-| message size |
54 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
55 w1:|mstyp| error |rer cnt|lsc|opt p| broadcast ack no |
56 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
57 w2:| link level ack no | broadcast/link level seq no |
58 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
59 w3:| previous node |
60 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
61 w4:| originating port |
62 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
63 w5:| destination port |
64 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
65 w6:| originating node |
66 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
67 w7:| destination node |
68 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
69 w8:| name type / transport sequence number |
70 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
71 w9:| name instance/multicast lower bound |
72 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
73 wA:| multicast upper bound |
74 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
75 / /
76 \ options \
77 / /
78 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
79
80*/
81
82#define TIPC_CONN_MSG 0
83#define TIPC_MCAST_MSG 1
84#define TIPC_NAMED_MSG 2
85#define TIPC_DIRECT_MSG 3
86
87
88static inline u32 msg_word(struct tipc_msg *m, u32 pos)
89{
90 return ntohl(m->hdr[pos]);
91}
92
93static inline u32 msg_bits(struct tipc_msg *m, u32 w, u32 pos, u32 mask)
94{
95 return (msg_word(m, w) >> pos) & mask;
96}
97
98static inline u32 msg_importance(struct tipc_msg *m)
99{
100 return msg_bits(m, 0, 25, 0xf);
101}
102
103static inline u32 msg_hdr_sz(struct tipc_msg *m)
104{
105 return msg_bits(m, 0, 21, 0xf) << 2;
106}
107
108static inline int msg_short(struct tipc_msg *m)
109{
110 return msg_hdr_sz(m) == 24;
111}
112
113static inline u32 msg_size(struct tipc_msg *m)
114{
115 return msg_bits(m, 0, 0, 0x1ffff);
116}
117
118static inline u32 msg_data_sz(struct tipc_msg *m)
119{
120 return msg_size(m) - msg_hdr_sz(m);
121}
122
123static inline unchar *msg_data(struct tipc_msg *m)
124{
125 return ((unchar *)m) + msg_hdr_sz(m);
126}
127
128static inline u32 msg_type(struct tipc_msg *m)
129{
130 return msg_bits(m, 1, 29, 0x7);
131}
132
133static inline u32 msg_named(struct tipc_msg *m)
134{
135 return msg_type(m) == TIPC_NAMED_MSG;
136}
137
138static inline u32 msg_mcast(struct tipc_msg *m)
139{
140 return msg_type(m) == TIPC_MCAST_MSG;
141}
142
143static inline u32 msg_connected(struct tipc_msg *m)
144{
145 return msg_type(m) == TIPC_CONN_MSG;
146}
147
148static inline u32 msg_errcode(struct tipc_msg *m)
149{
150 return msg_bits(m, 1, 25, 0xf);
151}
152
153static inline u32 msg_prevnode(struct tipc_msg *m)
154{
155 return msg_word(m, 3);
156}
157
158static inline u32 msg_origport(struct tipc_msg *m)
159{
160 return msg_word(m, 4);
161}
162
163static inline u32 msg_destport(struct tipc_msg *m)
164{
165 return msg_word(m, 5);
166}
167
168static inline u32 msg_mc_netid(struct tipc_msg *m)
169{
170 return msg_word(m, 5);
171}
172
173static inline u32 msg_orignode(struct tipc_msg *m)
174{
175 if (likely(msg_short(m)))
176 return msg_prevnode(m);
177 return msg_word(m, 6);
178}
179
180static inline u32 msg_destnode(struct tipc_msg *m)
181{
182 return msg_word(m, 7);
183}
184
185static inline u32 msg_nametype(struct tipc_msg *m)
186{
187 return msg_word(m, 8);
188}
189
190static inline u32 msg_nameinst(struct tipc_msg *m)
191{
192 return msg_word(m, 9);
193}
194
195static inline u32 msg_namelower(struct tipc_msg *m)
196{
197 return msg_nameinst(m);
198}
199
200static inline u32 msg_nameupper(struct tipc_msg *m)
201{
202 return msg_word(m, 10);
203}
204
205#endif
206
207#endif
diff --git a/include/net/tipc/tipc_port.h b/include/net/tipc/tipc_port.h
deleted file mode 100644
index 1893aaf49426..000000000000
--- a/include/net/tipc/tipc_port.h
+++ /dev/null
@@ -1,101 +0,0 @@
1/*
2 * include/net/tipc/tipc_port.h: Include file for privileged access to TIPC ports
3 *
4 * Copyright (c) 1994-2007, Ericsson AB
5 * Copyright (c) 2005-2008, Wind River Systems
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions are met:
10 *
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. Neither the names of the copyright holders nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * Alternatively, this software may be distributed under the terms of the
21 * GNU General Public License ("GPL") version 2 as published by the Free
22 * Software Foundation.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 */
36
37#ifndef _NET_TIPC_PORT_H_
38#define _NET_TIPC_PORT_H_
39
40#ifdef __KERNEL__
41
42#include <linux/tipc.h>
43#include <linux/skbuff.h>
44#include <net/tipc/tipc_msg.h>
45
46#define TIPC_FLOW_CONTROL_WIN 512
47
48/**
49 * struct tipc_port - native TIPC port info available to privileged users
50 * @usr_handle: pointer to additional user-defined information about port
51 * @lock: pointer to spinlock for controlling access to port
52 * @connected: non-zero if port is currently connected to a peer port
53 * @conn_type: TIPC type used when connection was established
54 * @conn_instance: TIPC instance used when connection was established
55 * @conn_unacked: number of unacknowledged messages received from peer port
56 * @published: non-zero if port has one or more associated names
57 * @congested: non-zero if cannot send because of link or port congestion
58 * @max_pkt: maximum packet size "hint" used when building messages sent by port
59 * @ref: unique reference to port in TIPC object registry
60 * @phdr: preformatted message header used when sending messages
61 */
62
63struct tipc_port {
64 void *usr_handle;
65 spinlock_t *lock;
66 int connected;
67 u32 conn_type;
68 u32 conn_instance;
69 u32 conn_unacked;
70 int published;
71 u32 congested;
72 u32 max_pkt;
73 u32 ref;
74 struct tipc_msg phdr;
75};
76
77
78struct tipc_port *tipc_createport_raw(void *usr_handle,
79 u32 (*dispatcher)(struct tipc_port *, struct sk_buff *),
80 void (*wakeup)(struct tipc_port *),
81 const u32 importance);
82
83int tipc_reject_msg(struct sk_buff *buf, u32 err);
84
85int tipc_send_buf_fast(struct sk_buff *buf, u32 destnode);
86
87void tipc_acknowledge(u32 port_ref,u32 ack);
88
89struct tipc_port *tipc_get_port(const u32 ref);
90
91/*
92 * The following routines require that the port be locked on entry
93 */
94
95int tipc_disconnect_port(struct tipc_port *tp_ptr);
96
97
98#endif
99
100#endif
101
diff --git a/include/net/x25.h b/include/net/x25.h
index 1479cb4a41fc..a06119a05129 100644
--- a/include/net/x25.h
+++ b/include/net/x25.h
@@ -315,6 +315,8 @@ extern struct list_head x25_route_list;
315extern rwlock_t x25_route_list_lock; 315extern rwlock_t x25_route_list_lock;
316extern struct list_head x25_forward_list; 316extern struct list_head x25_forward_list;
317extern rwlock_t x25_forward_list_lock; 317extern rwlock_t x25_forward_list_lock;
318extern struct list_head x25_neigh_list;
319extern rwlock_t x25_neigh_list_lock;
318 320
319extern int x25_proc_init(void); 321extern int x25_proc_init(void);
320extern void x25_proc_exit(void); 322extern void x25_proc_exit(void);
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index bcfb6b24b019..b9f385da758e 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -143,6 +143,7 @@ struct xfrm_state {
143 struct xfrm_id id; 143 struct xfrm_id id;
144 struct xfrm_selector sel; 144 struct xfrm_selector sel;
145 struct xfrm_mark mark; 145 struct xfrm_mark mark;
146 u32 tfcpad;
146 147
147 u32 genid; 148 u32 genid;
148 149
@@ -805,6 +806,9 @@ __be16 xfrm_flowi_sport(struct flowi *fl)
805 case IPPROTO_MH: 806 case IPPROTO_MH:
806 port = htons(fl->fl_mh_type); 807 port = htons(fl->fl_mh_type);
807 break; 808 break;
809 case IPPROTO_GRE:
810 port = htons(ntohl(fl->fl_gre_key) >> 16);
811 break;
808 default: 812 default:
809 port = 0; /*XXX*/ 813 port = 0; /*XXX*/
810 } 814 }
@@ -826,6 +830,9 @@ __be16 xfrm_flowi_dport(struct flowi *fl)
826 case IPPROTO_ICMPV6: 830 case IPPROTO_ICMPV6:
827 port = htons(fl->fl_icmp_code); 831 port = htons(fl->fl_icmp_code);
828 break; 832 break;
833 case IPPROTO_GRE:
834 port = htons(ntohl(fl->fl_gre_key) & 0xffff);
835 break;
829 default: 836 default:
830 port = 0; /*XXX*/ 837 port = 0; /*XXX*/
831 } 838 }