diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-23 11:47:02 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-23 11:47:02 -0700 | 
| commit | 5f05647dd81c11a6a165ccc8f0c1370b16f3bcb0 (patch) | |
| tree | 7851ef1c93aa1aba7ef327ca4b75fd35e6d10f29 /include/linux | |
| parent | 02f36038c568111ad4fc433f6fa760ff5e38fab4 (diff) | |
| parent | ec37a48d1d16c30b655ac5280209edf52a6775d4 (diff) | |
| download | olio-linux-3.10-5f05647dd81c11a6a165ccc8f0c1370b16f3bcb0.tar.xz olio-linux-3.10-5f05647dd81c11a6a165ccc8f0c1370b16f3bcb0.zip  | |
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: (1699 commits)
  bnx2/bnx2x: Unsupported Ethtool operations should return -EINVAL.
  vlan: Calling vlan_hwaccel_do_receive() is always valid.
  tproxy: use the interface primary IP address as a default value for --on-ip
  tproxy: added IPv6 support to the socket match
  cxgb3: function namespace cleanup
  tproxy: added IPv6 support to the TPROXY target
  tproxy: added IPv6 socket lookup function to nf_tproxy_core
  be2net: Changes to use only priority codes allowed by f/w
  tproxy: allow non-local binds of IPv6 sockets if IP_TRANSPARENT is enabled
  tproxy: added tproxy sockopt interface in the IPV6 layer
  tproxy: added udp6_lib_lookup function
  tproxy: added const specifiers to udp lookup functions
  tproxy: split off ipv6 defragmentation to a separate module
  l2tp: small cleanup
  nf_nat: restrict ICMP translation for embedded header
  can: mcp251x: fix generation of error frames
  can: mcp251x: fix endless loop in interrupt handler if CANINTF_MERRF is set
  can-raw: add msg_flags to distinguish local traffic
  9p: client code cleanup
  rds: make local functions/variables static
  ...
Fix up conflicts in net/core/dev.c, drivers/net/pcmcia/smc91c92_cs.c and
drivers/net/wireless/ath/ath9k/debug.c as per David
Diffstat (limited to 'include/linux')
51 files changed, 1019 insertions, 472 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 4e8ea8c8ec1..831c4634162 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild @@ -301,6 +301,7 @@ header-y += quota.h  header-y += radeonfb.h  header-y += random.h  header-y += raw.h +header-y += rds.h  header-y += reboot.h  header-y += reiserfs_fs.h  header-y += reiserfs_xattr.h diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h index f6481daf6e5..a8e4e832cdb 100644 --- a/include/linux/atmdev.h +++ b/include/linux/atmdev.h @@ -449,7 +449,7 @@ void vcc_insert_socket(struct sock *sk);  static inline int atm_guess_pdu2truesize(int size)  { -	return (SKB_DATA_ALIGN(size) + sizeof(struct skb_shared_info)); +	return SKB_DATA_ALIGN(size) + sizeof(struct skb_shared_info);  } diff --git a/include/linux/can/platform/mcp251x.h b/include/linux/can/platform/mcp251x.h index dba28268e65..8e20540043f 100644 --- a/include/linux/can/platform/mcp251x.h +++ b/include/linux/can/platform/mcp251x.h @@ -12,7 +12,6 @@  /**   * struct mcp251x_platform_data - MCP251X SPI CAN controller platform data   * @oscillator_frequency:       - oscillator frequency in Hz - * @model:                      - actual type of chip   * @board_specific_setup:       - called before probing the chip (power,reset)   * @transceiver_enable:         - called to power on/off the transceiver   * @power_enable:               - called to power on/off the mcp *and* the @@ -25,9 +24,6 @@  struct mcp251x_platform_data {  	unsigned long oscillator_frequency; -	int model; -#define CAN_MCP251X_MCP2510 0x2510 -#define CAN_MCP251X_MCP2515 0x2515  	int (*board_specific_setup)(struct spi_device *spi);  	int (*transceiver_enable)(int enable);  	int (*power_enable) (int enable); diff --git a/include/linux/dccp.h b/include/linux/dccp.h index 7434a8353e2..7187bd8a75f 100644 --- a/include/linux/dccp.h +++ b/include/linux/dccp.h @@ -165,8 +165,10 @@ enum {  	DCCPO_TIMESTAMP_ECHO = 42,  	DCCPO_ELAPSED_TIME = 43,  	DCCPO_MAX = 45, -	DCCPO_MIN_CCID_SPECIFIC = 128, -	DCCPO_MAX_CCID_SPECIFIC = 255, +	DCCPO_MIN_RX_CCID_SPECIFIC = 128,	/* from sender to receiver */ +	DCCPO_MAX_RX_CCID_SPECIFIC = 191, +	DCCPO_MIN_TX_CCID_SPECIFIC = 192,	/* from receiver to sender */ +	DCCPO_MAX_TX_CCID_SPECIFIC = 255,  };  /* maximum size of a single TLV-encoded DCCP option (sans type/len bytes) */  #define DCCP_SINGLE_OPT_MAXLEN	253 diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index 2308fbb4523..f16a01081e1 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h @@ -71,7 +71,7 @@ static inline int is_zero_ether_addr(const u8 *addr)   */  static inline int is_multicast_ether_addr(const u8 *addr)  { -	return (0x01 & addr[0]); +	return 0x01 & addr[0];  }  /** @@ -82,7 +82,7 @@ static inline int is_multicast_ether_addr(const u8 *addr)   */  static inline int is_local_ether_addr(const u8 *addr)  { -	return (0x02 & addr[0]); +	return 0x02 & addr[0];  }  /** @@ -237,13 +237,29 @@ static inline bool is_etherdev_addr(const struct net_device *dev,   * entry points.   */ -static inline int compare_ether_header(const void *a, const void *b) +static inline unsigned long compare_ether_header(const void *a, const void *b)  { +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64 +	unsigned long fold; + +	/* +	 * We want to compare 14 bytes: +	 *  [a0 ... a13] ^ [b0 ... b13] +	 * Use two long XOR, ORed together, with an overlap of two bytes. +	 *  [a0  a1  a2  a3  a4  a5  a6  a7 ] ^ [b0  b1  b2  b3  b4  b5  b6  b7 ] | +	 *  [a6  a7  a8  a9  a10 a11 a12 a13] ^ [b6  b7  b8  b9  b10 b11 b12 b13] +	 * This means the [a6 a7] ^ [b6 b7] part is done two times. +	*/ +	fold = *(unsigned long *)a ^ *(unsigned long *)b; +	fold |= *(unsigned long *)(a + 6) ^ *(unsigned long *)(b + 6); +	return fold; +#else  	u32 *a32 = (u32 *)((u8 *)a + 2);  	u32 *b32 = (u32 *)((u8 *)b + 2);  	return (*(u16 *)a ^ *(u16 *)b) | (a32[0] ^ b32[0]) |  	       (a32[1] ^ b32[1]) | (a32[2] ^ b32[2]); +#endif  }  #endif	/* _LINUX_ETHERDEVICE_H */ diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 991269e5b15..6628a507fd3 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h @@ -14,6 +14,7 @@  #define _LINUX_ETHTOOL_H  #include <linux/types.h> +#include <linux/if_ether.h>  /* This should work for both 32 and 64 bit userland. */  struct ethtool_cmd { @@ -308,15 +309,28 @@ struct ethtool_perm_addr {   * flag differs from the read-only value.   */  enum ethtool_flags { +	ETH_FLAG_TXVLAN		= (1 << 7),	/* TX VLAN offload enabled */ +	ETH_FLAG_RXVLAN		= (1 << 8),	/* RX VLAN offload enabled */  	ETH_FLAG_LRO		= (1 << 15),	/* LRO is enabled */  	ETH_FLAG_NTUPLE		= (1 << 27),	/* N-tuple filters enabled */  	ETH_FLAG_RXHASH		= (1 << 28),  };  /* The following structures are for supporting RX network flow - * classification configuration. Note, all multibyte fields, e.g., - * ip4src, ip4dst, psrc, pdst, spi, etc. are expected to be in network - * byte order. + * classification and RX n-tuple configuration. Note, all multibyte + * fields, e.g., ip4src, ip4dst, psrc, pdst, spi, etc. are expected to + * be in network byte order. + */ + +/** + * struct ethtool_tcpip4_spec - flow specification for TCP/IPv4 etc. + * @ip4src: Source host + * @ip4dst: Destination host + * @psrc: Source port + * @pdst: Destination port + * @tos: Type-of-service + * + * This can be used to specify a TCP/IPv4, UDP/IPv4 or SCTP/IPv4 flow.   */  struct ethtool_tcpip4_spec {  	__be32	ip4src; @@ -326,6 +340,15 @@ struct ethtool_tcpip4_spec {  	__u8    tos;  }; +/** + * struct ethtool_ah_espip4_spec - flow specification for IPsec/IPv4 + * @ip4src: Source host + * @ip4dst: Destination host + * @spi: Security parameters index + * @tos: Type-of-service + * + * This can be used to specify an IPsec transport or tunnel over IPv4. + */  struct ethtool_ah_espip4_spec {  	__be32	ip4src;  	__be32	ip4dst; @@ -333,21 +356,17 @@ struct ethtool_ah_espip4_spec {  	__u8    tos;  }; -struct ethtool_rawip4_spec { -	__be32	ip4src; -	__be32	ip4dst; -	__u8	hdata[64]; -}; - -struct ethtool_ether_spec { -	__be16	ether_type; -	__u8	frame_size; -	__u8	eframe[16]; -}; -  #define	ETH_RX_NFC_IP4	1 -#define	ETH_RX_NFC_IP6	2 +/** + * struct ethtool_usrip4_spec - general flow specification for IPv4 + * @ip4src: Source host + * @ip4dst: Destination host + * @l4_4_bytes: First 4 bytes of transport (layer 4) header + * @tos: Type-of-service + * @ip_ver: Value must be %ETH_RX_NFC_IP4; mask must be 0 + * @proto: Transport protocol number; mask must be 0 + */  struct ethtool_usrip4_spec {  	__be32	ip4src;  	__be32	ip4dst; @@ -357,6 +376,15 @@ struct ethtool_usrip4_spec {  	__u8    proto;  }; +/** + * struct ethtool_rx_flow_spec - specification for RX flow filter + * @flow_type: Type of match to perform, e.g. %TCP_V4_FLOW + * @h_u: Flow fields to match (dependent on @flow_type) + * @m_u: Masks for flow field bits to be ignored + * @ring_cookie: RX ring/queue index to deliver to, or %RX_CLS_FLOW_DISC + *	if packets should be discarded + * @location: Index of filter in hardware table + */  struct ethtool_rx_flow_spec {  	__u32		flow_type;  	union { @@ -365,36 +393,91 @@ struct ethtool_rx_flow_spec {  		struct ethtool_tcpip4_spec		sctp_ip4_spec;  		struct ethtool_ah_espip4_spec		ah_ip4_spec;  		struct ethtool_ah_espip4_spec		esp_ip4_spec; -		struct ethtool_rawip4_spec		raw_ip4_spec; -		struct ethtool_ether_spec		ether_spec;  		struct ethtool_usrip4_spec		usr_ip4_spec; -		__u8					hdata[64]; -	} h_u, m_u; /* entry, mask */ +		struct ethhdr				ether_spec; +		__u8					hdata[72]; +	} h_u, m_u;  	__u64		ring_cookie;  	__u32		location;  }; +/** + * struct ethtool_rxnfc - command to get or set RX flow classification rules + * @cmd: Specific command number - %ETHTOOL_GRXFH, %ETHTOOL_SRXFH, + *	%ETHTOOL_GRXRINGS, %ETHTOOL_GRXCLSRLCNT, %ETHTOOL_GRXCLSRULE, + *	%ETHTOOL_GRXCLSRLALL, %ETHTOOL_SRXCLSRLDEL or %ETHTOOL_SRXCLSRLINS + * @flow_type: Type of flow to be affected, e.g. %TCP_V4_FLOW + * @data: Command-dependent value + * @fs: Flow filter specification + * @rule_cnt: Number of rules to be affected + * @rule_locs: Array of valid rule indices + * + * For %ETHTOOL_GRXFH and %ETHTOOL_SRXFH, @data is a bitmask indicating + * the fields included in the flow hash, e.g. %RXH_IP_SRC.  The following + * structure fields must not be used. + * + * For %ETHTOOL_GRXRINGS, @data is set to the number of RX rings/queues + * on return. + * + * For %ETHTOOL_GRXCLSRLCNT, @rule_cnt is set to the number of defined + * rules on return. + * + * For %ETHTOOL_GRXCLSRULE, @fs.@location specifies the index of an + * existing filter rule on entry and @fs contains the rule on return. + * + * For %ETHTOOL_GRXCLSRLALL, @rule_cnt specifies the array size of the + * user buffer for @rule_locs on entry.  On return, @data is the size + * of the filter table and @rule_locs contains the indices of the + * defined rules. + * + * For %ETHTOOL_SRXCLSRLINS, @fs specifies the filter rule to add or + * update.  @fs.@location specifies the index to use and must not be + * ignored. + * + * For %ETHTOOL_SRXCLSRLDEL, @fs.@location specifies the index of an + * existing filter rule on entry. + * + * Implementation of indexed classification rules generally requires a + * TCAM. + */  struct ethtool_rxnfc {  	__u32				cmd;  	__u32				flow_type; -	/* The rx flow hash value or the rule DB size */  	__u64				data; -	/* The following fields are not valid and must not be used for -	 * the ETHTOOL_{G,X}RXFH commands. */  	struct ethtool_rx_flow_spec	fs;  	__u32				rule_cnt;  	__u32				rule_locs[0];  }; +/** + * struct ethtool_rxfh_indir - command to get or set RX flow hash indirection + * @cmd: Specific command number - %ETHTOOL_GRXFHINDIR or %ETHTOOL_SRXFHINDIR + * @size: On entry, the array size of the user buffer.  On return from + *	%ETHTOOL_GRXFHINDIR, the array size of the hardware indirection table. + * @ring_index: RX ring/queue index for each hash value + */  struct ethtool_rxfh_indir {  	__u32	cmd; -	/* On entry, this is the array size of the user buffer.  On -	 * return from ETHTOOL_GRXFHINDIR, this is the array size of -	 * the hardware indirection table. */  	__u32	size; -	__u32	ring_index[0];	/* ring/queue index for each hash value */ +	__u32	ring_index[0];  }; +/** + * struct ethtool_rx_ntuple_flow_spec - specification for RX flow filter + * @flow_type: Type of match to perform, e.g. %TCP_V4_FLOW + * @h_u: Flow field values to match (dependent on @flow_type) + * @m_u: Masks for flow field value bits to be ignored + * @vlan_tag: VLAN tag to match + * @vlan_tag_mask: Mask for VLAN tag bits to be ignored + * @data: Driver-dependent data to match + * @data_mask: Mask for driver-dependent data bits to be ignored + * @action: RX ring/queue index to deliver to (non-negative) or other action + *	(negative, e.g. %ETHTOOL_RXNTUPLE_ACTION_DROP) + * + * For flow types %TCP_V4_FLOW, %UDP_V4_FLOW and %SCTP_V4_FLOW, where + * a field value and mask are both zero this is treated as if all mask + * bits are set i.e. the field is ignored. + */  struct ethtool_rx_ntuple_flow_spec {  	__u32		 flow_type;  	union { @@ -403,22 +486,26 @@ struct ethtool_rx_ntuple_flow_spec {  		struct ethtool_tcpip4_spec		sctp_ip4_spec;  		struct ethtool_ah_espip4_spec		ah_ip4_spec;  		struct ethtool_ah_espip4_spec		esp_ip4_spec; -		struct ethtool_rawip4_spec		raw_ip4_spec; -		struct ethtool_ether_spec		ether_spec;  		struct ethtool_usrip4_spec		usr_ip4_spec; -		__u8					hdata[64]; -	} h_u, m_u; /* entry, mask */ +		struct ethhdr				ether_spec; +		__u8					hdata[72]; +	} h_u, m_u;  	__u16	        vlan_tag;  	__u16	        vlan_tag_mask; -	__u64		data;      /* user-defined flow spec data */ -	__u64		data_mask; /* user-defined flow spec mask */ +	__u64		data; +	__u64		data_mask; -	/* signed to distinguish between queue and actions (DROP) */  	__s32		action; -#define ETHTOOL_RXNTUPLE_ACTION_DROP -1 +#define ETHTOOL_RXNTUPLE_ACTION_DROP	(-1)	/* drop packet */ +#define ETHTOOL_RXNTUPLE_ACTION_CLEAR	(-2)	/* clear filter */  }; +/** + * struct ethtool_rx_ntuple - command to set or clear RX flow filter + * @cmd: Command number - %ETHTOOL_SRXNTUPLE + * @fs: Flow filter specification + */  struct ethtool_rx_ntuple {  	__u32					cmd;  	struct ethtool_rx_ntuple_flow_spec	fs; @@ -759,22 +846,23 @@ struct ethtool_ops {  #define WAKE_MAGIC		(1 << 5)  #define WAKE_MAGICSECURE	(1 << 6) /* only meaningful if WAKE_MAGIC */ -/* L3-L4 network traffic flow types */ -#define	TCP_V4_FLOW	0x01 -#define	UDP_V4_FLOW	0x02 -#define	SCTP_V4_FLOW	0x03 -#define	AH_ESP_V4_FLOW	0x04 -#define	TCP_V6_FLOW	0x05 -#define	UDP_V6_FLOW	0x06 -#define	SCTP_V6_FLOW	0x07 -#define	AH_ESP_V6_FLOW	0x08 -#define	AH_V4_FLOW	0x09 -#define	ESP_V4_FLOW	0x0a -#define	AH_V6_FLOW	0x0b -#define	ESP_V6_FLOW	0x0c -#define	IP_USER_FLOW	0x0d -#define	IPV4_FLOW	0x10 -#define	IPV6_FLOW	0x11 +/* L2-L4 network traffic flow types */ +#define	TCP_V4_FLOW	0x01	/* hash or spec (tcp_ip4_spec) */ +#define	UDP_V4_FLOW	0x02	/* hash or spec (udp_ip4_spec) */ +#define	SCTP_V4_FLOW	0x03	/* hash or spec (sctp_ip4_spec) */ +#define	AH_ESP_V4_FLOW	0x04	/* hash only */ +#define	TCP_V6_FLOW	0x05	/* hash only */ +#define	UDP_V6_FLOW	0x06	/* hash only */ +#define	SCTP_V6_FLOW	0x07	/* hash only */ +#define	AH_ESP_V6_FLOW	0x08	/* hash only */ +#define	AH_V4_FLOW	0x09	/* hash or spec (ah_ip4_spec) */ +#define	ESP_V4_FLOW	0x0a	/* hash or spec (esp_ip4_spec) */ +#define	AH_V6_FLOW	0x0b	/* hash only */ +#define	ESP_V6_FLOW	0x0c	/* hash only */ +#define	IP_USER_FLOW	0x0d	/* spec only (usr_ip4_spec) */ +#define	IPV4_FLOW	0x10	/* hash only */ +#define	IPV6_FLOW	0x11	/* hash only */ +#define	ETHER_FLOW	0x12	/* spec only (ether_spec) */  /* L3-L4 network traffic flow hash options */  #define	RXH_L2DA	(1 << 1) diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index 97b2eae6a22..ed5a03cbe18 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h @@ -986,6 +986,7 @@ struct ieee80211_ht_info {  #define WLAN_AUTH_OPEN 0  #define WLAN_AUTH_SHARED_KEY 1  #define WLAN_AUTH_FT 2 +#define WLAN_AUTH_SAE 3  #define WLAN_AUTH_LEAP 128  #define WLAN_AUTH_CHALLENGE_LEN 128 @@ -1072,6 +1073,10 @@ enum ieee80211_statuscode {  	WLAN_STATUS_NO_DIRECT_LINK = 48,  	WLAN_STATUS_STA_NOT_PRESENT = 49,  	WLAN_STATUS_STA_NOT_QSTA = 50, +	/* 802.11s */ +	WLAN_STATUS_ANTI_CLOG_REQUIRED = 76, +	WLAN_STATUS_FCG_NOT_SUPP = 78, +	WLAN_STATUS_STA_NO_TBTT = 78,  }; @@ -1112,6 +1117,22 @@ enum ieee80211_reasoncode {  	WLAN_REASON_QSTA_REQUIRE_SETUP = 38,  	WLAN_REASON_QSTA_TIMEOUT = 39,  	WLAN_REASON_QSTA_CIPHER_NOT_SUPP = 45, +	/* 802.11s */ +	WLAN_REASON_MESH_PEER_CANCELED = 52, +	WLAN_REASON_MESH_MAX_PEERS = 53, +	WLAN_REASON_MESH_CONFIG = 54, +	WLAN_REASON_MESH_CLOSE = 55, +	WLAN_REASON_MESH_MAX_RETRIES = 56, +	WLAN_REASON_MESH_CONFIRM_TIMEOUT = 57, +	WLAN_REASON_MESH_INVALID_GTK = 58, +	WLAN_REASON_MESH_INCONSISTENT_PARAM = 59, +	WLAN_REASON_MESH_INVALID_SECURITY = 60, +	WLAN_REASON_MESH_PATH_ERROR = 61, +	WLAN_REASON_MESH_PATH_NOFORWARD = 62, +	WLAN_REASON_MESH_PATH_DEST_UNREACHABLE = 63, +	WLAN_REASON_MAC_EXISTS_IN_MBSS = 64, +	WLAN_REASON_MESH_CHAN_REGULATORY = 65, +	WLAN_REASON_MESH_CHAN = 66,  }; @@ -1139,20 +1160,33 @@ enum ieee80211_eid {  	WLAN_EID_TS_DELAY = 43,  	WLAN_EID_TCLAS_PROCESSING = 44,  	WLAN_EID_QOS_CAPA = 46, -	/* 802.11s -	 * -	 * All mesh EID numbers are pending IEEE 802.11 ANA approval. -	 * The numbers have been incremented from those suggested in -	 * 802.11s/D2.0 so that MESH_CONFIG does not conflict with -	 * EXT_SUPP_RATES. +	/* 802.11s */ +	WLAN_EID_MESH_CONFIG = 113, +	WLAN_EID_MESH_ID = 114, +	WLAN_EID_LINK_METRIC_REPORT = 115, +	WLAN_EID_CONGESTION_NOTIFICATION = 116, +	/* Note that the Peer Link IE has been replaced with the similar +	 * Peer Management IE.  We will keep the former definition until mesh +	 * code is changed to comply with latest 802.11s drafts.  	 */ -	WLAN_EID_MESH_CONFIG = 51, -	WLAN_EID_MESH_ID = 52, -	WLAN_EID_PEER_LINK = 55, -	WLAN_EID_PREQ = 68, -	WLAN_EID_PREP = 69, -	WLAN_EID_PERR = 70, -	WLAN_EID_RANN = 49,	/* compatible with FreeBSD */ +	WLAN_EID_PEER_LINK = 55,  /* no longer in 802.11s drafts */ +	WLAN_EID_PEER_MGMT = 117, +	WLAN_EID_CHAN_SWITCH_PARAM = 118, +	WLAN_EID_MESH_AWAKE_WINDOW = 119, +	WLAN_EID_BEACON_TIMING = 120, +	WLAN_EID_MCCAOP_SETUP_REQ = 121, +	WLAN_EID_MCCAOP_SETUP_RESP = 122, +	WLAN_EID_MCCAOP_ADVERT = 123, +	WLAN_EID_MCCAOP_TEARDOWN = 124, +	WLAN_EID_GANN = 125, +	WLAN_EID_RANN = 126, +	WLAN_EID_PREQ = 130, +	WLAN_EID_PREP = 131, +	WLAN_EID_PERR = 132, +	WLAN_EID_PXU = 137, +	WLAN_EID_PXUC = 138, +	WLAN_EID_AUTH_MESH_PEER_EXCH = 139, +	WLAN_EID_MIC = 140,  	WLAN_EID_PWR_CONSTRAINT = 32,  	WLAN_EID_PWR_CAPABILITY = 33, @@ -1211,9 +1245,14 @@ enum ieee80211_category {  	WLAN_CATEGORY_HT = 7,  	WLAN_CATEGORY_SA_QUERY = 8,  	WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9, +	WLAN_CATEGORY_MESH_ACTION = 13, +	WLAN_CATEGORY_MULTIHOP_ACTION = 14, +	WLAN_CATEGORY_SELF_PROTECTED = 15,  	WLAN_CATEGORY_WMM = 17, -	WLAN_CATEGORY_MESH_PLINK = 30,		/* Pending ANA approval */ -	WLAN_CATEGORY_MESH_PATH_SEL = 32,	/* Pending ANA approval */ +	/* TODO: remove MESH_PLINK and MESH_PATH_SEL after */ +	/*       mesh is updated to current 802.11s draft  */ +	WLAN_CATEGORY_MESH_PLINK = 30, +	WLAN_CATEGORY_MESH_PATH_SEL = 32,  	WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,  	WLAN_CATEGORY_VENDOR_SPECIFIC = 127,  }; @@ -1351,6 +1390,8 @@ enum ieee80211_sa_query_action {  /* AKM suite selectors */  #define WLAN_AKM_SUITE_8021X		0x000FAC01  #define WLAN_AKM_SUITE_PSK		0x000FAC02 +#define WLAN_AKM_SUITE_SAE			0x000FAC08 +#define WLAN_AKM_SUITE_FT_OVER_SAE	0x000FAC09  #define WLAN_MAX_KEY_LEN		32 diff --git a/include/linux/if.h b/include/linux/if.h index 53558ec59e1..12395992774 100644 --- a/include/linux/if.h +++ b/include/linux/if.h @@ -75,6 +75,8 @@  #define IFF_DISABLE_NETPOLL	0x2000	/* disable netpoll at run-time */  #define IFF_MACVLAN_PORT	0x4000	/* device used as macvlan port */  #define IFF_BRIDGE_PORT	0x8000		/* device used as bridge port */ +#define IFF_OVS_DATAPATH	0x10000	/* device used as Open vSwitch +					 * datapath port */  #define IF_GET_IFACE	0x0001		/* for querying only */  #define IF_GET_PROTO	0x0002 diff --git a/include/linux/if_bonding.h b/include/linux/if_bonding.h index 2c7994372bd..a17edda8a78 100644 --- a/include/linux/if_bonding.h +++ b/include/linux/if_bonding.h @@ -84,6 +84,9 @@  #define BOND_DEFAULT_MAX_BONDS  1   /* Default maximum number of devices to support */  #define BOND_DEFAULT_TX_QUEUES 16   /* Default number of tx queues per device */ + +#define BOND_DEFAULT_RESEND_IGMP	1 /* Default number of IGMP membership reports */ +  /* hashing types */  #define BOND_XMIT_POLICY_LAYER2		0 /* layer 2 (MAC only), default */  #define BOND_XMIT_POLICY_LAYER34	1 /* layer 3+4 (IP ^ (TCP || UDP)) */ diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h index bed7a4682b9..f9c3df03db0 100644 --- a/include/linux/if_ether.h +++ b/include/linux/if_ether.h @@ -137,8 +137,6 @@ extern struct ctl_table ether_table[];  extern ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len); -#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" -  #endif  #endif	/* _LINUX_IF_ETHER_H */ diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h index 35280b30229..8a2fd66a8b5 100644 --- a/include/linux/if_macvlan.h +++ b/include/linux/if_macvlan.h @@ -40,6 +40,12 @@ struct macvlan_rx_stats {  	unsigned long		rx_errors;  }; +/* + * Maximum times a macvtap device can be opened. This can be used to + * configure the number of receive queue, e.g. for multiqueue virtio. + */ +#define MAX_MACVTAP_QUEUES	(NR_CPUS < 16 ? NR_CPUS : 16) +  struct macvlan_dev {  	struct net_device	*dev;  	struct list_head	list; @@ -50,7 +56,8 @@ struct macvlan_dev {  	enum macvlan_mode	mode;  	int (*receive)(struct sk_buff *skb);  	int (*forward)(struct net_device *dev, struct sk_buff *skb); -	struct macvtap_queue	*tap; +	struct macvtap_queue	*taps[MAX_MACVTAP_QUEUES]; +	int			numvtaps;  };  static inline void macvlan_count_rx(const struct macvlan_dev *vlan, diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h index 27741e05446..397921b09ef 100644 --- a/include/linux/if_pppox.h +++ b/include/linux/if_pppox.h @@ -40,25 +40,35 @@   * PPPoE addressing definition    */   typedef __be16 sid_t; -struct pppoe_addr{  -       sid_t           sid;                    /* Session identifier */  -       unsigned char   remote[ETH_ALEN];       /* Remote address */  -       char            dev[IFNAMSIZ];          /* Local device to use */  +struct pppoe_addr { +	sid_t         sid;                    /* Session identifier */ +	unsigned char remote[ETH_ALEN];       /* Remote address */ +	char          dev[IFNAMSIZ];          /* Local device to use */  };   /************************************************************************  - * Protocols supported by AF_PPPOX  - */  + * PPTP addressing definition + */ +struct pptp_addr { +	__be16		call_id; +	struct in_addr	sin_addr; +}; + +/************************************************************************ + * Protocols supported by AF_PPPOX + */  #define PX_PROTO_OE    0 /* Currently just PPPoE */  #define PX_PROTO_OL2TP 1 /* Now L2TP also */ -#define PX_MAX_PROTO   2 +#define PX_PROTO_PPTP  2 +#define PX_MAX_PROTO   3 -struct sockaddr_pppox {  -       sa_family_t     sa_family;            /* address family, AF_PPPOX */  -       unsigned int    sa_protocol;          /* protocol identifier */  -       union{  -               struct pppoe_addr       pppoe;  -       }sa_addr;  +struct sockaddr_pppox { +	sa_family_t     sa_family;            /* address family, AF_PPPOX */ +	unsigned int    sa_protocol;          /* protocol identifier */ +	union { +		struct pppoe_addr  pppoe; +		struct pptp_addr   pptp; +	} sa_addr;  } __attribute__((packed));  /* The use of the above union isn't viable because the size of this @@ -150,15 +160,23 @@ struct pppoe_opt {  					     relayed to (PPPoE relaying) */  }; +struct pptp_opt { +	struct pptp_addr src_addr; +	struct pptp_addr dst_addr; +	u32 ack_sent, ack_recv; +	u32 seq_sent, seq_recv; +	int ppp_flags; +};  #include <net/sock.h>  struct pppox_sock {  	/* struct sock must be the first member of pppox_sock */ -	struct sock		sk; -	struct ppp_channel	chan; +	struct sock sk; +	struct ppp_channel chan;  	struct pppox_sock	*next;	  /* for hash table */  	union {  		struct pppoe_opt pppoe; +		struct pptp_opt  pptp;  	} proto;  	__be16			num;  }; @@ -186,7 +204,7 @@ struct pppox_proto {  	struct module	*owner;  }; -extern int register_pppox_proto(int proto_num, struct pppox_proto *pp); +extern int register_pppox_proto(int proto_num, const struct pppox_proto *pp);  extern void unregister_pppox_proto(int proto_num);  extern void pppox_unbind_sock(struct sock *sk);/* delete ppp-channel binding */  extern int pppox_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg); diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index 3d870fda8c4..c2f3a72712c 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h @@ -16,6 +16,7 @@  #ifdef __KERNEL__  #include <linux/netdevice.h>  #include <linux/etherdevice.h> +#include <linux/rtnetlink.h>  #define VLAN_HLEN	4		/* The additional bytes (on top of the Ethernet header)  					 * that VLAN requires. @@ -68,6 +69,7 @@ static inline struct vlan_ethhdr *vlan_eth_hdr(const struct sk_buff *skb)  #define VLAN_CFI_MASK		0x1000 /* Canonical Format Indicator */  #define VLAN_TAG_PRESENT	VLAN_CFI_MASK  #define VLAN_VID_MASK		0x0fff /* VLAN Identifier */ +#define VLAN_N_VID		4096  /* found in socket.c */  extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *)); @@ -76,9 +78,8 @@ extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *));   * depends on completely exhausting the VLAN identifier space.  Thus   * it gives constant time look-up, but in many cases it wastes memory.   */ -#define VLAN_GROUP_ARRAY_LEN          4096  #define VLAN_GROUP_ARRAY_SPLIT_PARTS  8 -#define VLAN_GROUP_ARRAY_PART_LEN     (VLAN_GROUP_ARRAY_LEN/VLAN_GROUP_ARRAY_SPLIT_PARTS) +#define VLAN_GROUP_ARRAY_PART_LEN     (VLAN_N_VID/VLAN_GROUP_ARRAY_SPLIT_PARTS)  struct vlan_group {  	struct net_device	*real_dev; /* The ethernet(like) device @@ -114,12 +115,24 @@ static inline void vlan_group_set_device(struct vlan_group *vg,  #define vlan_tx_tag_get(__skb)		((__skb)->vlan_tci & ~VLAN_TAG_PRESENT)  #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) +/* Must be invoked with rcu_read_lock or with RTNL. */ +static inline struct net_device *vlan_find_dev(struct net_device *real_dev, +					       u16 vlan_id) +{ +	struct vlan_group *grp = rcu_dereference_rtnl(real_dev->vlgrp); + +	if (grp) +		return vlan_group_get_device(grp, vlan_id); + +	return NULL; +} +  extern struct net_device *vlan_dev_real_dev(const struct net_device *dev);  extern u16 vlan_dev_vlan_id(const struct net_device *dev);  extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,  			     u16 vlan_tci, int polling); -extern int vlan_hwaccel_do_receive(struct sk_buff *skb); +extern bool vlan_hwaccel_do_receive(struct sk_buff **skb);  extern gro_result_t  vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,  		 unsigned int vlan_tci, struct sk_buff *skb); @@ -128,6 +141,12 @@ vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,  	       unsigned int vlan_tci);  #else +static inline struct net_device *vlan_find_dev(struct net_device *real_dev, +					       u16 vlan_id) +{ +	return NULL; +} +  static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev)  {  	BUG(); @@ -147,9 +166,11 @@ static inline int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,  	return NET_XMIT_SUCCESS;  } -static inline int vlan_hwaccel_do_receive(struct sk_buff *skb) +static inline bool vlan_hwaccel_do_receive(struct sk_buff **skb)  { -	return 0; +	if ((*skb)->vlan_tci & VLAN_VID_MASK) +		(*skb)->pkt_type = PACKET_OTHERHOST; +	return false;  }  static inline gro_result_t diff --git a/include/linux/in.h b/include/linux/in.h index 41d88a4689a..beeb6dee2b4 100644 --- a/include/linux/in.h +++ b/include/linux/in.h @@ -250,6 +250,25 @@ struct sockaddr_in {  #ifdef __KERNEL__ +#include <linux/errno.h> + +static inline int proto_ports_offset(int proto) +{ +	switch (proto) { +	case IPPROTO_TCP: +	case IPPROTO_UDP: +	case IPPROTO_DCCP: +	case IPPROTO_ESP:	/* SPI */ +	case IPPROTO_SCTP: +	case IPPROTO_UDPLITE: +		return 0; +	case IPPROTO_AH:	/* SPI */ +		return 4; +	default: +		return -EINVAL; +	} +} +  static inline bool ipv4_is_loopback(__be32 addr)  {  	return (addr & htonl(0xff000000)) == htonl(0x7f000000); diff --git a/include/linux/in6.h b/include/linux/in6.h index c4bf46f764b..097a34b5556 100644 --- a/include/linux/in6.h +++ b/include/linux/in6.h @@ -268,6 +268,10 @@ struct in6_flowlabel_req {  /* RFC5082: Generalized Ttl Security Mechanism */  #define IPV6_MINHOPCOUNT		73 +#define IPV6_ORIGDSTADDR        74 +#define IPV6_RECVORIGDSTADDR    IPV6_ORIGDSTADDR +#define IPV6_TRANSPARENT        75 +  /*   * Multicast Routing:   * see include/linux/mroute6.h. diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h index 2be1a1a2beb..ccd5b07d678 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h @@ -9,6 +9,7 @@  #include <linux/rcupdate.h>  #include <linux/timer.h>  #include <linux/sysctl.h> +#include <linux/rtnetlink.h>  enum  { @@ -158,7 +159,12 @@ struct in_ifaddr {  extern int register_inetaddr_notifier(struct notifier_block *nb);  extern int unregister_inetaddr_notifier(struct notifier_block *nb); -extern struct net_device *ip_dev_find(struct net *net, __be32 addr); +extern struct net_device *__ip_dev_find(struct net *net, __be32 addr, bool devref); +static inline struct net_device *ip_dev_find(struct net *net, __be32 addr) +{ +	return __ip_dev_find(net, addr, true); +} +  extern int		inet_addr_onlink(struct in_device *in_dev, __be32 a, __be32 b);  extern int		devinet_ioctl(struct net *net, unsigned int cmd, void __user *);  extern void		devinet_init(void); @@ -198,14 +204,10 @@ static __inline__ int bad_mask(__be32 mask, __be32 addr)  static inline struct in_device *__in_dev_get_rcu(const struct net_device *dev)  { -	struct in_device *in_dev = dev->ip_ptr; -	if (in_dev) -		in_dev = rcu_dereference(in_dev); -	return in_dev; +	return rcu_dereference(dev->ip_ptr);  } -static __inline__ struct in_device * -in_dev_get(const struct net_device *dev) +static inline struct in_device *in_dev_get(const struct net_device *dev)  {  	struct in_device *in_dev; @@ -217,10 +219,9 @@ in_dev_get(const struct net_device *dev)  	return in_dev;  } -static __inline__ struct in_device * -__in_dev_get_rtnl(const struct net_device *dev) +static inline struct in_device *__in_dev_get_rtnl(const struct net_device *dev)  { -	return (struct in_device*)dev->ip_ptr; +	return rcu_dereference_check(dev->ip_ptr, lockdep_rtnl_is_held());  }  extern void in_dev_finish_destroy(struct in_device *idev); diff --git a/include/linux/ip_vs.h b/include/linux/ip_vs.h index 9708de265bb..5f43a3b2e3a 100644 --- a/include/linux/ip_vs.h +++ b/include/linux/ip_vs.h @@ -70,6 +70,7 @@  /*   *      IPVS Connection Flags + *      Only flags 0..15 are sent to backup server   */  #define IP_VS_CONN_F_FWD_MASK	0x0007		/* mask for the fwd methods */  #define IP_VS_CONN_F_MASQ	0x0000		/* masquerading/NAT */ @@ -88,9 +89,20 @@  #define IP_VS_CONN_F_TEMPLATE	0x1000		/* template, not connection */  #define IP_VS_CONN_F_ONE_PACKET	0x2000		/* forward only one packet */ +/* Flags that are not sent to backup server start from bit 16 */ +#define IP_VS_CONN_F_NFCT	(1 << 16)	/* use netfilter conntrack */ + +/* Connection flags from destination that can be changed by user space */ +#define IP_VS_CONN_F_DEST_MASK (IP_VS_CONN_F_FWD_MASK | \ +				IP_VS_CONN_F_ONE_PACKET | \ +				IP_VS_CONN_F_NFCT | \ +				0) +  #define IP_VS_SCHEDNAME_MAXLEN	16 +#define IP_VS_PENAME_MAXLEN	16  #define IP_VS_IFNAME_MAXLEN	16 +#define IP_VS_PEDATA_MAXLEN     255  /*   *	The struct ip_vs_service_user and struct ip_vs_dest_user are @@ -324,6 +336,9 @@ enum {  	IPVS_SVC_ATTR_NETMASK,		/* persistent netmask */  	IPVS_SVC_ATTR_STATS,		/* nested attribute for service stats */ + +	IPVS_SVC_ATTR_PE_NAME,		/* name of ct retriever */ +  	__IPVS_SVC_ATTR_MAX,  }; diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index e62683ba88e..8e429d0e040 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h @@ -341,7 +341,9 @@ struct ipv6_pinfo {  				odstopts:1,                                  rxflow:1,  				rxtclass:1, -				rxpmtu:1; +				rxpmtu:1, +				rxorigdstaddr:1; +				/* 2 bits hole */  		} bits;  		__u16		all;  	} rxopt; diff --git a/include/linux/mlx4/cmd.h b/include/linux/mlx4/cmd.h index 0f82293a82e..78a1b967175 100644 --- a/include/linux/mlx4/cmd.h +++ b/include/linux/mlx4/cmd.h @@ -56,6 +56,7 @@ enum {  	MLX4_CMD_QUERY_HCA	 = 0xb,  	MLX4_CMD_QUERY_PORT	 = 0x43,  	MLX4_CMD_SENSE_PORT	 = 0x4d, +	MLX4_CMD_HW_HEALTH_CHECK = 0x50,  	MLX4_CMD_SET_PORT	 = 0xc,  	MLX4_CMD_ACCESS_DDR	 = 0x2e,  	MLX4_CMD_MAP_ICM	 = 0xffa, diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index 7a7f9c1e679..7338654c02b 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h @@ -186,6 +186,10 @@ struct mlx4_caps {  	int			eth_mtu_cap[MLX4_MAX_PORTS + 1];  	int			gid_table_len[MLX4_MAX_PORTS + 1];  	int			pkey_table_len[MLX4_MAX_PORTS + 1]; +	int			trans_type[MLX4_MAX_PORTS + 1]; +	int			vendor_oui[MLX4_MAX_PORTS + 1]; +	int			wavelength[MLX4_MAX_PORTS + 1]; +	u64			trans_code[MLX4_MAX_PORTS + 1];  	int			local_ca_ack_delay;  	int			num_uars;  	int			bf_reg_size; @@ -229,6 +233,8 @@ struct mlx4_caps {  	u32			bmme_flags;  	u32			reserved_lkey;  	u16			stat_rate_support; +	int			udp_rss; +	int			loopback_support;  	u8			port_width_cap[MLX4_MAX_PORTS + 1];  	int			max_gso_sz;  	int                     reserved_qps_cnt[MLX4_NUM_QP_REGION]; @@ -480,5 +486,6 @@ void mlx4_fmr_unmap(struct mlx4_dev *dev, struct mlx4_fmr *fmr,  		    u32 *lkey, u32 *rkey);  int mlx4_fmr_free(struct mlx4_dev *dev, struct mlx4_fmr *fmr);  int mlx4_SYNC_TPT(struct mlx4_dev *dev); +int mlx4_test_interrupts(struct mlx4_dev *dev);  #endif /* MLX4_DEVICE_H */ diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h index 33b2ea09a4a..a36ab3bc7b0 100644 --- a/include/linux/mmc/sdio_ids.h +++ b/include/linux/mmc/sdio_ids.h @@ -18,6 +18,7 @@  #define SDIO_CLASS_PHS		0x06	/* PHS standard interface */  #define SDIO_CLASS_WLAN		0x07	/* WLAN interface */  #define SDIO_CLASS_ATA		0x08	/* Embedded SDIO-ATA std interface */ +#define SDIO_CLASS_BT_AMP	0x09	/* Type-A Bluetooth AMP interface */  /*   * Vendors and devices.  Sort key: vendor first, device next. diff --git a/include/linux/mroute.h b/include/linux/mroute.h index fa04b246c9a..0fa7a3a874c 100644 --- a/include/linux/mroute.h +++ b/include/linux/mroute.h @@ -213,6 +213,7 @@ struct mfc_cache {  			unsigned char ttls[MAXVIFS];	/* TTL thresholds		*/  		} res;  	} mfc_un; +	struct rcu_head	rcu;  };  #define MFC_STATIC		1 diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 46c36ffe20e..fcd3dda8632 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -228,9 +228,9 @@ struct netdev_hw_addr {  #define NETDEV_HW_ADDR_T_SLAVE		3  #define NETDEV_HW_ADDR_T_UNICAST	4  #define NETDEV_HW_ADDR_T_MULTICAST	5 -	int			refcount;  	bool			synced;  	bool			global_use; +	int			refcount;  	struct rcu_head		rcu_head;  }; @@ -281,6 +281,12 @@ struct hh_cache {  	unsigned long	hh_data[HH_DATA_ALIGN(LL_MAX_HEADER) / sizeof(long)];  }; +static inline void hh_cache_put(struct hh_cache *hh) +{ +	if (atomic_dec_and_test(&hh->hh_refcnt)) +		kfree(hh); +} +  /* Reserve HH_DATA_MOD byte aligned hard_header_len, but at least that much.   * Alternative is:   *   dev->hard_header_len ? (dev->hard_header_len + @@ -884,6 +890,9 @@ struct net_device {  	int			iflink;  	struct net_device_stats	stats; +	atomic_long_t		rx_dropped; /* dropped packets by core network +					     * Do not use this in drivers. +					     */  #ifdef CONFIG_WIRELESS_EXT  	/* List of functions to handle Wireless Extensions (instead of ioctl). @@ -901,7 +910,7 @@ struct net_device {  	unsigned int		flags;	/* interface flags (a la BSD)	*/  	unsigned short		gflags; -        unsigned short          priv_flags; /* Like 'flags' but invisible to userspace. */ +        unsigned int            priv_flags; /* Like 'flags' but invisible to userspace. */  	unsigned short		padded;	/* How much padding added by alloc_netdev() */  	unsigned char		operstate; /* RFC2863 operstate */ @@ -918,10 +927,6 @@ struct net_device {  	unsigned short		needed_headroom;  	unsigned short		needed_tailroom; -	struct net_device	*master; /* Pointer to master device of a group, -					  * which this device is member of. -					  */ -  	/* Interface address info. */  	unsigned char		perm_addr[MAX_ADDR_LEN]; /* permanent hw address */  	unsigned char		addr_assign_type; /* hw address assignment type */ @@ -937,12 +942,15 @@ struct net_device {  	/* Protocol specific pointers */ -	 + +#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) +	struct vlan_group	*vlgrp;		/* VLAN group */ +#endif  #ifdef CONFIG_NET_DSA  	void			*dsa_ptr;	/* dsa specific data */  #endif  	void 			*atalk_ptr;	/* AppleTalk link 	*/ -	void			*ip_ptr;	/* IPv4 specific data	*/ +	struct in_device __rcu	*ip_ptr;	/* IPv4 specific data	*/  	void                    *dn_ptr;        /* DECnet specific data */  	void                    *ip6_ptr;       /* IPv6 specific data */  	void			*ec_ptr;	/* Econet specific data	*/ @@ -951,9 +959,20 @@ struct net_device {  						   assign before registering */  /* - * Cache line mostly used on receive path (including eth_type_trans()) + * Cache lines mostly used on receive path (including eth_type_trans())   */ -	unsigned long		last_rx;	/* Time of last Rx	*/ +	unsigned long		last_rx;	/* Time of last Rx +						 * This should not be set in +						 * drivers, unless really needed, +						 * because network stack (bonding) +						 * use it if/when necessary, to +						 * avoid dirtying this cache line. +						 */ + +	struct net_device	*master; /* Pointer to master device of a group, +					  * which this device is member of. +					  */ +  	/* Interface address info used in eth_type_trans() */  	unsigned char		*dev_addr;	/* hw address, (before bcast  						   because most packets are @@ -969,14 +988,21 @@ struct net_device {  	struct netdev_rx_queue	*_rx; -	/* Number of RX queues allocated at alloc_netdev_mq() time  */ +	/* Number of RX queues allocated at register_netdev() time */  	unsigned int		num_rx_queues; + +	/* Number of RX queues currently active in device */ +	unsigned int		real_num_rx_queues;  #endif -	struct netdev_queue	rx_queue;  	rx_handler_func_t	*rx_handler;  	void			*rx_handler_data; +	struct netdev_queue __rcu *ingress_queue; + +/* + * Cache lines mostly used on transmit path + */  	struct netdev_queue	*_tx ____cacheline_aligned_in_smp;  	/* Number of TX queues allocated at alloc_netdev_mq() time  */ @@ -990,9 +1016,7 @@ struct net_device {  	unsigned long		tx_queue_len;	/* Max frames per queue allowed */  	spinlock_t		tx_global_lock; -/* - * One part is mostly used on xmit path (device) - */ +  	/* These may be needed for future network-power-down code. */  	/* @@ -1005,7 +1029,7 @@ struct net_device {  	struct timer_list	watchdog_timer;  	/* Number of references to this device */ -	atomic_t		refcnt ____cacheline_aligned_in_smp; +	int __percpu		*pcpu_refcnt;  	/* delayed register/unregister */  	struct list_head	todo_list; @@ -1041,8 +1065,12 @@ struct net_device {  #endif  	/* mid-layer private */ -	void			*ml_priv; - +	union { +		void				*ml_priv; +		struct pcpu_lstats __percpu	*lstats; /* loopback stats */ +		struct pcpu_tstats __percpu	*tstats; /* tunnel stats */ +		struct pcpu_dstats __percpu	*dstats; /* dummy stats */ +	};  	/* GARP */  	struct garp_port	*garp_port; @@ -1305,6 +1333,7 @@ static inline void unregister_netdevice(struct net_device *dev)  	unregister_netdevice_queue(dev, NULL);  } +extern int 		netdev_refcnt_read(const struct net_device *dev);  extern void		free_netdev(struct net_device *dev);  extern void		synchronize_net(void);  extern int 		register_netdevice_notifier(struct notifier_block *nb); @@ -1667,11 +1696,34 @@ static inline void netif_wake_subqueue(struct net_device *dev, u16 queue_index)   */  static inline int netif_is_multiqueue(const struct net_device *dev)  { -	return (dev->num_tx_queues > 1); +	return dev->num_tx_queues > 1;  } -extern void netif_set_real_num_tx_queues(struct net_device *dev, -					 unsigned int txq); +extern int netif_set_real_num_tx_queues(struct net_device *dev, +					unsigned int txq); + +#ifdef CONFIG_RPS +extern int netif_set_real_num_rx_queues(struct net_device *dev, +					unsigned int rxq); +#else +static inline int netif_set_real_num_rx_queues(struct net_device *dev, +						unsigned int rxq) +{ +	return 0; +} +#endif + +static inline int netif_copy_real_num_queues(struct net_device *to_dev, +					     const struct net_device *from_dev) +{ +	netif_set_real_num_tx_queues(to_dev, from_dev->real_num_tx_queues); +#ifdef CONFIG_RPS +	return netif_set_real_num_rx_queues(to_dev, +					    from_dev->real_num_rx_queues); +#else +	return 0; +#endif +}  /* Use this variant when it is known for sure that it   * is executing from hardware interrupt context or with hardware interrupts @@ -1695,8 +1747,7 @@ extern gro_result_t	dev_gro_receive(struct napi_struct *napi,  extern gro_result_t	napi_skb_finish(gro_result_t ret, struct sk_buff *skb);  extern gro_result_t	napi_gro_receive(struct napi_struct *napi,  					 struct sk_buff *skb); -extern void		napi_reuse_skb(struct napi_struct *napi, -				       struct sk_buff *skb); +extern void		napi_gro_flush(struct napi_struct *napi);  extern struct sk_buff *	napi_get_frags(struct napi_struct *napi);  extern gro_result_t	napi_frags_finish(struct napi_struct *napi,  					  struct sk_buff *skb, @@ -1715,7 +1766,6 @@ extern int netdev_rx_handler_register(struct net_device *dev,  				      void *rx_handler_data);  extern void netdev_rx_handler_unregister(struct net_device *dev); -extern void		netif_nit_deliver(struct sk_buff *skb);  extern int		dev_valid_name(const char *name);  extern int		dev_ioctl(struct net *net, unsigned int cmd, void __user *);  extern int		dev_ethtool(struct net *net, struct ifreq *); @@ -1749,7 +1799,7 @@ extern void netdev_run_todo(void);   */  static inline void dev_put(struct net_device *dev)  { -	atomic_dec(&dev->refcnt); +	irqsafe_cpu_dec(*dev->pcpu_refcnt);  }  /** @@ -1760,7 +1810,7 @@ static inline void dev_put(struct net_device *dev)   */  static inline void dev_hold(struct net_device *dev)  { -	atomic_inc(&dev->refcnt); +	irqsafe_cpu_inc(*dev->pcpu_refcnt);  }  /* Carrier loss detection, dial on demand. The functions netif_carrier_on @@ -2171,6 +2221,8 @@ extern void dev_seq_stop(struct seq_file *seq, void *v);  extern int netdev_class_create_file(struct class_attribute *class_attr);  extern void netdev_class_remove_file(struct class_attribute *class_attr); +extern struct kobj_ns_type_operations net_ns_type_operations; +  extern char *netdev_drivername(const struct net_device *dev, char *buffer, int len);  extern void linkwatch_run_queue(void); @@ -2191,14 +2243,22 @@ static inline int net_gso_ok(int features, int gso_type)  static inline int skb_gso_ok(struct sk_buff *skb, int features)  {  	return net_gso_ok(features, skb_shinfo(skb)->gso_type) && -	       (!skb_has_frags(skb) || (features & NETIF_F_FRAGLIST)); +	       (!skb_has_frag_list(skb) || (features & NETIF_F_FRAGLIST));  }  static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb)  { -	return skb_is_gso(skb) && -	       (!skb_gso_ok(skb, dev->features) || -		unlikely(skb->ip_summed != CHECKSUM_PARTIAL)); +	if (skb_is_gso(skb)) { +		int features = dev->features; + +		if (skb->protocol == htons(ETH_P_8021Q) || skb->vlan_tci) +			features &= dev->vlan_features; + +		return (!skb_gso_ok(skb, features) || +			unlikely(skb->ip_summed != CHECKSUM_PARTIAL)); +	} + +	return 0;  }  static inline void netif_set_gso_max_size(struct net_device *dev, diff --git a/include/linux/netfilter/nf_conntrack_common.h b/include/linux/netfilter/nf_conntrack_common.h index 1afd18c855e..50cdc2559a5 100644 --- a/include/linux/netfilter/nf_conntrack_common.h +++ b/include/linux/netfilter/nf_conntrack_common.h @@ -98,8 +98,14 @@ enum ip_conntrack_events {  enum ip_conntrack_expect_events {  	IPEXP_NEW,		/* new expectation */ +	IPEXP_DESTROY,		/* destroyed expectation */  }; +/* expectation flags */ +#define NF_CT_EXPECT_PERMANENT		0x1 +#define NF_CT_EXPECT_INACTIVE		0x2 +#define NF_CT_EXPECT_USERSPACE		0x4 +  #ifdef __KERNEL__  struct ip_conntrack_stat {  	unsigned int searched; diff --git a/include/linux/netfilter/nf_conntrack_sip.h b/include/linux/netfilter/nf_conntrack_sip.h index ff8cfbcf3b8..0ce91d56a5f 100644 --- a/include/linux/netfilter/nf_conntrack_sip.h +++ b/include/linux/netfilter/nf_conntrack_sip.h @@ -89,6 +89,7 @@ enum sip_header_types {  	SIP_HDR_VIA_TCP,  	SIP_HDR_EXPIRES,  	SIP_HDR_CONTENT_LENGTH, +	SIP_HDR_CALL_ID,  };  enum sdp_header_types { diff --git a/include/linux/netfilter/nfnetlink_conntrack.h b/include/linux/netfilter/nfnetlink_conntrack.h index 70cd0603911..19711e3ffd4 100644 --- a/include/linux/netfilter/nfnetlink_conntrack.h +++ b/include/linux/netfilter/nfnetlink_conntrack.h @@ -162,6 +162,7 @@ enum ctattr_expect {  	CTA_EXPECT_ID,  	CTA_EXPECT_HELP_NAME,  	CTA_EXPECT_ZONE, +	CTA_EXPECT_FLAGS,  	__CTA_EXPECT_MAX  };  #define CTA_EXPECT_MAX (__CTA_EXPECT_MAX - 1) diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index 24e5d01d27d..742bec05144 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h @@ -66,6 +66,11 @@ struct xt_standard_target {  	int verdict;  }; +struct xt_error_target { +	struct xt_entry_target target; +	char errorname[XT_FUNCTION_MAXNAMELEN]; +}; +  /* The argument to IPT_SO_GET_REVISION_*.  Returns highest revision   * kernel supports, if >= revision. */  struct xt_get_revision { diff --git a/include/linux/netfilter/xt_TPROXY.h b/include/linux/netfilter/xt_TPROXY.h index 152e8f97132..3f3d6936128 100644 --- a/include/linux/netfilter/xt_TPROXY.h +++ b/include/linux/netfilter/xt_TPROXY.h @@ -1,5 +1,5 @@ -#ifndef _XT_TPROXY_H_target -#define _XT_TPROXY_H_target +#ifndef _XT_TPROXY_H +#define _XT_TPROXY_H  /* TPROXY target is capable of marking the packet to perform   * redirection. We can get rid of that whenever we get support for @@ -11,4 +11,11 @@ struct xt_tproxy_target_info {  	__be16 lport;  }; -#endif /* _XT_TPROXY_H_target */ +struct xt_tproxy_target_info_v1 { +	u_int32_t mark_mask; +	u_int32_t mark_value; +	union nf_inet_addr laddr; +	__be16 lport; +}; + +#endif /* _XT_TPROXY_H */ diff --git a/include/linux/netfilter_arp/arp_tables.h b/include/linux/netfilter_arp/arp_tables.h index e9948c0560f..adbf4bff87e 100644 --- a/include/linux/netfilter_arp/arp_tables.h +++ b/include/linux/netfilter_arp/arp_tables.h @@ -21,8 +21,21 @@  #include <linux/netfilter/x_tables.h> +#ifndef __KERNEL__  #define ARPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN  #define ARPT_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN +#define arpt_entry_target xt_entry_target +#define arpt_standard_target xt_standard_target +#define arpt_error_target xt_error_target +#define ARPT_CONTINUE XT_CONTINUE +#define ARPT_RETURN XT_RETURN +#define arpt_counters_info xt_counters_info +#define arpt_counters xt_counters +#define ARPT_STANDARD_TARGET XT_STANDARD_TARGET +#define ARPT_ERROR_TARGET XT_ERROR_TARGET +#define ARPT_ENTRY_ITERATE(entries, size, fn, args...) \ +	XT_ENTRY_ITERATE(struct arpt_entry, entries, size, fn, ## args) +#endif  #define ARPT_DEV_ADDR_LEN_MAX 16 @@ -63,9 +76,6 @@ struct arpt_arp {  	u_int16_t invflags;  }; -#define arpt_entry_target xt_entry_target -#define arpt_standard_target xt_standard_target -  /* Values for "flag" field in struct arpt_ip (general arp structure).   * No flags defined yet.   */ @@ -125,16 +135,10 @@ struct arpt_entry  #define ARPT_SO_GET_REVISION_TARGET	(ARPT_BASE_CTL + 3)  #define ARPT_SO_GET_MAX			(ARPT_SO_GET_REVISION_TARGET) -/* CONTINUE verdict for targets */ -#define ARPT_CONTINUE XT_CONTINUE - -/* For standard target */ -#define ARPT_RETURN XT_RETURN -  /* The argument to ARPT_SO_GET_INFO */  struct arpt_getinfo {  	/* Which table: caller fills this in. */ -	char name[ARPT_TABLE_MAXNAMELEN]; +	char name[XT_TABLE_MAXNAMELEN];  	/* Kernel fills these in. */  	/* Which hook entry points are valid: bitmask */ @@ -156,7 +160,7 @@ struct arpt_getinfo {  /* The argument to ARPT_SO_SET_REPLACE. */  struct arpt_replace {  	/* Which table. */ -	char name[ARPT_TABLE_MAXNAMELEN]; +	char name[XT_TABLE_MAXNAMELEN];  	/* Which hook entry points are valid: bitmask.  You can't             change this. */ @@ -184,14 +188,10 @@ struct arpt_replace {  	struct arpt_entry entries[0];  }; -/* The argument to ARPT_SO_ADD_COUNTERS. */ -#define arpt_counters_info xt_counters_info -#define arpt_counters xt_counters -  /* The argument to ARPT_SO_GET_ENTRIES. */  struct arpt_get_entries {  	/* Which table: user fills this in. */ -	char name[ARPT_TABLE_MAXNAMELEN]; +	char name[XT_TABLE_MAXNAMELEN];  	/* User fills this in: total entry size. */  	unsigned int size; @@ -200,23 +200,12 @@ struct arpt_get_entries {  	struct arpt_entry entrytable[0];  }; -/* Standard return verdict, or do jump. */ -#define ARPT_STANDARD_TARGET XT_STANDARD_TARGET -/* Error verdict. */ -#define ARPT_ERROR_TARGET XT_ERROR_TARGET -  /* Helper functions */ -static __inline__ struct arpt_entry_target *arpt_get_target(struct arpt_entry *e) +static __inline__ struct xt_entry_target *arpt_get_target(struct arpt_entry *e)  {  	return (void *)e + e->target_offset;  } -#ifndef __KERNEL__ -/* fn returns 0 to continue iteration */ -#define ARPT_ENTRY_ITERATE(entries, size, fn, args...) \ -	XT_ENTRY_ITERATE(struct arpt_entry, entries, size, fn, ## args) -#endif -  /*   *	Main firewall chains definitions and global var's definitions.   */ @@ -225,17 +214,12 @@ static __inline__ struct arpt_entry_target *arpt_get_target(struct arpt_entry *e  /* Standard entry. */  struct arpt_standard {  	struct arpt_entry entry; -	struct arpt_standard_target target; -}; - -struct arpt_error_target { -	struct arpt_entry_target target; -	char errorname[ARPT_FUNCTION_MAXNAMELEN]; +	struct xt_standard_target target;  };  struct arpt_error {  	struct arpt_entry entry; -	struct arpt_error_target target; +	struct xt_error_target target;  };  #define ARPT_ENTRY_INIT(__size)						       \ @@ -247,16 +231,16 @@ struct arpt_error {  #define ARPT_STANDARD_INIT(__verdict)					       \  {									       \  	.entry		= ARPT_ENTRY_INIT(sizeof(struct arpt_standard)),       \ -	.target		= XT_TARGET_INIT(ARPT_STANDARD_TARGET,		       \ -					 sizeof(struct arpt_standard_target)), \ +	.target		= XT_TARGET_INIT(XT_STANDARD_TARGET,		       \ +					 sizeof(struct xt_standard_target)), \  	.target.verdict	= -(__verdict) - 1,				       \  }  #define ARPT_ERROR_INIT							       \  {									       \  	.entry		= ARPT_ENTRY_INIT(sizeof(struct arpt_error)),	       \ -	.target		= XT_TARGET_INIT(ARPT_ERROR_TARGET,		       \ -					 sizeof(struct arpt_error_target)),    \ +	.target		= XT_TARGET_INIT(XT_ERROR_TARGET,		       \ +					 sizeof(struct xt_error_target)),      \  	.target.errorname = "ERROR",					       \  } @@ -271,8 +255,6 @@ extern unsigned int arpt_do_table(struct sk_buff *skb,  				  const struct net_device *out,  				  struct xt_table *table); -#define ARPT_ALIGN(s) XT_ALIGN(s) -  #ifdef CONFIG_COMPAT  #include <net/compat.h> @@ -285,14 +267,12 @@ struct compat_arpt_entry {  	unsigned char elems[0];  }; -static inline struct arpt_entry_target * +static inline struct xt_entry_target *  compat_arpt_get_target(struct compat_arpt_entry *e)  {  	return (void *)e + e->target_offset;  } -#define COMPAT_ARPT_ALIGN(s)	COMPAT_XT_ALIGN(s) -  #endif /* CONFIG_COMPAT */  #endif /*__KERNEL__*/  #endif /* _ARPTABLES_H */ diff --git a/include/linux/netfilter_bridge/Kbuild b/include/linux/netfilter_bridge/Kbuild index d4d78672873..e48f1a3f5a4 100644 --- a/include/linux/netfilter_bridge/Kbuild +++ b/include/linux/netfilter_bridge/Kbuild @@ -3,11 +3,13 @@ header-y += ebt_among.h  header-y += ebt_arp.h  header-y += ebt_arpreply.h  header-y += ebt_ip.h +header-y += ebt_ip6.h  header-y += ebt_limit.h  header-y += ebt_log.h  header-y += ebt_mark_m.h  header-y += ebt_mark_t.h  header-y += ebt_nat.h +header-y += ebt_nflog.h  header-y += ebt_pkttype.h  header-y += ebt_redirect.h  header-y += ebt_stp.h diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h index 704a7b6e816..64a5d95c58e 100644 --- a/include/linux/netfilter_ipv4/ip_tables.h +++ b/include/linux/netfilter_ipv4/ip_tables.h @@ -27,12 +27,49 @@  #include <linux/netfilter/x_tables.h> +#ifndef __KERNEL__  #define IPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN  #define IPT_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN  #define ipt_match xt_match  #define ipt_target xt_target  #define ipt_table xt_table  #define ipt_get_revision xt_get_revision +#define ipt_entry_match xt_entry_match +#define ipt_entry_target xt_entry_target +#define ipt_standard_target xt_standard_target +#define ipt_error_target xt_error_target +#define ipt_counters xt_counters +#define IPT_CONTINUE XT_CONTINUE +#define IPT_RETURN XT_RETURN + +/* This group is older than old (iptables < v1.4.0-rc1~89) */ +#include <linux/netfilter/xt_tcpudp.h> +#define ipt_udp xt_udp +#define ipt_tcp xt_tcp +#define IPT_TCP_INV_SRCPT	XT_TCP_INV_SRCPT +#define IPT_TCP_INV_DSTPT	XT_TCP_INV_DSTPT +#define IPT_TCP_INV_FLAGS	XT_TCP_INV_FLAGS +#define IPT_TCP_INV_OPTION	XT_TCP_INV_OPTION +#define IPT_TCP_INV_MASK	XT_TCP_INV_MASK +#define IPT_UDP_INV_SRCPT	XT_UDP_INV_SRCPT +#define IPT_UDP_INV_DSTPT	XT_UDP_INV_DSTPT +#define IPT_UDP_INV_MASK	XT_UDP_INV_MASK + +/* The argument to IPT_SO_ADD_COUNTERS. */ +#define ipt_counters_info xt_counters_info +/* Standard return verdict, or do jump. */ +#define IPT_STANDARD_TARGET XT_STANDARD_TARGET +/* Error verdict. */ +#define IPT_ERROR_TARGET XT_ERROR_TARGET + +/* fn returns 0 to continue iteration */ +#define IPT_MATCH_ITERATE(e, fn, args...) \ +	XT_MATCH_ITERATE(struct ipt_entry, e, fn, ## args) + +/* fn returns 0 to continue iteration */ +#define IPT_ENTRY_ITERATE(entries, size, fn, args...) \ +	XT_ENTRY_ITERATE(struct ipt_entry, entries, size, fn, ## args) +#endif  /* Yes, Virginia, you have to zero the padding. */  struct ipt_ip { @@ -52,12 +89,6 @@ struct ipt_ip {  	u_int8_t invflags;  }; -#define ipt_entry_match xt_entry_match -#define ipt_entry_target xt_entry_target -#define ipt_standard_target xt_standard_target - -#define ipt_counters xt_counters -  /* Values for "flag" field in struct ipt_ip (general ip structure). */  #define IPT_F_FRAG		0x01	/* Set if rule is a fragment rule */  #define IPT_F_GOTO		0x02	/* Set if jump is a goto */ @@ -116,23 +147,6 @@ struct ipt_entry {  #define IPT_SO_GET_REVISION_TARGET	(IPT_BASE_CTL + 3)  #define IPT_SO_GET_MAX			IPT_SO_GET_REVISION_TARGET -#define IPT_CONTINUE XT_CONTINUE -#define IPT_RETURN XT_RETURN - -#include <linux/netfilter/xt_tcpudp.h> -#define ipt_udp xt_udp -#define ipt_tcp xt_tcp - -#define IPT_TCP_INV_SRCPT	XT_TCP_INV_SRCPT -#define IPT_TCP_INV_DSTPT	XT_TCP_INV_DSTPT -#define IPT_TCP_INV_FLAGS	XT_TCP_INV_FLAGS -#define IPT_TCP_INV_OPTION	XT_TCP_INV_OPTION -#define IPT_TCP_INV_MASK	XT_TCP_INV_MASK - -#define IPT_UDP_INV_SRCPT	XT_UDP_INV_SRCPT -#define IPT_UDP_INV_DSTPT	XT_UDP_INV_DSTPT -#define IPT_UDP_INV_MASK	XT_UDP_INV_MASK -  /* ICMP matching stuff */  struct ipt_icmp {  	u_int8_t type;				/* type to match */ @@ -146,7 +160,7 @@ struct ipt_icmp {  /* The argument to IPT_SO_GET_INFO */  struct ipt_getinfo {  	/* Which table: caller fills this in. */ -	char name[IPT_TABLE_MAXNAMELEN]; +	char name[XT_TABLE_MAXNAMELEN];  	/* Kernel fills these in. */  	/* Which hook entry points are valid: bitmask */ @@ -168,7 +182,7 @@ struct ipt_getinfo {  /* The argument to IPT_SO_SET_REPLACE. */  struct ipt_replace {  	/* Which table. */ -	char name[IPT_TABLE_MAXNAMELEN]; +	char name[XT_TABLE_MAXNAMELEN];  	/* Which hook entry points are valid: bitmask.  You can't             change this. */ @@ -196,13 +210,10 @@ struct ipt_replace {  	struct ipt_entry entries[0];  }; -/* The argument to IPT_SO_ADD_COUNTERS. */ -#define ipt_counters_info xt_counters_info -  /* The argument to IPT_SO_GET_ENTRIES. */  struct ipt_get_entries {  	/* Which table: user fills this in. */ -	char name[IPT_TABLE_MAXNAMELEN]; +	char name[XT_TABLE_MAXNAMELEN];  	/* User fills this in: total entry size. */  	unsigned int size; @@ -211,28 +222,13 @@ struct ipt_get_entries {  	struct ipt_entry entrytable[0];  }; -/* Standard return verdict, or do jump. */ -#define IPT_STANDARD_TARGET XT_STANDARD_TARGET -/* Error verdict. */ -#define IPT_ERROR_TARGET XT_ERROR_TARGET -  /* Helper functions */ -static __inline__ struct ipt_entry_target * +static __inline__ struct xt_entry_target *  ipt_get_target(struct ipt_entry *e)  {  	return (void *)e + e->target_offset;  } -#ifndef __KERNEL__ -/* fn returns 0 to continue iteration */ -#define IPT_MATCH_ITERATE(e, fn, args...) \ -	XT_MATCH_ITERATE(struct ipt_entry, e, fn, ## args) - -/* fn returns 0 to continue iteration */ -#define IPT_ENTRY_ITERATE(entries, size, fn, args...) \ -	XT_ENTRY_ITERATE(struct ipt_entry, entries, size, fn, ## args) -#endif -  /*   *	Main firewall chains definitions and global var's definitions.   */ @@ -249,17 +245,12 @@ extern void ipt_unregister_table(struct net *net, struct xt_table *table);  /* Standard entry. */  struct ipt_standard {  	struct ipt_entry entry; -	struct ipt_standard_target target; -}; - -struct ipt_error_target { -	struct ipt_entry_target target; -	char errorname[IPT_FUNCTION_MAXNAMELEN]; +	struct xt_standard_target target;  };  struct ipt_error {  	struct ipt_entry entry; -	struct ipt_error_target target; +	struct xt_error_target target;  };  #define IPT_ENTRY_INIT(__size)						       \ @@ -271,7 +262,7 @@ struct ipt_error {  #define IPT_STANDARD_INIT(__verdict)					       \  {									       \  	.entry		= IPT_ENTRY_INIT(sizeof(struct ipt_standard)),	       \ -	.target		= XT_TARGET_INIT(IPT_STANDARD_TARGET,		       \ +	.target		= XT_TARGET_INIT(XT_STANDARD_TARGET,		       \  					 sizeof(struct xt_standard_target)),   \  	.target.verdict	= -(__verdict) - 1,				       \  } @@ -279,8 +270,8 @@ struct ipt_error {  #define IPT_ERROR_INIT							       \  {									       \  	.entry		= IPT_ENTRY_INIT(sizeof(struct ipt_error)),	       \ -	.target		= XT_TARGET_INIT(IPT_ERROR_TARGET,		       \ -					 sizeof(struct ipt_error_target)),     \ +	.target		= XT_TARGET_INIT(XT_ERROR_TARGET,		       \ +					 sizeof(struct xt_error_target)),      \  	.target.errorname = "ERROR",					       \  } @@ -291,8 +282,6 @@ extern unsigned int ipt_do_table(struct sk_buff *skb,  				 const struct net_device *out,  				 struct xt_table *table); -#define IPT_ALIGN(s) XT_ALIGN(s) -  #ifdef CONFIG_COMPAT  #include <net/compat.h> @@ -307,14 +296,12 @@ struct compat_ipt_entry {  };  /* Helper functions */ -static inline struct ipt_entry_target * +static inline struct xt_entry_target *  compat_ipt_get_target(struct compat_ipt_entry *e)  {  	return (void *)e + e->target_offset;  } -#define COMPAT_IPT_ALIGN(s) 	COMPAT_XT_ALIGN(s) -  #endif /* CONFIG_COMPAT */  #endif /*__KERNEL__*/  #endif /* _IPTABLES_H */ diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h index 18442ff19c0..c9784f7a9c1 100644 --- a/include/linux/netfilter_ipv6/ip6_tables.h +++ b/include/linux/netfilter_ipv6/ip6_tables.h @@ -27,13 +27,42 @@  #include <linux/netfilter/x_tables.h> +#ifndef __KERNEL__  #define IP6T_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN  #define IP6T_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN -  #define ip6t_match xt_match  #define ip6t_target xt_target  #define ip6t_table xt_table  #define ip6t_get_revision xt_get_revision +#define ip6t_entry_match xt_entry_match +#define ip6t_entry_target xt_entry_target +#define ip6t_standard_target xt_standard_target +#define ip6t_error_target xt_error_target +#define ip6t_counters xt_counters +#define IP6T_CONTINUE XT_CONTINUE +#define IP6T_RETURN XT_RETURN + +/* Pre-iptables-1.4.0 */ +#include <linux/netfilter/xt_tcpudp.h> +#define ip6t_tcp xt_tcp +#define ip6t_udp xt_udp +#define IP6T_TCP_INV_SRCPT	XT_TCP_INV_SRCPT +#define IP6T_TCP_INV_DSTPT	XT_TCP_INV_DSTPT +#define IP6T_TCP_INV_FLAGS	XT_TCP_INV_FLAGS +#define IP6T_TCP_INV_OPTION	XT_TCP_INV_OPTION +#define IP6T_TCP_INV_MASK	XT_TCP_INV_MASK +#define IP6T_UDP_INV_SRCPT	XT_UDP_INV_SRCPT +#define IP6T_UDP_INV_DSTPT	XT_UDP_INV_DSTPT +#define IP6T_UDP_INV_MASK	XT_UDP_INV_MASK + +#define ip6t_counters_info xt_counters_info +#define IP6T_STANDARD_TARGET XT_STANDARD_TARGET +#define IP6T_ERROR_TARGET XT_ERROR_TARGET +#define IP6T_MATCH_ITERATE(e, fn, args...) \ +	XT_MATCH_ITERATE(struct ip6t_entry, e, fn, ## args) +#define IP6T_ENTRY_ITERATE(entries, size, fn, args...) \ +	XT_ENTRY_ITERATE(struct ip6t_entry, entries, size, fn, ## args) +#endif  /* Yes, Virginia, you have to zero the padding. */  struct ip6t_ip6 { @@ -62,12 +91,6 @@ struct ip6t_ip6 {  	u_int8_t invflags;  }; -#define ip6t_entry_match xt_entry_match -#define ip6t_entry_target xt_entry_target -#define ip6t_standard_target xt_standard_target - -#define ip6t_counters	xt_counters -  /* Values for "flag" field in struct ip6t_ip6 (general ip6 structure). */  #define IP6T_F_PROTO		0x01	/* Set if rule cares about upper   					   protocols */ @@ -112,17 +135,12 @@ struct ip6t_entry {  /* Standard entry */  struct ip6t_standard {  	struct ip6t_entry entry; -	struct ip6t_standard_target target; -}; - -struct ip6t_error_target { -	struct ip6t_entry_target target; -	char errorname[IP6T_FUNCTION_MAXNAMELEN]; +	struct xt_standard_target target;  };  struct ip6t_error {  	struct ip6t_entry entry; -	struct ip6t_error_target target; +	struct xt_error_target target;  };  #define IP6T_ENTRY_INIT(__size)						       \ @@ -134,16 +152,16 @@ struct ip6t_error {  #define IP6T_STANDARD_INIT(__verdict)					       \  {									       \  	.entry		= IP6T_ENTRY_INIT(sizeof(struct ip6t_standard)),       \ -	.target		= XT_TARGET_INIT(IP6T_STANDARD_TARGET,		       \ -					 sizeof(struct ip6t_standard_target)), \ +	.target		= XT_TARGET_INIT(XT_STANDARD_TARGET,		       \ +					 sizeof(struct xt_standard_target)),   \  	.target.verdict	= -(__verdict) - 1,				       \  }  #define IP6T_ERROR_INIT							       \  {									       \  	.entry		= IP6T_ENTRY_INIT(sizeof(struct ip6t_error)),	       \ -	.target		= XT_TARGET_INIT(IP6T_ERROR_TARGET,		       \ -					 sizeof(struct ip6t_error_target)),    \ +	.target		= XT_TARGET_INIT(XT_ERROR_TARGET,		       \ +					 sizeof(struct xt_error_target)),      \  	.target.errorname = "ERROR",					       \  } @@ -166,30 +184,6 @@ struct ip6t_error {  #define IP6T_SO_GET_REVISION_TARGET	(IP6T_BASE_CTL + 5)  #define IP6T_SO_GET_MAX			IP6T_SO_GET_REVISION_TARGET -/* CONTINUE verdict for targets */ -#define IP6T_CONTINUE XT_CONTINUE - -/* For standard target */ -#define IP6T_RETURN XT_RETURN - -/* TCP/UDP matching stuff */ -#include <linux/netfilter/xt_tcpudp.h> - -#define ip6t_tcp xt_tcp -#define ip6t_udp xt_udp - -/* Values for "inv" field in struct ipt_tcp. */ -#define IP6T_TCP_INV_SRCPT	XT_TCP_INV_SRCPT -#define IP6T_TCP_INV_DSTPT	XT_TCP_INV_DSTPT -#define IP6T_TCP_INV_FLAGS	XT_TCP_INV_FLAGS -#define IP6T_TCP_INV_OPTION	XT_TCP_INV_OPTION -#define IP6T_TCP_INV_MASK	XT_TCP_INV_MASK - -/* Values for "invflags" field in struct ipt_udp. */ -#define IP6T_UDP_INV_SRCPT	XT_UDP_INV_SRCPT -#define IP6T_UDP_INV_DSTPT	XT_UDP_INV_DSTPT -#define IP6T_UDP_INV_MASK	XT_UDP_INV_MASK -  /* ICMP matching stuff */  struct ip6t_icmp {  	u_int8_t type;				/* type to match */ @@ -203,7 +197,7 @@ struct ip6t_icmp {  /* The argument to IP6T_SO_GET_INFO */  struct ip6t_getinfo {  	/* Which table: caller fills this in. */ -	char name[IP6T_TABLE_MAXNAMELEN]; +	char name[XT_TABLE_MAXNAMELEN];  	/* Kernel fills these in. */  	/* Which hook entry points are valid: bitmask */ @@ -225,7 +219,7 @@ struct ip6t_getinfo {  /* The argument to IP6T_SO_SET_REPLACE. */  struct ip6t_replace {  	/* Which table. */ -	char name[IP6T_TABLE_MAXNAMELEN]; +	char name[XT_TABLE_MAXNAMELEN];  	/* Which hook entry points are valid: bitmask.  You can't             change this. */ @@ -253,13 +247,10 @@ struct ip6t_replace {  	struct ip6t_entry entries[0];  }; -/* The argument to IP6T_SO_ADD_COUNTERS. */ -#define ip6t_counters_info xt_counters_info -  /* The argument to IP6T_SO_GET_ENTRIES. */  struct ip6t_get_entries {  	/* Which table: user fills this in. */ -	char name[IP6T_TABLE_MAXNAMELEN]; +	char name[XT_TABLE_MAXNAMELEN];  	/* User fills this in: total entry size. */  	unsigned int size; @@ -268,28 +259,13 @@ struct ip6t_get_entries {  	struct ip6t_entry entrytable[0];  }; -/* Standard return verdict, or do jump. */ -#define IP6T_STANDARD_TARGET XT_STANDARD_TARGET -/* Error verdict. */ -#define IP6T_ERROR_TARGET XT_ERROR_TARGET -  /* Helper functions */ -static __inline__ struct ip6t_entry_target * +static __inline__ struct xt_entry_target *  ip6t_get_target(struct ip6t_entry *e)  {  	return (void *)e + e->target_offset;  } -#ifndef __KERNEL__ -/* fn returns 0 to continue iteration */ -#define IP6T_MATCH_ITERATE(e, fn, args...) \ -	XT_MATCH_ITERATE(struct ip6t_entry, e, fn, ## args) - -/* fn returns 0 to continue iteration */ -#define IP6T_ENTRY_ITERATE(entries, size, fn, args...) \ -	XT_ENTRY_ITERATE(struct ip6t_entry, entries, size, fn, ## args) -#endif -  /*   *	Main firewall chains definitions and global var's definitions.   */ @@ -316,8 +292,6 @@ extern int ip6t_ext_hdr(u8 nexthdr);  extern int ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset,  			 int target, unsigned short *fragoff); -#define IP6T_ALIGN(s) XT_ALIGN(s) -  #ifdef CONFIG_COMPAT  #include <net/compat.h> @@ -331,14 +305,12 @@ struct compat_ip6t_entry {  	unsigned char elems[0];  }; -static inline struct ip6t_entry_target * +static inline struct xt_entry_target *  compat_ip6t_get_target(struct compat_ip6t_entry *e)  {  	return (void *)e + e->target_offset;  } -#define COMPAT_IP6T_ALIGN(s)	COMPAT_XT_ALIGN(s) -  #endif /* CONFIG_COMPAT */  #endif /*__KERNEL__*/  #endif /* _IP6_TABLES_H */ diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index 50d8009be86..79358bb712c 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h @@ -14,7 +14,6 @@  struct netpoll {  	struct net_device *dev; -	struct net_device *real_dev;  	char dev_name[IFNAMSIZ];  	const char *name;  	void (*rx_hook)(struct netpoll *, int, char *, int); @@ -53,7 +52,13 @@ void netpoll_set_trap(int trap);  void __netpoll_cleanup(struct netpoll *np);  void netpoll_cleanup(struct netpoll *np);  int __netpoll_rx(struct sk_buff *skb); -void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb); +void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb, +			     struct net_device *dev); +static inline void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb) +{ +	netpoll_send_skb_on_dev(np, skb, np->dev); +} +  #ifdef CONFIG_NETPOLL diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index 2c870168733..0edb2566c14 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h @@ -40,6 +40,43 @@   */  /** + * DOC: Frame transmission/registration support + * + * Frame transmission and registration support exists to allow userspace + * management entities such as wpa_supplicant react to management frames + * that are not being handled by the kernel. This includes, for example, + * certain classes of action frames that cannot be handled in the kernel + * for various reasons. + * + * Frame registration is done on a per-interface basis and registrations + * cannot be removed other than by closing the socket. It is possible to + * specify a registration filter to register, for example, only for a + * certain type of action frame. In particular with action frames, those + * that userspace registers for will not be returned as unhandled by the + * driver, so that the registered application has to take responsibility + * for doing that. + * + * The type of frame that can be registered for is also dependent on the + * driver and interface type. The frame types are advertised in wiphy + * attributes so applications know what to expect. + * + * NOTE: When an interface changes type while registrations are active, + *       these registrations are ignored until the interface type is + *       changed again. This means that changing the interface type can + *       lead to a situation that couldn't otherwise be produced, but + *       any such registrations will be dormant in the sense that they + *       will not be serviced, i.e. they will not receive any frames. + * + * Frame transmission allows userspace to send for example the required + * responses to action frames. It is subject to some sanity checking, + * but many frames can be transmitted. When a frame was transmitted, its + * status is indicated to the sending socket. + * + * For more technical details, see the corresponding command descriptions + * below. + */ + +/**   * enum nl80211_commands - supported nl80211 commands   *   * @NL80211_CMD_UNSPEC: unspecified command to catch errors @@ -258,7 +295,9 @@   *	auth and assoc steps. For this, you need to specify the SSID in a   *	%NL80211_ATTR_SSID attribute, and can optionally specify the association   *	IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_MAC, - *	%NL80211_ATTR_WIPHY_FREQ and %NL80211_ATTR_CONTROL_PORT. + *	%NL80211_ATTR_WIPHY_FREQ, %NL80211_ATTR_CONTROL_PORT, + *	%NL80211_ATTR_CONTROL_PORT_ETHERTYPE and + *	%NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT.   *	It is also sent as an event, with the BSSID and response IEs when the   *	connection is established or failed to be established. This can be   *	determined by the STATUS_CODE attribute. @@ -276,8 +315,8 @@   *	channel for the specified amount of time. This can be used to do   *	off-channel operations like transmit a Public Action frame and wait for   *	a response while being associated to an AP on another channel. - *	%NL80211_ATTR_WIPHY or %NL80211_ATTR_IFINDEX is used to specify which - *	radio is used. %NL80211_ATTR_WIPHY_FREQ is used to specify the + *	%NL80211_ATTR_IFINDEX is used to specify which interface (and thus + *	radio) is used. %NL80211_ATTR_WIPHY_FREQ is used to specify the   *	frequency for the operation and %NL80211_ATTR_WIPHY_CHANNEL_TYPE may be   *	optionally used to specify additional channel parameters.   *	%NL80211_ATTR_DURATION is used to specify the duration in milliseconds @@ -301,16 +340,20 @@   *	rate selection. %NL80211_ATTR_IFINDEX is used to specify the interface   *	and @NL80211_ATTR_TX_RATES the set of allowed rates.   * - * @NL80211_CMD_REGISTER_ACTION: Register for receiving certain action frames - *	(via @NL80211_CMD_ACTION) for processing in userspace. This command - *	requires an interface index and a match attribute containing the first - *	few bytes of the frame that should match, e.g. a single byte for only - *	a category match or four bytes for vendor frames including the OUI. - *	The registration cannot be dropped, but is removed automatically - *	when the netlink socket is closed. Multiple registrations can be made. - * @NL80211_CMD_ACTION: Action frame TX request and RX notification. This - *	command is used both as a request to transmit an Action frame and as an - *	event indicating reception of an Action frame that was not processed in + * @NL80211_CMD_REGISTER_FRAME: Register for receiving certain mgmt frames + *	(via @NL80211_CMD_FRAME) for processing in userspace. This command + *	requires an interface index, a frame type attribute (optional for + *	backward compatibility reasons, if not given assumes action frames) + *	and a match attribute containing the first few bytes of the frame + *	that should match, e.g. a single byte for only a category match or + *	four bytes for vendor frames including the OUI. The registration + *	cannot be dropped, but is removed automatically when the netlink + *	socket is closed. Multiple registrations can be made. + * @NL80211_CMD_REGISTER_ACTION: Alias for @NL80211_CMD_REGISTER_FRAME for + *	backward compatibility + * @NL80211_CMD_FRAME: Management frame TX request and RX notification. This + *	command is used both as a request to transmit a management frame and + *	as an event indicating reception of a frame that was not processed in   *	kernel code, but is for us (i.e., which may need to be processed in a   *	user space application). %NL80211_ATTR_FRAME is used to specify the   *	frame contents (including header). %NL80211_ATTR_WIPHY_FREQ (and @@ -320,11 +363,14 @@   *	operational channel). When called, this operation returns a cookie   *	(%NL80211_ATTR_COOKIE) that will be included with the TX status event   *	pertaining to the TX request. - * @NL80211_CMD_ACTION_TX_STATUS: Report TX status of an Action frame - *	transmitted with %NL80211_CMD_ACTION. %NL80211_ATTR_COOKIE identifies + * @NL80211_CMD_ACTION: Alias for @NL80211_CMD_FRAME for backward compatibility. + * @NL80211_CMD_FRAME_TX_STATUS: Report TX status of a management frame + *	transmitted with %NL80211_CMD_FRAME. %NL80211_ATTR_COOKIE identifies   *	the TX command and %NL80211_ATTR_FRAME includes the contents of the   *	frame. %NL80211_ATTR_ACK flag is included if the recipient acknowledged   *	the frame. + * @NL80211_CMD_ACTION_TX_STATUS: Alias for @NL80211_CMD_FRAME_TX_STATUS for + *	backward compatibility.   * @NL80211_CMD_SET_CQM: Connection quality monitor configuration. This command   *	is used to configure connection quality monitoring notification trigger   *	levels. @@ -341,6 +387,8 @@   *	of any other interfaces, and other interfaces will again take   *	precedence when they are used.   * + * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface. + *   * @NL80211_CMD_MAX: highest used command number   * @__NL80211_CMD_AFTER_LAST: internal use   */ @@ -429,9 +477,12 @@ enum nl80211_commands {  	NL80211_CMD_SET_TX_BITRATE_MASK, -	NL80211_CMD_REGISTER_ACTION, -	NL80211_CMD_ACTION, -	NL80211_CMD_ACTION_TX_STATUS, +	NL80211_CMD_REGISTER_FRAME, +	NL80211_CMD_REGISTER_ACTION = NL80211_CMD_REGISTER_FRAME, +	NL80211_CMD_FRAME, +	NL80211_CMD_ACTION = NL80211_CMD_FRAME, +	NL80211_CMD_FRAME_TX_STATUS, +	NL80211_CMD_ACTION_TX_STATUS = NL80211_CMD_FRAME_TX_STATUS,  	NL80211_CMD_SET_POWER_SAVE,  	NL80211_CMD_GET_POWER_SAVE, @@ -440,6 +491,7 @@ enum nl80211_commands {  	NL80211_CMD_NOTIFY_CQM,  	NL80211_CMD_SET_CHANNEL, +	NL80211_CMD_SET_WDS_PEER,  	/* add new commands above here */ @@ -639,6 +691,15 @@ enum nl80211_commands {   *	request, the driver will assume that the port is unauthorized until   *	authorized by user space. Otherwise, port is marked authorized by   *	default in station mode. + * @NL80211_ATTR_CONTROL_PORT_ETHERTYPE: A 16-bit value indicating the + *	ethertype that will be used for key negotiation. It can be + *	specified with the associate and connect commands. If it is not + *	specified, the value defaults to 0x888E (PAE, 802.1X). This + *	attribute is also used as a flag in the wiphy information to + *	indicate that protocols other than PAE are supported. + * @NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT: When included along with + *	%NL80211_ATTR_CONTROL_PORT_ETHERTYPE, indicates that the custom + *	ethertype frames used for key negotiation must not be encrypted.   *   * @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver.   *	We recommend using nested, driver-specific attributes within this. @@ -708,7 +769,16 @@ enum nl80211_commands {   *	is used with %NL80211_CMD_SET_TX_BITRATE_MASK.   *   * @NL80211_ATTR_FRAME_MATCH: A binary attribute which typically must contain - *	at least one byte, currently used with @NL80211_CMD_REGISTER_ACTION. + *	at least one byte, currently used with @NL80211_CMD_REGISTER_FRAME. + * @NL80211_ATTR_FRAME_TYPE: A u16 indicating the frame type/subtype for the + *	@NL80211_CMD_REGISTER_FRAME command. + * @NL80211_ATTR_TX_FRAME_TYPES: wiphy capability attribute, which is a + *	nested attribute of %NL80211_ATTR_FRAME_TYPE attributes, containing + *	information about which frame types can be transmitted with + *	%NL80211_CMD_FRAME. + * @NL80211_ATTR_RX_FRAME_TYPES: wiphy capability attribute, which is a + *	nested attribute of %NL80211_ATTR_FRAME_TYPE attributes, containing + *	information about which frame types can be registered for RX.   *   * @NL80211_ATTR_ACK: Flag attribute indicating that the frame was   *	acknowledged by the recipient. @@ -731,6 +801,9 @@ enum nl80211_commands {   *      This is used in association with @NL80211_ATTR_WIPHY_TX_POWER_SETTING   *      for non-automatic settings.   * + * @NL80211_ATTR_SUPPORT_IBSS_RSN: The device supports IBSS RSN, which mostly + *	means support for per-station GTKs. + *   * @NL80211_ATTR_MAX: highest attribute number currently defined   * @__NL80211_ATTR_AFTER_LAST: internal use   */ @@ -891,6 +964,15 @@ enum nl80211_attrs {  	NL80211_ATTR_WIPHY_TX_POWER_SETTING,  	NL80211_ATTR_WIPHY_TX_POWER_LEVEL, +	NL80211_ATTR_TX_FRAME_TYPES, +	NL80211_ATTR_RX_FRAME_TYPES, +	NL80211_ATTR_FRAME_TYPE, + +	NL80211_ATTR_CONTROL_PORT_ETHERTYPE, +	NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, + +	NL80211_ATTR_SUPPORT_IBSS_RSN, +  	/* add attributes here, update the policy in nl80211.c */  	__NL80211_ATTR_AFTER_LAST, @@ -946,8 +1028,10 @@ enum nl80211_attrs {   * @NL80211_IFTYPE_WDS: wireless distribution interface   * @NL80211_IFTYPE_MONITOR: monitor interface receiving all frames   * @NL80211_IFTYPE_MESH_POINT: mesh point + * @NL80211_IFTYPE_P2P_CLIENT: P2P client + * @NL80211_IFTYPE_P2P_GO: P2P group owner   * @NL80211_IFTYPE_MAX: highest interface type number currently defined - * @__NL80211_IFTYPE_AFTER_LAST: internal use + * @NUM_NL80211_IFTYPES: number of defined interface types   *   * These values are used with the %NL80211_ATTR_IFTYPE   * to set the type of an interface. @@ -962,10 +1046,12 @@ enum nl80211_iftype {  	NL80211_IFTYPE_WDS,  	NL80211_IFTYPE_MONITOR,  	NL80211_IFTYPE_MESH_POINT, +	NL80211_IFTYPE_P2P_CLIENT, +	NL80211_IFTYPE_P2P_GO,  	/* keep last */ -	__NL80211_IFTYPE_AFTER_LAST, -	NL80211_IFTYPE_MAX = __NL80211_IFTYPE_AFTER_LAST - 1 +	NUM_NL80211_IFTYPES, +	NL80211_IFTYPE_MAX = NUM_NL80211_IFTYPES - 1  };  /** @@ -974,11 +1060,14 @@ enum nl80211_iftype {   * Station flags. When a station is added to an AP interface, it is   * assumed to be already associated (and hence authenticated.)   * + * @__NL80211_STA_FLAG_INVALID: attribute number 0 is reserved   * @NL80211_STA_FLAG_AUTHORIZED: station is authorized (802.1X)   * @NL80211_STA_FLAG_SHORT_PREAMBLE: station is capable of receiving frames   *	with short barker preamble   * @NL80211_STA_FLAG_WME: station is WME/QoS capable   * @NL80211_STA_FLAG_MFP: station uses management frame protection + * @NL80211_STA_FLAG_MAX: highest station flag number currently defined + * @__NL80211_STA_FLAG_AFTER_LAST: internal use   */  enum nl80211_sta_flags {  	__NL80211_STA_FLAG_INVALID, @@ -1048,6 +1137,8 @@ enum nl80211_rate_info {   * @NL80211_STA_INFO_RX_PACKETS: total received packet (u32, from this station)   * @NL80211_STA_INFO_TX_PACKETS: total transmitted packets (u32, to this   *	station) + * @NL80211_STA_INFO_TX_RETRIES: total retries (u32, to this station) + * @NL80211_STA_INFO_TX_FAILED: total failed packets (u32, to this station)   */  enum nl80211_sta_info {  	__NL80211_STA_INFO_INVALID, @@ -1061,6 +1152,8 @@ enum nl80211_sta_info {  	NL80211_STA_INFO_TX_BITRATE,  	NL80211_STA_INFO_RX_PACKETS,  	NL80211_STA_INFO_TX_PACKETS, +	NL80211_STA_INFO_TX_RETRIES, +	NL80211_STA_INFO_TX_FAILED,  	/* keep last */  	__NL80211_STA_INFO_AFTER_LAST, @@ -1091,14 +1184,17 @@ enum nl80211_mpath_flags {   * information about a mesh path.   *   * @__NL80211_MPATH_INFO_INVALID: attribute number 0 is reserved - * @NL80211_ATTR_MPATH_FRAME_QLEN: number of queued frames for this destination - * @NL80211_ATTR_MPATH_SN: destination sequence number - * @NL80211_ATTR_MPATH_METRIC: metric (cost) of this mesh path - * @NL80211_ATTR_MPATH_EXPTIME: expiration time for the path, in msec from now - * @NL80211_ATTR_MPATH_FLAGS: mesh path flags, enumerated in + * @NL80211_MPATH_INFO_FRAME_QLEN: number of queued frames for this destination + * @NL80211_MPATH_INFO_SN: destination sequence number + * @NL80211_MPATH_INFO_METRIC: metric (cost) of this mesh path + * @NL80211_MPATH_INFO_EXPTIME: expiration time for the path, in msec from now + * @NL80211_MPATH_INFO_FLAGS: mesh path flags, enumerated in   * 	&enum nl80211_mpath_flags; - * @NL80211_ATTR_MPATH_DISCOVERY_TIMEOUT: total path discovery timeout, in msec - * @NL80211_ATTR_MPATH_DISCOVERY_RETRIES: mesh path discovery retries + * @NL80211_MPATH_INFO_DISCOVERY_TIMEOUT: total path discovery timeout, in msec + * @NL80211_MPATH_INFO_DISCOVERY_RETRIES: mesh path discovery retries + * @NL80211_MPATH_INFO_MAX: highest mesh path information attribute number + *	currently defind + * @__NL80211_MPATH_INFO_AFTER_LAST: internal use   */  enum nl80211_mpath_info {  	__NL80211_MPATH_INFO_INVALID, @@ -1127,6 +1223,8 @@ enum nl80211_mpath_info {   * @NL80211_BAND_ATTR_HT_CAPA: HT capabilities, as in the HT information IE   * @NL80211_BAND_ATTR_HT_AMPDU_FACTOR: A-MPDU factor, as in 11n   * @NL80211_BAND_ATTR_HT_AMPDU_DENSITY: A-MPDU density, as in 11n + * @NL80211_BAND_ATTR_MAX: highest band attribute currently defined + * @__NL80211_BAND_ATTR_AFTER_LAST: internal use   */  enum nl80211_band_attr {  	__NL80211_BAND_ATTR_INVALID, @@ -1147,6 +1245,7 @@ enum nl80211_band_attr {  /**   * enum nl80211_frequency_attr - frequency attributes + * @__NL80211_FREQUENCY_ATTR_INVALID: attribute number 0 is reserved   * @NL80211_FREQUENCY_ATTR_FREQ: Frequency in MHz   * @NL80211_FREQUENCY_ATTR_DISABLED: Channel is disabled in current   *	regulatory domain. @@ -1158,6 +1257,9 @@ enum nl80211_band_attr {   *	on this channel in current regulatory domain.   * @NL80211_FREQUENCY_ATTR_MAX_TX_POWER: Maximum transmission power in mBm   *	(100 * dBm). + * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number + *	currently defined + * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use   */  enum nl80211_frequency_attr {  	__NL80211_FREQUENCY_ATTR_INVALID, @@ -1177,9 +1279,13 @@ enum nl80211_frequency_attr {  /**   * enum nl80211_bitrate_attr - bitrate attributes + * @__NL80211_BITRATE_ATTR_INVALID: attribute number 0 is reserved   * @NL80211_BITRATE_ATTR_RATE: Bitrate in units of 100 kbps   * @NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE: Short preamble supported   *	in 2.4 GHz band. + * @NL80211_BITRATE_ATTR_MAX: highest bitrate attribute number + *	currently defined + * @__NL80211_BITRATE_ATTR_AFTER_LAST: internal use   */  enum nl80211_bitrate_attr {  	__NL80211_BITRATE_ATTR_INVALID, @@ -1235,6 +1341,7 @@ enum nl80211_reg_type {  /**   * enum nl80211_reg_rule_attr - regulatory rule attributes + * @__NL80211_REG_RULE_ATTR_INVALID: attribute number 0 is reserved   * @NL80211_ATTR_REG_RULE_FLAGS: a set of flags which specify additional   * 	considerations for a given frequency range. These are the   * 	&enum nl80211_reg_rule_flags. @@ -1251,6 +1358,9 @@ enum nl80211_reg_type {   * 	If you don't have one then don't send this.   * @NL80211_ATTR_POWER_RULE_MAX_EIRP: the maximum allowed EIRP for   * 	a given frequency range. The value is in mBm (100 * dBm). + * @NL80211_REG_RULE_ATTR_MAX: highest regulatory rule attribute number + *	currently defined + * @__NL80211_REG_RULE_ATTR_AFTER_LAST: internal use   */  enum nl80211_reg_rule_attr {  	__NL80211_REG_RULE_ATTR_INVALID, @@ -1302,11 +1412,31 @@ enum nl80211_reg_rule_flags {   * @__NL80211_SURVEY_INFO_INVALID: attribute number 0 is reserved   * @NL80211_SURVEY_INFO_FREQUENCY: center frequency of channel   * @NL80211_SURVEY_INFO_NOISE: noise level of channel (u8, dBm) + * @NL80211_SURVEY_INFO_IN_USE: channel is currently being used + * @NL80211_SURVEY_INFO_CHANNEL_TIME: amount of time (in ms) that the radio + *	spent on this channel + * @NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY: amount of the time the primary + *	channel was sensed busy (either due to activity or energy detect) + * @NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY: amount of time the extension + *	channel was sensed busy + * @NL80211_SURVEY_INFO_CHANNEL_TIME_RX: amount of time the radio spent + *	receiving data + * @NL80211_SURVEY_INFO_CHANNEL_TIME_TX: amount of time the radio spent + *	transmitting data + * @NL80211_SURVEY_INFO_MAX: highest survey info attribute number + *	currently defined + * @__NL80211_SURVEY_INFO_AFTER_LAST: internal use   */  enum nl80211_survey_info {  	__NL80211_SURVEY_INFO_INVALID,  	NL80211_SURVEY_INFO_FREQUENCY,  	NL80211_SURVEY_INFO_NOISE, +	NL80211_SURVEY_INFO_IN_USE, +	NL80211_SURVEY_INFO_CHANNEL_TIME, +	NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY, +	NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY, +	NL80211_SURVEY_INFO_CHANNEL_TIME_RX, +	NL80211_SURVEY_INFO_CHANNEL_TIME_TX,  	/* keep last */  	__NL80211_SURVEY_INFO_AFTER_LAST, @@ -1466,6 +1596,7 @@ enum nl80211_channel_type {   * enum nl80211_bss - netlink attributes for a BSS   *   * @__NL80211_BSS_INVALID: invalid + * @NL80211_BSS_BSSID: BSSID of the BSS (6 octets)   * @NL80211_BSS_FREQUENCY: frequency in MHz (u32)   * @NL80211_BSS_TSF: TSF of the received probe response/beacon (u64)   * @NL80211_BSS_BEACON_INTERVAL: beacon interval of the (I)BSS (u16) @@ -1509,6 +1640,12 @@ enum nl80211_bss {  /**   * enum nl80211_bss_status - BSS "status" + * @NL80211_BSS_STATUS_AUTHENTICATED: Authenticated with this BSS. + * @NL80211_BSS_STATUS_ASSOCIATED: Associated with this BSS. + * @NL80211_BSS_STATUS_IBSS_JOINED: Joined to this IBSS. + * + * The BSS status is a BSS attribute in scan dumps, which + * indicates the status the interface has wrt. this BSS.   */  enum nl80211_bss_status {  	NL80211_BSS_STATUS_AUTHENTICATED, @@ -1546,11 +1683,14 @@ enum nl80211_auth_type {   * @NL80211_KEYTYPE_GROUP: Group (broadcast/multicast) key   * @NL80211_KEYTYPE_PAIRWISE: Pairwise (unicast/individual) key   * @NL80211_KEYTYPE_PEERKEY: PeerKey (DLS) + * @NUM_NL80211_KEYTYPES: number of defined key types   */  enum nl80211_key_type {  	NL80211_KEYTYPE_GROUP,  	NL80211_KEYTYPE_PAIRWISE,  	NL80211_KEYTYPE_PEERKEY, + +	NUM_NL80211_KEYTYPES  };  /** @@ -1581,6 +1721,9 @@ enum nl80211_wpa_versions {   *	CCMP keys, each six bytes in little endian   * @NL80211_KEY_DEFAULT: flag indicating default key   * @NL80211_KEY_DEFAULT_MGMT: flag indicating default management key + * @NL80211_KEY_TYPE: the key type from enum nl80211_key_type, if not + *	specified the default depends on whether a MAC address was + *	given with the command using the key or not (u32)   * @__NL80211_KEY_AFTER_LAST: internal   * @NL80211_KEY_MAX: highest key attribute   */ @@ -1592,6 +1735,7 @@ enum nl80211_key_attributes {  	NL80211_KEY_SEQ,  	NL80211_KEY_DEFAULT,  	NL80211_KEY_DEFAULT_MGMT, +	NL80211_KEY_TYPE,  	/* keep last */  	__NL80211_KEY_AFTER_LAST, @@ -1619,8 +1763,8 @@ enum nl80211_tx_rate_attributes {  /**   * enum nl80211_band - Frequency band - * @NL80211_BAND_2GHZ - 2.4 GHz ISM band - * @NL80211_BAND_5GHZ - around 5 GHz band (4.9 - 5.7 GHz) + * @NL80211_BAND_2GHZ: 2.4 GHz ISM band + * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz)   */  enum nl80211_band {  	NL80211_BAND_2GHZ, @@ -1658,9 +1802,9 @@ enum nl80211_attr_cqm {  /**   * enum nl80211_cqm_rssi_threshold_event - RSSI threshold event - * @NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW - The RSSI level is lower than the + * @NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW: The RSSI level is lower than the   *      configured threshold - * @NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH - The RSSI is higher than the + * @NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH: The RSSI is higher than the   *      configured threshold   */  enum nl80211_cqm_rssi_threshold_event { diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index e4471b27c39..90c038c0ad9 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -2194,6 +2194,9 @@  #define PCI_VENDOR_ID_ARIMA		0x161f  #define PCI_VENDOR_ID_BROCADE		0x1657 +#define PCI_DEVICE_ID_BROCADE_CT	0x0014 +#define PCI_DEVICE_ID_BROCADE_FC_8G1P	0x0017 +#define PCI_DEVICE_ID_BROCADE_CT_FC	0x0021  #define PCI_VENDOR_ID_SIBYTE		0x166d  #define PCI_DEVICE_ID_BCM1250_PCI	0x0001 diff --git a/include/linux/phonet.h b/include/linux/phonet.h index 76edadf046d..26c8df78691 100644 --- a/include/linux/phonet.h +++ b/include/linux/phonet.h @@ -36,6 +36,9 @@  /* Socket options for SOL_PNPIPE level */  #define PNPIPE_ENCAP		1  #define PNPIPE_IFINDEX		2 +#define PNPIPE_PIPE_HANDLE	3 +#define PNPIPE_ENABLE           4 +/* unused slot */  #define PNADDR_ANY		0  #define PNADDR_BROADCAST	0xFC @@ -47,6 +50,8 @@  /* ioctls */  #define SIOCPNGETOBJECT		(SIOCPROTOPRIVATE + 0) +#define SIOCPNADDRESOURCE	(SIOCPROTOPRIVATE + 14) +#define SIOCPNDELRESOURCE	(SIOCPROTOPRIVATE + 15)  /* Phonet protocol header */  struct phonethdr { diff --git a/include/linux/phy.h b/include/linux/phy.h index 6b0a782c622..a6e047a04f7 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -116,7 +116,7 @@ struct mii_bus {  	/* list of all PHYs on bus */  	struct phy_device *phy_map[PHY_MAX_ADDR]; -	/* Phy addresses to be ignored when probing */ +	/* PHY addresses to be ignored when probing */  	u32 phy_mask;  	/* @@ -283,7 +283,7 @@ struct phy_device {  	phy_interface_t interface; -	/* Bus address of the PHY (0-32) */ +	/* Bus address of the PHY (0-31) */  	int addr;  	/* diff --git a/include/linux/pkt_cls.h b/include/linux/pkt_cls.h index 7f6ba8658ab..defbde203d0 100644 --- a/include/linux/pkt_cls.h +++ b/include/linux/pkt_cls.h @@ -332,6 +332,7 @@ enum {  	FLOW_KEY_SKUID,  	FLOW_KEY_SKGID,  	FLOW_KEY_VLAN_TAG, +	FLOW_KEY_RXHASH,  	__FLOW_KEY_MAX,  }; diff --git a/include/linux/rds.h b/include/linux/rds.h index 24bce3ded9e..91950950aa5 100644 --- a/include/linux/rds.h +++ b/include/linux/rds.h @@ -36,15 +36,6 @@  #include <linux/types.h> -/* These sparse annotated types shouldn't be in any user - * visible header file. We should clean this up rather - * than kludging around them. */ -#ifndef __KERNEL__ -#define __be16	u_int16_t -#define __be32	u_int32_t -#define __be64	u_int64_t -#endif -  #define RDS_IB_ABI_VERSION		0x301  /* @@ -82,6 +73,10 @@  #define RDS_CMSG_RDMA_MAP		3  #define RDS_CMSG_RDMA_STATUS		4  #define RDS_CMSG_CONG_UPDATE		5 +#define RDS_CMSG_ATOMIC_FADD		6 +#define RDS_CMSG_ATOMIC_CSWP		7 +#define RDS_CMSG_MASKED_ATOMIC_FADD	8 +#define RDS_CMSG_MASKED_ATOMIC_CSWP	9  #define RDS_INFO_FIRST			10000  #define RDS_INFO_COUNTERS		10000 @@ -98,9 +93,9 @@  #define RDS_INFO_LAST			10010  struct rds_info_counter { -	u_int8_t	name[32]; -	u_int64_t	value; -} __packed; +	uint8_t	name[32]; +	uint64_t	value; +} __attribute__((packed));  #define RDS_INFO_CONNECTION_FLAG_SENDING	0x01  #define RDS_INFO_CONNECTION_FLAG_CONNECTING	0x02 @@ -109,56 +104,48 @@ struct rds_info_counter {  #define TRANSNAMSIZ	16  struct rds_info_connection { -	u_int64_t	next_tx_seq; -	u_int64_t	next_rx_seq; -	__be32		laddr; -	__be32		faddr; -	u_int8_t	transport[TRANSNAMSIZ];		/* null term ascii */ -	u_int8_t	flags; -} __packed; - -struct rds_info_flow { +	uint64_t	next_tx_seq; +	uint64_t	next_rx_seq;  	__be32		laddr;  	__be32		faddr; -	u_int32_t	bytes; -	__be16		lport; -	__be16		fport; -} __packed; +	uint8_t	transport[TRANSNAMSIZ];		/* null term ascii */ +	uint8_t	flags; +} __attribute__((packed));  #define RDS_INFO_MESSAGE_FLAG_ACK               0x01  #define RDS_INFO_MESSAGE_FLAG_FAST_ACK          0x02  struct rds_info_message { -	u_int64_t	seq; -	u_int32_t	len; +	uint64_t	seq; +	uint32_t	len;  	__be32		laddr;  	__be32		faddr;  	__be16		lport;  	__be16		fport; -	u_int8_t	flags; -} __packed; +	uint8_t	flags; +} __attribute__((packed));  struct rds_info_socket { -	u_int32_t	sndbuf; +	uint32_t	sndbuf;  	__be32		bound_addr;  	__be32		connected_addr;  	__be16		bound_port;  	__be16		connected_port; -	u_int32_t	rcvbuf; -	u_int64_t	inum; -} __packed; +	uint32_t	rcvbuf; +	uint64_t	inum; +} __attribute__((packed));  struct rds_info_tcp_socket {  	__be32          local_addr;  	__be16          local_port;  	__be32          peer_addr;  	__be16          peer_port; -	u_int64_t       hdr_rem; -	u_int64_t       data_rem; -	u_int32_t       last_sent_nxt; -	u_int32_t       last_expected_una; -	u_int32_t       last_seen_una; -} __packed; +	uint64_t       hdr_rem; +	uint64_t       data_rem; +	uint32_t       last_sent_nxt; +	uint32_t       last_expected_una; +	uint32_t       last_seen_una; +} __attribute__((packed));  #define RDS_IB_GID_LEN	16  struct rds_info_rdma_connection { @@ -212,42 +199,69 @@ struct rds_info_rdma_connection {   * (so that the application does not have to worry about   * alignment).   */ -typedef u_int64_t	rds_rdma_cookie_t; +typedef uint64_t	rds_rdma_cookie_t;  struct rds_iovec { -	u_int64_t	addr; -	u_int64_t	bytes; +	uint64_t	addr; +	uint64_t	bytes;  };  struct rds_get_mr_args {  	struct rds_iovec vec; -	u_int64_t	cookie_addr; +	uint64_t	cookie_addr;  	uint64_t	flags;  };  struct rds_get_mr_for_dest_args {  	struct sockaddr_storage	dest_addr;  	struct rds_iovec 	vec; -	u_int64_t		cookie_addr; +	uint64_t		cookie_addr;  	uint64_t		flags;  };  struct rds_free_mr_args {  	rds_rdma_cookie_t cookie; -	u_int64_t	flags; +	uint64_t	flags;  };  struct rds_rdma_args {  	rds_rdma_cookie_t cookie;  	struct rds_iovec remote_vec; -	u_int64_t	local_vec_addr; -	u_int64_t	nr_local; -	u_int64_t	flags; -	u_int64_t	user_token; +	uint64_t	local_vec_addr; +	uint64_t	nr_local; +	uint64_t	flags; +	uint64_t	user_token; +}; + +struct rds_atomic_args { +	rds_rdma_cookie_t cookie; +	uint64_t 	local_addr; +	uint64_t 	remote_addr; +	union { +		struct { +			uint64_t	compare; +			uint64_t	swap; +		} cswp; +		struct { +			uint64_t	add; +		} fadd; +		struct { +			uint64_t	compare; +			uint64_t	swap; +			uint64_t	compare_mask; +			uint64_t	swap_mask; +		} m_cswp; +		struct { +			uint64_t	add; +			uint64_t	nocarry_mask; +		} m_fadd; +	}; +	uint64_t	flags; +	uint64_t	user_token;  };  struct rds_rdma_notify { -	u_int64_t	user_token; +	uint64_t	user_token;  	int32_t		status;  }; @@ -266,5 +280,6 @@ struct rds_rdma_notify {  #define RDS_RDMA_USE_ONCE	0x0008	/* free MR after use */  #define RDS_RDMA_DONTWAIT	0x0010	/* Don't wait in SET_BARRIER */  #define RDS_RDMA_NOTIFY_ME	0x0020	/* Notify when operation completes */ +#define RDS_RDMA_SILENT		0x0040	/* Do not interrupt remote */  #endif /* IB_RDS_H */ diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index 58d44491880..d42f274418b 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h @@ -6,6 +6,7 @@  #include <linux/if_link.h>  #include <linux/if_addr.h>  #include <linux/neighbour.h> +#include <linux/netdevice.h>  /* rtnetlink families. Values up to 127 are reserved for real address   * families, values above 128 may be used arbitrarily. @@ -749,6 +750,35 @@ extern int rtnl_is_locked(void);  extern int lockdep_rtnl_is_held(void);  #endif /* #ifdef CONFIG_PROVE_LOCKING */ +/** + * rcu_dereference_rtnl - rcu_dereference with debug checking + * @p: The pointer to read, prior to dereferencing + * + * Do an rcu_dereference(p), but check caller either holds rcu_read_lock() + * or RTNL. Note : Please prefer rtnl_dereference() or rcu_dereference() + */ +#define rcu_dereference_rtnl(p)					\ +	rcu_dereference_check(p, rcu_read_lock_held() ||	\ +				 lockdep_rtnl_is_held()) + +/** + * rtnl_dereference - fetch RCU pointer when updates are prevented by RTNL + * @p: The pointer to read, prior to dereferencing + * + * Return the value of the specified RCU-protected pointer, but omit + * both the smp_read_barrier_depends() and the ACCESS_ONCE(), because + * caller holds RTNL. + */ +#define rtnl_dereference(p)					\ +	rcu_dereference_protected(p, lockdep_rtnl_is_held()) + +static inline struct netdev_queue *dev_ingress_queue(struct net_device *dev) +{ +	return rtnl_dereference(dev->ingress_queue); +} + +extern struct netdev_queue *dev_ingress_queue_create(struct net_device *dev); +  extern void rtnetlink_init(void);  extern void __rtnl_unlock(void); diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 77eb60d2b49..e6ba898de61 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -129,8 +129,13 @@ typedef struct skb_frag_struct skb_frag_t;  struct skb_frag_struct {  	struct page *page; +#if (BITS_PER_LONG > 32) || (PAGE_SIZE >= 65536)  	__u32 page_offset;  	__u32 size; +#else +	__u16 page_offset; +	__u16 size; +#endif  };  #define HAVE_HW_TIME_STAMP @@ -163,26 +168,19 @@ struct skb_shared_hwtstamps {  	ktime_t	syststamp;  }; -/** - * struct skb_shared_tx - instructions for time stamping of outgoing packets - * @hardware:		generate hardware time stamp - * @software:		generate software time stamp - * @in_progress:	device driver is going to provide - *			hardware time stamp - * @prevent_sk_orphan:	make sk reference available on driver level - * @flags:		all shared_tx flags - * - * These flags are attached to packets as part of the - * &skb_shared_info. Use skb_tx() to get a pointer. - */ -union skb_shared_tx { -	struct { -		__u8	hardware:1, -			software:1, -			in_progress:1, -			prevent_sk_orphan:1; -	}; -	__u8 flags; +/* Definitions for tx_flags in struct skb_shared_info */ +enum { +	/* generate hardware time stamp */ +	SKBTX_HW_TSTAMP = 1 << 0, + +	/* generate software time stamp */ +	SKBTX_SW_TSTAMP = 1 << 1, + +	/* device driver is going to provide hardware time stamp */ +	SKBTX_IN_PROGRESS = 1 << 2, + +	/* ensure the originating sk reference is available on driver level */ +	SKBTX_DRV_NEEDS_SK_REF = 1 << 3,  };  /* This data is invariant across clones and lives at @@ -195,7 +193,7 @@ struct skb_shared_info {  	unsigned short	gso_segs;  	unsigned short  gso_type;  	__be32          ip6_frag_id; -	union skb_shared_tx tx_flags; +	__u8		tx_flags;  	struct sk_buff	*frag_list;  	struct skb_shared_hwtstamps hwtstamps; @@ -462,19 +460,7 @@ static inline void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst)  	skb->_skb_refdst = (unsigned long)dst;  } -/** - * skb_dst_set_noref - sets skb dst, without a reference - * @skb: buffer - * @dst: dst entry - * - * Sets skb dst, assuming a reference was not taken on dst - * skb_dst_drop() should not dst_release() this dst - */ -static inline void skb_dst_set_noref(struct sk_buff *skb, struct dst_entry *dst) -{ -	WARN_ON(!rcu_read_lock_held() && !rcu_read_lock_bh_held()); -	skb->_skb_refdst = (unsigned long)dst | SKB_DST_NOREF; -} +extern void skb_dst_set_noref(struct sk_buff *skb, struct dst_entry *dst);  /**   * skb_dst_is_noref - Test if skb dst isnt refcounted @@ -498,13 +484,13 @@ extern struct sk_buff *__alloc_skb(unsigned int size,  static inline struct sk_buff *alloc_skb(unsigned int size,  					gfp_t priority)  { -	return __alloc_skb(size, priority, 0, -1); +	return __alloc_skb(size, priority, 0, NUMA_NO_NODE);  }  static inline struct sk_buff *alloc_skb_fclone(unsigned int size,  					       gfp_t priority)  { -	return __alloc_skb(size, priority, 1, -1); +	return __alloc_skb(size, priority, 1, NUMA_NO_NODE);  }  extern bool skb_recycle_check(struct sk_buff *skb, int skb_size); @@ -558,6 +544,15 @@ extern unsigned int   skb_find_text(struct sk_buff *skb, unsigned int from,  				    unsigned int to, struct ts_config *config,  				    struct ts_state *state); +extern __u32 __skb_get_rxhash(struct sk_buff *skb); +static inline __u32 skb_get_rxhash(struct sk_buff *skb) +{ +	if (!skb->rxhash) +		skb->rxhash = __skb_get_rxhash(skb); + +	return skb->rxhash; +} +  #ifdef NET_SKBUFF_DATA_USES_OFFSET  static inline unsigned char *skb_end_pointer(const struct sk_buff *skb)  { @@ -578,11 +573,6 @@ static inline struct skb_shared_hwtstamps *skb_hwtstamps(struct sk_buff *skb)  	return &skb_shinfo(skb)->hwtstamps;  } -static inline union skb_shared_tx *skb_tx(struct sk_buff *skb) -{ -	return &skb_shinfo(skb)->tx_flags; -} -  /**   *	skb_queue_empty - check if a queue is empty   *	@list: queue head @@ -604,7 +594,7 @@ static inline int skb_queue_empty(const struct sk_buff_head *list)  static inline bool skb_queue_is_last(const struct sk_buff_head *list,  				     const struct sk_buff *skb)  { -	return (skb->next == (struct sk_buff *) list); +	return skb->next == (struct sk_buff *)list;  }  /** @@ -617,7 +607,7 @@ static inline bool skb_queue_is_last(const struct sk_buff_head *list,  static inline bool skb_queue_is_first(const struct sk_buff_head *list,  				      const struct sk_buff *skb)  { -	return (skb->prev == (struct sk_buff *) list); +	return skb->prev == (struct sk_buff *)list;  }  /** @@ -1123,7 +1113,7 @@ extern void skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page,  			    int off, int size);  #define SKB_PAGE_ASSERT(skb) 	BUG_ON(skb_shinfo(skb)->nr_frags) -#define SKB_FRAG_ASSERT(skb) 	BUG_ON(skb_has_frags(skb)) +#define SKB_FRAG_ASSERT(skb) 	BUG_ON(skb_has_frag_list(skb))  #define SKB_LINEAR_ASSERT(skb)  BUG_ON(skb_is_nonlinear(skb))  #ifdef NET_SKBUFF_DATA_USES_OFFSET @@ -1561,13 +1551,25 @@ static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev,  	return skb;  } -extern struct page *__netdev_alloc_page(struct net_device *dev, gfp_t gfp_mask); +/** + *	__netdev_alloc_page - allocate a page for ps-rx on a specific device + *	@dev: network device to receive on + *	@gfp_mask: alloc_pages_node mask + * + * 	Allocate a new page. dev currently unused. + * + * 	%NULL is returned if there is no free memory. + */ +static inline struct page *__netdev_alloc_page(struct net_device *dev, gfp_t gfp_mask) +{ +	return alloc_pages_node(NUMA_NO_NODE, gfp_mask, 0); +}  /**   *	netdev_alloc_page - allocate a page for ps-rx on a specific device   *	@dev: network device to receive on   * - * 	Allocate a new page node local to the specified device. + * 	Allocate a new page. dev currently unused.   *   * 	%NULL is returned if there is no free memory.   */ @@ -1787,7 +1789,7 @@ static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)  		     skb = skb->prev) -static inline bool skb_has_frags(const struct sk_buff *skb) +static inline bool skb_has_frag_list(const struct sk_buff *skb)  {  	return skb_shinfo(skb)->frag_list != NULL;  } @@ -1987,8 +1989,8 @@ extern void skb_tstamp_tx(struct sk_buff *orig_skb,  static inline void sw_tx_timestamp(struct sk_buff *skb)  { -	union skb_shared_tx *shtx = skb_tx(skb); -	if (shtx->software && !shtx->in_progress) +	if (skb_shinfo(skb)->tx_flags & SKBTX_SW_TSTAMP && +	    !(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS))  		skb_tstamp_tx(skb, NULL);  } @@ -2159,7 +2161,7 @@ static inline u16 skb_get_rx_queue(const struct sk_buff *skb)  static inline bool skb_rx_queue_recorded(const struct sk_buff *skb)  { -	return (skb->queue_mapping != 0); +	return skb->queue_mapping != 0;  }  extern u16 skb_tx_hash(const struct net_device *dev, @@ -2209,6 +2211,21 @@ static inline void skb_forward_csum(struct sk_buff *skb)  		skb->ip_summed = CHECKSUM_NONE;  } +/** + * skb_checksum_none_assert - make sure skb ip_summed is CHECKSUM_NONE + * @skb: skb to check + * + * fresh skbs have their ip_summed set to CHECKSUM_NONE. + * Instead of forcing ip_summed to CHECKSUM_NONE, we can + * use this helper, to document places where we make this assertion. + */ +static inline void skb_checksum_none_assert(struct sk_buff *skb) +{ +#ifdef DEBUG +	BUG_ON(skb->ip_summed != CHECKSUM_NONE); +#endif +} +  bool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off);  #endif	/* __KERNEL__ */  #endif	/* _LINUX_SKBUFF_H */ diff --git a/include/linux/socket.h b/include/linux/socket.h index a8f56e1ec76..5146b50202c 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h @@ -326,7 +326,6 @@ extern long verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr *a  extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len);  extern int memcpy_toiovecend(const struct iovec *v, unsigned char *kdata,  			     int offset, int len); -extern int move_addr_to_user(struct sockaddr *kaddr, int klen, void __user *uaddr, int __user *ulen);  extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr);  extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); diff --git a/include/linux/ssb/ssb_regs.h b/include/linux/ssb/ssb_regs.h index a6d5225b927..11daf9c140e 100644 --- a/include/linux/ssb/ssb_regs.h +++ b/include/linux/ssb/ssb_regs.h @@ -97,6 +97,7 @@  #define  SSB_TMSLOW_RESET	0x00000001 /* Reset */  #define  SSB_TMSLOW_REJECT_22	0x00000002 /* Reject (Backplane rev 2.2) */  #define  SSB_TMSLOW_REJECT_23	0x00000004 /* Reject (Backplane rev 2.3) */ +#define  SSB_TMSLOW_PHYCLK	0x00000010 /* MAC PHY Clock Control Enable */  #define  SSB_TMSLOW_CLOCK	0x00010000 /* Clock Enable */  #define  SSB_TMSLOW_FGC		0x00020000 /* Force Gated Clocks On */  #define  SSB_TMSLOW_PE		0x40000000 /* Power Management Enable */ diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h index 632ff7c0328..d66c61774d9 100644 --- a/include/linux/stmmac.h +++ b/include/linux/stmmac.h @@ -32,10 +32,14 @@  struct plat_stmmacenet_data {  	int bus_id;  	int pbl; +	int clk_csr;  	int has_gmac;  	int enh_desc; +	int tx_coe; +	int bugged_jumbo; +	int pmt;  	void (*fix_mac_speed)(void *priv, unsigned int speed); -	void (*bus_setup)(unsigned long ioaddr); +	void (*bus_setup)(void __iomem *ioaddr);  #ifdef CONFIG_STM_DRIVERS  	struct stm_pad_config *pad_config;  #endif diff --git a/include/linux/tc_act/Kbuild b/include/linux/tc_act/Kbuild index 76990937f4c..67b501c302b 100644 --- a/include/linux/tc_act/Kbuild +++ b/include/linux/tc_act/Kbuild @@ -4,3 +4,4 @@ header-y += tc_mirred.h  header-y += tc_pedit.h  header-y += tc_nat.h  header-y += tc_skbedit.h +header-y += tc_csum.h diff --git a/include/linux/tc_act/tc_csum.h b/include/linux/tc_act/tc_csum.h new file mode 100644 index 00000000000..a047c49a315 --- /dev/null +++ b/include/linux/tc_act/tc_csum.h @@ -0,0 +1,32 @@ +#ifndef __LINUX_TC_CSUM_H +#define __LINUX_TC_CSUM_H + +#include <linux/types.h> +#include <linux/pkt_cls.h> + +#define TCA_ACT_CSUM 16 + +enum { +	TCA_CSUM_UNSPEC, +	TCA_CSUM_PARMS, +	TCA_CSUM_TM, +	__TCA_CSUM_MAX +}; +#define TCA_CSUM_MAX (__TCA_CSUM_MAX - 1) + +enum { +	TCA_CSUM_UPDATE_FLAG_IPV4HDR = 1, +	TCA_CSUM_UPDATE_FLAG_ICMP    = 2, +	TCA_CSUM_UPDATE_FLAG_IGMP    = 4, +	TCA_CSUM_UPDATE_FLAG_TCP     = 8, +	TCA_CSUM_UPDATE_FLAG_UDP     = 16, +	TCA_CSUM_UPDATE_FLAG_UDPLITE = 32 +}; + +struct tc_csum { +	tc_gen; + +	__u32 update_flags; +}; + +#endif /* __LINUX_TC_CSUM_H */ diff --git a/include/linux/tc_ematch/tc_em_meta.h b/include/linux/tc_ematch/tc_em_meta.h index 0864206ec1a..7138962664f 100644 --- a/include/linux/tc_ematch/tc_em_meta.h +++ b/include/linux/tc_ematch/tc_em_meta.h @@ -79,6 +79,7 @@ enum {   	TCF_META_ID_SK_SENDMSG_OFF,   	TCF_META_ID_SK_WRITE_PENDING,  	TCF_META_ID_VLAN_TAG, +	TCF_META_ID_RXHASH,  	__TCF_META_ID_MAX  };  #define TCF_META_ID_MAX (__TCF_META_ID_MAX - 1) diff --git a/include/linux/tcp.h b/include/linux/tcp.h index a778ee02459..e64f4c67d0e 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h @@ -105,6 +105,7 @@ enum {  #define TCP_COOKIE_TRANSACTIONS	15	/* TCP Cookie Transactions */  #define TCP_THIN_LINEAR_TIMEOUTS 16      /* Use linear timeouts for thin streams*/  #define TCP_THIN_DUPACK         17      /* Fast retrans. after 1 dupack */ +#define TCP_USER_TIMEOUT	18	/* How long for loss retry before timeout */  /* for TCP_INFO socket option */  #define TCPI_OPT_TIMESTAMPS	1 diff --git a/include/linux/tipc.h b/include/linux/tipc.h index 181c8d0e6f7..d10614b29d5 100644 --- a/include/linux/tipc.h +++ b/include/linux/tipc.h @@ -127,17 +127,23 @@ static inline unsigned int tipc_node(__u32 addr)   * TIPC topology subscription service definitions   */ -#define TIPC_SUB_SERVICE     	0x00  	/* Filter for service availability    */ -#define TIPC_SUB_PORTS     	0x01  	/* Filter for port availability  */ -#define TIPC_SUB_CANCEL         0x04    /* Cancel a subscription         */ +#define TIPC_SUB_PORTS     	0x01  	/* filter for port availability */ +#define TIPC_SUB_SERVICE     	0x02  	/* filter for service availability */ +#define TIPC_SUB_CANCEL         0x04    /* cancel a subscription */ +#if 0 +/* The following filter options are not currently implemented */ +#define TIPC_SUB_NO_BIND_EVTS	0x04	/* filter out "publish" events */ +#define TIPC_SUB_NO_UNBIND_EVTS	0x08	/* filter out "withdraw" events */ +#define TIPC_SUB_SINGLE_EVT	0x10	/* expire after first event */ +#endif  #define TIPC_WAIT_FOREVER	~0	/* timeout for permanent subscription */  struct tipc_subscr { -	struct tipc_name_seq seq;	/* NBO. Name sequence of interest */ -	__u32 timeout;			/* NBO. Subscription duration (in ms) */ -        __u32 filter;   		/* NBO. Bitmask of filter options */ -	char usr_handle[8];		/* Opaque. Available for subscriber use */ +	struct tipc_name_seq seq;	/* name sequence of interest */ +	__u32 timeout;			/* subscription duration (in ms) */ +        __u32 filter;   		/* bitmask of filter options */ +	char usr_handle[8];		/* available for subscriber use */  };  #define TIPC_PUBLISHED		1	/* publication event */ @@ -145,11 +151,11 @@ struct tipc_subscr {  #define TIPC_SUBSCR_TIMEOUT	3	/* subscription timeout event */  struct tipc_event { -	__u32 event;			/* NBO. Event type, as defined above */ -	__u32 found_lower;		/* NBO. Matching name seq instances  */ -	__u32 found_upper;		/*  "      "       "   "    "        */ -	struct tipc_portid port;	/* NBO. Associated port              */ -	struct tipc_subscr s;		/* Original, associated subscription */ +	__u32 event;			/* event type */ +	__u32 found_lower;		/* matching name seq instances */ +	__u32 found_upper;		/*    "      "    "     "      */ +	struct tipc_portid port;	/* associated port */ +	struct tipc_subscr s;		/* associated subscription */  };  /* diff --git a/include/linux/wireless.h b/include/linux/wireless.h index e6827eedf18..4395b28bb86 100644 --- a/include/linux/wireless.h +++ b/include/linux/wireless.h @@ -1157,6 +1157,6 @@ struct __compat_iw_event {  #define IW_EV_PARAM_PK_LEN	(IW_EV_LCP_PK_LEN + sizeof(struct iw_param))  #define IW_EV_ADDR_PK_LEN	(IW_EV_LCP_PK_LEN + sizeof(struct sockaddr))  #define IW_EV_QUAL_PK_LEN	(IW_EV_LCP_PK_LEN + sizeof(struct iw_quality)) -#define IW_EV_POINT_PK_LEN	(IW_EV_LCP_LEN + 4) +#define IW_EV_POINT_PK_LEN	(IW_EV_LCP_PK_LEN + 4)  #endif	/* _LINUX_WIRELESS_H */ diff --git a/include/linux/spi/wl12xx.h b/include/linux/wl12xx.h index a223ecbc71e..4f902e1908a 100644 --- a/include/linux/spi/wl12xx.h +++ b/include/linux/wl12xx.h @@ -3,7 +3,7 @@   *   * Copyright (C) 2009 Nokia Corporation   * - * Contact: Kalle Valo <kalle.valo@nokia.com> + * Contact: Luciano Coelho <luciano.coelho@nokia.com>   *   * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License @@ -21,14 +21,31 @@   *   */ -#ifndef _LINUX_SPI_WL12XX_H -#define _LINUX_SPI_WL12XX_H +#ifndef _LINUX_WL12XX_H +#define _LINUX_WL12XX_H  struct wl12xx_platform_data {  	void (*set_power)(bool enable);  	/* SDIO only: IRQ number if WLAN_IRQ line is used, 0 for SDIO IRQs */  	int irq;  	bool use_eeprom; +	int board_ref_clock;  }; +#ifdef CONFIG_WL12XX_PLATFORM_DATA + +int wl12xx_set_platform_data(const struct wl12xx_platform_data *data); + +#else + +static inline +int wl12xx_set_platform_data(const struct wl12xx_platform_data *data) +{ +	return -ENOSYS; +} + +#endif + +const struct wl12xx_platform_data *wl12xx_get_platform_data(void); +  #endif  |