diff options
Diffstat (limited to 'include/net/sctp')
| -rw-r--r-- | include/net/sctp/auth.h | 5 | ||||
| -rw-r--r-- | include/net/sctp/checksum.h | 61 | ||||
| -rw-r--r-- | include/net/sctp/command.h | 5 | ||||
| -rw-r--r-- | include/net/sctp/constants.h | 5 | ||||
| -rw-r--r-- | include/net/sctp/sctp.h | 47 | ||||
| -rw-r--r-- | include/net/sctp/sm.h | 5 | ||||
| -rw-r--r-- | include/net/sctp/structs.h | 85 | ||||
| -rw-r--r-- | include/net/sctp/tsnmap.h | 5 | ||||
| -rw-r--r-- | include/net/sctp/ulpevent.h | 5 | ||||
| -rw-r--r-- | include/net/sctp/ulpqueue.h | 5 | 
10 files changed, 86 insertions, 142 deletions
diff --git a/include/net/sctp/auth.h b/include/net/sctp/auth.h index aa80bef3c9d..f2d58aa37a6 100644 --- a/include/net/sctp/auth.h +++ b/include/net/sctp/auth.h @@ -16,9 +16,8 @@   * See the GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with GNU CC; see the file COPYING.  If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * along with GNU CC; see the file COPYING.  If not, see + * <http://www.gnu.org/licenses/>.   *   * Please send any bug reports or fixes you make to the   * email address(es): diff --git a/include/net/sctp/checksum.h b/include/net/sctp/checksum.h index 259924d63ba..4a5b9a306c6 100644 --- a/include/net/sctp/checksum.h +++ b/include/net/sctp/checksum.h @@ -19,9 +19,8 @@   * See the GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with GNU CC; see the file COPYING.  If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * along with GNU CC; see the file COPYING.  If not, see + * <http://www.gnu.org/licenses/>.   *   * Please send any bug reports or fixes you make to the   * email address(es): @@ -42,56 +41,38 @@  #include <linux/types.h>  #include <net/sctp/sctp.h>  #include <linux/crc32c.h> +#include <linux/crc32.h> -static inline __u32 sctp_crc32c(__u32 crc, u8 *buffer, u16 length) +static inline __wsum sctp_csum_update(const void *buff, int len, __wsum sum)  { -	return crc32c(crc, buffer, length); -} - -static inline __u32 sctp_start_cksum(__u8 *buffer, __u16 length) -{ -	__u32 crc = ~(__u32)0; -	__u8  zero[sizeof(__u32)] = {0}; - -	/* Optimize this routine to be SCTP specific, knowing how -	 * to skip the checksum field of the SCTP header. +	/* This uses the crypto implementation of crc32c, which is either +	 * implemented w/ hardware support or resolves to __crc32c_le().  	 */ - -	/* Calculate CRC up to the checksum. */ -	crc = sctp_crc32c(crc, buffer, sizeof(struct sctphdr) - sizeof(__u32)); - -	/* Skip checksum field of the header. */ -	crc = sctp_crc32c(crc, zero, sizeof(__u32)); - -	/* Calculate the rest of the CRC. */ -	crc = sctp_crc32c(crc, &buffer[sizeof(struct sctphdr)], -			    length - sizeof(struct sctphdr)); -	return crc; -} - -static inline __u32 sctp_update_cksum(__u8 *buffer, __u16 length, __u32 crc32) -{ -	return sctp_crc32c(crc32, buffer, length); +	return crc32c(sum, buff, len);  } -static inline __le32 sctp_end_cksum(__u32 crc32) +static inline __wsum sctp_csum_combine(__wsum csum, __wsum csum2, +				       int offset, int len)  { -	return cpu_to_le32(~crc32); +	return __crc32c_le_combine(csum, csum2, len);  } -/* Calculate the CRC32C checksum of an SCTP packet.  */  static inline __le32 sctp_compute_cksum(const struct sk_buff *skb,  					unsigned int offset)  { -	const struct sk_buff *iter; +	struct sctphdr *sh = sctp_hdr(skb); +        __le32 ret, old = sh->checksum; +	const struct skb_checksum_ops ops = { +		.update  = sctp_csum_update, +		.combine = sctp_csum_combine, +	}; -	__u32 crc32 = sctp_start_cksum(skb->data + offset, -				       skb_headlen(skb) - offset); -	skb_walk_frags(skb, iter) -		crc32 = sctp_update_cksum((__u8 *) iter->data, -					  skb_headlen(iter), crc32); +	sh->checksum = 0; +	ret = cpu_to_le32(~__skb_checksum(skb, offset, skb->len - offset, +					  ~(__u32)0, &ops)); +	sh->checksum = old; -	return sctp_end_cksum(crc32); +	return ret;  }  #endif /* __sctp_checksum_h__ */ diff --git a/include/net/sctp/command.h b/include/net/sctp/command.h index 832f2191489..4b7cd695e43 100644 --- a/include/net/sctp/command.h +++ b/include/net/sctp/command.h @@ -19,9 +19,8 @@   * See the GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with GNU CC; see the file COPYING.  If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * along with GNU CC; see the file COPYING.  If not, see + * <http://www.gnu.org/licenses/>.   *   * Please send any bug reports or fixes you make to the   * email address(es): diff --git a/include/net/sctp/constants.h b/include/net/sctp/constants.h index 2f0a565a0fd..307728f622e 100644 --- a/include/net/sctp/constants.h +++ b/include/net/sctp/constants.h @@ -19,9 +19,8 @@   * See the GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with GNU CC; see the file COPYING.  If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * along with GNU CC; see the file COPYING.  If not, see + * <http://www.gnu.org/licenses/>.   *   * Please send any bug reports or fixes you make to the   * email address(es): diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h index 3794c5ad20f..8e4de46c052 100644 --- a/include/net/sctp/sctp.h +++ b/include/net/sctp/sctp.h @@ -21,9 +21,8 @@   * See the GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with GNU CC; see the file COPYING.  If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * along with GNU CC; see the file COPYING.  If not, see + * <http://www.gnu.org/licenses/>.   *   * Please send any bug reports or fixes you make to the   * email address(es): @@ -90,12 +89,11 @@  /*   * sctp/protocol.c   */ -extern int sctp_copy_local_addr_list(struct net *, struct sctp_bind_addr *, -				     sctp_scope_t, gfp_t gfp, -				     int flags); -extern struct sctp_pf *sctp_get_pf_specific(sa_family_t family); -extern int sctp_register_pf(struct sctp_pf *, sa_family_t); -extern void sctp_addr_wq_mgmt(struct net *, struct sctp_sockaddr_entry *, int); +int sctp_copy_local_addr_list(struct net *, struct sctp_bind_addr *, +			      sctp_scope_t, gfp_t gfp, int flags); +struct sctp_pf *sctp_get_pf_specific(sa_family_t family); +int sctp_register_pf(struct sctp_pf *, sa_family_t); +void sctp_addr_wq_mgmt(struct net *, struct sctp_sockaddr_entry *, int);  /*   * sctp/socket.c @@ -103,14 +101,14 @@ extern void sctp_addr_wq_mgmt(struct net *, struct sctp_sockaddr_entry *, int);  int sctp_backlog_rcv(struct sock *sk, struct sk_buff *skb);  int sctp_inet_listen(struct socket *sock, int backlog);  void sctp_write_space(struct sock *sk); -void sctp_data_ready(struct sock *sk, int len); +void sctp_data_ready(struct sock *sk);  unsigned int sctp_poll(struct file *file, struct socket *sock,  		poll_table *wait);  void sctp_sock_rfree(struct sk_buff *skb);  void sctp_copy_sock(struct sock *newsk, struct sock *sk,  		    struct sctp_association *asoc);  extern struct percpu_counter sctp_sockets_allocated; -extern int sctp_asconf_mgmt(struct sctp_sock *, struct sctp_sockaddr_entry *); +int sctp_asconf_mgmt(struct sctp_sock *, struct sctp_sockaddr_entry *);  /*   * sctp/primitive.c @@ -172,25 +170,6 @@ extern struct kmem_cache *sctp_bucket_cachep __read_mostly;   *  Section:  Macros, externs, and inlines   */ -/* spin lock wrappers. */ -#define sctp_spin_lock_irqsave(lock, flags) spin_lock_irqsave(lock, flags) -#define sctp_spin_unlock_irqrestore(lock, flags)  \ -       spin_unlock_irqrestore(lock, flags) -#define sctp_local_bh_disable() local_bh_disable() -#define sctp_local_bh_enable()  local_bh_enable() -#define sctp_spin_lock(lock)    spin_lock(lock) -#define sctp_spin_unlock(lock)  spin_unlock(lock) -#define sctp_write_lock(lock)   write_lock(lock) -#define sctp_write_unlock(lock) write_unlock(lock) -#define sctp_read_lock(lock)    read_lock(lock) -#define sctp_read_unlock(lock)  read_unlock(lock) - -/* sock lock wrappers. */ -#define sctp_lock_sock(sk)       lock_sock(sk) -#define sctp_release_sock(sk)    release_sock(sk) -#define sctp_bh_lock_sock(sk)    bh_lock_sock(sk) -#define sctp_bh_unlock_sock(sk)  bh_unlock_sock(sk) -  /* SCTP SNMP MIB stats handlers */  #define SCTP_INC_STATS(net, field)      SNMP_INC_STATS((net)->sctp.sctp_statistics, field)  #define SCTP_INC_STATS_BH(net, field)   SNMP_INC_STATS_BH((net)->sctp.sctp_statistics, field) @@ -355,13 +334,13 @@ static inline void sctp_skb_list_tail(struct sk_buff_head *list,  {  	unsigned long flags; -	sctp_spin_lock_irqsave(&head->lock, flags); -	sctp_spin_lock(&list->lock); +	spin_lock_irqsave(&head->lock, flags); +	spin_lock(&list->lock);  	skb_queue_splice_tail_init(list, head); -	sctp_spin_unlock(&list->lock); -	sctp_spin_unlock_irqrestore(&head->lock, flags); +	spin_unlock(&list->lock); +	spin_unlock_irqrestore(&head->lock, flags);  }  /** diff --git a/include/net/sctp/sm.h b/include/net/sctp/sm.h index 4ef75af340b..7f4eeb340a5 100644 --- a/include/net/sctp/sm.h +++ b/include/net/sctp/sm.h @@ -21,9 +21,8 @@   * See the GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with GNU CC; see the file COPYING.  If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * along with GNU CC; see the file COPYING.  If not, see + * <http://www.gnu.org/licenses/>.   *   * Please send any bug reports or fixes you make to the   * email addresses: diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index 2174d8da077..f38588bf346 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h @@ -19,9 +19,8 @@   * See the GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with GNU CC; see the file COPYING.  If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * along with GNU CC; see the file COPYING.  If not, see + * <http://www.gnu.org/licenses/>.   *   * Please send any bug reports or fixes you make to the   * email addresses: @@ -629,6 +628,7 @@ struct sctp_chunk {  #define SCTP_NEED_FRTX 0x1  #define SCTP_DONT_FRTX 0x2  	__u16	rtt_in_progress:1,	/* This chunk used for RTT calc? */ +		resent:1,		/* Has this chunk ever been resent. */  		has_tsn:1,		/* Does this chunk have a TSN yet? */  		has_ssn:1,		/* Does this chunk have a SSN yet? */  		singleton:1,		/* Only chunk in the packet? */ @@ -649,7 +649,6 @@ int sctp_user_addto_chunk(struct sctp_chunk *chunk, int off, int len,  			  struct iovec *data);  void sctp_chunk_free(struct sctp_chunk *);  void  *sctp_addto_chunk(struct sctp_chunk *, int len, const void *data); -void  *sctp_addto_chunk_fixed(struct sctp_chunk *, int len, const void *data);  struct sctp_chunk *sctp_chunkify(struct sk_buff *,  				 const struct sctp_association *,  				 struct sock *); @@ -839,10 +838,10 @@ struct sctp_transport {  	unsigned long sackdelay;  	__u32 sackfreq; -	/* When was the last time (in jiffies) that we heard from this -	 * transport?  We use this to pick new active and retran paths. +	/* When was the last time that we heard from this transport? We use +	 * this to pick new active and retran paths.  	 */ -	unsigned long last_time_heard; +	ktime_t last_time_heard;  	/* Last time(in jiffies) when cwnd is reduced due to the congestion  	 * indication based on ECNE chunk. @@ -1045,9 +1044,6 @@ struct sctp_outq {  	/* Corked? */  	char cork; - -	/* Is this structure empty?  */ -	char empty;  };  void sctp_outq_init(struct sctp_association *, struct sctp_outq *); @@ -1245,6 +1241,7 @@ struct sctp_endpoint {  	/* SCTP-AUTH: endpoint shared keys */  	struct list_head endpoint_shared_keys;  	__u16 active_key_id; +	__u8  auth_enable;  };  /* Recover the outter endpoint structure. */ @@ -1273,7 +1270,8 @@ struct sctp_endpoint *sctp_endpoint_is_match(struct sctp_endpoint *,  int sctp_has_association(struct net *net, const union sctp_addr *laddr,  			 const union sctp_addr *paddr); -int sctp_verify_init(struct net *net, const struct sctp_association *asoc, +int sctp_verify_init(struct net *net, const struct sctp_endpoint *ep, +		     const struct sctp_association *asoc,  		     sctp_cid_t, sctp_init_chunk_t *peer_init,  		     struct sctp_chunk *chunk, struct sctp_chunk **err_chunk);  int sctp_process_init(struct sctp_association *, struct sctp_chunk *chunk, @@ -1360,12 +1358,6 @@ struct sctp_association {  	/* This is all information about our peer.  */  	struct { -		/* rwnd -		 * -		 * Peer Rwnd   : Current calculated value of the peer's rwnd. -		 */ -		__u32 rwnd; -  		/* transport_addr_list  		 *  		 * Peer	       : A list of SCTP transport addresses that the @@ -1383,6 +1375,12 @@ struct sctp_association {  		 */  		struct list_head transport_addr_list; +		/* rwnd +		 * +		 * Peer Rwnd   : Current calculated value of the peer's rwnd. +		 */ +		__u32 rwnd; +  		/* transport_count  		 *  		 * Peer        : A count of the number of peer addresses @@ -1465,6 +1463,20 @@ struct sctp_association {  		 */  		struct sctp_tsnmap tsn_map; +		/* This mask is used to disable sending the ASCONF chunk +		 * with specified parameter to peer. +		 */ +		__be16 addip_disabled_mask; + +		/* These are capabilities which our peer advertised.  */ +		__u8	ecn_capable:1,      /* Can peer do ECN? */ +			ipv4_address:1,     /* Peer understands IPv4 addresses? */ +			ipv6_address:1,     /* Peer understands IPv6 addresses? */ +			hostname_address:1, /* Peer understands DNS addresses? */ +			asconf_capable:1,   /* Does peer support ADDIP? */ +			prsctp_capable:1,   /* Can peer do PR-SCTP? */ +			auth_capable:1;     /* Is peer doing SCTP-AUTH? */ +  		/* Ack State   : This flag indicates if the next received  		 *             : packet is to be responded to with a  		 *             : SACK. This is initializedto 0.  When a packet @@ -1479,25 +1491,11 @@ struct sctp_association {  		__u32	sack_cnt;  		__u32	sack_generation; -		/* These are capabilities which our peer advertised.  */ -		__u8	ecn_capable:1,	    /* Can peer do ECN? */ -			ipv4_address:1,	    /* Peer understands IPv4 addresses? */ -			ipv6_address:1,	    /* Peer understands IPv6 addresses? */ -			hostname_address:1, /* Peer understands DNS addresses? */ -			asconf_capable:1,   /* Does peer support ADDIP? */ -			prsctp_capable:1,   /* Can peer do PR-SCTP? */ -			auth_capable:1;	    /* Is peer doing SCTP-AUTH? */ -  		__u32   adaptation_ind;	 /* Adaptation Code point. */ -		/* This mask is used to disable sending the ASCONF chunk -		 * with specified parameter to peer. -		 */ -		__be16 addip_disabled_mask; -  		struct sctp_inithdr_host i; -		int cookie_len;  		void *cookie; +		int cookie_len;  		/* ADDIP Section 4.2 Upon reception of an ASCONF Chunk.  		 * C1) ... "Peer-Serial-Number'. This value MUST be initialized to the @@ -1529,14 +1527,14 @@ struct sctp_association {  	 */  	sctp_state_t state; -	/* The cookie life I award for any cookie.  */ -	ktime_t cookie_life; -  	/* Overall     : The overall association error count.  	 * Error Count : [Clear this any time I get something.]  	 */  	int overall_error_count; +	/* The cookie life I award for any cookie.  */ +	ktime_t cookie_life; +  	/* These are the association's initial, max, and min RTO values.  	 * These values will be initialized by system defaults, but can  	 * be modified via the SCTP_RTOINFO socket option. @@ -1591,10 +1589,9 @@ struct sctp_association {  	/* Flags controlling Heartbeat, SACK delay, and Path MTU Discovery. */  	__u32 param_flags; +	__u32 sackfreq;  	/* SACK delay timeout */  	unsigned long sackdelay; -	__u32 sackfreq; -  	unsigned long timeouts[SCTP_NUM_TIMEOUT_TYPES];  	struct timer_list timers[SCTP_NUM_TIMEOUT_TYPES]; @@ -1602,12 +1599,12 @@ struct sctp_association {  	/* Transport to which SHUTDOWN chunk was last sent.  */  	struct sctp_transport *shutdown_last_sent_to; -	/* How many times have we resent a SHUTDOWN */ -	int shutdown_retries; -  	/* Transport to which INIT chunk was last sent.  */  	struct sctp_transport *init_last_sent_to; +	/* How many times have we resent a SHUTDOWN */ +	int shutdown_retries; +  	/* Next TSN    : The next TSN number to be assigned to a new  	 *	       : DATA chunk.  This is sent in the INIT or INIT  	 *	       : ACK chunk to the peer and incremented each @@ -1725,12 +1722,6 @@ struct sctp_association {  	/* How many duplicated TSNs have we seen?  */  	int numduptsns; -	/* Number of seconds of idle time before an association is closed. -	 * In the association context, this is really used as a boolean -	 * since the real timeout is stored in the timeouts array -	 */ -	__u32 autoclose; -  	/* These are to support  	 * "SCTP Extensions for Dynamic Reconfiguration of IP Addresses  	 *  and Enforcement of Flow and Message Limits" @@ -1818,8 +1809,8 @@ struct sctp_association {  	 * after reaching 4294967295.  	 */  	__u32 addip_serial; -	union sctp_addr *asconf_addr_del_pending;  	int src_out_of_asoc_ok; +	union sctp_addr *asconf_addr_del_pending;  	struct sctp_transport *new_transport;  	/* SCTP AUTH: list of the endpoint shared keys.  These diff --git a/include/net/sctp/tsnmap.h b/include/net/sctp/tsnmap.h index 54bbbe54730..31b8dbaad45 100644 --- a/include/net/sctp/tsnmap.h +++ b/include/net/sctp/tsnmap.h @@ -22,9 +22,8 @@   * See the GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with GNU CC; see the file COPYING.  If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * along with GNU CC; see the file COPYING.  If not, see + * <http://www.gnu.org/licenses/>.   *   * Please send any bug reports or fixes you make to the   * email address(es): diff --git a/include/net/sctp/ulpevent.h b/include/net/sctp/ulpevent.h index 27b9f5c9015..daacb32b55b 100644 --- a/include/net/sctp/ulpevent.h +++ b/include/net/sctp/ulpevent.h @@ -25,9 +25,8 @@   * See the GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with GNU CC; see the file COPYING.  If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * along with GNU CC; see the file COPYING.  If not, see + * <http://www.gnu.org/licenses/>.   *   * Please send any bug reports or fixes you make to the   * email address(es): diff --git a/include/net/sctp/ulpqueue.h b/include/net/sctp/ulpqueue.h index b0cf5d54d71..e0dce07b879 100644 --- a/include/net/sctp/ulpqueue.h +++ b/include/net/sctp/ulpqueue.h @@ -24,9 +24,8 @@   * See the GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with GNU CC; see the file COPYING.  If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * along with GNU CC; see the file COPYING.  If not, see + * <http://www.gnu.org/licenses/>.   *   * Please send any bug reports or fixes you make to the   * email addresses:  | 
