Loading include/net/sctp/command.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -103,6 +103,7 @@ typedef enum { SCTP_CMD_ASSOC_CHANGE, /* generate and send assoc_change event */ SCTP_CMD_ASSOC_CHANGE, /* generate and send assoc_change event */ SCTP_CMD_ADAPTATION_IND, /* generate and send adaptation event */ SCTP_CMD_ADAPTATION_IND, /* generate and send adaptation event */ SCTP_CMD_ASSOC_SHKEY, /* generate the association shared keys */ SCTP_CMD_ASSOC_SHKEY, /* generate the association shared keys */ SCTP_CMD_T1_RETRAN, /* Mark for retransmission after T1 timeout */ SCTP_CMD_LAST SCTP_CMD_LAST } sctp_verb_t; } sctp_verb_t; Loading include/net/sctp/constants.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -186,6 +186,8 @@ typedef enum { SCTP_IERROR_AUTH_BAD_HMAC, SCTP_IERROR_AUTH_BAD_HMAC, SCTP_IERROR_AUTH_BAD_KEYID, SCTP_IERROR_AUTH_BAD_KEYID, SCTP_IERROR_PROTO_VIOLATION, SCTP_IERROR_PROTO_VIOLATION, SCTP_IERROR_ERROR, SCTP_IERROR_ABORT, } sctp_ierror_t; } sctp_ierror_t; Loading Loading @@ -407,6 +409,7 @@ typedef enum { SCTP_RTXR_T3_RTX, SCTP_RTXR_T3_RTX, SCTP_RTXR_FAST_RTX, SCTP_RTXR_FAST_RTX, SCTP_RTXR_PMTUD, SCTP_RTXR_PMTUD, SCTP_RTXR_T1_RTX, } sctp_retransmit_reason_t; } sctp_retransmit_reason_t; /* Reasons to lower cwnd. */ /* Reasons to lower cwnd. */ Loading include/net/sctp/sctp.h +4 −1 Original line number Original line Diff line number Diff line Loading @@ -65,7 +65,6 @@ #ifdef TEST_FRAME #ifdef TEST_FRAME #undef CONFIG_PROC_FS #undef CONFIG_SCTP_DBG_OBJCNT #undef CONFIG_SCTP_DBG_OBJCNT #undef CONFIG_SYSCTL #undef CONFIG_SYSCTL #endif /* TEST_FRAME */ #endif /* TEST_FRAME */ Loading Loading @@ -267,6 +266,7 @@ enum SCTP_MIB_T5_SHUTDOWN_GUARD_EXPIREDS, SCTP_MIB_T5_SHUTDOWN_GUARD_EXPIREDS, SCTP_MIB_DELAY_SACK_EXPIREDS, SCTP_MIB_DELAY_SACK_EXPIREDS, SCTP_MIB_AUTOCLOSE_EXPIREDS, SCTP_MIB_AUTOCLOSE_EXPIREDS, SCTP_MIB_T1_RETRANSMITS, SCTP_MIB_T3_RETRANSMITS, SCTP_MIB_T3_RETRANSMITS, SCTP_MIB_PMTUD_RETRANSMITS, SCTP_MIB_PMTUD_RETRANSMITS, SCTP_MIB_FAST_RETRANSMITS, SCTP_MIB_FAST_RETRANSMITS, Loading Loading @@ -664,6 +664,9 @@ static inline int sctp_vtag_hashfn(__u16 lport, __u16 rport, __u32 vtag) return (h & (sctp_assoc_hashsize-1)); return (h & (sctp_assoc_hashsize-1)); } } #define sctp_for_each_hentry(epb, node, head) \ hlist_for_each_entry(epb, node, head, node) /* Is a socket of this style? */ /* Is a socket of this style? */ #define sctp_style(sk, style) __sctp_style((sk), (SCTP_SOCKET_##style)) #define sctp_style(sk, style) __sctp_style((sk), (SCTP_SOCKET_##style)) static inline int __sctp_style(const struct sock *sk, sctp_socket_type_t style) static inline int __sctp_style(const struct sock *sk, sctp_socket_type_t style) Loading include/net/sctp/structs.h +10 −12 Original line number Original line Diff line number Diff line Loading @@ -100,20 +100,19 @@ struct crypto_hash; struct sctp_bind_bucket { struct sctp_bind_bucket { unsigned short port; unsigned short port; unsigned short fastreuse; unsigned short fastreuse; struct sctp_bind_bucket *next; struct hlist_node node; struct sctp_bind_bucket **pprev; struct hlist_head owner; struct hlist_head owner; }; }; struct sctp_bind_hashbucket { struct sctp_bind_hashbucket { spinlock_t lock; spinlock_t lock; struct sctp_bind_bucket *chain; struct hlist_head chain; }; }; /* Used for hashing all associations. */ /* Used for hashing all associations. */ struct sctp_hashbucket { struct sctp_hashbucket { rwlock_t lock; rwlock_t lock; struct sctp_ep_common *chain; struct hlist_head chain; } __attribute__((__aligned__(8))); } __attribute__((__aligned__(8))); Loading Loading @@ -212,6 +211,7 @@ extern struct sctp_globals { /* Flag to indicate if addip is enabled. */ /* Flag to indicate if addip is enabled. */ int addip_enable; int addip_enable; int addip_noauth_enable; /* Flag to indicate if PR-SCTP is enabled. */ /* Flag to indicate if PR-SCTP is enabled. */ int prsctp_enable; int prsctp_enable; Loading Loading @@ -249,6 +249,7 @@ extern struct sctp_globals { #define sctp_local_addr_list (sctp_globals.local_addr_list) #define sctp_local_addr_list (sctp_globals.local_addr_list) #define sctp_local_addr_lock (sctp_globals.addr_list_lock) #define sctp_local_addr_lock (sctp_globals.addr_list_lock) #define sctp_addip_enable (sctp_globals.addip_enable) #define sctp_addip_enable (sctp_globals.addip_enable) #define sctp_addip_noauth (sctp_globals.addip_noauth_enable) #define sctp_prsctp_enable (sctp_globals.prsctp_enable) #define sctp_prsctp_enable (sctp_globals.prsctp_enable) #define sctp_auth_enable (sctp_globals.auth_enable) #define sctp_auth_enable (sctp_globals.auth_enable) Loading Loading @@ -873,10 +874,11 @@ struct sctp_transport { * address list derived from the INIT or INIT ACK chunk, a * address list derived from the INIT or INIT ACK chunk, a * number of data elements needs to be maintained including: * number of data elements needs to be maintained including: */ */ __u32 rtt; /* This is the most recent RTT. */ /* RTO : The current retransmission timeout value. */ /* RTO : The current retransmission timeout value. */ unsigned long rto; unsigned long rto; unsigned long last_rto; __u32 rtt; /* This is the most recent RTT. */ /* RTTVAR : The current RTT variation. */ /* RTTVAR : The current RTT variation. */ __u32 rttvar; __u32 rttvar; Loading Loading @@ -1184,9 +1186,7 @@ int sctp_bind_addr_copy(struct sctp_bind_addr *dest, int flags); int flags); int sctp_add_bind_addr(struct sctp_bind_addr *, union sctp_addr *, int sctp_add_bind_addr(struct sctp_bind_addr *, union sctp_addr *, __u8 use_as_src, gfp_t gfp); __u8 use_as_src, gfp_t gfp); int sctp_del_bind_addr(struct sctp_bind_addr *, union sctp_addr *, int sctp_del_bind_addr(struct sctp_bind_addr *, union sctp_addr *); void fastcall (*rcu_call)(struct rcu_head *, void (*func)(struct rcu_head *))); int sctp_bind_addr_match(struct sctp_bind_addr *, const union sctp_addr *, int sctp_bind_addr_match(struct sctp_bind_addr *, const union sctp_addr *, struct sctp_sock *); struct sctp_sock *); union sctp_addr *sctp_find_unmatch_addr(struct sctp_bind_addr *bp, union sctp_addr *sctp_find_unmatch_addr(struct sctp_bind_addr *bp, Loading Loading @@ -1229,8 +1229,7 @@ typedef enum { struct sctp_ep_common { struct sctp_ep_common { /* Fields to help us manage our entries in the hash tables. */ /* Fields to help us manage our entries in the hash tables. */ struct sctp_ep_common *next; struct hlist_node node; struct sctp_ep_common **pprev; int hashent; int hashent; /* Runtime type information. What kind of endpoint is this? */ /* Runtime type information. What kind of endpoint is this? */ Loading Loading @@ -1541,7 +1540,6 @@ struct sctp_association { __u8 asconf_capable; /* Does peer support ADDIP? */ __u8 asconf_capable; /* Does peer support ADDIP? */ __u8 prsctp_capable; /* Can peer do PR-SCTP? */ __u8 prsctp_capable; /* Can peer do PR-SCTP? */ __u8 auth_capable; /* Is peer doing SCTP-AUTH? */ __u8 auth_capable; /* Is peer doing SCTP-AUTH? */ __u8 addip_capable; /* Can peer do ADD-IP */ __u32 adaptation_ind; /* Adaptation Code point. */ __u32 adaptation_ind; /* Adaptation Code point. */ Loading net/sctp/associola.c +7 −3 Original line number Original line Diff line number Diff line Loading @@ -262,9 +262,13 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a */ */ asoc->peer.sack_needed = 1; asoc->peer.sack_needed = 1; /* Assume that the peer recongizes ASCONF until reported otherwise /* Assume that the peer will tell us if he recognizes ASCONF * via an ERROR chunk. * as part of INIT exchange. * The sctp_addip_noauth option is there for backward compatibilty * and will revert old behavior. */ */ asoc->peer.asconf_capable = 0; if (sctp_addip_noauth) asoc->peer.asconf_capable = 1; asoc->peer.asconf_capable = 1; /* Create an input queue. */ /* Create an input queue. */ Loading Loading
include/net/sctp/command.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -103,6 +103,7 @@ typedef enum { SCTP_CMD_ASSOC_CHANGE, /* generate and send assoc_change event */ SCTP_CMD_ASSOC_CHANGE, /* generate and send assoc_change event */ SCTP_CMD_ADAPTATION_IND, /* generate and send adaptation event */ SCTP_CMD_ADAPTATION_IND, /* generate and send adaptation event */ SCTP_CMD_ASSOC_SHKEY, /* generate the association shared keys */ SCTP_CMD_ASSOC_SHKEY, /* generate the association shared keys */ SCTP_CMD_T1_RETRAN, /* Mark for retransmission after T1 timeout */ SCTP_CMD_LAST SCTP_CMD_LAST } sctp_verb_t; } sctp_verb_t; Loading
include/net/sctp/constants.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -186,6 +186,8 @@ typedef enum { SCTP_IERROR_AUTH_BAD_HMAC, SCTP_IERROR_AUTH_BAD_HMAC, SCTP_IERROR_AUTH_BAD_KEYID, SCTP_IERROR_AUTH_BAD_KEYID, SCTP_IERROR_PROTO_VIOLATION, SCTP_IERROR_PROTO_VIOLATION, SCTP_IERROR_ERROR, SCTP_IERROR_ABORT, } sctp_ierror_t; } sctp_ierror_t; Loading Loading @@ -407,6 +409,7 @@ typedef enum { SCTP_RTXR_T3_RTX, SCTP_RTXR_T3_RTX, SCTP_RTXR_FAST_RTX, SCTP_RTXR_FAST_RTX, SCTP_RTXR_PMTUD, SCTP_RTXR_PMTUD, SCTP_RTXR_T1_RTX, } sctp_retransmit_reason_t; } sctp_retransmit_reason_t; /* Reasons to lower cwnd. */ /* Reasons to lower cwnd. */ Loading
include/net/sctp/sctp.h +4 −1 Original line number Original line Diff line number Diff line Loading @@ -65,7 +65,6 @@ #ifdef TEST_FRAME #ifdef TEST_FRAME #undef CONFIG_PROC_FS #undef CONFIG_SCTP_DBG_OBJCNT #undef CONFIG_SCTP_DBG_OBJCNT #undef CONFIG_SYSCTL #undef CONFIG_SYSCTL #endif /* TEST_FRAME */ #endif /* TEST_FRAME */ Loading Loading @@ -267,6 +266,7 @@ enum SCTP_MIB_T5_SHUTDOWN_GUARD_EXPIREDS, SCTP_MIB_T5_SHUTDOWN_GUARD_EXPIREDS, SCTP_MIB_DELAY_SACK_EXPIREDS, SCTP_MIB_DELAY_SACK_EXPIREDS, SCTP_MIB_AUTOCLOSE_EXPIREDS, SCTP_MIB_AUTOCLOSE_EXPIREDS, SCTP_MIB_T1_RETRANSMITS, SCTP_MIB_T3_RETRANSMITS, SCTP_MIB_T3_RETRANSMITS, SCTP_MIB_PMTUD_RETRANSMITS, SCTP_MIB_PMTUD_RETRANSMITS, SCTP_MIB_FAST_RETRANSMITS, SCTP_MIB_FAST_RETRANSMITS, Loading Loading @@ -664,6 +664,9 @@ static inline int sctp_vtag_hashfn(__u16 lport, __u16 rport, __u32 vtag) return (h & (sctp_assoc_hashsize-1)); return (h & (sctp_assoc_hashsize-1)); } } #define sctp_for_each_hentry(epb, node, head) \ hlist_for_each_entry(epb, node, head, node) /* Is a socket of this style? */ /* Is a socket of this style? */ #define sctp_style(sk, style) __sctp_style((sk), (SCTP_SOCKET_##style)) #define sctp_style(sk, style) __sctp_style((sk), (SCTP_SOCKET_##style)) static inline int __sctp_style(const struct sock *sk, sctp_socket_type_t style) static inline int __sctp_style(const struct sock *sk, sctp_socket_type_t style) Loading
include/net/sctp/structs.h +10 −12 Original line number Original line Diff line number Diff line Loading @@ -100,20 +100,19 @@ struct crypto_hash; struct sctp_bind_bucket { struct sctp_bind_bucket { unsigned short port; unsigned short port; unsigned short fastreuse; unsigned short fastreuse; struct sctp_bind_bucket *next; struct hlist_node node; struct sctp_bind_bucket **pprev; struct hlist_head owner; struct hlist_head owner; }; }; struct sctp_bind_hashbucket { struct sctp_bind_hashbucket { spinlock_t lock; spinlock_t lock; struct sctp_bind_bucket *chain; struct hlist_head chain; }; }; /* Used for hashing all associations. */ /* Used for hashing all associations. */ struct sctp_hashbucket { struct sctp_hashbucket { rwlock_t lock; rwlock_t lock; struct sctp_ep_common *chain; struct hlist_head chain; } __attribute__((__aligned__(8))); } __attribute__((__aligned__(8))); Loading Loading @@ -212,6 +211,7 @@ extern struct sctp_globals { /* Flag to indicate if addip is enabled. */ /* Flag to indicate if addip is enabled. */ int addip_enable; int addip_enable; int addip_noauth_enable; /* Flag to indicate if PR-SCTP is enabled. */ /* Flag to indicate if PR-SCTP is enabled. */ int prsctp_enable; int prsctp_enable; Loading Loading @@ -249,6 +249,7 @@ extern struct sctp_globals { #define sctp_local_addr_list (sctp_globals.local_addr_list) #define sctp_local_addr_list (sctp_globals.local_addr_list) #define sctp_local_addr_lock (sctp_globals.addr_list_lock) #define sctp_local_addr_lock (sctp_globals.addr_list_lock) #define sctp_addip_enable (sctp_globals.addip_enable) #define sctp_addip_enable (sctp_globals.addip_enable) #define sctp_addip_noauth (sctp_globals.addip_noauth_enable) #define sctp_prsctp_enable (sctp_globals.prsctp_enable) #define sctp_prsctp_enable (sctp_globals.prsctp_enable) #define sctp_auth_enable (sctp_globals.auth_enable) #define sctp_auth_enable (sctp_globals.auth_enable) Loading Loading @@ -873,10 +874,11 @@ struct sctp_transport { * address list derived from the INIT or INIT ACK chunk, a * address list derived from the INIT or INIT ACK chunk, a * number of data elements needs to be maintained including: * number of data elements needs to be maintained including: */ */ __u32 rtt; /* This is the most recent RTT. */ /* RTO : The current retransmission timeout value. */ /* RTO : The current retransmission timeout value. */ unsigned long rto; unsigned long rto; unsigned long last_rto; __u32 rtt; /* This is the most recent RTT. */ /* RTTVAR : The current RTT variation. */ /* RTTVAR : The current RTT variation. */ __u32 rttvar; __u32 rttvar; Loading Loading @@ -1184,9 +1186,7 @@ int sctp_bind_addr_copy(struct sctp_bind_addr *dest, int flags); int flags); int sctp_add_bind_addr(struct sctp_bind_addr *, union sctp_addr *, int sctp_add_bind_addr(struct sctp_bind_addr *, union sctp_addr *, __u8 use_as_src, gfp_t gfp); __u8 use_as_src, gfp_t gfp); int sctp_del_bind_addr(struct sctp_bind_addr *, union sctp_addr *, int sctp_del_bind_addr(struct sctp_bind_addr *, union sctp_addr *); void fastcall (*rcu_call)(struct rcu_head *, void (*func)(struct rcu_head *))); int sctp_bind_addr_match(struct sctp_bind_addr *, const union sctp_addr *, int sctp_bind_addr_match(struct sctp_bind_addr *, const union sctp_addr *, struct sctp_sock *); struct sctp_sock *); union sctp_addr *sctp_find_unmatch_addr(struct sctp_bind_addr *bp, union sctp_addr *sctp_find_unmatch_addr(struct sctp_bind_addr *bp, Loading Loading @@ -1229,8 +1229,7 @@ typedef enum { struct sctp_ep_common { struct sctp_ep_common { /* Fields to help us manage our entries in the hash tables. */ /* Fields to help us manage our entries in the hash tables. */ struct sctp_ep_common *next; struct hlist_node node; struct sctp_ep_common **pprev; int hashent; int hashent; /* Runtime type information. What kind of endpoint is this? */ /* Runtime type information. What kind of endpoint is this? */ Loading Loading @@ -1541,7 +1540,6 @@ struct sctp_association { __u8 asconf_capable; /* Does peer support ADDIP? */ __u8 asconf_capable; /* Does peer support ADDIP? */ __u8 prsctp_capable; /* Can peer do PR-SCTP? */ __u8 prsctp_capable; /* Can peer do PR-SCTP? */ __u8 auth_capable; /* Is peer doing SCTP-AUTH? */ __u8 auth_capable; /* Is peer doing SCTP-AUTH? */ __u8 addip_capable; /* Can peer do ADD-IP */ __u32 adaptation_ind; /* Adaptation Code point. */ __u32 adaptation_ind; /* Adaptation Code point. */ Loading
net/sctp/associola.c +7 −3 Original line number Original line Diff line number Diff line Loading @@ -262,9 +262,13 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a */ */ asoc->peer.sack_needed = 1; asoc->peer.sack_needed = 1; /* Assume that the peer recongizes ASCONF until reported otherwise /* Assume that the peer will tell us if he recognizes ASCONF * via an ERROR chunk. * as part of INIT exchange. * The sctp_addip_noauth option is there for backward compatibilty * and will revert old behavior. */ */ asoc->peer.asconf_capable = 0; if (sctp_addip_noauth) asoc->peer.asconf_capable = 1; asoc->peer.asconf_capable = 1; /* Create an input queue. */ /* Create an input queue. */ Loading