Changeset 1541:3365e95bed57 in freeDiameter for libfdcore/sctp.c
- Timestamp:
- May 1, 2020, 5:56:05 PM (4 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libfdcore/sctp.c
r1540 r1541 59 59 #endif /* USE_DEFAULT_SCTP_RTX_PARAMS */ 60 60 61 62 DECLARE_FD_DUMP_PROTOTYPE(fd_sa_dump_array, sSA * saddrs, int saddrs_count) 63 { 64 union { 65 sSA *sa; 66 uint8_t *buf; 67 } ptr; 68 int i; 69 int salen; 70 71 FD_DUMP_HANDLE_OFFSET(); 72 73 ptr.sa = saddrs; 74 for (i = 0; i < saddrs_count; i++) { 75 salen = sSAlen(ptr.sa); 76 if (salen == 0) { 77 LOG_E("fd_sa_dump_array: Unknown sockaddr family"); 78 break; 79 } 80 if (i > 0) { 81 CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " "), return NULL); 82 } 83 CHECK_MALLOC_DO( fd_sa_dump( FD_DUMP_STD_PARAMS, ptr.sa, NI_NUMERICHOST | NI_NUMERICSERV), return NULL); 84 ptr.buf += salen; 85 } 86 return *buf; 87 } 88 61 89 /* Pre-binding socket options -- # streams read in config */ 62 90 static int fd_setsockopt_prebind(int sk) … … 815 843 goto redo; 816 844 } 817 818 #if 0 819 union { 820 sSA *sa; 821 uint8_t *buf; 822 } ptr; 823 int i; 824 ptr.sa = sar; 825 fd_log_debug("Calling sctp_bindx with the following address array:"); 826 for (i = 0; i < count; i++) { 827 TRACE_sSA(FD_LOG_DEBUG, FULL, " - ", ptr.sa, NI_NUMERICHOST | NI_NUMERICSERV, "" ); 828 ptr.buf += (ptr.sa->sa_family == AF_INET) ? sizeof(sSA4) : sizeof(sSA6) ; 829 } 830 #endif 831 845 846 /* Debug: show bound addresses */ 847 { 848 char * buf = NULL; 849 size_t len = 0; 850 CHECK_MALLOC_DO( fd_sa_dump_array( &buf, &len, 0, sar, count), ); 851 LOG_D("SCTP server binding local addresses: %s", buf); 852 free(buf); 853 } 854 832 855 /* Bind to this array */ 833 856 CHECK_SYS( sctp_bindx(*sock, sar, count, SCTP_BINDX_ADD_ADDR) ); … … 841 864 842 865 /* Debug: show all local listening addresses */ 843 #if 0 844 sSA *sar; 845 union { 846 sSA *sa; 847 uint8_t *buf; 848 } ptr; 849 int sz; 850 866 { 867 sSA *sar = NULL; 868 int sz = 0; 869 char * buf = NULL; 870 size_t len = 0; 871 851 872 CHECK_SYS( sz = sctp_getladdrs(*sock, 0, &sar) ); 852 853 fd_log_debug("SCTP server bound on :"); 854 for (ptr.sa = sar; sz-- > 0; ptr.buf += (ptr.sa->sa_family == AF_INET) ? sizeof(sSA4) : sizeof(sSA6)) { 855 TRACE_sSA(FD_LOG_DEBUG, FULL, " - ", ptr.sa, NI_NUMERICHOST | NI_NUMERICSERV, "" ); 856 } 873 874 CHECK_MALLOC_DO( fd_sa_dump_array( &buf, &len, 0, sar, sz), ); 875 LOG_D("SCTP server locally bound addresses: %s", buf); 857 876 sctp_freeladdrs(sar); 858 #endif 877 free(buf); 878 } 859 879 860 880 return 0; … … 913 933 914 934 if (sarcount) { 915 LOG_A("Bind to local SCTP endpoints (%d addresses attempted) ", sarcount); 935 char * buf = NULL; 936 size_t len = 0; 937 CHECK_MALLOC_DO( fd_sa_dump_array( &buf, &len, 0, bindsar, sarcount), goto out ); 938 LOG_A("SCTP client binding local addresses: %s", buf); 939 free(buf); 916 940 917 941 CHECK_SYS_DO( ret = sctp_bindx(*sock, bindsar, sarcount, SCTP_BINDX_ADD_ADDR), goto out ); … … 931 955 932 956 /* Try connecting */ 933 LOG_A("Attempting SCTP connection (%d addresses attempted) ", count); 934 935 #if 0 936 /* Dump the SAs */ 937 union { 938 uint8_t *buf; 939 sSA *sa; 940 sSA4 *sin; 941 sSA6 *sin6; 942 } ptr; 943 int i; 944 ptr.buf = sar.buf; 945 for (i=0; i< count; i++) { 946 TRACE_sSA(FD_LOG_DEBUG, FULL, " - ", ptr.sa, NI_NUMERICHOST | NI_NUMERICSERV, "" ); 947 ptr.buf += (ptr.sa->sa_family == AF_INET) ? sizeof(sSA4) : sizeof(sSA6); 948 } 949 #endif 950 957 { 958 char * buf = NULL; 959 size_t len = 0; 960 CHECK_MALLOC_DO( fd_sa_dump_array( &buf, &len, 0, sar.sa, count), goto out ); 961 LOG_A("SCTP client connecting to addresses: %s", buf); 962 free(buf); 963 } 964 951 965 /* Bug in some Linux kernel, the sctp_connectx is not a cancellation point. To avoid blocking freeDiameter, we allow async cancel here */ 952 966 pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); … … 1007 1021 #if 0 1008 1022 char sa_buf[sSA_DUMP_STRLEN]; 1009 fd_sa_sdump_numeric(sa_buf, &status.sstat_primary.spinfo_address);1023 fd_sa_sdump_numeric(sa_buf, (sSA *)&status.sstat_primary.spinfo_address); 1010 1024 fd_log_debug( "SCTP_STATUS : sstat_state : %i" , status.sstat_state); 1011 1025 fd_log_debug( " sstat_rwnd : %u" , status.sstat_rwnd); … … 1243 1257 if (mhdr.msg_flags & MSG_NOTIFICATION) { 1244 1258 union sctp_notification * notif = (union sctp_notification *) data; 1259 char sa_buf[sSA_DUMP_STRLEN]; 1245 1260 1246 1261 TRACE_DEBUG(FULL, "Received %zdb data of notification on socket %d", datasize, conn->cc_socket); … … 1260 1275 case SCTP_PEER_ADDR_CHANGE: 1261 1276 TRACE_DEBUG(FULL, "Received SCTP_PEER_ADDR_CHANGE notification"); 1262 /* TRACE_sSA(FD_LOG_DEBUG, ANNOYING, " intf_change : ", &(notif->sn_paddr_change.spc_aaddr), NI_NUMERICHOST | NI_NUMERICSERV, "" ); */ 1277 fd_sa_sdump_numeric(sa_buf, (sSA *)&(notif->sn_paddr_change.spc_aaddr)); 1278 TRACE_DEBUG(ANNOYING, " intf_change : %s", sa_buf); 1263 1279 TRACE_DEBUG(ANNOYING, " state : %d", notif->sn_paddr_change.spc_state); 1264 1280 TRACE_DEBUG(ANNOYING, " error : %d", notif->sn_paddr_change.spc_error);
Note: See TracChangeset
for help on using the changeset viewer.