Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6c6fbad6 authored by David S. Miller's avatar David S. Miller
Browse files

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: default avatarDavid S. Miller <davem@davemloft.net>
parents ccf355e5 e55f4b8b
Loading
Loading
Loading
Loading
+18 −19
Original line number Diff line number Diff line
@@ -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 */
+0 −2
Original line number Diff line number Diff line
@@ -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 */
+10 −11
Original line number Diff line number Diff line
@@ -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;
		}
+8 −11
Original line number Diff line number Diff line
@@ -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,9 +4226,6 @@ 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;

	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;
+2 −2
Original line number Diff line number Diff line
@@ -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
	stream->si = asoc->peer.intl_capable ? &sctp_stream_interleave_1
					     : &sctp_stream_interleave_0;
}
Loading