Navigation


Changeset 29:5ba91682f0bc in freeDiameter for freeDiameter/sctp.c


Ignore:
Timestamp:
Oct 28, 2009, 3:19:50 PM (15 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Added a test for cnxctx (tbc) and fixed some bugs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • freeDiameter/sctp.c

    r27 r29  
    4545#endif /* CMSG_BUF_LEN */
    4646
     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
    4754/* Pre-binding socket options -- # streams read in config */
    4855static int fd_setsockopt_prebind(int sk)
    4956{
    50         #ifdef DEBUG_SCTP
    5157        socklen_t sz;
    52         #endif /* DEBUG_SCTP */
    5358       
    5459        TRACE_ENTRY( "%d", sk);
     
    7479                CHECK_SYS(  setsockopt(sk, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(event)) );
    7580               
    76                 #ifdef DEBUG_SCTP
    77                 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                }
    95100               
    96101        }
     
    101106                memset(&init, 0, sizeof(init));
    102107               
    103                 #ifdef DEBUG_SCTP
    104                 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                }
    118123
    119124                /* Set the init options -- need to receive SCTP_COMM_UP to confirm the requested parameters */
     
    124129                CHECK_SYS(  setsockopt(sk, IPPROTO_SCTP, SCTP_INITMSG, &init, sizeof(init))  );
    125130               
    126                 #ifdef DEBUG_SCTP
    127                 /* 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                }
    134139        }
    135140       
     
    139144                int nofrag;
    140145               
    141                 #ifdef DEBUG_SCTP
    142                 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                }
    152157
    153158                nofrag = 0;     /* We turn ON the fragmentation */
     
    156161                CHECK_SYS(  setsockopt(sk, IPPROTO_SCTP, SCTP_DISABLE_FRAGMENTS, &nofrag, sizeof(nofrag))  );
    157162               
    158                 #ifdef DEBUG_SCTP
    159                 /* 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                }
    163168        }
    164169        #else /* SCTP_DISABLE_FRAGMENTS */
     
    173178                memset(&rtoinfo, 0, sizeof(rtoinfo));
    174179
    175                 #ifdef DEBUG_SCTP
    176                 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                }
    188193
    189194                rtoinfo.srto_max     = fd_g_config->cnf_timer_tw * 500 - 1000;  /* Maximum retransmit timer (in ms) (set to Tw / 2 - 1) */
     
    192197                CHECK_SYS(  setsockopt(sk, IPPROTO_SCTP, SCTP_RTOINFO, &rtoinfo, sizeof(rtoinfo))  );
    193198               
    194                 #ifdef DEBUG_SCTP
    195                 /* 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                }
    201206        }
    202207        #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");
    206209        #endif /* SCTP_RTOINFO */
    207210       
     
    212215                memset(&assoc, 0, sizeof(assoc));
    213216
    214                 #ifdef DEBUG_SCTP
    215                 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                }
    229232
    230233                assoc.sasoc_asocmaxrxt = 5;     /* Maximum retransmission attempts: we want fast detection of errors */
     
    233236                CHECK_SYS(  setsockopt(sk, IPPROTO_SCTP, SCTP_ASSOCINFO, &assoc, sizeof(assoc))  );
    234237               
    235                 #ifdef DEBUG_SCTP
    236                 /* 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                }
    244247        }
    245248        #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");
    249250        #endif /* SCTP_ASSOCINFO */
    250251       
     
    256257                memset(&linger, 0, sizeof(linger));
    257258               
    258                 #ifdef DEBUG_SCTP
    259                 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                }
    270271               
    271272                linger.l_onoff  = 0;    /* Do not activate the linger */
     
    275276                CHECK_SYS(  setsockopt(sk, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger))  );
    276277               
    277                 #ifdef DEBUG_SCTP
    278                 /* 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                }
    283284        }
    284285        #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");
    288287        #endif /* SO_LINGER */
    289288       
     
    293292                int nodelay;
    294293               
    295                 #ifdef DEBUG_SCTP
    296                 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                }
    306305
    307306                nodelay = 0;    /* We turn ON the Nagle algorithm (probably the default already) */
     
    310309                CHECK_SYS(  setsockopt(sk, IPPROTO_SCTP, SCTP_NODELAY, &nodelay, sizeof(nodelay))  );
    311310               
    312                 #ifdef DEBUG_SCTP
    313                 /* 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                }
    317316        }
    318317        #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");
    322319        #endif /* SCTP_NODELAY */
    323320       
     
    327324                int interleave;
    328325               
    329                 #ifdef DEBUG_SCTP
    330                 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                }
    340337
    341338                #if 0
     
    348345                CHECK_SYS(  setsockopt(sk, IPPROTO_SCTP, SCTP_FRAGMENT_INTERLEAVE, &interleave, sizeof(interleave))  );
    349346               
    350                 #ifdef DEBUG_SCTP
    351                 /* 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                }
    355352        }
    356353        #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");
    360355        #endif /* SCTP_FRAGMENT_INTERLEAVE */
    361356       
     
    365360                int v4mapped;
    366361               
    367                 #ifdef DEBUG_SCTP
    368                 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                }
    378373
    379374#ifndef SCTP_USE_MAPPED_ADDRESSES
     
    386381                CHECK_SYS(  setsockopt(sk, IPPROTO_SCTP, SCTP_I_WANT_MAPPED_V4_ADDR, &v4mapped, sizeof(v4mapped))  );
    387382               
    388                 #ifdef DEBUG_SCTP
    389                 /* 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                }
    393388        }
    394389        #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");
    398391        #endif /* SCTP_I_WANT_MAPPED_V4_ADDR */
    399392                           
     
    456449                int asconf;
    457450               
    458                 #ifdef DEBUG_SCTP
    459                 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                }
    471464
    472465                asconf = bound_to_default ? 1 : 0;      /* allow automatic use of added or removed addresses in the association (for bound-all sockets) */
     
    475468                CHECK_SYS(  setsockopt(sk, IPPROTO_SCTP, SCTP_AUTO_ASCONF, &asconf, sizeof(asconf))  );
    476469               
    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                }
    482476        }
    483477        #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");
    487479        #endif /* SCTP_AUTO_ASCONF */
    488480       
     
    600592                }
    601593               
    602                 # ifdef DEBUG_SCTP
    603                 if (TRACE_BOOL(FULL)) {
     594                if (TRACE_BOOL(SCTP_LEVEL)) {
    604595                        int i;
    605596                        ptr.buf = sar.buf;
     
    610601                        }
    611602                }
    612                 #endif /* DEBUG_SCTP */
    613603               
    614604                /* Bind to this array */
     
    622612        CHECK_FCT( fd_setsockopt_postbind(*sock, bind_default) );
    623613       
    624         #ifdef DEBUG_SCTP
    625614        /* Debug: show all local listening addresses */
    626         if (TRACE_BOOL(FULL)) {
     615        if (TRACE_BOOL(SCTP_LEVEL)) {
    627616                sSA *sar;
    628617                union {
     
    640629                sctp_freeladdrs(sar);
    641630        }
    642         #endif /* DEBUG_SCTP */
    643631
    644632        return 0;
     
    767755                return ENOTSUP;
    768756        }
    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        }
    784774       
    785775        *in = status.sstat_instrms;
     
    936926        mhdr.msg_controllen = sizeof(anci);
    937927       
    938         #ifdef DEBUG_SCTP
    939928        TRACE_DEBUG(FULL, "Sending %db data on stream %hu of socket %d", len, strid, sock);
    940         #endif /* DEBUG_SCTP */
    941929       
    942930        CHECK_SYS( ret = sendmsg(sock, &mhdr, 0) );
     
    1005993        }
    1006994       
     995        TRACE_DEBUG(FULL, "Received %db data on socket %d", datasize, sock);
     996       
    1007997        /* Handle the case where the data received is a notification */
    1008998        if (mhdr.msg_flags & MSG_NOTIFICATION) {
     
    10121002                       
    10131003                        case SCTP_ASSOC_CHANGE:
    1014                                 #ifdef DEBUG_SCTP
    10151004                                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);
    10211009                               
    10221010                                *event = FDEVP_CNX_EP_CHANGE;
     
    10241012       
    10251013                        case SCTP_PEER_ADDR_CHANGE:
    1026                                 #ifdef DEBUG_SCTP
    10271014                                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);
    10321018                               
    10331019                                *event = FDEVP_CNX_EP_CHANGE;
     
    10351021       
    10361022                        case SCTP_SEND_FAILED:
    1037                                 #ifdef DEBUG_SCTP
    10381023                                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);
    10421026                               
    10431027                                *event = FDEVP_CNX_ERROR;
     
    10451029                       
    10461030                        case SCTP_REMOTE_ERROR:
    1047                                 #ifdef DEBUG_SCTP
    10481031                                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));
    10521034                               
    10531035                                *event = FDEVP_CNX_ERROR;
     
    10551037       
    10561038                        case SCTP_SHUTDOWN_EVENT:
    1057                                 #ifdef DEBUG_SCTP
    10581039                                TRACE_DEBUG(FULL, "Received SCTP_SHUTDOWN_EVENT notification");
    1059                                 #endif /* DEBUG_SCTP */
    10601040                               
    10611041                                *event = FDEVP_CNX_ERROR;
     
    10961076                       
    10971077                        sndrcv = (struct sctp_sndrcvinfo *) CMSG_DATA(hdr);
    1098                         #ifdef DEBUG_SCTP
    1099                         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                        }
    11101090
    11111091                        *strid = sndrcv->sinfo_stream;
Note: See TracChangeset for help on using the changeset viewer.