Changeset 29:5ba91682f0bc in freeDiameter for freeDiameter/sctp.c
- Timestamp:
- Oct 28, 2009, 3:19:50 PM (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
freeDiameter/sctp.c
r27 r29 45 45 #endif /* CMSG_BUF_LEN */ 46 46 47 /* Level of SCTP-specific traces */ 48 #ifdef DEBUG_SCTP 49 #define SCTP_LEVEL FULL 50 #else /* DEBUG_SCTP */ 51 #define SCTP_LEVEL ANNOYING 52 #endif /* DEBUG_SCTP */ 53 47 54 /* Pre-binding socket options -- # streams read in config */ 48 55 static int fd_setsockopt_prebind(int sk) 49 56 { 50 #ifdef DEBUG_SCTP51 57 socklen_t sz; 52 #endif /* DEBUG_SCTP */53 58 54 59 TRACE_ENTRY( "%d", sk); … … 74 79 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(event)) ); 75 80 76 #ifdef DEBUG_SCTP77 sz = sizeof(event);78 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_EVENTS, &event, &sz) );79 if (sz != sizeof(event))80 {81 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(event));82 return ENOTSUP;83 }84 85 TRACE_DEBUG(FULL, "SCTP_EVENTS : sctp_data_io_event : %hhu", event.sctp_data_io_event);86 TRACE_DEBUG(FULL, " sctp_association_event : %hhu", event.sctp_association_event);87 TRACE_DEBUG(FULL, " sctp_address_event : %hhu", event.sctp_address_event);88 TRACE_DEBUG(FULL, " sctp_send_failure_event : %hhu", event.sctp_send_failure_event);89 TRACE_DEBUG(FULL, " sctp_peer_error_event : %hhu", event.sctp_peer_error_event);90 TRACE_DEBUG(FULL, " sctp_shutdown_event : %hhu", event.sctp_shutdown_event);91 TRACE_DEBUG(FULL, " sctp_partial_delivery_event : %hhu", event.sctp_partial_delivery_event);92 TRACE_DEBUG(FULL, " sctp_adaptation_layer_event : %hhu", event.sctp_adaptation_layer_event);93 // TRACE_DEBUG(FULL, " sctp_authentication_event : %hhu", event.sctp_authentication_event);94 #endif /* DEBUG_SCTP */81 if (TRACE_BOOL(SCTP_LEVEL)) { 82 sz = sizeof(event); 83 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_EVENTS, &event, &sz) ); 84 if (sz != sizeof(event)) 85 { 86 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(event)); 87 return ENOTSUP; 88 } 89 90 fd_log_debug( "SCTP_EVENTS : sctp_data_io_event : %hhu\n", event.sctp_data_io_event); 91 fd_log_debug( " sctp_association_event : %hhu\n", event.sctp_association_event); 92 fd_log_debug( " sctp_address_event : %hhu\n", event.sctp_address_event); 93 fd_log_debug( " sctp_send_failure_event : %hhu\n", event.sctp_send_failure_event); 94 fd_log_debug( " sctp_peer_error_event : %hhu\n", event.sctp_peer_error_event); 95 fd_log_debug( " sctp_shutdown_event : %hhu\n", event.sctp_shutdown_event); 96 fd_log_debug( " sctp_partial_delivery_event : %hhu\n", event.sctp_partial_delivery_event); 97 fd_log_debug( " sctp_adaptation_layer_event : %hhu\n", event.sctp_adaptation_layer_event); 98 // fd_log_debug( " sctp_authentication_event : %hhu\n", event.sctp_authentication_event); 99 } 95 100 96 101 } … … 101 106 memset(&init, 0, sizeof(init)); 102 107 103 #ifdef DEBUG_SCTP104 sz = sizeof(init);105 106 /* Read socket defaults */107 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_INITMSG, &init, &sz) );108 if (sz != sizeof(init))109 {110 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(init));111 return ENOTSUP;112 }113 TRACE_DEBUG(FULL, "Def SCTP_INITMSG : sinit_num_ostreams : %hu", init.sinit_num_ostreams);114 TRACE_DEBUG(FULL, " sinit_max_instreams : %hu", init.sinit_max_instreams);115 TRACE_DEBUG(FULL, " sinit_max_attempts : %hu", init.sinit_max_attempts);116 TRACE_DEBUG(FULL, " sinit_max_init_timeo : %hu", init.sinit_max_init_timeo);117 #endif /* DEBUG_SCTP */108 if (TRACE_BOOL(SCTP_LEVEL)) { 109 sz = sizeof(init); 110 111 /* Read socket defaults */ 112 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_INITMSG, &init, &sz) ); 113 if (sz != sizeof(init)) 114 { 115 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(init)); 116 return ENOTSUP; 117 } 118 fd_log_debug( "Def SCTP_INITMSG : sinit_num_ostreams : %hu\n", init.sinit_num_ostreams); 119 fd_log_debug( " sinit_max_instreams : %hu\n", init.sinit_max_instreams); 120 fd_log_debug( " sinit_max_attempts : %hu\n", init.sinit_max_attempts); 121 fd_log_debug( " sinit_max_init_timeo : %hu\n", init.sinit_max_init_timeo); 122 } 118 123 119 124 /* Set the init options -- need to receive SCTP_COMM_UP to confirm the requested parameters */ … … 124 129 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_INITMSG, &init, sizeof(init)) ); 125 130 126 #ifdef DEBUG_SCTP127 /* Check new values */128 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_INITMSG, &init, &sz) );129 TRACE_DEBUG(FULL, "New SCTP_INITMSG : sinit_num_ostreams : %hu", init.sinit_num_ostreams);130 TRACE_DEBUG(FULL, " sinit_max_instreams : %hu", init.sinit_max_instreams);131 TRACE_DEBUG(FULL, " sinit_max_attempts : %hu", init.sinit_max_attempts);132 TRACE_DEBUG(FULL, " sinit_max_init_timeo : %hu", init.sinit_max_init_timeo);133 #endif /* DEBUG_SCTP */131 if (TRACE_BOOL(SCTP_LEVEL)) { 132 /* Check new values */ 133 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_INITMSG, &init, &sz) ); 134 fd_log_debug( "New SCTP_INITMSG : sinit_num_ostreams : %hu\n", init.sinit_num_ostreams); 135 fd_log_debug( " sinit_max_instreams : %hu\n", init.sinit_max_instreams); 136 fd_log_debug( " sinit_max_attempts : %hu\n", init.sinit_max_attempts); 137 fd_log_debug( " sinit_max_init_timeo : %hu\n", init.sinit_max_init_timeo); 138 } 134 139 } 135 140 … … 139 144 int nofrag; 140 145 141 #ifdef DEBUG_SCTP142 sz = sizeof(nofrag);143 /* Read socket defaults */144 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_DISABLE_FRAGMENTS, &nofrag, &sz) );145 if (sz != sizeof(nofrag))146 {147 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(nofrag));148 return ENOTSUP;149 }150 TRACE_DEBUG(FULL, "Def SCTP_DISABLE_FRAGMENTS value : %s", nofrag ? "true" : "false");151 #endif /* DEBUG_SCTP */146 if (TRACE_BOOL(SCTP_LEVEL)) { 147 sz = sizeof(nofrag); 148 /* Read socket defaults */ 149 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_DISABLE_FRAGMENTS, &nofrag, &sz) ); 150 if (sz != sizeof(nofrag)) 151 { 152 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(nofrag)); 153 return ENOTSUP; 154 } 155 fd_log_debug( "Def SCTP_DISABLE_FRAGMENTS value : %s\n", nofrag ? "true" : "false"); 156 } 152 157 153 158 nofrag = 0; /* We turn ON the fragmentation */ … … 156 161 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_DISABLE_FRAGMENTS, &nofrag, sizeof(nofrag)) ); 157 162 158 #ifdef DEBUG_SCTP159 /* Check new values */160 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_DISABLE_FRAGMENTS, &nofrag, &sz) );161 TRACE_DEBUG(FULL, "New SCTP_DISABLE_FRAGMENTS value : %s", nofrag ? "true" : "false");162 #endif /* DEBUG_SCTP */163 if (TRACE_BOOL(SCTP_LEVEL)) { 164 /* Check new values */ 165 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_DISABLE_FRAGMENTS, &nofrag, &sz) ); 166 fd_log_debug( "New SCTP_DISABLE_FRAGMENTS value : %s\n", nofrag ? "true" : "false"); 167 } 163 168 } 164 169 #else /* SCTP_DISABLE_FRAGMENTS */ … … 173 178 memset(&rtoinfo, 0, sizeof(rtoinfo)); 174 179 175 #ifdef DEBUG_SCTP176 sz = sizeof(rtoinfo);177 /* Read socket defaults */178 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_RTOINFO, &rtoinfo, &sz) );179 if (sz != sizeof(rtoinfo))180 {181 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(rtoinfo));182 return ENOTSUP;183 }184 TRACE_DEBUG(FULL, "Def SCTP_RTOINFO : srto_initial : %u", rtoinfo.srto_initial);185 TRACE_DEBUG(FULL, " srto_max : %u", rtoinfo.srto_max);186 TRACE_DEBUG(FULL, " srto_min : %u", rtoinfo.srto_min);187 #endif /* DEBUG_SCTP */180 if (TRACE_BOOL(SCTP_LEVEL)) { 181 sz = sizeof(rtoinfo); 182 /* Read socket defaults */ 183 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_RTOINFO, &rtoinfo, &sz) ); 184 if (sz != sizeof(rtoinfo)) 185 { 186 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(rtoinfo)); 187 return ENOTSUP; 188 } 189 fd_log_debug( "Def SCTP_RTOINFO : srto_initial : %u\n", rtoinfo.srto_initial); 190 fd_log_debug( " srto_max : %u\n", rtoinfo.srto_max); 191 fd_log_debug( " srto_min : %u\n", rtoinfo.srto_min); 192 } 188 193 189 194 rtoinfo.srto_max = fd_g_config->cnf_timer_tw * 500 - 1000; /* Maximum retransmit timer (in ms) (set to Tw / 2 - 1) */ … … 192 197 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_RTOINFO, &rtoinfo, sizeof(rtoinfo)) ); 193 198 194 #ifdef DEBUG_SCTP195 /* Check new values */196 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_RTOINFO, &rtoinfo, &sz) );197 TRACE_DEBUG(FULL, "New SCTP_RTOINFO : srto_initial : %u", rtoinfo.srto_initial);198 TRACE_DEBUG(FULL, " srto_max : %u", rtoinfo.srto_max);199 TRACE_DEBUG(FULL, " srto_min : %u", rtoinfo.srto_min);200 #endif /* DEBUG_SCTP */199 if (TRACE_BOOL(SCTP_LEVEL)) { 200 /* Check new values */ 201 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_RTOINFO, &rtoinfo, &sz) ); 202 fd_log_debug( "New SCTP_RTOINFO : srto_initial : %u\n", rtoinfo.srto_initial); 203 fd_log_debug( " srto_max : %u\n", rtoinfo.srto_max); 204 fd_log_debug( " srto_min : %u\n", rtoinfo.srto_min); 205 } 201 206 } 202 207 #else /* SCTP_RTOINFO */ 203 # ifdef DEBUG_SCTP 204 TRACE_DEBUG(FULL, "Skipping SCTP_RTOINFO"); 205 # endif /* DEBUG_SCTP */ 208 TRACE_DEBUG(SCTP_LEVEL, "Skipping SCTP_RTOINFO"); 206 209 #endif /* SCTP_RTOINFO */ 207 210 … … 212 215 memset(&assoc, 0, sizeof(assoc)); 213 216 214 #ifdef DEBUG_SCTP215 sz = sizeof(assoc);216 /* Read socket defaults */217 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_ASSOCINFO, &assoc, &sz) );218 if (sz != sizeof(assoc))219 {220 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(assoc));221 return ENOTSUP;222 }223 TRACE_DEBUG(FULL, "Def SCTP_ASSOCINFO : sasoc_asocmaxrxt : %hu", assoc.sasoc_asocmaxrxt);224 TRACE_DEBUG(FULL, " sasoc_number_peer_destinations : %hu", assoc.sasoc_number_peer_destinations);225 TRACE_DEBUG(FULL, " sasoc_peer_rwnd : %u" , assoc.sasoc_peer_rwnd);226 TRACE_DEBUG(FULL, " sasoc_local_rwnd : %u" , assoc.sasoc_local_rwnd);227 TRACE_DEBUG(FULL, " sasoc_cookie_life : %u" , assoc.sasoc_cookie_life);228 #endif /* DEBUG_SCTP */217 if (TRACE_BOOL(SCTP_LEVEL)) { 218 sz = sizeof(assoc); 219 /* Read socket defaults */ 220 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_ASSOCINFO, &assoc, &sz) ); 221 if (sz != sizeof(assoc)) 222 { 223 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(assoc)); 224 return ENOTSUP; 225 } 226 fd_log_debug( "Def SCTP_ASSOCINFO : sasoc_asocmaxrxt : %hu\n", assoc.sasoc_asocmaxrxt); 227 fd_log_debug( " sasoc_number_peer_destinations : %hu\n", assoc.sasoc_number_peer_destinations); 228 fd_log_debug( " sasoc_peer_rwnd : %u\n" , assoc.sasoc_peer_rwnd); 229 fd_log_debug( " sasoc_local_rwnd : %u\n" , assoc.sasoc_local_rwnd); 230 fd_log_debug( " sasoc_cookie_life : %u\n" , assoc.sasoc_cookie_life); 231 } 229 232 230 233 assoc.sasoc_asocmaxrxt = 5; /* Maximum retransmission attempts: we want fast detection of errors */ … … 233 236 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_ASSOCINFO, &assoc, sizeof(assoc)) ); 234 237 235 #ifdef DEBUG_SCTP236 /* Check new values */237 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_ASSOCINFO, &assoc, &sz) );238 TRACE_DEBUG(FULL, "New SCTP_ASSOCINFO : sasoc_asocmaxrxt : %hu", assoc.sasoc_asocmaxrxt);239 TRACE_DEBUG(FULL, " sasoc_number_peer_destinations : %hu", assoc.sasoc_number_peer_destinations);240 TRACE_DEBUG(FULL, " sasoc_peer_rwnd : %u" , assoc.sasoc_peer_rwnd);241 TRACE_DEBUG(FULL, " sasoc_local_rwnd : %u" , assoc.sasoc_local_rwnd);242 TRACE_DEBUG(FULL, " sasoc_cookie_life : %u" , assoc.sasoc_cookie_life);243 #endif /* DEBUG_SCTP */238 if (TRACE_BOOL(SCTP_LEVEL)) { 239 /* Check new values */ 240 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_ASSOCINFO, &assoc, &sz) ); 241 fd_log_debug( "New SCTP_ASSOCINFO : sasoc_asocmaxrxt : %hu\n", assoc.sasoc_asocmaxrxt); 242 fd_log_debug( " sasoc_number_peer_destinations : %hu\n", assoc.sasoc_number_peer_destinations); 243 fd_log_debug( " sasoc_peer_rwnd : %u\n" , assoc.sasoc_peer_rwnd); 244 fd_log_debug( " sasoc_local_rwnd : %u\n" , assoc.sasoc_local_rwnd); 245 fd_log_debug( " sasoc_cookie_life : %u\n" , assoc.sasoc_cookie_life); 246 } 244 247 } 245 248 #else /* SCTP_ASSOCINFO */ 246 # ifdef DEBUG_SCTP 247 TRACE_DEBUG(FULL, "Skipping SCTP_ASSOCINFO"); 248 # endif /* DEBUG_SCTP */ 249 TRACE_DEBUG(SCTP_LEVEL, "Skipping SCTP_ASSOCINFO"); 249 250 #endif /* SCTP_ASSOCINFO */ 250 251 … … 256 257 memset(&linger, 0, sizeof(linger)); 257 258 258 #ifdef DEBUG_SCTP259 sz = sizeof(linger);260 /* Read socket defaults */261 CHECK_SYS( getsockopt(sk, SOL_SOCKET, SO_LINGER, &linger, &sz) );262 if (sz != sizeof(linger))263 {264 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(linger));265 return ENOTSUP;266 }267 TRACE_DEBUG(FULL, "Def SO_LINGER : l_onoff : %d", linger.l_onoff);268 TRACE_DEBUG(FULL, " l_linger : %d", linger.l_linger);269 #endif /* DEBUG_SCTP */259 if (TRACE_BOOL(SCTP_LEVEL)) { 260 sz = sizeof(linger); 261 /* Read socket defaults */ 262 CHECK_SYS( getsockopt(sk, SOL_SOCKET, SO_LINGER, &linger, &sz) ); 263 if (sz != sizeof(linger)) 264 { 265 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(linger)); 266 return ENOTSUP; 267 } 268 fd_log_debug( "Def SO_LINGER : l_onoff : %d\n", linger.l_onoff); 269 fd_log_debug( " l_linger : %d\n", linger.l_linger); 270 } 270 271 271 272 linger.l_onoff = 0; /* Do not activate the linger */ … … 275 276 CHECK_SYS( setsockopt(sk, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger)) ); 276 277 277 #ifdef DEBUG_SCTP278 /* Check new values */279 CHECK_SYS( getsockopt(sk, SOL_SOCKET, SO_LINGER, &linger, &sz) );280 TRACE_DEBUG(FULL, "New SO_LINGER : l_onoff : %d", linger.l_onoff);281 TRACE_DEBUG(FULL, " l_linger : %d", linger.l_linger);282 #endif /* DEBUG_SCTP */278 if (TRACE_BOOL(SCTP_LEVEL)) { 279 /* Check new values */ 280 CHECK_SYS( getsockopt(sk, SOL_SOCKET, SO_LINGER, &linger, &sz) ); 281 fd_log_debug( "New SO_LINGER : l_onoff : %d\n", linger.l_onoff); 282 fd_log_debug( " l_linger : %d\n", linger.l_linger); 283 } 283 284 } 284 285 #else /* SO_LINGER */ 285 # ifdef DEBUG_SCTP 286 TRACE_DEBUG(FULL, "Skipping SO_LINGER"); 287 # endif /* DEBUG_SCTP */ 286 TRACE_DEBUG(SCTP_LEVEL, "Skipping SO_LINGER"); 288 287 #endif /* SO_LINGER */ 289 288 … … 293 292 int nodelay; 294 293 295 #ifdef DEBUG_SCTP296 sz = sizeof(nodelay);297 /* Read socket defaults */298 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_NODELAY, &nodelay, &sz) );299 if (sz != sizeof(nodelay))300 {301 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(nodelay));302 return ENOTSUP;303 }304 TRACE_DEBUG(FULL, "Def SCTP_NODELAY value : %s", nodelay ? "true" : "false");305 #endif /* DEBUG_SCTP */294 if (TRACE_BOOL(SCTP_LEVEL)) { 295 sz = sizeof(nodelay); 296 /* Read socket defaults */ 297 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_NODELAY, &nodelay, &sz) ); 298 if (sz != sizeof(nodelay)) 299 { 300 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(nodelay)); 301 return ENOTSUP; 302 } 303 fd_log_debug( "Def SCTP_NODELAY value : %s\n", nodelay ? "true" : "false"); 304 } 306 305 307 306 nodelay = 0; /* We turn ON the Nagle algorithm (probably the default already) */ … … 310 309 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_NODELAY, &nodelay, sizeof(nodelay)) ); 311 310 312 #ifdef DEBUG_SCTP313 /* Check new values */314 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_NODELAY, &nodelay, &sz) );315 TRACE_DEBUG(FULL, "New SCTP_NODELAY value : %s", nodelay ? "true" : "false");316 #endif /* DEBUG_SCTP */311 if (TRACE_BOOL(SCTP_LEVEL)) { 312 /* Check new values */ 313 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_NODELAY, &nodelay, &sz) ); 314 fd_log_debug( "New SCTP_NODELAY value : %s\n", nodelay ? "true" : "false"); 315 } 317 316 } 318 317 #else /* SCTP_NODELAY */ 319 # ifdef DEBUG_SCTP 320 TRACE_DEBUG(FULL, "Skipping SCTP_NODELAY"); 321 # endif /* DEBUG_SCTP */ 318 TRACE_DEBUG(SCTP_LEVEL, "Skipping SCTP_NODELAY"); 322 319 #endif /* SCTP_NODELAY */ 323 320 … … 327 324 int interleave; 328 325 329 #ifdef DEBUG_SCTP330 sz = sizeof(interleave);331 /* Read socket defaults */332 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_FRAGMENT_INTERLEAVE, &interleave, &sz) );333 if (sz != sizeof(interleave))334 {335 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(interleave));336 return ENOTSUP;337 }338 TRACE_DEBUG(FULL, "Def SCTP_FRAGMENT_INTERLEAVE value : %d", interleave);339 #endif /* DEBUG_SCTP */326 if (TRACE_BOOL(SCTP_LEVEL)) { 327 sz = sizeof(interleave); 328 /* Read socket defaults */ 329 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_FRAGMENT_INTERLEAVE, &interleave, &sz) ); 330 if (sz != sizeof(interleave)) 331 { 332 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(interleave)); 333 return ENOTSUP; 334 } 335 fd_log_debug( "Def SCTP_FRAGMENT_INTERLEAVE value : %d\n", interleave); 336 } 340 337 341 338 #if 0 … … 348 345 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_FRAGMENT_INTERLEAVE, &interleave, sizeof(interleave)) ); 349 346 350 #ifdef DEBUG_SCTP351 /* Check new values */352 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_FRAGMENT_INTERLEAVE, &interleave, &sz) );353 TRACE_DEBUG(FULL, "New SCTP_FRAGMENT_INTERLEAVE value : %d", interleave);354 #endif /* DEBUG_SCTP */347 if (TRACE_BOOL(SCTP_LEVEL)) { 348 /* Check new values */ 349 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_FRAGMENT_INTERLEAVE, &interleave, &sz) ); 350 fd_log_debug( "New SCTP_FRAGMENT_INTERLEAVE value : %d\n", interleave); 351 } 355 352 } 356 353 #else /* SCTP_FRAGMENT_INTERLEAVE */ 357 # ifdef DEBUG_SCTP 358 TRACE_DEBUG(FULL, "Skipping SCTP_FRAGMENT_INTERLEAVE"); 359 # endif /* DEBUG_SCTP */ 354 TRACE_DEBUG(SCTP_LEVEL, "Skipping SCTP_FRAGMENT_INTERLEAVE"); 360 355 #endif /* SCTP_FRAGMENT_INTERLEAVE */ 361 356 … … 365 360 int v4mapped; 366 361 367 #ifdef DEBUG_SCTP368 sz = sizeof(v4mapped);369 /* Read socket defaults */370 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_I_WANT_MAPPED_V4_ADDR, &v4mapped, &sz) );371 if (sz != sizeof(v4mapped))372 {373 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(v4mapped));374 return ENOTSUP;375 }376 TRACE_DEBUG(FULL, "Def SCTP_I_WANT_MAPPED_V4_ADDR value : %s", v4mapped ? "true" : "false");377 #endif /* DEBUG_SCTP */362 if (TRACE_BOOL(SCTP_LEVEL)) { 363 sz = sizeof(v4mapped); 364 /* Read socket defaults */ 365 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_I_WANT_MAPPED_V4_ADDR, &v4mapped, &sz) ); 366 if (sz != sizeof(v4mapped)) 367 { 368 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(v4mapped)); 369 return ENOTSUP; 370 } 371 fd_log_debug( "Def SCTP_I_WANT_MAPPED_V4_ADDR value : %s\n", v4mapped ? "true" : "false"); 372 } 378 373 379 374 #ifndef SCTP_USE_MAPPED_ADDRESSES … … 386 381 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_I_WANT_MAPPED_V4_ADDR, &v4mapped, sizeof(v4mapped)) ); 387 382 388 #ifdef DEBUG_SCTP389 /* Check new values */390 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_I_WANT_MAPPED_V4_ADDR, &v4mapped, &sz) );391 TRACE_DEBUG(FULL, "New SCTP_I_WANT_MAPPED_V4_ADDR value : %s", v4mapped ? "true" : "false");392 #endif /* DEBUG_SCTP */383 if (TRACE_BOOL(SCTP_LEVEL)) { 384 /* Check new values */ 385 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_I_WANT_MAPPED_V4_ADDR, &v4mapped, &sz) ); 386 fd_log_debug( "New SCTP_I_WANT_MAPPED_V4_ADDR value : %s\n", v4mapped ? "true" : "false"); 387 } 393 388 } 394 389 #else /* SCTP_I_WANT_MAPPED_V4_ADDR */ 395 # ifdef DEBUG_SCTP 396 TRACE_DEBUG(FULL, "Skipping SCTP_I_WANT_MAPPED_V4_ADDR"); 397 # endif /* DEBUG_SCTP */ 390 TRACE_DEBUG(SCTP_LEVEL, "Skipping SCTP_I_WANT_MAPPED_V4_ADDR"); 398 391 #endif /* SCTP_I_WANT_MAPPED_V4_ADDR */ 399 392 … … 456 449 int asconf; 457 450 458 #ifdef DEBUG_SCTP459 socklen_t sz;460 461 sz = sizeof(asconf);462 /* Read socket defaults */463 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_AUTO_ASCONF, &asconf, &sz) );464 if (sz != sizeof(asconf))465 {466 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(asconf));467 return ENOTSUP;468 }469 TRACE_DEBUG(FULL, "Def SCTP_AUTO_ASCONF value : %s", asconf ? "true" : "false");470 #endif /* DEBUG_SCTP */451 if (TRACE_BOOL(SCTP_LEVEL)) { 452 socklen_t sz; 453 454 sz = sizeof(asconf); 455 /* Read socket defaults */ 456 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_AUTO_ASCONF, &asconf, &sz) ); 457 if (sz != sizeof(asconf)) 458 { 459 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(asconf)); 460 return ENOTSUP; 461 } 462 fd_log_debug( "Def SCTP_AUTO_ASCONF value : %s\n", asconf ? "true" : "false"); 463 } 471 464 472 465 asconf = bound_to_default ? 1 : 0; /* allow automatic use of added or removed addresses in the association (for bound-all sockets) */ … … 475 468 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_AUTO_ASCONF, &asconf, sizeof(asconf)) ); 476 469 477 #ifdef DEBUG_SCTP 478 /* Check new values */ 479 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_AUTO_ASCONF, &asconf, &sz) ); 480 TRACE_DEBUG(FULL, "New SCTP_AUTO_ASCONF value : %s", asconf ? "true" : "false"); 481 #endif /* DEBUG_SCTP */ 470 if (TRACE_BOOL(SCTP_LEVEL)) { 471 socklen_t sz = sizeof(asconf); 472 /* Check new values */ 473 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_AUTO_ASCONF, &asconf, &sz) ); 474 fd_log_debug( "New SCTP_AUTO_ASCONF value : %s\n", asconf ? "true" : "false"); 475 } 482 476 } 483 477 #else /* SCTP_AUTO_ASCONF */ 484 # ifdef DEBUG_SCTP 485 TRACE_DEBUG(FULL, "Skipping SCTP_AUTO_ASCONF"); 486 # endif /* DEBUG_SCTP */ 478 TRACE_DEBUG(SCTP_LEVEL, "Skipping SCTP_AUTO_ASCONF"); 487 479 #endif /* SCTP_AUTO_ASCONF */ 488 480 … … 600 592 } 601 593 602 # ifdef DEBUG_SCTP 603 if (TRACE_BOOL(FULL)) { 594 if (TRACE_BOOL(SCTP_LEVEL)) { 604 595 int i; 605 596 ptr.buf = sar.buf; … … 610 601 } 611 602 } 612 #endif /* DEBUG_SCTP */613 603 614 604 /* Bind to this array */ … … 622 612 CHECK_FCT( fd_setsockopt_postbind(*sock, bind_default) ); 623 613 624 #ifdef DEBUG_SCTP625 614 /* Debug: show all local listening addresses */ 626 if (TRACE_BOOL( FULL)) {615 if (TRACE_BOOL(SCTP_LEVEL)) { 627 616 sSA *sar; 628 617 union { … … 640 629 sctp_freeladdrs(sar); 641 630 } 642 #endif /* DEBUG_SCTP */643 631 644 632 return 0; … … 767 755 return ENOTSUP; 768 756 } 769 #ifdef DEBUG_SCTP 770 TRACE_DEBUG(FULL, "SCTP_STATUS : sstat_state : %i" , status.sstat_state); 771 TRACE_DEBUG(FULL, " sstat_rwnd : %u" , status.sstat_rwnd); 772 TRACE_DEBUG(FULL, " sstat_unackdata : %hu", status.sstat_unackdata); 773 TRACE_DEBUG(FULL, " sstat_penddata : %hu", status.sstat_penddata); 774 TRACE_DEBUG(FULL, " sstat_instrms : %hu", status.sstat_instrms); 775 TRACE_DEBUG(FULL, " sstat_outstrms : %hu", status.sstat_outstrms); 776 TRACE_DEBUG(FULL, " sstat_fragmentation_point : %u" , status.sstat_fragmentation_point); 777 TRACE_DEBUG_sSA(FULL, " sstat_primary.spinfo_address : ", &status.sstat_primary.spinfo_address, NI_NUMERICHOST | NI_NUMERICSERV, "" ); 778 TRACE_DEBUG(FULL, " sstat_primary.spinfo_state : %d" , status.sstat_primary.spinfo_state); 779 TRACE_DEBUG(FULL, " sstat_primary.spinfo_cwnd : %u" , status.sstat_primary.spinfo_cwnd); 780 TRACE_DEBUG(FULL, " sstat_primary.spinfo_srtt : %u" , status.sstat_primary.spinfo_srtt); 781 TRACE_DEBUG(FULL, " sstat_primary.spinfo_rto : %u" , status.sstat_primary.spinfo_rto); 782 TRACE_DEBUG(FULL, " sstat_primary.spinfo_mtu : %u" , status.sstat_primary.spinfo_mtu); 783 #endif /* DEBUG_SCTP */ 757 if (TRACE_BOOL(SCTP_LEVEL)) { 758 fd_log_debug( "SCTP_STATUS : sstat_state : %i\n" , status.sstat_state); 759 fd_log_debug( " sstat_rwnd : %u\n" , status.sstat_rwnd); 760 fd_log_debug( " sstat_unackdata : %hu\n", status.sstat_unackdata); 761 fd_log_debug( " sstat_penddata : %hu\n", status.sstat_penddata); 762 fd_log_debug( " sstat_instrms : %hu\n", status.sstat_instrms); 763 fd_log_debug( " sstat_outstrms : %hu\n", status.sstat_outstrms); 764 fd_log_debug( " sstat_fragmentation_point : %u\n" , status.sstat_fragmentation_point); 765 fd_log_debug( " sstat_primary.spinfo_address : "); 766 sSA_DUMP_NODE_SERV(&status.sstat_primary.spinfo_address, NI_NUMERICHOST | NI_NUMERICSERV ); 767 fd_log_debug( "\n" ); 768 fd_log_debug( " sstat_primary.spinfo_state : %d\n" , status.sstat_primary.spinfo_state); 769 fd_log_debug( " sstat_primary.spinfo_cwnd : %u\n" , status.sstat_primary.spinfo_cwnd); 770 fd_log_debug( " sstat_primary.spinfo_srtt : %u\n" , status.sstat_primary.spinfo_srtt); 771 fd_log_debug( " sstat_primary.spinfo_rto : %u\n" , status.sstat_primary.spinfo_rto); 772 fd_log_debug( " sstat_primary.spinfo_mtu : %u\n" , status.sstat_primary.spinfo_mtu); 773 } 784 774 785 775 *in = status.sstat_instrms; … … 936 926 mhdr.msg_controllen = sizeof(anci); 937 927 938 #ifdef DEBUG_SCTP939 928 TRACE_DEBUG(FULL, "Sending %db data on stream %hu of socket %d", len, strid, sock); 940 #endif /* DEBUG_SCTP */941 929 942 930 CHECK_SYS( ret = sendmsg(sock, &mhdr, 0) ); … … 1005 993 } 1006 994 995 TRACE_DEBUG(FULL, "Received %db data on socket %d", datasize, sock); 996 1007 997 /* Handle the case where the data received is a notification */ 1008 998 if (mhdr.msg_flags & MSG_NOTIFICATION) { … … 1012 1002 1013 1003 case SCTP_ASSOC_CHANGE: 1014 #ifdef DEBUG_SCTP1015 1004 TRACE_DEBUG(FULL, "Received SCTP_ASSOC_CHANGE notification"); 1016 TRACE_DEBUG(FULL, " state : %hu", notif->sn_assoc_change.sac_state); 1017 TRACE_DEBUG(FULL, " error : %hu", notif->sn_assoc_change.sac_error); 1018 TRACE_DEBUG(FULL, " instr : %hu", notif->sn_assoc_change.sac_inbound_streams); 1019 TRACE_DEBUG(FULL, " outstr : %hu", notif->sn_assoc_change.sac_outbound_streams); 1020 #endif /* DEBUG_SCTP */ 1005 TRACE_DEBUG(SCTP_LEVEL, " state : %hu", notif->sn_assoc_change.sac_state); 1006 TRACE_DEBUG(SCTP_LEVEL, " error : %hu", notif->sn_assoc_change.sac_error); 1007 TRACE_DEBUG(SCTP_LEVEL, " instr : %hu", notif->sn_assoc_change.sac_inbound_streams); 1008 TRACE_DEBUG(SCTP_LEVEL, " outstr : %hu", notif->sn_assoc_change.sac_outbound_streams); 1021 1009 1022 1010 *event = FDEVP_CNX_EP_CHANGE; … … 1024 1012 1025 1013 case SCTP_PEER_ADDR_CHANGE: 1026 #ifdef DEBUG_SCTP1027 1014 TRACE_DEBUG(FULL, "Received SCTP_PEER_ADDR_CHANGE notification"); 1028 TRACE_DEBUG_sSA(FULL, " intf_change : ", &(notif->sn_paddr_change.spc_aaddr), NI_NUMERICHOST | NI_NUMERICSERV, "" ); 1029 TRACE_DEBUG(FULL, " state : %d", notif->sn_paddr_change.spc_state); 1030 TRACE_DEBUG(FULL, " error : %d", notif->sn_paddr_change.spc_error); 1031 #endif /* DEBUG_SCTP */ 1015 TRACE_DEBUG_sSA(SCTP_LEVEL, " intf_change : ", &(notif->sn_paddr_change.spc_aaddr), NI_NUMERICHOST | NI_NUMERICSERV, "" ); 1016 TRACE_DEBUG(SCTP_LEVEL, " state : %d", notif->sn_paddr_change.spc_state); 1017 TRACE_DEBUG(SCTP_LEVEL, " error : %d", notif->sn_paddr_change.spc_error); 1032 1018 1033 1019 *event = FDEVP_CNX_EP_CHANGE; … … 1035 1021 1036 1022 case SCTP_SEND_FAILED: 1037 #ifdef DEBUG_SCTP1038 1023 TRACE_DEBUG(FULL, "Received SCTP_SEND_FAILED notification"); 1039 TRACE_DEBUG(FULL, " len : %hu", notif->sn_send_failed.ssf_length); 1040 TRACE_DEBUG(FULL, " err : %d", notif->sn_send_failed.ssf_error); 1041 #endif /* DEBUG_SCTP */ 1024 TRACE_DEBUG(SCTP_LEVEL, " len : %hu", notif->sn_send_failed.ssf_length); 1025 TRACE_DEBUG(SCTP_LEVEL, " err : %d", notif->sn_send_failed.ssf_error); 1042 1026 1043 1027 *event = FDEVP_CNX_ERROR; … … 1045 1029 1046 1030 case SCTP_REMOTE_ERROR: 1047 #ifdef DEBUG_SCTP1048 1031 TRACE_DEBUG(FULL, "Received SCTP_REMOTE_ERROR notification"); 1049 TRACE_DEBUG(FULL, " err : %hu", ntohs(notif->sn_remote_error.sre_error)); 1050 TRACE_DEBUG(FULL, " len : %hu", ntohs(notif->sn_remote_error.sre_length)); 1051 #endif /* DEBUG_SCTP */ 1032 TRACE_DEBUG(SCTP_LEVEL, " err : %hu", ntohs(notif->sn_remote_error.sre_error)); 1033 TRACE_DEBUG(SCTP_LEVEL, " len : %hu", ntohs(notif->sn_remote_error.sre_length)); 1052 1034 1053 1035 *event = FDEVP_CNX_ERROR; … … 1055 1037 1056 1038 case SCTP_SHUTDOWN_EVENT: 1057 #ifdef DEBUG_SCTP1058 1039 TRACE_DEBUG(FULL, "Received SCTP_SHUTDOWN_EVENT notification"); 1059 #endif /* DEBUG_SCTP */1060 1040 1061 1041 *event = FDEVP_CNX_ERROR; … … 1096 1076 1097 1077 sndrcv = (struct sctp_sndrcvinfo *) CMSG_DATA(hdr); 1098 #ifdef DEBUG_SCTP1099 TRACE_DEBUG(FULL, "Anciliary block IPPROTO_SCTP / SCTP_SNDRCV");1100 TRACE_DEBUG(FULL, " sinfo_stream : %hu", sndrcv->sinfo_stream);1101 TRACE_DEBUG(FULL, " sinfo_ssn : %hu", sndrcv->sinfo_ssn);1102 TRACE_DEBUG(FULL, " sinfo_flags : %hu", sndrcv->sinfo_flags);1103 /* TRACE_DEBUG(FULL, " sinfo_pr_policy : %hu", sndrcv->sinfo_pr_policy); */1104 TRACE_DEBUG(FULL, " sinfo_ppid : %u" , sndrcv->sinfo_ppid);1105 TRACE_DEBUG(FULL, " sinfo_context : %u" , sndrcv->sinfo_context);1106 /* TRACE_DEBUG(FULL, " sinfo_pr_value : %u" , sndrcv->sinfo_pr_value); */1107 TRACE_DEBUG(FULL, " sinfo_tsn : %u" , sndrcv->sinfo_tsn);1108 TRACE_DEBUG(FULL, " sinfo_cumtsn : %u" , sndrcv->sinfo_cumtsn);1109 #endif /* DEBUG_SCTP */1078 if (TRACE_BOOL(SCTP_LEVEL)) { 1079 fd_log_debug( "Anciliary block IPPROTO_SCTP / SCTP_SNDRCV\n"); 1080 fd_log_debug( " sinfo_stream : %hu\n", sndrcv->sinfo_stream); 1081 fd_log_debug( " sinfo_ssn : %hu\n", sndrcv->sinfo_ssn); 1082 fd_log_debug( " sinfo_flags : %hu\n", sndrcv->sinfo_flags); 1083 /* fd_log_debug( " sinfo_pr_policy : %hu\n", sndrcv->sinfo_pr_policy); */ 1084 fd_log_debug( " sinfo_ppid : %u\n" , sndrcv->sinfo_ppid); 1085 fd_log_debug( " sinfo_context : %u\n" , sndrcv->sinfo_context); 1086 /* fd_log_debug( " sinfo_pr_value : %u\n" , sndrcv->sinfo_pr_value); */ 1087 fd_log_debug( " sinfo_tsn : %u\n" , sndrcv->sinfo_tsn); 1088 fd_log_debug( " sinfo_cumtsn : %u\n" , sndrcv->sinfo_cumtsn); 1089 } 1110 1090 1111 1091 *strid = sndrcv->sinfo_stream;
Note: See TracChangeset
for help on using the changeset viewer.