svn commit: r332224 - stable/11/sys/netinet
Michael Tuexen
tuexen at FreeBSD.org
Sat Apr 7 20:11:57 UTC 2018
Author: tuexen
Date: Sat Apr 7 20:11:56 2018
New Revision: 332224
URL: https://svnweb.freebsd.org/changeset/base/332224
Log:
MFC r325746:
Cleanup the handling of control chunks. While there fix some minor
bug related to clearing the assoc retransmit counter and the dup TSN
handling of NR-SACK chunks.
Modified:
stable/11/sys/netinet/sctp_input.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/netinet/sctp_input.c
==============================================================================
--- stable/11/sys/netinet/sctp_input.c Sat Apr 7 20:10:26 2018 (r332223)
+++ stable/11/sys/netinet/sctp_input.c Sat Apr 7 20:11:56 2018 (r332224)
@@ -635,6 +635,14 @@ sctp_handle_heartbeat_ack(struct sctp_heartbeat_chunk
r_net, SCTP_FROM_SCTP_INPUT + SCTP_LOC_4);
sctp_timer_start(SCTP_TIMER_TYPE_HEARTBEAT, stcb->sctp_ep, stcb, r_net);
}
+ if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_THRESHOLD_LOGGING) {
+ sctp_misc_ints(SCTP_THRESHOLD_CLEAR,
+ stcb->asoc.overall_error_count,
+ 0,
+ SCTP_FROM_SCTP_INPUT,
+ __LINE__);
+ }
+ stcb->asoc.overall_error_count = 0;
old_error_counter = r_net->error_count;
r_net->error_count = 0;
r_net->hb_responded = 1;
@@ -2928,7 +2936,14 @@ sctp_handle_cookie_ack(struct sctp_cookie_ack_chunk *c
return;
}
asoc = &stcb->asoc;
-
+ if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_THRESHOLD_LOGGING) {
+ sctp_misc_ints(SCTP_THRESHOLD_CLEAR,
+ asoc->overall_error_count,
+ 0,
+ SCTP_FROM_SCTP_INPUT,
+ __LINE__);
+ }
+ asoc->overall_error_count = 0;
sctp_stop_all_cookie_timers(stcb);
/* process according to association state */
if (SCTP_GET_STATE(asoc) == SCTP_STATE_COOKIE_ECHOED) {
@@ -4721,14 +4736,6 @@ sctp_process_control(struct mbuf *m, int iphlen, int *
(ch->chunk_type == SCTP_HEARTBEAT_REQUEST)) &&
(SCTP_GET_STATE(&stcb->asoc) == SCTP_STATE_COOKIE_ECHOED)) {
/* implied cookie-ack.. we must have lost the ack */
- if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_THRESHOLD_LOGGING) {
- sctp_misc_ints(SCTP_THRESHOLD_CLEAR,
- stcb->asoc.overall_error_count,
- 0,
- SCTP_FROM_SCTP_INPUT,
- __LINE__);
- }
- stcb->asoc.overall_error_count = 0;
sctp_handle_cookie_ack((struct sctp_cookie_ack_chunk *)ch, stcb,
*netp);
}
@@ -4862,7 +4869,7 @@ process_control_chunks:
case SCTP_PAD_CHUNK:
break;
case SCTP_INITIATION_ACK:
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_INIT-ACK\n");
+ SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_INIT_ACK\n");
if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) {
/* We are not interested anymore */
if ((stcb != NULL) && (stcb->asoc.total_output_queue_size)) {
@@ -4893,7 +4900,7 @@ process_control_chunks:
*offset = length;
return (stcb);
}
- if ((netp) && (*netp)) {
+ if ((netp != NULL) && (*netp != NULL)) {
ret = sctp_handle_init_ack(m, iphlen, *offset,
src, dst, sh,
(struct sctp_init_ack_chunk *)ch,
@@ -4918,23 +4925,35 @@ process_control_chunks:
return (stcb);
break;
case SCTP_SELECTIVE_ACK:
+ case SCTP_NR_SELECTIVE_ACK:
{
- struct sctp_sack_chunk *sack;
int abort_now = 0;
uint32_t a_rwnd, cum_ack;
- uint16_t num_seg, num_dup;
+ uint16_t num_seg, num_nr_seg, num_dup;
uint8_t flags;
int offset_seg, offset_dup;
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_SACK\n");
+ SCTPDBG(SCTP_DEBUG_INPUT3, "%s\n",
+ ch->chunk_type == SCTP_SELECTIVE_ACK ? "SCTP_SACK" : "SCTP_NR_SACK");
SCTP_STAT_INCR(sctps_recvsacks);
if (stcb == NULL) {
- SCTPDBG(SCTP_DEBUG_INDATA1, "No stcb when processing SACK chunk\n");
+ SCTPDBG(SCTP_DEBUG_INDATA1, "No stcb when processing %s chunk\n",
+ (ch->chunk_type == SCTP_SELECTIVE_ACK) ? "SCTP_SACK" : "SCTP_NR_SACK");
break;
}
- if (chk_length < sizeof(struct sctp_sack_chunk)) {
- SCTPDBG(SCTP_DEBUG_INDATA1, "Bad size on SACK chunk, too small\n");
- break;
+ if (ch->chunk_type == SCTP_SELECTIVE_ACK) {
+ if (chk_length < sizeof(struct sctp_sack_chunk)) {
+ SCTPDBG(SCTP_DEBUG_INDATA1, "Bad size on SACK chunk, too small\n");
+ break;
+ }
+ } else {
+ if (stcb->asoc.nrsack_supported == 0) {
+ goto unknown_chunk;
+ }
+ if (chk_length < sizeof(struct sctp_nr_sack_chunk)) {
+ SCTPDBG(SCTP_DEBUG_INDATA1, "Bad size on NR_SACK chunk, too small\n");
+ break;
+ }
}
if (SCTP_GET_STATE(&stcb->asoc) == SCTP_STATE_SHUTDOWN_ACK_SENT) {
/*-
@@ -4944,108 +4963,44 @@ process_control_chunks:
*/
break;
}
- sack = (struct sctp_sack_chunk *)ch;
flags = ch->chunk_flags;
- cum_ack = ntohl(sack->sack.cum_tsn_ack);
- num_seg = ntohs(sack->sack.num_gap_ack_blks);
- num_dup = ntohs(sack->sack.num_dup_tsns);
- a_rwnd = (uint32_t)ntohl(sack->sack.a_rwnd);
- if (sizeof(struct sctp_sack_chunk) +
- num_seg * sizeof(struct sctp_gap_ack_block) +
- num_dup * sizeof(uint32_t) != chk_length) {
- SCTPDBG(SCTP_DEBUG_INDATA1, "Bad size of SACK chunk\n");
- break;
- }
- offset_seg = *offset + sizeof(struct sctp_sack_chunk);
- offset_dup = offset_seg + num_seg * sizeof(struct sctp_gap_ack_block);
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_SACK process cum_ack:%x num_seg:%d a_rwnd:%d\n",
- cum_ack, num_seg, a_rwnd);
- stcb->asoc.seen_a_sack_this_pkt = 1;
- if ((stcb->asoc.pr_sctp_cnt == 0) &&
- (num_seg == 0) &&
- SCTP_TSN_GE(cum_ack, stcb->asoc.last_acked_seq) &&
- (stcb->asoc.saw_sack_with_frags == 0) &&
- (stcb->asoc.saw_sack_with_nr_frags == 0) &&
- (!TAILQ_EMPTY(&stcb->asoc.sent_queue))
- ) {
- /*
- * We have a SIMPLE sack having no
- * prior segments and data on sent
- * queue to be acked.. Use the
- * faster path sack processing. We
- * also allow window update sacks
- * with no missing segments to go
- * this way too.
- */
- sctp_express_handle_sack(stcb, cum_ack, a_rwnd, &abort_now, ecne_seen);
+ if (ch->chunk_type == SCTP_SELECTIVE_ACK) {
+ struct sctp_sack_chunk *sack;
+
+ sack = (struct sctp_sack_chunk *)ch;
+ cum_ack = ntohl(sack->sack.cum_tsn_ack);
+ num_seg = ntohs(sack->sack.num_gap_ack_blks);
+ num_nr_seg = 0;
+ num_dup = ntohs(sack->sack.num_dup_tsns);
+ a_rwnd = ntohl(sack->sack.a_rwnd);
+ if (sizeof(struct sctp_sack_chunk) +
+ num_seg * sizeof(struct sctp_gap_ack_block) +
+ num_dup * sizeof(uint32_t) != chk_length) {
+ SCTPDBG(SCTP_DEBUG_INDATA1, "Bad size of SACK chunk\n");
+ break;
+ }
+ offset_seg = *offset + sizeof(struct sctp_sack_chunk);
+ offset_dup = offset_seg + num_seg * sizeof(struct sctp_gap_ack_block);
} else {
- if (netp && *netp)
- sctp_handle_sack(m, offset_seg, offset_dup, stcb,
- num_seg, 0, num_dup, &abort_now, flags,
- cum_ack, a_rwnd, ecne_seen);
- }
- if (abort_now) {
- /* ABORT signal from sack processing */
- *offset = length;
- return (NULL);
- }
- if (TAILQ_EMPTY(&stcb->asoc.send_queue) &&
- TAILQ_EMPTY(&stcb->asoc.sent_queue) &&
- (stcb->asoc.stream_queue_cnt == 0)) {
- sctp_ulp_notify(SCTP_NOTIFY_SENDER_DRY, stcb, 0, NULL, SCTP_SO_NOT_LOCKED);
- }
- }
- break;
- /*
- * EY - nr_sack: If the received chunk is an
- * nr_sack chunk
- */
- case SCTP_NR_SELECTIVE_ACK:
- {
- struct sctp_nr_sack_chunk *nr_sack;
- int abort_now = 0;
- uint32_t a_rwnd, cum_ack;
- uint16_t num_seg, num_nr_seg, num_dup;
- uint8_t flags;
- int offset_seg, offset_dup;
+ struct sctp_nr_sack_chunk *nr_sack;
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_NR_SACK\n");
- SCTP_STAT_INCR(sctps_recvsacks);
- if (stcb == NULL) {
- SCTPDBG(SCTP_DEBUG_INDATA1, "No stcb when processing NR-SACK chunk\n");
- break;
+ nr_sack = (struct sctp_nr_sack_chunk *)ch;
+ cum_ack = ntohl(nr_sack->nr_sack.cum_tsn_ack);
+ num_seg = ntohs(nr_sack->nr_sack.num_gap_ack_blks);
+ num_nr_seg = ntohs(nr_sack->nr_sack.num_nr_gap_ack_blks);
+ num_dup = ntohs(nr_sack->nr_sack.num_dup_tsns);
+ a_rwnd = ntohl(nr_sack->nr_sack.a_rwnd);
+ if (sizeof(struct sctp_nr_sack_chunk) +
+ (num_seg + num_nr_seg) * sizeof(struct sctp_gap_ack_block) +
+ num_dup * sizeof(uint32_t) != chk_length) {
+ SCTPDBG(SCTP_DEBUG_INDATA1, "Bad size of NR_SACK chunk\n");
+ break;
+ }
+ offset_seg = *offset + sizeof(struct sctp_nr_sack_chunk);
+ offset_dup = offset_seg + (num_seg + num_nr_seg) * sizeof(struct sctp_gap_ack_block);
}
- if (stcb->asoc.nrsack_supported == 0) {
- goto unknown_chunk;
- }
- if (chk_length < sizeof(struct sctp_nr_sack_chunk)) {
- SCTPDBG(SCTP_DEBUG_INDATA1, "Bad size on NR-SACK chunk, too small\n");
- break;
- }
- if (SCTP_GET_STATE(&stcb->asoc) == SCTP_STATE_SHUTDOWN_ACK_SENT) {
- /*-
- * If we have sent a shutdown-ack, we will pay no
- * attention to a sack sent in to us since
- * we don't care anymore.
- */
- break;
- }
- nr_sack = (struct sctp_nr_sack_chunk *)ch;
- flags = ch->chunk_flags;
- cum_ack = ntohl(nr_sack->nr_sack.cum_tsn_ack);
- num_seg = ntohs(nr_sack->nr_sack.num_gap_ack_blks);
- num_nr_seg = ntohs(nr_sack->nr_sack.num_nr_gap_ack_blks);
- num_dup = ntohs(nr_sack->nr_sack.num_dup_tsns);
- a_rwnd = (uint32_t)ntohl(nr_sack->nr_sack.a_rwnd);
- if (sizeof(struct sctp_nr_sack_chunk) +
- (num_seg + num_nr_seg) * sizeof(struct sctp_gap_ack_block) +
- num_dup * sizeof(uint32_t) != chk_length) {
- SCTPDBG(SCTP_DEBUG_INDATA1, "Bad size of NR_SACK chunk\n");
- break;
- }
- offset_seg = *offset + sizeof(struct sctp_nr_sack_chunk);
- offset_dup = offset_seg + num_seg * sizeof(struct sctp_gap_ack_block);
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_NR_SACK process cum_ack:%x num_seg:%d a_rwnd:%d\n",
+ SCTPDBG(SCTP_DEBUG_INPUT3, "%s process cum_ack:%x num_seg:%d a_rwnd:%d\n",
+ (ch->chunk_type == SCTP_SELECTIVE_ACK) ? "SCTP_SACK" : "SCTP_NR_SACK",
cum_ack, num_seg, a_rwnd);
stcb->asoc.seen_a_sack_this_pkt = 1;
if ((stcb->asoc.pr_sctp_cnt == 0) &&
@@ -5066,10 +5021,11 @@ process_control_chunks:
sctp_express_handle_sack(stcb, cum_ack, a_rwnd,
&abort_now, ecne_seen);
} else {
- if (netp && *netp)
+ if ((netp != NULL) && (*netp != NULL)) {
sctp_handle_sack(m, offset_seg, offset_dup, stcb,
num_seg, num_nr_seg, num_dup, &abort_now, flags,
cum_ack, a_rwnd, ecne_seen);
+ }
}
if (abort_now) {
/* ABORT signal from sack processing */
@@ -5081,47 +5037,28 @@ process_control_chunks:
(stcb->asoc.stream_queue_cnt == 0)) {
sctp_ulp_notify(SCTP_NOTIFY_SENDER_DRY, stcb, 0, NULL, SCTP_SO_NOT_LOCKED);
}
+ break;
}
- break;
-
case SCTP_HEARTBEAT_REQUEST:
SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_HEARTBEAT\n");
- if ((stcb) && netp && *netp) {
+ if ((stcb != NULL) && (netp != NULL) && (*netp != NULL)) {
SCTP_STAT_INCR(sctps_recvheartbeat);
sctp_send_heartbeat_ack(stcb, m, *offset,
chk_length, *netp);
-
- /* He's alive so give him credit */
- if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_THRESHOLD_LOGGING) {
- sctp_misc_ints(SCTP_THRESHOLD_CLEAR,
- stcb->asoc.overall_error_count,
- 0,
- SCTP_FROM_SCTP_INPUT,
- __LINE__);
- }
- stcb->asoc.overall_error_count = 0;
}
break;
case SCTP_HEARTBEAT_ACK:
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_HEARTBEAT-ACK\n");
+ SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_HEARTBEAT_ACK\n");
if ((stcb == NULL) || (chk_length != sizeof(struct sctp_heartbeat_chunk))) {
/* Its not ours */
*offset = length;
return (stcb);
}
- /* He's alive so give him credit */
- if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_THRESHOLD_LOGGING) {
- sctp_misc_ints(SCTP_THRESHOLD_CLEAR,
- stcb->asoc.overall_error_count,
- 0,
- SCTP_FROM_SCTP_INPUT,
- __LINE__);
- }
- stcb->asoc.overall_error_count = 0;
SCTP_STAT_INCR(sctps_recvheartbeatack);
- if (netp && *netp)
+ if ((netp != NULL) && (*netp != NULL)) {
sctp_handle_heartbeat_ack((struct sctp_heartbeat_chunk *)ch,
stcb, *netp);
+ }
break;
case SCTP_ABORT_ASSOCIATION:
SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_ABORT, stcb %p\n",
@@ -5144,7 +5081,7 @@ process_control_chunks:
*offset = length;
return (stcb);
}
- if (netp && *netp) {
+ if ((netp != NULL) && (*netp != NULL)) {
int abort_flag = 0;
sctp_handle_shutdown((struct sctp_shutdown_chunk *)ch,
@@ -5156,24 +5093,25 @@ process_control_chunks:
}
break;
case SCTP_SHUTDOWN_ACK:
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_SHUTDOWN-ACK, stcb %p\n", (void *)stcb);
- if ((stcb) && (netp) && (*netp))
+ SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_SHUTDOWN_ACK, stcb %p\n", (void *)stcb);
+ if ((stcb != NULL) && (netp != NULL) && (*netp != NULL)) {
sctp_handle_shutdown_ack((struct sctp_shutdown_ack_chunk *)ch, stcb, *netp);
+ }
*offset = length;
return (NULL);
break;
-
case SCTP_OPERATION_ERROR:
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_OP-ERR\n");
- if ((stcb) && netp && *netp && sctp_handle_error(ch, stcb, *netp) < 0) {
+ SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_OP_ERR\n");
+ if ((stcb != NULL) && (netp != NULL) && (*netp != NULL) &&
+ sctp_handle_error(ch, stcb, *netp) < 0) {
*offset = length;
return (NULL);
}
break;
case SCTP_COOKIE_ECHO:
SCTPDBG(SCTP_DEBUG_INPUT3,
- "SCTP_COOKIE-ECHO, stcb %p\n", (void *)stcb);
- if ((stcb) && (stcb->asoc.total_output_queue_size)) {
+ "SCTP_COOKIE_ECHO, stcb %p\n", (void *)stcb);
+ if ((stcb != NULL) && (stcb->asoc.total_output_queue_size > 0)) {
;
} else {
if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) {
@@ -5215,7 +5153,7 @@ process_control_chunks:
linp = inp;
}
- if (linp) {
+ if (linp != NULL) {
SCTP_ASOC_CREATE_LOCK(linp);
if ((inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) ||
(inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_ALLGONE)) {
@@ -5223,7 +5161,7 @@ process_control_chunks:
goto abend;
}
}
- if (netp) {
+ if (netp != NULL) {
struct sctp_tcb *locked_stcb;
locked_stcb = stcb;
@@ -5251,7 +5189,7 @@ process_control_chunks:
} else {
ret_buf = NULL;
}
- if (linp) {
+ if (linp != NULL) {
SCTP_ASOC_CREATE_UNLOCK(linp);
}
if (ret_buf == NULL) {
@@ -5281,7 +5219,7 @@ process_control_chunks:
}
break;
case SCTP_COOKIE_ACK:
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_COOKIE-ACK, stcb %p\n", (void *)stcb);
+ SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_COOKIE_ACK, stcb %p\n", (void *)stcb);
if ((stcb == NULL) || chk_length != sizeof(struct sctp_cookie_ack_chunk)) {
return (stcb);
}
@@ -5307,75 +5245,43 @@ process_control_chunks:
return (NULL);
}
}
- /* He's alive so give him credit */
- if ((stcb) && netp && *netp) {
- if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_THRESHOLD_LOGGING) {
- sctp_misc_ints(SCTP_THRESHOLD_CLEAR,
- stcb->asoc.overall_error_count,
- 0,
- SCTP_FROM_SCTP_INPUT,
- __LINE__);
- }
- stcb->asoc.overall_error_count = 0;
+ if ((netp != NULL) && (*netp != NULL)) {
sctp_handle_cookie_ack((struct sctp_cookie_ack_chunk *)ch, stcb, *netp);
}
break;
case SCTP_ECN_ECHO:
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_ECN-ECHO\n");
- /* He's alive so give him credit */
+ SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_ECN_ECHO\n");
if ((stcb == NULL) || (chk_length != sizeof(struct sctp_ecne_chunk))) {
/* Its not ours */
*offset = length;
return (stcb);
}
- if (stcb) {
- if (stcb->asoc.ecn_supported == 0) {
- goto unknown_chunk;
- }
- if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_THRESHOLD_LOGGING) {
- sctp_misc_ints(SCTP_THRESHOLD_CLEAR,
- stcb->asoc.overall_error_count,
- 0,
- SCTP_FROM_SCTP_INPUT,
- __LINE__);
- }
- stcb->asoc.overall_error_count = 0;
- sctp_handle_ecn_echo((struct sctp_ecne_chunk *)ch,
- stcb);
- ecne_seen = 1;
+ if (stcb->asoc.ecn_supported == 0) {
+ goto unknown_chunk;
}
+ sctp_handle_ecn_echo((struct sctp_ecne_chunk *)ch, stcb);
+ ecne_seen = 1;
break;
case SCTP_ECN_CWR:
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_ECN-CWR\n");
- /* He's alive so give him credit */
+ SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_ECN_CWR\n");
if ((stcb == NULL) || (chk_length != sizeof(struct sctp_cwr_chunk))) {
*offset = length;
return (stcb);
}
- if (stcb) {
- if (stcb->asoc.ecn_supported == 0) {
- goto unknown_chunk;
- }
- if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_THRESHOLD_LOGGING) {
- sctp_misc_ints(SCTP_THRESHOLD_CLEAR,
- stcb->asoc.overall_error_count,
- 0,
- SCTP_FROM_SCTP_INPUT,
- __LINE__);
- }
- stcb->asoc.overall_error_count = 0;
- sctp_handle_ecn_cwr((struct sctp_cwr_chunk *)ch, stcb, *netp);
+ if (stcb->asoc.ecn_supported == 0) {
+ goto unknown_chunk;
}
+ sctp_handle_ecn_cwr((struct sctp_cwr_chunk *)ch, stcb, *netp);
break;
case SCTP_SHUTDOWN_COMPLETE:
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_SHUTDOWN-COMPLETE, stcb %p\n", (void *)stcb);
+ SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_SHUTDOWN_COMPLETE, stcb %p\n", (void *)stcb);
/* must be first and only chunk */
if ((num_chunks > 1) ||
(length - *offset > (int)SCTP_SIZE32(chk_length))) {
*offset = length;
return (stcb);
}
- if ((stcb) && netp && *netp) {
+ if ((stcb != NULL) && (netp != NULL) && (*netp != NULL)) {
sctp_handle_shutdown_complete((struct sctp_shutdown_complete_chunk *)ch,
stcb, *netp);
}
@@ -5384,32 +5290,23 @@ process_control_chunks:
break;
case SCTP_ASCONF:
SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_ASCONF\n");
- /* He's alive so give him credit */
- if (stcb) {
+ if (stcb != NULL) {
if (stcb->asoc.asconf_supported == 0) {
goto unknown_chunk;
}
- if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_THRESHOLD_LOGGING) {
- sctp_misc_ints(SCTP_THRESHOLD_CLEAR,
- stcb->asoc.overall_error_count,
- 0,
- SCTP_FROM_SCTP_INPUT,
- __LINE__);
- }
- stcb->asoc.overall_error_count = 0;
sctp_handle_asconf(m, *offset, src,
(struct sctp_asconf_chunk *)ch, stcb, asconf_cnt == 0);
asconf_cnt++;
}
break;
case SCTP_ASCONF_ACK:
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_ASCONF-ACK\n");
+ SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_ASCONF_ACK\n");
if (chk_length < sizeof(struct sctp_asconf_ack_chunk)) {
/* Its not ours */
*offset = length;
return (stcb);
}
- if ((stcb) && netp && *netp) {
+ if ((stcb != NULL) && (netp != NULL) && (*netp != NULL)) {
if (stcb->asoc.asconf_supported == 0) {
goto unknown_chunk;
}
@@ -5430,27 +5327,18 @@ process_control_chunks:
break;
case SCTP_FORWARD_CUM_TSN:
case SCTP_IFORWARD_CUM_TSN:
- SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_FWD-TSN\n");
+ SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_FWD_TSN\n");
if (chk_length < sizeof(struct sctp_forward_tsn_chunk)) {
/* Its not ours */
*offset = length;
return (stcb);
}
- /* He's alive so give him credit */
- if (stcb) {
+ if (stcb != NULL) {
int abort_flag = 0;
if (stcb->asoc.prsctp_supported == 0) {
goto unknown_chunk;
}
- stcb->asoc.overall_error_count = 0;
- if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_THRESHOLD_LOGGING) {
- sctp_misc_ints(SCTP_THRESHOLD_CLEAR,
- stcb->asoc.overall_error_count,
- 0,
- SCTP_FROM_SCTP_INPUT,
- __LINE__);
- }
*fwd_tsn_seen = 1;
if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) {
/* We are not interested anymore */
@@ -5480,17 +5368,7 @@ process_control_chunks:
if (abort_flag) {
*offset = length;
return (NULL);
- } else {
- if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_THRESHOLD_LOGGING) {
- sctp_misc_ints(SCTP_THRESHOLD_CLEAR,
- stcb->asoc.overall_error_count,
- 0,
- SCTP_FROM_SCTP_INPUT,
- __LINE__);
- }
- stcb->asoc.overall_error_count = 0;
}
-
}
break;
case SCTP_STREAM_RESET:
@@ -5517,7 +5395,7 @@ process_control_chunks:
*offset = length;
return (stcb);
}
- if (ch && (stcb) && netp && (*netp)) {
+ if ((ch != NULL) && (stcb != NULL) && (netp != NULL) && (*netp != NULL)) {
if (stcb->asoc.pktdrop_supported == 0) {
goto unknown_chunk;
}
@@ -5616,7 +5494,7 @@ next_chunk:
}
} /* while */
- if (asconf_cnt > 0 && stcb != NULL) {
+ if ((asconf_cnt > 0) && (stcb != NULL)) {
sctp_send_asconf_ack(stcb);
}
return (stcb);
@@ -5894,14 +5772,6 @@ sctp_common_input_processing(struct mbuf **mm, int iph
* shows us the cookie-ack was lost. Imply it was
* there.
*/
- if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_THRESHOLD_LOGGING) {
- sctp_misc_ints(SCTP_THRESHOLD_CLEAR,
- stcb->asoc.overall_error_count,
- 0,
- SCTP_FROM_SCTP_INPUT,
- __LINE__);
- }
- stcb->asoc.overall_error_count = 0;
sctp_handle_cookie_ack((struct sctp_cookie_ack_chunk *)ch, stcb, net);
break;
case SCTP_STATE_COOKIE_WAIT:
More information about the svn-src-stable
mailing list