I ran into a problem where LKSCTP is reporting a SCTM_COMM_UP indication to the User application but is giving back a value of zero for the assoc_id.
Attached are the SCTP debugs for the period in question. A couple of things that I would like to note about my setup. One is that I'm running Kernel version 2.6.10 (I know is old but I can't move to a newer version due to custom drivers). The second thing is that the link between the two SCTP node is a very noisy and some messages are getting lost (i.e. the INIT_ACK from the peer in this particular case). After analyzing the SCTP code I came out with the following code changes: --- sm_statefuns.c.old 2007-04-04 08:58:34.074606000 -0500 +++ sm_statefuns.c.new 2007-04-04 09:03:31.818426000 -0500 @@ -1515,7 +1515,7 @@ */ /* This case represents an initialization collision. */ static sctp_disposition_t sctp_sf_do_dupcook_b(const struct sctp_endpoint *ep, - const struct sctp_association *asoc, + struct sctp_association *asoc, struct sctp_chunk *chunk, sctp_cmd_seq_t *commands, struct sctp_association *new_asoc) @@ -1528,13 +1528,13 @@ * side effects--it is safe to run them here. */ peer_init = &chunk->subh.cookie_hdr->c.peer_init[0]; - if (!sctp_process_init(new_asoc, chunk->chunk_hdr->type, + if (!sctp_process_init(asoc, chunk->chunk_hdr->type, sctp_source(chunk), peer_init, GFP_ATOMIC)) goto nomem; /* Update the content of current association. */ - sctp_add_cmd_sf(commands, SCTP_CMD_UPDATE_ASSOC, SCTP_ASOC(new_asoc)); + sctp_add_cmd_sf(commands, SCTP_CMD_UPDATE_ASSOC, SCTP_ASOC(asoc)); sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, SCTP_STATE(SCTP_STATE_ESTABLISHED)); SCTP_INC_STATS(SCTP_MIB_CURRESTAB); @@ -1554,8 +1554,8 @@ * upon reception of a valid COOKIE ECHO chunk. */ ev = sctp_ulpevent_make_assoc_change(asoc, 0, SCTP_COMM_UP, 0, - new_asoc->c.sinit_num_ostreams, - new_asoc->c.sinit_max_instreams, + asoc->c.sinit_num_ostreams, + asoc->c.sinit_max_instreams, GFP_ATOMIC); if (!ev) goto nomem_ev; ----------------------------------------- I can't say that I'm an expert on this area so I'm hoping someone in the list can provide some feedback. The change has been tested and it fixes the original problem and we have not detected any side effects so far. Thanks, Oscar
Mar 30 19:47:45 localhost kernel: +++sctp_inq_pop+++ chunk cede2460[ABORT], length 8, skb->len 4 Mar 30 19:47:45 localhost kernel: sctp_do_sm prefn: ep d0ede960, EVENT_T_CHUNK, ABORT, asoc ce366000[STATE_ESTABLISHED], sctp_sf_do_9_1_abort Mar 30 19:47:45 localhost kernel: sctp_do_sm postfn: asoc ce366000, status: DISPOSITION_ABORT Mar 30 19:47:45 localhost kernel: sm_sideff: event_up: ce6a3338, ulpq: ce36741c. Mar 30 19:47:45 localhost kernel: sctp_do_sm post sfx: error 0, asoc ce366000[STATE_CLOSED] Mar 30 19:47:45 localhost kernel: sctp_sendmsg(sk: dfcdf320, msg: d0a19ea0, msg_len: 8) Mar 30 19:47:45 localhost kernel: Using endpoint: unnamedEndpoint. Mar 30 19:47:45 localhost kernel: Just memcpy'd. msg_name is 0xa962018:51000. Mar 30 19:47:45 localhost kernel: msg_len: 8, sinfo_flags: 0x0 Mar 30 19:47:45 localhost kernel: About to look up association. Mar 30 19:47:45 localhost kernel: There is no association yet. Mar 30 19:47:45 localhost kernel: myctsnap for unnamedEndpoint INIT as 0xb693faae. Mar 30 19:47:45 localhost kernel: sctp_v4_get_dst: DST:XX.XX.XX.24, SRC:0.0.0.0 - <7>rt_dst:XX.XX.XX.24, rt_src:XX.XX.XX.109 Mar 30 19:47:45 localhost kernel: sctp_assoc_add_peer:association ce01c000 PMTU set to 512 Mar 30 19:47:45 localhost kernel: sctp_packet_init: packet:d4e81ce4 transport:d4e81c00 Mar 30 19:47:45 localhost kernel: We have a valid association. Mar 30 19:47:45 localhost kernel: sctp_do_sm prefn: ep d0ede960, EVENT_T_PRIMITIVE, PRIMITIVE_ASSOCIATE, asoc ce01c000[STATE_CLOSED], sctp_sf_do_prm_asoc Mar 30 19:47:45 localhost kernel: sctp_do_sm postfn: asoc ce01c000, status: DISPOSITION_CONSUME Mar 30 19:47:45 localhost kernel: sctp_outq_tail(ce01d3d8, cede2460[INIT]) Mar 30 19:47:45 localhost kernel: sctp_packet_config: packet:d4e81ce4 vtag:0x0 Mar 30 19:47:45 localhost kernel: sctp_packet_init: packet:d0a19990 transport:d4e81c00 Mar 30 19:47:45 localhost kernel: sctp_packet_config: packet:d0a19990 vtag:0x0 Mar 30 19:47:45 localhost kernel: sctp_packet_append_chunk: packet:d0a19990 chunk:cede2460 Mar 30 19:47:45 localhost kernel: sctp_packet_transmit: packet:d0a19990 Mar 30 19:47:45 localhost kernel: ***sctp_transmit_packet*** Mar 30 19:47:45 localhost kernel: *** Chunk cede2460[INIT] No TSN 0x0, length 44, chunk->skb->len 44, rtt_in_progress 0 Mar 30 19:47:45 localhost kernel: sctp_v4_get_dst: DST:XX.XX.XX.24, SRC:0.0.0.0 - <7>rt_dst:XX.XX.XX.24, rt_src:XX.XX.XX.109 Mar 30 19:47:45 localhost kernel: sctp_assoc_sync_pmtu: asoc:ce01c000, pmtu:512, frag_point:464 Mar 30 19:47:45 localhost kernel: ***sctp_transmit_packet*** skb len 56 Mar 30 19:47:45 localhost kernel: sctp_v4_xmit: skb:ce615e00, len:56, src:XX.XX.XX.109, dst:XX.XX.XX.24 Mar 30 19:47:45 localhost kernel: sctp_do_sm post sfx: error 0, asoc ce01c000[STATE_CLOSED] Mar 30 19:47:45 localhost kernel: We associated primitively. Mar 30 19:47:45 localhost kernel: sctp_do_sm prefn: ep d0ede960, EVENT_T_PRIMITIVE, PRIMITIVE_SEND, asoc ce01c000[STATE_COOKIE_WAIT], sctp_sf_do_prm_send Mar 30 19:47:45 localhost kernel: sctp_do_sm postfn: asoc ce01c000, status: DISPOSITION_CONSUME Mar 30 19:47:45 localhost kernel: sctp_outq_tail(ce01d3d8, cede2460[DATA]) Mar 30 19:47:45 localhost kernel: outqueueing (ce01d3d8, cede2460[DATA]) Mar 30 19:47:45 localhost kernel: sctp_do_sm post sfx: error 0, asoc ce01c000[STATE_CLOSED] Mar 30 19:47:45 localhost kernel: We sent primitively. Mar 30 19:47:45 localhost kernel: sctp_getsockopt(sk: dfcdf320, ...) Mar 30 19:47:45 localhost kernel: sctp_recvmsg(sk: dfcdf320, msghdr: d0a19e20, len: 1024, knoblauch: 0, flags: 0x0, addr_len: d0a19cb8) Mar 30 19:47:45 localhost kernel: Timeout: timeo: 2147483647, MAX: 2147483647. Mar 30 19:47:45 localhost kernel: sctp_recvmsg(sk: dfcdf320, msghdr: d0a19e20, len: 1024, knoblauch: 0, flags: 0x0, addr_len: d0a19cb8) Mar 30 19:47:45 localhost kernel: Timeout: timeo: 2147483647, MAX: 2147483647. Mar 30 19:47:45 localhost kernel: sctp_recvmsg(sk: dfcdf320, msghdr: d0a19e20, len: 1024, knoblauch: 0, flags: 0x0, addr_len: d0a19cb8) Mar 30 19:47:45 localhost kernel: Timeout: timeo: 2147483647, MAX: 2147483647. Mar 30 19:47:45 localhost kernel: +++sctp_inq_pop+++ chunk cede23a0[INIT], length 32, skb->len 28 Mar 30 19:47:45 localhost kernel: sctp_do_sm prefn: ep d0ede960, EVENT_T_CHUNK, INIT, asoc ce01c000[STATE_COOKIE_WAIT], sctp_sf_do_5_2_1_siminit Mar 30 19:47:45 localhost kernel: myctsnap for unnamedEndpoint INIT as 0x3acb4214. Mar 30 19:47:45 localhost kernel: sctp_v4_get_dst: DST:XX.XX.XX.24, SRC:0.0.0.0 - <7>rt_dst:XX.XX.XX.24, rt_src:XX.XX.XX.109 Mar 30 19:47:45 localhost kernel: sctp_assoc_add_peer:association ceffe000 PMTU set to 512 Mar 30 19:47:45 localhost kernel: sctp_packet_init: packet:d4e81ae4 transport:d4e81a00 Mar 30 19:47:45 localhost kernel: sctp_do_sm postfn: asoc ce01c000, status: DISPOSITION_CONSUME Mar 30 19:47:45 localhost kernel: sctp_outq_tail(cefff3d8, cede2ee0[INIT_ACK]) Mar 30 19:47:45 localhost kernel: sctp_packet_config: packet:d4e81ce4 vtag:0x4c840a08 Mar 30 19:47:45 localhost kernel: sctp_packet_init: packet:dff95a70 transport:d4e81c00 Mar 30 19:47:45 localhost kernel: sctp_packet_config: packet:dff95a70 vtag:0x4c840a08 Mar 30 19:47:45 localhost kernel: sctp_packet_append_chunk: packet:dff95a70 chunk:cede2ee0 Mar 30 19:47:45 localhost kernel: sctp_packet_transmit: packet:dff95a70 Mar 30 19:47:45 localhost kernel: ***sctp_transmit_packet*** Mar 30 19:47:45 localhost kernel: *** Chunk cede2ee0[INIT_ACK] No TSN 0x0, length 196, chunk->skb->len 196, rtt_in_progress 0 Mar 30 19:47:45 localhost kernel: ***sctp_transmit_packet*** skb len 208 Mar 30 19:47:45 localhost kernel: sctp_v4_xmit: skb:ce615d40, len:208, src:XX.XX.XX.109, dst:XX.XX.XX.24 Mar 30 19:47:45 localhost kernel: sctp_packet_free: packet:d4e81ae4 Mar 30 19:47:45 localhost kernel: sctp_do_sm post sfx: error 0, asoc ce01c000[STATE_CLOSED] Mar 30 19:47:45 localhost kernel: +++sctp_inq_pop+++ chunk cede23a0[COOKIE_ECHO], length 164, skb->len 248 Mar 30 19:47:45 localhost kernel: sctp_do_sm prefn: ep d0ede960, EVENT_T_CHUNK, COOKIE_ECHO, asoc ce01c000[STATE_COOKIE_WAIT], sctp_sf_do_5_2_4_dupcook Mar 30 19:47:45 localhost kernel: myctsnap for unnamedEndpoint INIT as 0x3acb0879. Mar 30 19:47:45 localhost kernel: sctp_v4_get_dst: DST:XX.XX.XX.24, SRC:0.0.0.0 - <7>rt_dst:XX.XX.XX.24, rt_src:XX.XX.XX.109 Mar 30 19:47:45 localhost kernel: sctp_assoc_add_peer:association ceffe000 PMTU set to 512 Mar 30 19:47:45 localhost kernel: sctp_packet_init: packet:cebe44e4 transport:cebe4400 Mar 30 19:47:45 localhost kernel: sctp_sf_do_dupcook_b: assoc:0xce01c000 ev:0xce6a3e78 Mar 30 19:47:45 localhost kernel: sctp_do_sm postfn: asoc ce01c000, status: DISPOSITION_CONSUME Mar 30 19:47:45 localhost kernel: sctp_outq_tail(ce01d3d8, cede2ee0[COOKIE_ACK]) Mar 30 19:47:45 localhost kernel: sctp_packet_config: packet:d4e81ce4 vtag:0x4c840a08 Mar 30 19:47:45 localhost kernel: sctp_packet_transmit_chunk: packet:d4e81ce4 chunk:cede2ee0 Mar 30 19:47:45 localhost kernel: sctp_packet_append_chunk: packet:d4e81ce4 chunk:cede2ee0 Mar 30 19:47:45 localhost kernel: sctp_outq_flush(ce01d3d8, cede2460[DATA]), <7>TX TSN 0x0 skb->head dfa2b160 skb->users 1. Mar 30 19:47:45 localhost kernel: sctp_packet_transmit_chunk: packet:d4e81ce4 chunk:cede2460 Mar 30 19:47:45 localhost kernel: sctp_packet_append_chunk: packet:d4e81ce4 chunk:cede2460 Mar 30 19:47:45 localhost kernel: sctp_packet_transmit: packet:d4e81ce4 Mar 30 19:47:45 localhost kernel: ***sctp_transmit_packet*** Mar 30 19:47:45 localhost kernel: *** Chunk cede2ee0[COOKIE_ACK] No TSN 0x0, length 4, chunk->skb->len 4, rtt_in_progress 0 Mar 30 19:47:45 localhost kernel: *** Chunk cede2460[DATA] TSN 0xb693faaf, length 24, chunk->skb->len 24, rtt_in_progress 1 Mar 30 19:47:45 localhost kernel: ***sctp_transmit_packet*** skb len 40 Mar 30 19:47:45 localhost kernel: sctp_v4_xmit: skb:ce6a3900, len:40, src:XX.XX.XX.109, dst:XX.XX.XX.24 Mar 30 19:47:45 localhost kernel: sm_sideff: event_up: ce6a3e78, ulpq: ce01d41c. Mar 30 19:47:45 localhost kernel: sctp_packet_free: packet:cebe44e4 Mar 30 19:47:45 localhost kernel: sctp_do_sm post sfx: error 0, asoc ce01c000[STATE_CLOSED] Mar 30 19:47:45 localhost kernel: +++sctp_inq_pop+++ chunk cede23a0[DATA], length 88, skb->len 84 Mar 30 19:47:45 localhost kernel: sctp_do_sm prefn: ep d0ede960, EVENT_T_CHUNK, DATA, asoc ce01c000[STATE_ESTABLISHED], sctp_sf_eat_data_6_2 Mar 30 19:47:45 localhost kernel: eat_data: TSN 0xdf97c21d. Mar 30 19:47:45 localhost kernel: sctp_do_sm postfn: asoc ce01c000, status: DISPOSITION_CONSUME Mar 30 19:47:45 localhost kernel: sm_sideff: chunk_up: cede23a0, ulpq: ce01d41c. Mar 30 19:47:45 localhost kernel: sctp_assoc_rwnd_decrease: asoc ce01c000 rwnd decreased by 72 to (108472, 0) Mar 30 19:47:45 localhost kernel: sackCTSNAck sent: 0xdf97c21d. Mar 30 19:47:45 localhost kernel: sctp_outq_tail(ce01d3d8, cede2ee0[SACK]) Mar 30 19:47:45 localhost kernel: sctp_packet_config: packet:d4e81ce4 vtag:0x4c840a08 Mar 30 19:47:45 localhost kernel: sctp_packet_transmit_chunk: packet:d4e81ce4 chunk:cede2ee0 Mar 30 19:47:45 localhost kernel: sctp_packet_append_chunk: packet:d4e81ce4 chunk:cede2ee0 Mar 30 19:47:45 localhost kernel: sctp_packet_transmit: packet:d4e81ce4 Mar 30 19:47:45 localhost kernel: ***sctp_transmit_packet*** Mar 30 19:47:45 localhost kernel: *** Chunk cede2ee0[SACK] No TSN 0x0, length 16, chunk->skb->len 16, rtt_in_progress 0 Mar 30 19:47:45 localhost kernel: ***sctp_transmit_packet*** skb len 28 Mar 30 19:47:45 localhost kernel: sctp_v4_xmit: skb:ce615d40, len:28, src:XX.XX.XX.109, dst:XX.XX.XX.24 Mar 30 19:47:45 localhost kernel: sctp_do_sm post sfx: error 0, asoc ce01c000[STATE_CLOSED]