diff options
-rw-r--r-- | include/linux/snmp.h | 33 | ||||
-rw-r--r-- | include/net/sctp/sctp.h | 44 | ||||
-rw-r--r-- | include/net/snmp.h | 6 | ||||
-rw-r--r-- | net/sctp/input.c | 8 | ||||
-rw-r--r-- | net/sctp/inqueue.c | 4 | ||||
-rw-r--r-- | net/sctp/outqueue.c | 6 | ||||
-rw-r--r-- | net/sctp/proc.c | 17 | ||||
-rw-r--r-- | net/sctp/sm_statefuns.c | 15 |
8 files changed, 88 insertions, 45 deletions
diff --git a/include/linux/snmp.h b/include/linux/snmp.h index 30156556f78d..854aa6b543f1 100644 --- a/include/linux/snmp.h +++ b/include/linux/snmp.h | |||
@@ -160,39 +160,6 @@ enum | |||
160 | __UDP_MIB_MAX | 160 | __UDP_MIB_MAX |
161 | }; | 161 | }; |
162 | 162 | ||
163 | /* sctp mib definitions */ | ||
164 | /* | ||
165 | * draft-ietf-sigtran-sctp-mib-07.txt | ||
166 | */ | ||
167 | enum | ||
168 | { | ||
169 | SCTP_MIB_NUM = 0, | ||
170 | SCTP_MIB_CURRESTAB, /* CurrEstab */ | ||
171 | SCTP_MIB_ACTIVEESTABS, /* ActiveEstabs */ | ||
172 | SCTP_MIB_PASSIVEESTABS, /* PassiveEstabs */ | ||
173 | SCTP_MIB_ABORTEDS, /* Aborteds */ | ||
174 | SCTP_MIB_SHUTDOWNS, /* Shutdowns */ | ||
175 | SCTP_MIB_OUTOFBLUES, /* OutOfBlues */ | ||
176 | SCTP_MIB_CHECKSUMERRORS, /* ChecksumErrors */ | ||
177 | SCTP_MIB_OUTCTRLCHUNKS, /* OutCtrlChunks */ | ||
178 | SCTP_MIB_OUTORDERCHUNKS, /* OutOrderChunks */ | ||
179 | SCTP_MIB_OUTUNORDERCHUNKS, /* OutUnorderChunks */ | ||
180 | SCTP_MIB_INCTRLCHUNKS, /* InCtrlChunks */ | ||
181 | SCTP_MIB_INORDERCHUNKS, /* InOrderChunks */ | ||
182 | SCTP_MIB_INUNORDERCHUNKS, /* InUnorderChunks */ | ||
183 | SCTP_MIB_FRAGUSRMSGS, /* FragUsrMsgs */ | ||
184 | SCTP_MIB_REASMUSRMSGS, /* ReasmUsrMsgs */ | ||
185 | SCTP_MIB_OUTSCTPPACKS, /* OutSCTPPacks */ | ||
186 | SCTP_MIB_INSCTPPACKS, /* InSCTPPacks */ | ||
187 | SCTP_MIB_RTOALGORITHM, /* RtoAlgorithm */ | ||
188 | SCTP_MIB_RTOMIN, /* RtoMin */ | ||
189 | SCTP_MIB_RTOMAX, /* RtoMax */ | ||
190 | SCTP_MIB_RTOINITIAL, /* RtoInitial */ | ||
191 | SCTP_MIB_VALCOOKIELIFE, /* ValCookieLife */ | ||
192 | SCTP_MIB_MAXINITRETR, /* MaxInitRetr */ | ||
193 | __SCTP_MIB_MAX | ||
194 | }; | ||
195 | |||
196 | /* linux mib definitions */ | 163 | /* linux mib definitions */ |
197 | enum | 164 | enum |
198 | { | 165 | { |
diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h index 1c1abce5f6b6..e274fd479990 100644 --- a/include/net/sctp/sctp.h +++ b/include/net/sctp/sctp.h | |||
@@ -216,6 +216,50 @@ DECLARE_SNMP_STAT(struct sctp_mib, sctp_statistics); | |||
216 | 216 | ||
217 | #endif /* !TEST_FRAME */ | 217 | #endif /* !TEST_FRAME */ |
218 | 218 | ||
219 | /* sctp mib definitions */ | ||
220 | enum | ||
221 | { | ||
222 | SCTP_MIB_NUM = 0, | ||
223 | SCTP_MIB_CURRESTAB, /* CurrEstab */ | ||
224 | SCTP_MIB_ACTIVEESTABS, /* ActiveEstabs */ | ||
225 | SCTP_MIB_PASSIVEESTABS, /* PassiveEstabs */ | ||
226 | SCTP_MIB_ABORTEDS, /* Aborteds */ | ||
227 | SCTP_MIB_SHUTDOWNS, /* Shutdowns */ | ||
228 | SCTP_MIB_OUTOFBLUES, /* OutOfBlues */ | ||
229 | SCTP_MIB_CHECKSUMERRORS, /* ChecksumErrors */ | ||
230 | SCTP_MIB_OUTCTRLCHUNKS, /* OutCtrlChunks */ | ||
231 | SCTP_MIB_OUTORDERCHUNKS, /* OutOrderChunks */ | ||
232 | SCTP_MIB_OUTUNORDERCHUNKS, /* OutUnorderChunks */ | ||
233 | SCTP_MIB_INCTRLCHUNKS, /* InCtrlChunks */ | ||
234 | SCTP_MIB_INORDERCHUNKS, /* InOrderChunks */ | ||
235 | SCTP_MIB_INUNORDERCHUNKS, /* InUnorderChunks */ | ||
236 | SCTP_MIB_FRAGUSRMSGS, /* FragUsrMsgs */ | ||
237 | SCTP_MIB_REASMUSRMSGS, /* ReasmUsrMsgs */ | ||
238 | SCTP_MIB_OUTSCTPPACKS, /* OutSCTPPacks */ | ||
239 | SCTP_MIB_INSCTPPACKS, /* InSCTPPacks */ | ||
240 | SCTP_MIB_T1_INIT_EXPIREDS, | ||
241 | SCTP_MIB_T1_COOKIE_EXPIREDS, | ||
242 | SCTP_MIB_T2_SHUTDOWN_EXPIREDS, | ||
243 | SCTP_MIB_T3_RTX_EXPIREDS, | ||
244 | SCTP_MIB_T4_RTO_EXPIREDS, | ||
245 | SCTP_MIB_T5_SHUTDOWN_GUARD_EXPIREDS, | ||
246 | SCTP_MIB_DELAY_SACK_EXPIREDS, | ||
247 | SCTP_MIB_AUTOCLOSE_EXPIREDS, | ||
248 | SCTP_MIB_T3_RETRANSMITS, | ||
249 | SCTP_MIB_PMTUD_RETRANSMITS, | ||
250 | SCTP_MIB_FAST_RETRANSMITS, | ||
251 | SCTP_MIB_IN_PKT_SOFTIRQ, | ||
252 | SCTP_MIB_IN_PKT_BACKLOG, | ||
253 | SCTP_MIB_IN_PKT_DISCARDS, | ||
254 | SCTP_MIB_IN_DATA_CHUNK_DISCARDS, | ||
255 | __SCTP_MIB_MAX | ||
256 | }; | ||
257 | |||
258 | #define SCTP_MIB_MAX __SCTP_MIB_MAX | ||
259 | struct sctp_mib { | ||
260 | unsigned long mibs[SCTP_MIB_MAX]; | ||
261 | } __SNMP_MIB_ALIGN__; | ||
262 | |||
219 | 263 | ||
220 | /* Print debugging messages. */ | 264 | /* Print debugging messages. */ |
221 | #if SCTP_DEBUG | 265 | #if SCTP_DEBUG |
diff --git a/include/net/snmp.h b/include/net/snmp.h index a36bed8ea210..464970e39ec0 100644 --- a/include/net/snmp.h +++ b/include/net/snmp.h | |||
@@ -100,12 +100,6 @@ struct udp_mib { | |||
100 | unsigned long mibs[UDP_MIB_MAX]; | 100 | unsigned long mibs[UDP_MIB_MAX]; |
101 | } __SNMP_MIB_ALIGN__; | 101 | } __SNMP_MIB_ALIGN__; |
102 | 102 | ||
103 | /* SCTP */ | ||
104 | #define SCTP_MIB_MAX __SCTP_MIB_MAX | ||
105 | struct sctp_mib { | ||
106 | unsigned long mibs[SCTP_MIB_MAX]; | ||
107 | } __SNMP_MIB_ALIGN__; | ||
108 | |||
109 | /* Linux */ | 103 | /* Linux */ |
110 | #define LINUX_MIB_MAX __LINUX_MIB_MAX | 104 | #define LINUX_MIB_MAX __LINUX_MIB_MAX |
111 | struct linux_mib { | 105 | struct linux_mib { |
diff --git a/net/sctp/input.c b/net/sctp/input.c index 42b66e74bbb5..8a34d95602ce 100644 --- a/net/sctp/input.c +++ b/net/sctp/input.c | |||
@@ -255,10 +255,13 @@ int sctp_rcv(struct sk_buff *skb) | |||
255 | */ | 255 | */ |
256 | sctp_bh_lock_sock(sk); | 256 | sctp_bh_lock_sock(sk); |
257 | 257 | ||
258 | if (sock_owned_by_user(sk)) | 258 | if (sock_owned_by_user(sk)) { |
259 | SCTP_INC_STATS_BH(SCTP_MIB_IN_PKT_BACKLOG); | ||
259 | sctp_add_backlog(sk, skb); | 260 | sctp_add_backlog(sk, skb); |
260 | else | 261 | } else { |
262 | SCTP_INC_STATS_BH(SCTP_MIB_IN_PKT_SOFTIRQ); | ||
261 | sctp_inq_push(&chunk->rcvr->inqueue, chunk); | 263 | sctp_inq_push(&chunk->rcvr->inqueue, chunk); |
264 | } | ||
262 | 265 | ||
263 | sctp_bh_unlock_sock(sk); | 266 | sctp_bh_unlock_sock(sk); |
264 | 267 | ||
@@ -271,6 +274,7 @@ int sctp_rcv(struct sk_buff *skb) | |||
271 | return 0; | 274 | return 0; |
272 | 275 | ||
273 | discard_it: | 276 | discard_it: |
277 | SCTP_INC_STATS_BH(SCTP_MIB_IN_PKT_DISCARDS); | ||
274 | kfree_skb(skb); | 278 | kfree_skb(skb); |
275 | return 0; | 279 | return 0; |
276 | 280 | ||
diff --git a/net/sctp/inqueue.c b/net/sctp/inqueue.c index cf0c767d43ae..cf6deed7e849 100644 --- a/net/sctp/inqueue.c +++ b/net/sctp/inqueue.c | |||
@@ -87,7 +87,7 @@ void sctp_inq_free(struct sctp_inq *queue) | |||
87 | /* Put a new packet in an SCTP inqueue. | 87 | /* Put a new packet in an SCTP inqueue. |
88 | * We assume that packet->sctp_hdr is set and in host byte order. | 88 | * We assume that packet->sctp_hdr is set and in host byte order. |
89 | */ | 89 | */ |
90 | void sctp_inq_push(struct sctp_inq *q, struct sctp_chunk *packet) | 90 | void sctp_inq_push(struct sctp_inq *q, struct sctp_chunk *chunk) |
91 | { | 91 | { |
92 | /* Directly call the packet handling routine. */ | 92 | /* Directly call the packet handling routine. */ |
93 | 93 | ||
@@ -96,7 +96,7 @@ void sctp_inq_push(struct sctp_inq *q, struct sctp_chunk *packet) | |||
96 | * Eventually, we should clean up inqueue to not rely | 96 | * Eventually, we should clean up inqueue to not rely |
97 | * on the BH related data structures. | 97 | * on the BH related data structures. |
98 | */ | 98 | */ |
99 | list_add_tail(&packet->list, &q->in_chunk_list); | 99 | list_add_tail(&chunk->list, &q->in_chunk_list); |
100 | q->immediate.func(q->immediate.data); | 100 | q->immediate.func(q->immediate.data); |
101 | } | 101 | } |
102 | 102 | ||
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c index 30b710c54e64..37074a39ecbb 100644 --- a/net/sctp/outqueue.c +++ b/net/sctp/outqueue.c | |||
@@ -467,6 +467,7 @@ void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport, | |||
467 | 467 | ||
468 | switch(reason) { | 468 | switch(reason) { |
469 | case SCTP_RTXR_T3_RTX: | 469 | case SCTP_RTXR_T3_RTX: |
470 | SCTP_INC_STATS(SCTP_MIB_T3_RETRANSMITS); | ||
470 | sctp_transport_lower_cwnd(transport, SCTP_LOWER_CWND_T3_RTX); | 471 | sctp_transport_lower_cwnd(transport, SCTP_LOWER_CWND_T3_RTX); |
471 | /* Update the retran path if the T3-rtx timer has expired for | 472 | /* Update the retran path if the T3-rtx timer has expired for |
472 | * the current retran path. | 473 | * the current retran path. |
@@ -475,12 +476,15 @@ void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport, | |||
475 | sctp_assoc_update_retran_path(transport->asoc); | 476 | sctp_assoc_update_retran_path(transport->asoc); |
476 | break; | 477 | break; |
477 | case SCTP_RTXR_FAST_RTX: | 478 | case SCTP_RTXR_FAST_RTX: |
479 | SCTP_INC_STATS(SCTP_MIB_FAST_RETRANSMITS); | ||
478 | sctp_transport_lower_cwnd(transport, SCTP_LOWER_CWND_FAST_RTX); | 480 | sctp_transport_lower_cwnd(transport, SCTP_LOWER_CWND_FAST_RTX); |
479 | fast_retransmit = 1; | 481 | fast_retransmit = 1; |
480 | break; | 482 | break; |
481 | case SCTP_RTXR_PMTUD: | 483 | case SCTP_RTXR_PMTUD: |
482 | default: | 484 | SCTP_INC_STATS(SCTP_MIB_PMTUD_RETRANSMITS); |
483 | break; | 485 | break; |
486 | default: | ||
487 | BUG(); | ||
484 | } | 488 | } |
485 | 489 | ||
486 | sctp_retransmit_mark(q, transport, fast_retransmit); | 490 | sctp_retransmit_mark(q, transport, fast_retransmit); |
diff --git a/net/sctp/proc.c b/net/sctp/proc.c index 5b3b0e0ae7e5..a356d8d310a9 100644 --- a/net/sctp/proc.c +++ b/net/sctp/proc.c | |||
@@ -57,6 +57,21 @@ static struct snmp_mib sctp_snmp_list[] = { | |||
57 | SNMP_MIB_ITEM("SctpReasmUsrMsgs", SCTP_MIB_REASMUSRMSGS), | 57 | SNMP_MIB_ITEM("SctpReasmUsrMsgs", SCTP_MIB_REASMUSRMSGS), |
58 | SNMP_MIB_ITEM("SctpOutSCTPPacks", SCTP_MIB_OUTSCTPPACKS), | 58 | SNMP_MIB_ITEM("SctpOutSCTPPacks", SCTP_MIB_OUTSCTPPACKS), |
59 | SNMP_MIB_ITEM("SctpInSCTPPacks", SCTP_MIB_INSCTPPACKS), | 59 | SNMP_MIB_ITEM("SctpInSCTPPacks", SCTP_MIB_INSCTPPACKS), |
60 | SNMP_MIB_ITEM("SctpT1InitExpireds", SCTP_MIB_T1_INIT_EXPIREDS), | ||
61 | SNMP_MIB_ITEM("SctpT1CookieExpireds", SCTP_MIB_T1_COOKIE_EXPIREDS), | ||
62 | SNMP_MIB_ITEM("SctpT2ShutdownExpireds", SCTP_MIB_T2_SHUTDOWN_EXPIREDS), | ||
63 | SNMP_MIB_ITEM("SctpT3RtxExpireds", SCTP_MIB_T3_RTX_EXPIREDS), | ||
64 | SNMP_MIB_ITEM("SctpT4RtoExpireds", SCTP_MIB_T4_RTO_EXPIREDS), | ||
65 | SNMP_MIB_ITEM("SctpT5ShutdownGuardExpireds", SCTP_MIB_T5_SHUTDOWN_GUARD_EXPIREDS), | ||
66 | SNMP_MIB_ITEM("SctpDelaySackExpireds", SCTP_MIB_DELAY_SACK_EXPIREDS), | ||
67 | SNMP_MIB_ITEM("SctpAutocloseExpireds", SCTP_MIB_AUTOCLOSE_EXPIREDS), | ||
68 | SNMP_MIB_ITEM("SctpT3Retransmits", SCTP_MIB_T3_RETRANSMITS), | ||
69 | SNMP_MIB_ITEM("SctpPmtudRetransmits", SCTP_MIB_PMTUD_RETRANSMITS), | ||
70 | SNMP_MIB_ITEM("SctpFastRetransmits", SCTP_MIB_FAST_RETRANSMITS), | ||
71 | SNMP_MIB_ITEM("SctpInPktSoftirq", SCTP_MIB_IN_PKT_SOFTIRQ), | ||
72 | SNMP_MIB_ITEM("SctpInPktBacklog", SCTP_MIB_IN_PKT_BACKLOG), | ||
73 | SNMP_MIB_ITEM("SctpInPktDiscards", SCTP_MIB_IN_PKT_DISCARDS), | ||
74 | SNMP_MIB_ITEM("SctpInDataChunkDiscards", SCTP_MIB_IN_DATA_CHUNK_DISCARDS), | ||
60 | SNMP_MIB_SENTINEL | 75 | SNMP_MIB_SENTINEL |
61 | }; | 76 | }; |
62 | 77 | ||
@@ -328,8 +343,8 @@ static int sctp_assocs_seq_show(struct seq_file *seq, void *v) | |||
328 | "%8p %8p %-3d %-3d %-2d %-4d %4d %8d %8d %7d %5lu %-5d %5d ", | 343 | "%8p %8p %-3d %-3d %-2d %-4d %4d %8d %8d %7d %5lu %-5d %5d ", |
329 | assoc, sk, sctp_sk(sk)->type, sk->sk_state, | 344 | assoc, sk, sctp_sk(sk)->type, sk->sk_state, |
330 | assoc->state, hash, assoc->assoc_id, | 345 | assoc->state, hash, assoc->assoc_id, |
331 | (sk->sk_rcvbuf - assoc->rwnd), | ||
332 | assoc->sndbuf_used, | 346 | assoc->sndbuf_used, |
347 | (sk->sk_rcvbuf - assoc->rwnd), | ||
333 | sock_i_uid(sk), sock_i_ino(sk), | 348 | sock_i_uid(sk), sock_i_ino(sk), |
334 | epb->bind_addr.port, | 349 | epb->bind_addr.port, |
335 | assoc->peer.port); | 350 | assoc->peer.port); |
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c index 5b5ae7958322..32f57f42af9e 100644 --- a/net/sctp/sm_statefuns.c +++ b/net/sctp/sm_statefuns.c | |||
@@ -2663,9 +2663,11 @@ sctp_disposition_t sctp_sf_eat_data_6_2(const struct sctp_endpoint *ep, | |||
2663 | break; | 2663 | break; |
2664 | case SCTP_IERROR_HIGH_TSN: | 2664 | case SCTP_IERROR_HIGH_TSN: |
2665 | case SCTP_IERROR_BAD_STREAM: | 2665 | case SCTP_IERROR_BAD_STREAM: |
2666 | SCTP_INC_STATS(SCTP_MIB_IN_DATA_CHUNK_DISCARDS); | ||
2666 | goto discard_noforce; | 2667 | goto discard_noforce; |
2667 | case SCTP_IERROR_DUP_TSN: | 2668 | case SCTP_IERROR_DUP_TSN: |
2668 | case SCTP_IERROR_IGNORE_TSN: | 2669 | case SCTP_IERROR_IGNORE_TSN: |
2670 | SCTP_INC_STATS(SCTP_MIB_IN_DATA_CHUNK_DISCARDS); | ||
2669 | goto discard_force; | 2671 | goto discard_force; |
2670 | case SCTP_IERROR_NO_DATA: | 2672 | case SCTP_IERROR_NO_DATA: |
2671 | goto consume; | 2673 | goto consume; |
@@ -3652,6 +3654,7 @@ sctp_disposition_t sctp_sf_pdiscard(const struct sctp_endpoint *ep, | |||
3652 | void *arg, | 3654 | void *arg, |
3653 | sctp_cmd_seq_t *commands) | 3655 | sctp_cmd_seq_t *commands) |
3654 | { | 3656 | { |
3657 | SCTP_INC_STATS(SCTP_MIB_IN_PKT_DISCARDS); | ||
3655 | sctp_add_cmd_sf(commands, SCTP_CMD_DISCARD_PACKET, SCTP_NULL()); | 3658 | sctp_add_cmd_sf(commands, SCTP_CMD_DISCARD_PACKET, SCTP_NULL()); |
3656 | 3659 | ||
3657 | return SCTP_DISPOSITION_CONSUME; | 3660 | return SCTP_DISPOSITION_CONSUME; |
@@ -4548,6 +4551,8 @@ sctp_disposition_t sctp_sf_do_6_3_3_rtx(const struct sctp_endpoint *ep, | |||
4548 | { | 4551 | { |
4549 | struct sctp_transport *transport = arg; | 4552 | struct sctp_transport *transport = arg; |
4550 | 4553 | ||
4554 | SCTP_INC_STATS(SCTP_MIB_T3_RTX_EXPIREDS); | ||
4555 | |||
4551 | if (asoc->overall_error_count >= asoc->max_retrans) { | 4556 | if (asoc->overall_error_count >= asoc->max_retrans) { |
4552 | sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, | 4557 | sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, |
4553 | SCTP_ERROR(ETIMEDOUT)); | 4558 | SCTP_ERROR(ETIMEDOUT)); |
@@ -4616,6 +4621,7 @@ sctp_disposition_t sctp_sf_do_6_2_sack(const struct sctp_endpoint *ep, | |||
4616 | void *arg, | 4621 | void *arg, |
4617 | sctp_cmd_seq_t *commands) | 4622 | sctp_cmd_seq_t *commands) |
4618 | { | 4623 | { |
4624 | SCTP_INC_STATS(SCTP_MIB_DELAY_SACK_EXPIREDS); | ||
4619 | sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, SCTP_FORCE()); | 4625 | sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, SCTP_FORCE()); |
4620 | return SCTP_DISPOSITION_CONSUME; | 4626 | return SCTP_DISPOSITION_CONSUME; |
4621 | } | 4627 | } |
@@ -4650,6 +4656,7 @@ sctp_disposition_t sctp_sf_t1_init_timer_expire(const struct sctp_endpoint *ep, | |||
4650 | int attempts = asoc->init_err_counter + 1; | 4656 | int attempts = asoc->init_err_counter + 1; |
4651 | 4657 | ||
4652 | SCTP_DEBUG_PRINTK("Timer T1 expired (INIT).\n"); | 4658 | SCTP_DEBUG_PRINTK("Timer T1 expired (INIT).\n"); |
4659 | SCTP_INC_STATS(SCTP_MIB_T1_INIT_EXPIREDS); | ||
4653 | 4660 | ||
4654 | if (attempts <= asoc->max_init_attempts) { | 4661 | if (attempts <= asoc->max_init_attempts) { |
4655 | bp = (struct sctp_bind_addr *) &asoc->base.bind_addr; | 4662 | bp = (struct sctp_bind_addr *) &asoc->base.bind_addr; |
@@ -4709,6 +4716,7 @@ sctp_disposition_t sctp_sf_t1_cookie_timer_expire(const struct sctp_endpoint *ep | |||
4709 | int attempts = asoc->init_err_counter + 1; | 4716 | int attempts = asoc->init_err_counter + 1; |
4710 | 4717 | ||
4711 | SCTP_DEBUG_PRINTK("Timer T1 expired (COOKIE-ECHO).\n"); | 4718 | SCTP_DEBUG_PRINTK("Timer T1 expired (COOKIE-ECHO).\n"); |
4719 | SCTP_INC_STATS(SCTP_MIB_T1_COOKIE_EXPIREDS); | ||
4712 | 4720 | ||
4713 | if (attempts <= asoc->max_init_attempts) { | 4721 | if (attempts <= asoc->max_init_attempts) { |
4714 | repl = sctp_make_cookie_echo(asoc, NULL); | 4722 | repl = sctp_make_cookie_echo(asoc, NULL); |
@@ -4753,6 +4761,8 @@ sctp_disposition_t sctp_sf_t2_timer_expire(const struct sctp_endpoint *ep, | |||
4753 | struct sctp_chunk *reply = NULL; | 4761 | struct sctp_chunk *reply = NULL; |
4754 | 4762 | ||
4755 | SCTP_DEBUG_PRINTK("Timer T2 expired.\n"); | 4763 | SCTP_DEBUG_PRINTK("Timer T2 expired.\n"); |
4764 | SCTP_INC_STATS(SCTP_MIB_T2_SHUTDOWN_EXPIREDS); | ||
4765 | |||
4756 | if (asoc->overall_error_count >= asoc->max_retrans) { | 4766 | if (asoc->overall_error_count >= asoc->max_retrans) { |
4757 | sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, | 4767 | sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, |
4758 | SCTP_ERROR(ETIMEDOUT)); | 4768 | SCTP_ERROR(ETIMEDOUT)); |
@@ -4814,6 +4824,8 @@ sctp_disposition_t sctp_sf_t4_timer_expire( | |||
4814 | struct sctp_chunk *chunk = asoc->addip_last_asconf; | 4824 | struct sctp_chunk *chunk = asoc->addip_last_asconf; |
4815 | struct sctp_transport *transport = chunk->transport; | 4825 | struct sctp_transport *transport = chunk->transport; |
4816 | 4826 | ||
4827 | SCTP_INC_STATS(SCTP_MIB_T4_RTO_EXPIREDS); | ||
4828 | |||
4817 | /* ADDIP 4.1 B1) Increment the error counters and perform path failure | 4829 | /* ADDIP 4.1 B1) Increment the error counters and perform path failure |
4818 | * detection on the appropriate destination address as defined in | 4830 | * detection on the appropriate destination address as defined in |
4819 | * RFC2960 [5] section 8.1 and 8.2. | 4831 | * RFC2960 [5] section 8.1 and 8.2. |
@@ -4880,6 +4892,7 @@ sctp_disposition_t sctp_sf_t5_timer_expire(const struct sctp_endpoint *ep, | |||
4880 | struct sctp_chunk *reply = NULL; | 4892 | struct sctp_chunk *reply = NULL; |
4881 | 4893 | ||
4882 | SCTP_DEBUG_PRINTK("Timer T5 expired.\n"); | 4894 | SCTP_DEBUG_PRINTK("Timer T5 expired.\n"); |
4895 | SCTP_INC_STATS(SCTP_MIB_T5_SHUTDOWN_GUARD_EXPIREDS); | ||
4883 | 4896 | ||
4884 | reply = sctp_make_abort(asoc, NULL, 0); | 4897 | reply = sctp_make_abort(asoc, NULL, 0); |
4885 | if (!reply) | 4898 | if (!reply) |
@@ -4910,6 +4923,8 @@ sctp_disposition_t sctp_sf_autoclose_timer_expire( | |||
4910 | { | 4923 | { |
4911 | int disposition; | 4924 | int disposition; |
4912 | 4925 | ||
4926 | SCTP_INC_STATS(SCTP_MIB_AUTOCLOSE_EXPIREDS); | ||
4927 | |||
4913 | /* From 9.2 Shutdown of an Association | 4928 | /* From 9.2 Shutdown of an Association |
4914 | * Upon receipt of the SHUTDOWN primitive from its upper | 4929 | * Upon receipt of the SHUTDOWN primitive from its upper |
4915 | * layer, the endpoint enters SHUTDOWN-PENDING state and | 4930 | * layer, the endpoint enters SHUTDOWN-PENDING state and |