forked from luck/tmp_suning_uos_patched
Merge branch 'sctp-tidyup'
Xin Long says: ==================== sctp: tidy up some ep and asoc feature flags This patchset is to remove some unnecessary feature flags from sctp_assocation and move some others to the right places. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
6c6fbad657
|
@ -219,7 +219,6 @@ struct sctp_sock {
|
|||
disable_fragments:1,
|
||||
v4mapped:1,
|
||||
frag_interleave:1,
|
||||
strm_interleave:1,
|
||||
recvrcvinfo:1,
|
||||
recvnxtinfo:1,
|
||||
data_ready_signalled:1;
|
||||
|
@ -1324,6 +1323,7 @@ struct sctp_endpoint {
|
|||
struct list_head endpoint_shared_keys;
|
||||
__u16 active_key_id;
|
||||
__u8 auth_enable:1,
|
||||
intl_enable:1,
|
||||
prsctp_enable:1,
|
||||
reconf_enable:1;
|
||||
|
||||
|
@ -1679,28 +1679,30 @@ struct sctp_association {
|
|||
__be16 addip_disabled_mask;
|
||||
|
||||
/* These are capabilities which our peer advertised. */
|
||||
__u8 ecn_capable:1, /* Can peer do ECN? */
|
||||
__u16 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? */
|
||||
reconf_capable:1, /* Can peer do RE-CONFIG? */
|
||||
auth_capable:1; /* Is peer doing SCTP-AUTH? */
|
||||
|
||||
/* sack_needed : This flag indicates if the next received
|
||||
* : packet is to be responded to with a
|
||||
* : SACK. This is initialized to 0. When a packet
|
||||
* : is received sack_cnt is incremented. If this value
|
||||
* : reaches 2 or more, a SACK is sent and the
|
||||
* : value is reset to 0. Note: This is used only
|
||||
* : when no DATA chunks are received out of
|
||||
* : order. When DATA chunks are out of order,
|
||||
* : SACK's are not delayed (see Section 6).
|
||||
*/
|
||||
__u8 sack_needed:1, /* Do we need to sack the peer? */
|
||||
intl_capable:1, /* Can peer do INTERLEAVE */
|
||||
auth_capable:1, /* Is peer doing SCTP-AUTH? */
|
||||
/* sack_needed:
|
||||
* This flag indicates if the next received
|
||||
* packet is to be responded to with a
|
||||
* SACK. This is initialized to 0. When a packet
|
||||
* is received sack_cnt is incremented. If this value
|
||||
* reaches 2 or more, a SACK is sent and the
|
||||
* value is reset to 0. Note: This is used only
|
||||
* when no DATA chunks are received out of
|
||||
* order. When DATA chunks are out of order,
|
||||
* SACK's are not delayed (see Section 6).
|
||||
*/
|
||||
sack_needed:1, /* Do we need to sack the peer? */
|
||||
sack_generation:1,
|
||||
zero_window_announced:1;
|
||||
|
||||
__u32 sack_cnt;
|
||||
|
||||
__u32 adaptation_ind; /* Adaptation Code point. */
|
||||
|
@ -2049,10 +2051,7 @@ struct sctp_association {
|
|||
|
||||
__u8 need_ecne:1, /* Need to send an ECNE Chunk? */
|
||||
temp:1, /* Is it a temporary association? */
|
||||
force_delay:1,
|
||||
intl_enable:1,
|
||||
prsctp_enable:1,
|
||||
reconf_enable:1;
|
||||
force_delay:1;
|
||||
|
||||
__u8 strreset_enable;
|
||||
__u8 strreset_outstanding; /* request param count on the fly */
|
||||
|
|
|
@ -261,8 +261,6 @@ static struct sctp_association *sctp_association_init(
|
|||
goto stream_free;
|
||||
|
||||
asoc->active_key_id = ep->active_key_id;
|
||||
asoc->prsctp_enable = ep->prsctp_enable;
|
||||
asoc->reconf_enable = ep->reconf_enable;
|
||||
asoc->strreset_enable = ep->strreset_enable;
|
||||
|
||||
/* Save the hmacs and chunks list into this association */
|
||||
|
|
|
@ -247,7 +247,7 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
|
|||
chunksize += SCTP_PAD4(SCTP_SAT_LEN(num_types));
|
||||
chunksize += sizeof(ecap_param);
|
||||
|
||||
if (asoc->prsctp_enable)
|
||||
if (asoc->ep->prsctp_enable)
|
||||
chunksize += sizeof(prsctp_param);
|
||||
|
||||
/* ADDIP: Section 4.2.7:
|
||||
|
@ -261,7 +261,7 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
|
|||
num_ext += 2;
|
||||
}
|
||||
|
||||
if (asoc->reconf_enable) {
|
||||
if (asoc->ep->reconf_enable) {
|
||||
extensions[num_ext] = SCTP_CID_RECONF;
|
||||
num_ext += 1;
|
||||
}
|
||||
|
@ -269,7 +269,7 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
|
|||
if (sp->adaptation_ind)
|
||||
chunksize += sizeof(aiparam);
|
||||
|
||||
if (sp->strm_interleave) {
|
||||
if (asoc->ep->intl_enable) {
|
||||
extensions[num_ext] = SCTP_CID_I_DATA;
|
||||
num_ext += 1;
|
||||
}
|
||||
|
@ -348,7 +348,7 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
|
|||
sctp_addto_param(retval, num_ext, extensions);
|
||||
}
|
||||
|
||||
if (asoc->prsctp_enable)
|
||||
if (asoc->ep->prsctp_enable)
|
||||
sctp_addto_chunk(retval, sizeof(prsctp_param), &prsctp_param);
|
||||
|
||||
if (sp->adaptation_ind) {
|
||||
|
@ -438,7 +438,7 @@ struct sctp_chunk *sctp_make_init_ack(const struct sctp_association *asoc,
|
|||
if (sp->adaptation_ind)
|
||||
chunksize += sizeof(aiparam);
|
||||
|
||||
if (asoc->intl_enable) {
|
||||
if (asoc->peer.intl_capable) {
|
||||
extensions[num_ext] = SCTP_CID_I_DATA;
|
||||
num_ext += 1;
|
||||
}
|
||||
|
@ -2007,12 +2007,11 @@ static void sctp_process_ext_param(struct sctp_association *asoc,
|
|||
for (i = 0; i < num_ext; i++) {
|
||||
switch (param.ext->chunks[i]) {
|
||||
case SCTP_CID_RECONF:
|
||||
if (asoc->reconf_enable &&
|
||||
!asoc->peer.reconf_capable)
|
||||
if (asoc->ep->reconf_enable)
|
||||
asoc->peer.reconf_capable = 1;
|
||||
break;
|
||||
case SCTP_CID_FWD_TSN:
|
||||
if (asoc->prsctp_enable && !asoc->peer.prsctp_capable)
|
||||
if (asoc->ep->prsctp_enable)
|
||||
asoc->peer.prsctp_capable = 1;
|
||||
break;
|
||||
case SCTP_CID_AUTH:
|
||||
|
@ -2028,8 +2027,8 @@ static void sctp_process_ext_param(struct sctp_association *asoc,
|
|||
asoc->peer.asconf_capable = 1;
|
||||
break;
|
||||
case SCTP_CID_I_DATA:
|
||||
if (sctp_sk(asoc->base.sk)->strm_interleave)
|
||||
asoc->intl_enable = 1;
|
||||
if (asoc->ep->intl_enable)
|
||||
asoc->peer.intl_capable = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -2637,7 +2636,7 @@ static int sctp_process_param(struct sctp_association *asoc,
|
|||
break;
|
||||
|
||||
case SCTP_PARAM_FWD_TSN_SUPPORT:
|
||||
if (asoc->prsctp_enable) {
|
||||
if (asoc->ep->prsctp_enable) {
|
||||
asoc->peer.prsctp_capable = 1;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1913,7 +1913,7 @@ static int sctp_sendmsg_to_asoc(struct sctp_association *asoc,
|
|||
if (err)
|
||||
goto err;
|
||||
|
||||
if (sp->strm_interleave) {
|
||||
if (asoc->ep->intl_enable) {
|
||||
timeo = sock_sndtimeo(sk, 0);
|
||||
err = sctp_wait_for_connect(asoc, &timeo);
|
||||
if (err) {
|
||||
|
@ -3581,7 +3581,7 @@ static int sctp_setsockopt_fragment_interleave(struct sock *sk,
|
|||
sctp_sk(sk)->frag_interleave = !!val;
|
||||
|
||||
if (!sctp_sk(sk)->frag_interleave)
|
||||
sctp_sk(sk)->strm_interleave = 0;
|
||||
sctp_sk(sk)->ep->intl_enable = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -4226,10 +4226,7 @@ static int sctp_setsockopt_reconfig_supported(struct sock *sk,
|
|||
sctp_style(sk, UDP))
|
||||
goto out;
|
||||
|
||||
if (asoc)
|
||||
asoc->reconf_enable = !!params.assoc_value;
|
||||
else
|
||||
sctp_sk(sk)->ep->reconf_enable = !!params.assoc_value;
|
||||
sctp_sk(sk)->ep->reconf_enable = !!params.assoc_value;
|
||||
|
||||
retval = 0;
|
||||
|
||||
|
@ -4487,7 +4484,7 @@ static int sctp_setsockopt_interleaving_supported(struct sock *sk,
|
|||
goto out;
|
||||
}
|
||||
|
||||
sp->strm_interleave = !!params.assoc_value;
|
||||
sp->ep->intl_enable = !!params.assoc_value;
|
||||
|
||||
retval = 0;
|
||||
|
||||
|
@ -7328,7 +7325,7 @@ static int sctp_getsockopt_pr_supported(struct sock *sk, int len,
|
|||
goto out;
|
||||
}
|
||||
|
||||
params.assoc_value = asoc ? asoc->prsctp_enable
|
||||
params.assoc_value = asoc ? asoc->peer.prsctp_capable
|
||||
: sctp_sk(sk)->ep->prsctp_enable;
|
||||
|
||||
if (put_user(len, optlen))
|
||||
|
@ -7536,7 +7533,7 @@ static int sctp_getsockopt_reconfig_supported(struct sock *sk, int len,
|
|||
goto out;
|
||||
}
|
||||
|
||||
params.assoc_value = asoc ? asoc->reconf_enable
|
||||
params.assoc_value = asoc ? asoc->peer.reconf_capable
|
||||
: sctp_sk(sk)->ep->reconf_enable;
|
||||
|
||||
if (put_user(len, optlen))
|
||||
|
@ -7695,8 +7692,8 @@ static int sctp_getsockopt_interleaving_supported(struct sock *sk, int len,
|
|||
goto out;
|
||||
}
|
||||
|
||||
params.assoc_value = asoc ? asoc->intl_enable
|
||||
: sctp_sk(sk)->strm_interleave;
|
||||
params.assoc_value = asoc ? asoc->peer.intl_capable
|
||||
: sctp_sk(sk)->ep->intl_enable;
|
||||
|
||||
if (put_user(len, optlen))
|
||||
goto out;
|
||||
|
|
|
@ -1358,6 +1358,6 @@ void sctp_stream_interleave_init(struct sctp_stream *stream)
|
|||
struct sctp_association *asoc;
|
||||
|
||||
asoc = container_of(stream, struct sctp_association, stream);
|
||||
stream->si = asoc->intl_enable ? &sctp_stream_interleave_1
|
||||
: &sctp_stream_interleave_0;
|
||||
stream->si = asoc->peer.intl_capable ? &sctp_stream_interleave_1
|
||||
: &sctp_stream_interleave_0;
|
||||
}
|
||||
|
|
|
@ -228,7 +228,7 @@ int sctp_sched_get_value(struct sctp_association *asoc, __u16 sid,
|
|||
void sctp_sched_dequeue_done(struct sctp_outq *q, struct sctp_chunk *ch)
|
||||
{
|
||||
if (!list_is_last(&ch->frag_list, &ch->msg->chunks) &&
|
||||
!q->asoc->intl_enable) {
|
||||
!q->asoc->peer.intl_capable) {
|
||||
struct sctp_stream_out *sout;
|
||||
__u16 sid;
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user