annotate libfdcore/sctp.c @ 1543:9222d31123b1

Use more portable sctp_opt_info() instead of getsockopt() for SCTP. From Robert Swindells.
author Thomas Klausner <tk@giga.or.at>
date Mon, 25 May 2020 10:32:57 +0200
parents acbfec3df281
children 7bad8025e69d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1 /*********************************************************************************************************
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2 * Software License Agreement (BSD License) *
740
4a9f08d6b6ba Updated my mail address
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 710
diff changeset
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> *
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
4 * *
1268
25fad6714991 Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1266
diff changeset
5 * Copyright (c) 2015, WIDE Project and NICT *
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
6 * All rights reserved. *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
7 * *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
8 * Redistribution and use of this software in source and binary forms, with or without modification, are *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
9 * permitted provided that the following conditions are met: *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
10 * *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
11 * * Redistributions of source code must retain the above *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
12 * copyright notice, this list of conditions and the *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
13 * following disclaimer. *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
14 * *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
15 * * Redistributions in binary form must reproduce the above *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
16 * copyright notice, this list of conditions and the *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
17 * following disclaimer in the documentation and/or other *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
18 * materials provided with the distribution. *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
19 * *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
20 * * Neither the name of the WIDE Project or NICT nor the *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
21 * names of its contributors may be used to endorse or *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
22 * promote products derived from this software without *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
23 * specific prior written permission of WIDE Project and *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
24 * NICT. *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
25 * *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
34 *********************************************************************************************************/
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
35
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 590
diff changeset
36 #include "fdcore-internal.h"
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
37 #include "cnxctx.h"
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
38
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
39 #include <netinet/sctp.h>
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
40 #include <sys/uio.h>
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
41
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
42 /* Size of buffer to receive ancilliary data. May need to be enlarged if more sockopt are set... */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
43 #ifndef CMSG_BUF_LEN
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
44 #define CMSG_BUF_LEN 1024
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
45 #endif /* CMSG_BUF_LEN */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
46
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
47 /* Use old draft-ietf-tsvwg-sctpsocket-17 API ? If not defined, RFC6458 API will be used */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
48 /* #define OLD_SCTP_SOCKET_API */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
49
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
50 /* Automatically fallback to old API if some of the new symbols are not defined */
1474
732e0f76dbfb Fix build on Debian Stable.
Thomas Klausner <tk@giga.or.at>
parents: 1332
diff changeset
51 #if (!defined(SCTP_CONNECTX_4_ARGS) || (!defined(SCTP_RECVRCVINFO)) || (!defined(SCTP_SNDINFO)) || (!defined(SCTP_SEND_FAILED_EVENT)))
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
52 # define OLD_SCTP_SOCKET_API
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
53 #endif
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
54
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
55
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
56 /* Temper with the retransmission timers to try and improve disconnection detection response? Undef this to keep the defaults of SCTP stack */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
57 #ifndef USE_DEFAULT_SCTP_RTX_PARAMS /* make this a configuration option if useful */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
58 #define ADJUST_RTX_PARAMS
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
59 #endif /* USE_DEFAULT_SCTP_RTX_PARAMS */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
60
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
61 /* Pre-binding socket options -- # streams read in config */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
62 static int fd_setsockopt_prebind(int sk)
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
63 {
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
64 socklen_t sz;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
65
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
66 TRACE_ENTRY( "%d", sk);
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
67
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
68 CHECK_PARAMS( sk > 0 );
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
69
252
433ef00ac049 Use SO_REUSEADDR in debug builds
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 248
diff changeset
70 {
433ef00ac049 Use SO_REUSEADDR in debug builds
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 248
diff changeset
71 int reuse = 1;
433ef00ac049 Use SO_REUSEADDR in debug builds
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 248
diff changeset
72 CHECK_SYS( setsockopt(sk, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) );
433ef00ac049 Use SO_REUSEADDR in debug builds
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 248
diff changeset
73 }
433ef00ac049 Use SO_REUSEADDR in debug builds
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 248
diff changeset
74
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
75 #ifdef ADJUST_RTX_PARAMS
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
76 /* Set the retransmit parameters */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
77 #ifdef SCTP_RTOINFO
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
78 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
79 struct sctp_rtoinfo rtoinfo;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
80 memset(&rtoinfo, 0, sizeof(rtoinfo));
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
81
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
82 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
83 sz = sizeof(rtoinfo);
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
84 /* Read socket defaults */
1543
9222d31123b1 Use more portable sctp_opt_info() instead of getsockopt() for SCTP.
Thomas Klausner <tk@giga.or.at>
parents: 1495
diff changeset
85 CHECK_SYS( sctp_opt_info(sk, 0, SCTP_RTOINFO, &rtoinfo, &sz) );
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
86 if (sz != sizeof(rtoinfo))
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
87 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
88 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(rtoinfo));
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
89 return ENOTSUP;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
90 }
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
91 fd_log_debug( "Def SCTP_RTOINFO : srto_initial : %u", rtoinfo.srto_initial);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
92 fd_log_debug( " srto_min : %u", rtoinfo.srto_min);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
93 fd_log_debug( " srto_max : %u", rtoinfo.srto_max);
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
94 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
95
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
96 /* rtoinfo.srto_initial: Estimate of the RTT before it can be measured; keep the default value */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
97 rtoinfo.srto_max = 5000; /* Maximum retransmit timer (in ms), we want fast retransmission time. */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
98 rtoinfo.srto_min = 1000; /* Value under which the RTO does not descend, we set this value to not conflict with srto_max */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
99
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
100 /* Set the option to the socket */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
101 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_RTOINFO, &rtoinfo, sizeof(rtoinfo)) );
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
102
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
103 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
104 /* Check new values */
1543
9222d31123b1 Use more portable sctp_opt_info() instead of getsockopt() for SCTP.
Thomas Klausner <tk@giga.or.at>
parents: 1495
diff changeset
105 CHECK_SYS( sctp_opt_info(sk, 0, SCTP_RTOINFO, &rtoinfo, &sz) );
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
106 fd_log_debug( "New SCTP_RTOINFO : srto_initial : %u", rtoinfo.srto_initial);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
107 fd_log_debug( " srto_max : %u", rtoinfo.srto_max);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
108 fd_log_debug( " srto_min : %u", rtoinfo.srto_min);
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
109 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
110 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
111 #else /* SCTP_RTOINFO */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
112 TRACE_DEBUG(ANNOYING, "Skipping SCTP_RTOINFO");
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
113 #endif /* SCTP_RTOINFO */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
114
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
115 /* Set the association parameters: max number of retransmits, ... */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
116 #ifdef SCTP_ASSOCINFO
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
117 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
118 struct sctp_assocparams assoc;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
119 memset(&assoc, 0, sizeof(assoc));
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
120
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
121 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
122 sz = sizeof(assoc);
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
123 /* Read socket defaults */
1543
9222d31123b1 Use more portable sctp_opt_info() instead of getsockopt() for SCTP.
Thomas Klausner <tk@giga.or.at>
parents: 1495
diff changeset
124 CHECK_SYS( sctp_opt_info(sk, 0, SCTP_ASSOCINFO, &assoc, &sz) );
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
125 if (sz != sizeof(assoc))
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
126 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
127 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(assoc));
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
128 return ENOTSUP;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
129 }
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
130 fd_log_debug( "Def SCTP_ASSOCINFO : sasoc_asocmaxrxt : %hu", assoc.sasoc_asocmaxrxt);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
131 fd_log_debug( " sasoc_number_peer_destinations : %hu", assoc.sasoc_number_peer_destinations);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
132 fd_log_debug( " sasoc_peer_rwnd : %u" , assoc.sasoc_peer_rwnd);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
133 fd_log_debug( " sasoc_local_rwnd : %u" , assoc.sasoc_local_rwnd);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
134 fd_log_debug( " sasoc_cookie_life : %u" , assoc.sasoc_cookie_life);
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
135 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
136
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
137 assoc.sasoc_asocmaxrxt = 4; /* Maximum number of retransmission attempts: we want fast detection of errors */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
138 /* Note that this must remain less than the sum of retransmission parameters of the different paths. */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
139
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
140 /* Set the option to the socket */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
141 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_ASSOCINFO, &assoc, sizeof(assoc)) );
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
142
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
143 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
144 /* Check new values */
1543
9222d31123b1 Use more portable sctp_opt_info() instead of getsockopt() for SCTP.
Thomas Klausner <tk@giga.or.at>
parents: 1495
diff changeset
145 CHECK_SYS( sctp_opt_info(sk, 0, SCTP_ASSOCINFO, &assoc, &sz) );
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
146 fd_log_debug( "New SCTP_ASSOCINFO : sasoc_asocmaxrxt : %hu", assoc.sasoc_asocmaxrxt);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
147 fd_log_debug( " sasoc_number_peer_destinations : %hu", assoc.sasoc_number_peer_destinations);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
148 fd_log_debug( " sasoc_peer_rwnd : %u" , assoc.sasoc_peer_rwnd);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
149 fd_log_debug( " sasoc_local_rwnd : %u" , assoc.sasoc_local_rwnd);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
150 fd_log_debug( " sasoc_cookie_life : %u" , assoc.sasoc_cookie_life);
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
151 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
152 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
153 #else /* SCTP_ASSOCINFO */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
154 TRACE_DEBUG(ANNOYING, "Skipping SCTP_ASSOCINFO");
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
155 #endif /* SCTP_ASSOCINFO */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
156 #endif /* ADJUST_RTX_PARAMS */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
157
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
158 /* Set the INIT parameters, such as number of streams */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
159 #ifdef SCTP_INITMSG
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
160 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
161 struct sctp_initmsg init;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
162 memset(&init, 0, sizeof(init));
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
163
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
164 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
165 sz = sizeof(init);
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
166
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
167 /* Read socket defaults */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
168 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_INITMSG, &init, &sz) );
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
169 if (sz != sizeof(init))
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
170 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
171 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(init));
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
172 return ENOTSUP;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
173 }
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
174 fd_log_debug( "Def SCTP_INITMSG : sinit_num_ostreams : %hu", init.sinit_num_ostreams);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
175 fd_log_debug( " sinit_max_instreams : %hu", init.sinit_max_instreams);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
176 fd_log_debug( " sinit_max_attempts : %hu", init.sinit_max_attempts);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
177 fd_log_debug( " sinit_max_init_timeo : %hu", init.sinit_max_init_timeo);
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
178 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
179
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
180 /* Set the init options -- need to receive SCTP_COMM_UP to confirm the requested parameters, but we don't care (best effort) */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
181 init.sinit_num_ostreams = fd_g_config->cnf_sctp_str; /* desired number of outgoing streams */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
182 init.sinit_max_init_timeo = CNX_TIMEOUT * 1000;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
183
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
184 /* Set the option to the socket */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
185 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_INITMSG, &init, sizeof(init)) );
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
186
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
187 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
188 /* Check new values */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
189 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_INITMSG, &init, &sz) );
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
190 fd_log_debug( "New SCTP_INITMSG : sinit_num_ostreams : %hu", init.sinit_num_ostreams);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
191 fd_log_debug( " sinit_max_instreams : %hu", init.sinit_max_instreams);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
192 fd_log_debug( " sinit_max_attempts : %hu", init.sinit_max_attempts);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
193 fd_log_debug( " sinit_max_init_timeo : %hu", init.sinit_max_init_timeo);
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
194 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
195 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
196 #else /* SCTP_INITMSG */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
197 TRACE_DEBUG(ANNOYING, "Skipping SCTP_INITMSG");
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
198 #endif /* SCTP_INITMSG */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
199
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
200 /* The SO_LINGER option will be reset if we want to perform SCTP ABORT */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
201 #ifdef SO_LINGER
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
202 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
203 struct linger linger;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
204 memset(&linger, 0, sizeof(linger));
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
205
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
206 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
207 sz = sizeof(linger);
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
208 /* Read socket defaults */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
209 CHECK_SYS( getsockopt(sk, SOL_SOCKET, SO_LINGER, &linger, &sz) );
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
210 if (sz != sizeof(linger))
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
211 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
212 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(linger));
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
213 return ENOTSUP;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
214 }
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
215 fd_log_debug( "Def SO_LINGER : l_onoff : %d", linger.l_onoff);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
216 fd_log_debug( " l_linger : %d", linger.l_linger);
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
217 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
218
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
219 linger.l_onoff = 0; /* Do not activate the linger */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
220 linger.l_linger = 0; /* Ignored, but it would mean : Return immediately when closing (=> abort) (graceful shutdown in background) */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
221
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
222 /* Set the option */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
223 CHECK_SYS( setsockopt(sk, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger)) );
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
224
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
225 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
226 /* Check new values */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
227 CHECK_SYS( getsockopt(sk, SOL_SOCKET, SO_LINGER, &linger, &sz) );
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
228 fd_log_debug( "New SO_LINGER : l_onoff : %d", linger.l_onoff);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
229 fd_log_debug( " l_linger : %d", linger.l_linger);
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
230 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
231 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
232 #else /* SO_LINGER */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
233 TRACE_DEBUG(ANNOYING, "Skipping SO_LINGER");
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
234 #endif /* SO_LINGER */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
235
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
236 /* Set the NODELAY option (Nagle-like algorithm) */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
237 #ifdef SCTP_NODELAY
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
238 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
239 int nodelay;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
240
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
241 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
242 sz = sizeof(nodelay);
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
243 /* Read socket defaults */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
244 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_NODELAY, &nodelay, &sz) );
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
245 if (sz != sizeof(nodelay))
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
246 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
247 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(nodelay));
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
248 return ENOTSUP;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
249 }
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
250 fd_log_debug( "Def SCTP_NODELAY value : %s", nodelay ? "true" : "false");
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
251 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
252
1197
823829bf1037 Couple of typos in the comments
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1186
diff changeset
253 nodelay = 1; /* We turn ON to disable the Nagle algorithm, so that packets are sent ASAP. */
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
254
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
255 /* Set the option to the socket */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
256 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_NODELAY, &nodelay, sizeof(nodelay)) );
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
257
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
258 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
259 /* Check new values */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
260 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_NODELAY, &nodelay, &sz) );
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
261 fd_log_debug( "New SCTP_NODELAY value : %s", nodelay ? "true" : "false");
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
262 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
263 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
264 #else /* SCTP_NODELAY */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
265 TRACE_DEBUG(ANNOYING, "Skipping SCTP_NODELAY");
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
266 #endif /* SCTP_NODELAY */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
267
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
268 /*
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
269 SO_RCVBUF size of receiver window
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
270 SO_SNDBUF size of pending data to send
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
271 SCTP_AUTOCLOSE for one-to-many only
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
272 SCTP_PRIMARY_ADDR use this address as primary locally
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
273 SCTP_ADAPTATION_LAYER set adaptation layer indication, we don't use this
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
274 */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
275
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
276 /* Set the SCTP_DISABLE_FRAGMENTS option, required for TLS */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
277 #ifdef SCTP_DISABLE_FRAGMENTS
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
278 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
279 int nofrag;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
280
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
281 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
282 sz = sizeof(nofrag);
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
283 /* Read socket defaults */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
284 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_DISABLE_FRAGMENTS, &nofrag, &sz) );
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
285 if (sz != sizeof(nofrag))
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
286 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
287 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(nofrag));
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
288 return ENOTSUP;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
289 }
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
290 fd_log_debug( "Def SCTP_DISABLE_FRAGMENTS value : %s", nofrag ? "true" : "false");
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
291 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
292
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
293 nofrag = 0; /* We turn ON the fragmentation, since Diameter messages & TLS messages can be quite large. */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
294
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
295 /* Set the option to the socket */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
296 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_DISABLE_FRAGMENTS, &nofrag, sizeof(nofrag)) );
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
297
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
298 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
299 /* Check new values */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
300 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_DISABLE_FRAGMENTS, &nofrag, &sz) );
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
301 fd_log_debug( "New SCTP_DISABLE_FRAGMENTS value : %s", nofrag ? "true" : "false");
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
302 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
303 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
304 #else /* SCTP_DISABLE_FRAGMENTS */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
305 # error "TLS requires support of SCTP_DISABLE_FRAGMENTS"
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
306 #endif /* SCTP_DISABLE_FRAGMENTS */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
307
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
308 /* SCTP_PEER_ADDR_PARAMS control heartbeat per peer address. We set it as a default for all addresses in the association; not sure if it works ... */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
309 #ifdef SCTP_PEER_ADDR_PARAMS
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
310 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
311 struct sctp_paddrparams parms;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
312 memset(&parms, 0, sizeof(parms));
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
313
172
9c5dfc6399a4 Fix bug with Debian Lenny kernel
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 171
diff changeset
314 /* Some kernel versions need this to be set */
9c5dfc6399a4 Fix bug with Debian Lenny kernel
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 171
diff changeset
315 parms.spp_address.ss_family = AF_INET;
9c5dfc6399a4 Fix bug with Debian Lenny kernel
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 171
diff changeset
316
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
317 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
318 sz = sizeof(parms);
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
319
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
320 /* Read socket defaults */
1543
9222d31123b1 Use more portable sctp_opt_info() instead of getsockopt() for SCTP.
Thomas Klausner <tk@giga.or.at>
parents: 1495
diff changeset
321 CHECK_SYS( sctp_opt_info(sk, 0, SCTP_PEER_ADDR_PARAMS, &parms, &sz) );
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
322 if (sz != sizeof(parms))
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
323 {
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
324 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(parms));
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
325 return ENOTSUP;
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
326 }
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
327 fd_log_debug( "Def SCTP_PEER_ADDR_PARAMS : spp_hbinterval : %u", parms.spp_hbinterval);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
328 fd_log_debug( " spp_pathmaxrxt : %hu", parms.spp_pathmaxrxt);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
329 fd_log_debug( " spp_pathmtu : %u", parms.spp_pathmtu);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
330 fd_log_debug( " spp_flags : %x", parms.spp_flags);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
331 // fd_log_debug( " spp_ipv6_flowlabel: %u", parms.spp_ipv6_flowlabel);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
332 // fd_log_debug( " spp_ipv4_tos : %hhu",parms.spp_ipv4_tos);
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
333 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
334
172
9c5dfc6399a4 Fix bug with Debian Lenny kernel
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 171
diff changeset
335 parms.spp_flags = SPP_HB_ENABLE; /* Enable heartbeat for the association */
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
336 #ifdef SPP_PMTUD_ENABLE
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
337 parms.spp_flags |= SPP_PMTUD_ENABLE; /* also enable path MTU discovery mechanism */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
338 #endif /* SPP_PMTUD_ENABLE */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
339
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
340 #ifdef ADJUST_RTX_PARAMS
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
341 parms.spp_hbinterval = 6000; /* Send an heartbeat every 6 seconds to quickly start retransmissions */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
342 /* parms.spp_pathmaxrxt : max nbr of restransmissions on this address. There is a relationship with sasoc_asocmaxrxt, so we leave the default here */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
343 #endif /* ADJUST_RTX_PARAMS */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
344
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
345 /* Set the option to the socket */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
346 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, &parms, sizeof(parms)) );
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
347
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
348 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
349 /* Check new values */
1543
9222d31123b1 Use more portable sctp_opt_info() instead of getsockopt() for SCTP.
Thomas Klausner <tk@giga.or.at>
parents: 1495
diff changeset
350 CHECK_SYS( sctp_opt_info(sk, 0, SCTP_PEER_ADDR_PARAMS, &parms, &sz) );
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
351 fd_log_debug( "New SCTP_PEER_ADDR_PARAMS : spp_hbinterval : %u", parms.spp_hbinterval);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
352 fd_log_debug( " spp_pathmaxrxt : %hu", parms.spp_pathmaxrxt);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
353 fd_log_debug( " spp_pathmtu : %u", parms.spp_pathmtu);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
354 fd_log_debug( " spp_flags : %x", parms.spp_flags);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
355 // fd_log_debug( " spp_ipv6_flowlabel: %u", parms.spp_ipv6_flowlabel);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
356 // fd_log_debug( " spp_ipv4_tos : %hhu",parms.spp_ipv4_tos);
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
357 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
358 }
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
359 #else /* SCTP_PEER_ADDR_PARAMS */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
360 TRACE_DEBUG(ANNOYING, "Skipping SCTP_PEER_ADDR_PARAMS");
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
361 #endif /* SCTP_PEER_ADDR_PARAMS */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
362
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
363 /*
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
364 SCTP_DEFAULT_SEND_PARAM - DEPRECATED // parameters for the sendto() call, we don't use it.
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
365 */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
366
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
367 /* Subscribe to some notifications */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
368 #ifdef OLD_SCTP_SOCKET_API
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
369 #ifdef SCTP_EVENTS /* DEPRECATED */
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
370 {
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
371 struct sctp_event_subscribe event;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
372
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
373 memset(&event, 0, sizeof(event));
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
374 event.sctp_data_io_event = 1; /* to receive the stream ID in SCTP_SNDRCV ancilliary data on message reception */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
375 event.sctp_association_event = 0; /* new or closed associations (mostly for one-to-many style sockets) */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
376 event.sctp_address_event = 1; /* address changes */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
377 event.sctp_send_failure_event = 1; /* delivery failures */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
378 event.sctp_peer_error_event = 1; /* remote peer sends an error */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
379 event.sctp_shutdown_event = 1; /* peer has sent a SHUTDOWN */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
380 event.sctp_partial_delivery_event = 1; /* a partial delivery is aborted, probably indicating the connection is being shutdown */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
381 // event.sctp_adaptation_layer_event = 0; /* adaptation layer notifications */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
382 // event.sctp_authentication_event = 0; /* when new key is made active */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
383
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
384 /* Set the option to the socket */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
385 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(event)) );
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
386
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
387 if (TRACE_BOOL(ANNOYING)) {
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
388 sz = sizeof(event);
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
389 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_EVENTS, &event, &sz) );
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
390 if (sz != sizeof(event))
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
391 {
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
392 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(event));
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
393 return ENOTSUP;
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
394 }
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
395
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
396 fd_log_debug( "SCTP_EVENTS : sctp_data_io_event : %hhu", event.sctp_data_io_event);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
397 fd_log_debug( " sctp_association_event : %hhu", event.sctp_association_event);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
398 fd_log_debug( " sctp_address_event : %hhu", event.sctp_address_event);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
399 fd_log_debug( " sctp_send_failure_event : %hhu", event.sctp_send_failure_event);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
400 fd_log_debug( " sctp_peer_error_event : %hhu", event.sctp_peer_error_event);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
401 fd_log_debug( " sctp_shutdown_event : %hhu", event.sctp_shutdown_event);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
402 fd_log_debug( " sctp_partial_delivery_event : %hhu", event.sctp_partial_delivery_event);
1332
b75556f40346 Comment out reference to sctp_adaptation_layer_event.
Thomas Klausner <tk@giga.or.at>
parents: 1268
diff changeset
403 // fd_log_debug( " sctp_adaptation_layer_event : %hhu", event.sctp_adaptation_layer_event);
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
404 // fd_log_debug( " sctp_authentication_event : %hhu", event.sctp_authentication_event);
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
405 }
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
406 }
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
407 #else /* SCTP_EVENTS */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
408 TRACE_DEBUG(ANNOYING, "Skipping SCTP_EVENTS");
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
409 #endif /* SCTP_EVENTS */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
410 #endif /* OLD_SCTP_SOCKET_API */
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
411
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
412 /* Set the v4 mapped addresses option */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
413 #ifdef SCTP_I_WANT_MAPPED_V4_ADDR
817
7541554029bf Fix SCTP_I_WANT_MAPPED_V4_ADDR behavior when IPv6 is disabled in config; thank you Michael Tuexen for the issue report \& patch.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 788
diff changeset
414 if (!fd_g_config->cnf_flags.no_ip6) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
415 int v4mapped;
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
416
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
417 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
418 sz = sizeof(v4mapped);
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
419 /* Read socket defaults */
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
420 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_I_WANT_MAPPED_V4_ADDR, &v4mapped, &sz) );
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
421 if (sz != sizeof(v4mapped))
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
422 {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
423 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(v4mapped));
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
424 return ENOTSUP;
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
425 }
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
426 fd_log_debug( "Def SCTP_I_WANT_MAPPED_V4_ADDR value : %s", v4mapped ? "true" : "false");
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
427 }
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
428
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
429 #ifndef SCTP_USE_MAPPED_ADDRESSES
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
430 v4mapped = 0; /* We don't want v4 mapped addresses */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
431 #else /* SCTP_USE_MAPPED_ADDRESSES */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
432 v4mapped = 1; /* but we may have to, otherwise the bind fails in some environments */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
433 #endif /* SCTP_USE_MAPPED_ADDRESSES */
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
434
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
435 /* Set the option to the socket */
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
436 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_I_WANT_MAPPED_V4_ADDR, &v4mapped, sizeof(v4mapped)) );
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
437
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
438 if (TRACE_BOOL(ANNOYING)) {
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
439 /* Check new values */
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
440 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_I_WANT_MAPPED_V4_ADDR, &v4mapped, &sz) );
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
441 fd_log_debug( "New SCTP_I_WANT_MAPPED_V4_ADDR value : %s", v4mapped ? "true" : "false");
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
442 }
817
7541554029bf Fix SCTP_I_WANT_MAPPED_V4_ADDR behavior when IPv6 is disabled in config; thank you Michael Tuexen for the issue report \& patch.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 788
diff changeset
443 } else {
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
444 TRACE_DEBUG(ANNOYING, "Skipping SCTP_I_WANT_MAPPED_V4_ADDR, since IPv6 disabled.");
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
445 }
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
446 #else /* SCTP_I_WANT_MAPPED_V4_ADDR */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
447 TRACE_DEBUG(ANNOYING, "Skipping SCTP_I_WANT_MAPPED_V4_ADDR");
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
448 #endif /* SCTP_I_WANT_MAPPED_V4_ADDR */
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
449
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
450 /*
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
451 SCTP_MAXSEG max size of fragmented segments -- bound to PMTU
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
452 SCTP_HMAC_IDENT authentication algorithms
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
453 SCTP_AUTH_ACTIVE_KEY set the active key
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
454 SCTP_DELAYED_SACK control delayed acks
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
455 */
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
456
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
457
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
458 /* Set the interleaving option */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
459 #ifdef SCTP_FRAGMENT_INTERLEAVE
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
460 {
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
461 int interleave;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
462
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
463 if (TRACE_BOOL(ANNOYING)) {
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
464 sz = sizeof(interleave);
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
465 /* Read socket defaults */
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
466 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_FRAGMENT_INTERLEAVE, &interleave, &sz) );
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
467 if (sz != sizeof(interleave))
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
468 {
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
469 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(interleave));
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
470 return ENOTSUP;
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
471 }
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
472 fd_log_debug( "Def SCTP_FRAGMENT_INTERLEAVE value : %d", interleave);
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
473 }
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
474
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
475 #if 0
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
476 interleave = 2; /* Allow partial delivery on several streams at the same time, since we are stream-aware in our security modules */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
477 #else /* 0 */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
478 interleave = 1; /* hmmm actually, we are not yet capable of handling this, and we don t need it. */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
479 #endif /* 0 */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
480
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
481 /* Set the option to the socket */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
482 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_FRAGMENT_INTERLEAVE, &interleave, sizeof(interleave)) );
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
483
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
484 if (TRACE_BOOL(ANNOYING)) {
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
485 /* Check new values */
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
486 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_FRAGMENT_INTERLEAVE, &interleave, &sz) );
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
487 fd_log_debug( "New SCTP_FRAGMENT_INTERLEAVE value : %d", interleave);
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
488 }
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
489 }
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
490 #else /* SCTP_FRAGMENT_INTERLEAVE */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
491 TRACE_DEBUG(ANNOYING, "Skipping SCTP_FRAGMENT_INTERLEAVE");
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
492 #endif /* SCTP_FRAGMENT_INTERLEAVE */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
493
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
494 /*
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
495 SCTP_PARTIAL_DELIVERY_POINT control partial delivery size
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
496 SCTP_USE_EXT_RCVINFO - DEPRECATED use extended receive info structure (information about the next message if available)
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
497 */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
498 /* SCTP_AUTO_ASCONF is set by the postbind function */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
499 /*
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
500 SCTP_MAX_BURST number of packets that can be burst emitted
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
501 SCTP_CONTEXT save a context information along with the association.
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
502 */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
503
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
504 /* SCTP_EXPLICIT_EOR: we assume implicit EOR in freeDiameter, so let's ensure this is known by the stack */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
505 #ifdef SCTP_EXPLICIT_EOR
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
506 {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
507 int bool;
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
508
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
509 if (TRACE_BOOL(ANNOYING)) {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
510 sz = sizeof(bool);
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
511 /* Read socket defaults */
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
512 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_EXPLICIT_EOR, &bool, &sz) );
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
513 if (sz != sizeof(bool))
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
514 {
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
515 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(bool));
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
516 return ENOTSUP;
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
517 }
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
518 fd_log_debug( "Def SCTP_EXPLICIT_EOR value : %s", bool ? "true" : "false");
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
519 }
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
520
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
521 bool = 0;
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
522
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
523 /* Set the option to the socket */
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
524 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_EXPLICIT_EOR, &bool, sizeof(bool)) );
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
525
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
526 if (TRACE_BOOL(ANNOYING)) {
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
527 /* Check new values */
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
528 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_EXPLICIT_EOR, &bool, &sz) );
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
529 fd_log_debug( "New SCTP_EXPLICIT_EOR value : %s", bool ? "true" : "false");
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
530 }
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
531 }
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
532 #else /* SCTP_EXPLICIT_EOR */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
533 TRACE_DEBUG(ANNOYING, "Skipping SCTP_EXPLICIT_EOR");
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
534 #endif /* SCTP_EXPLICIT_EOR */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
535
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
536 /*
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
537 SCTP_REUSE_PORT share one listening port with several sockets
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
538 */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
539
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
540 #ifndef OLD_SCTP_SOCKET_API
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
541 #ifdef SCTP_EVENT
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
542 {
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
543 /* Subscribe to the following events */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
544 int events_I_want[] = {
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
545 #ifdef SCTP_ASSOC_CHANGE
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
546 /* SCTP_ASSOC_CHANGE, */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
547 #endif
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
548 #ifdef SCTP_PEER_ADDR_CHANGE
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
549 SCTP_PEER_ADDR_CHANGE,
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
550 #endif
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
551 #ifdef SCTP_REMOTE_ERROR
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
552 SCTP_REMOTE_ERROR,
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
553 #endif
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
554 #ifdef SCTP_SEND_FAILED_EVENT
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
555 SCTP_SEND_FAILED_EVENT,
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
556 #endif
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
557 #ifdef SCTP_SHUTDOWN_EVENT
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
558 SCTP_SHUTDOWN_EVENT,
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
559 #endif
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
560 #ifdef SCTP_ADAPTATION_INDICATION
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
561 /* SCTP_ADAPTATION_INDICATION, */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
562 #endif
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
563 #ifdef SCTP_PARTIAL_DELIVERY_EVENT
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
564 /* SCTP_PARTIAL_DELIVERY_EVENT, */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
565 #endif
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
566 #ifdef SCTP_AUTHENTICATION_EVENT
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
567 /* SCTP_AUTHENTICATION_EVENT, */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
568 #endif
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
569 #ifdef SCTP_SENDER_DRY_EVENT
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
570 /* SCTP_SENDER_DRY_EVENT, */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
571 #endif
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
572 0
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
573 };
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
574 int i;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
575
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
576 struct sctp_event event;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
577
1266
85a425a201b6 Fix compilation error as reported by Nikola in http://lists.freediameter.net/pipermail/help/2014-September/000860.html
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1228
diff changeset
578 for (i = 0; i < (sizeof(events_I_want) / sizeof(events_I_want[0]) - 1); i++) {
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
579 memset(&event, 0, sizeof(event));
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
580 event.se_type = events_I_want[i];
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
581 event.se_on = 1;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
582
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
583 /* Set the option to the socket */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
584 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_EVENT, &event, sizeof(event)) );
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
585 }
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
586 }
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
587 #else /* SCTP_EVENT */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
588 TRACE_DEBUG(ANNOYING, "Skipping SCTP_EVENT");
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
589 #endif /* SCTP_EVENT */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
590
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
591
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
592 #ifdef SCTP_RECVRCVINFO /* Replaces SCTP_SNDRCV */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
593 {
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
594 int bool = 1;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
595
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
596 /* Set the option to the socket */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
597 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_RECVRCVINFO, &bool, sizeof(bool)) );
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
598
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
599 }
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
600 #else /* SCTP_RECVRCVINFO */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
601 TRACE_DEBUG(ANNOYING, "Skipping SCTP_RECVRCVINFO");
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
602 #endif /* SCTP_RECVRCVINFO */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
603
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
604
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
605 #endif /* OLD_SCTP_SOCKET_API */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
606
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
607 /*
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
608 SCTP_RECVNXTINFO
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
609
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
610 SCTP_DEFAULT_SNDINFO : send defaults
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
611 SCTP_DEFAULT_PRINFO : default PR-SCTP
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
612 */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
613
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
614
171
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
615 /* In case of no_ip4, force the v6only option */
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
616 #ifdef IPV6_V6ONLY
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
617 if (fd_g_config->cnf_flags.no_ip4) {
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
618 int opt = 1;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
619 CHECK_SYS(setsockopt(sk, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt)));
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
620 }
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
621 #endif /* IPV6_V6ONLY */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
622
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
623 return 0;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
624 }
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
625
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
626
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
627 /* Post-binding socket options */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
628 static int fd_setsockopt_postbind(int sk, int bound_to_default)
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
629 {
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
630 TRACE_ENTRY( "%d %d", sk, bound_to_default);
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
631
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
632 CHECK_PARAMS( (sk > 0) );
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
633
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
634 /* Set the ASCONF option */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
635 #ifdef SCTP_AUTO_ASCONF
248
d3e892306468 Cannot read/write SCTP_AUTO_ASCONF for bound sockets in FreeBSD
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 246
diff changeset
636 if (bound_to_default) {
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
637 int asconf;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
638
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
639 if (TRACE_BOOL(ANNOYING)) {
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
640 socklen_t sz;
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
641
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
642 sz = sizeof(asconf);
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
643 /* Read socket defaults */
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
644 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_AUTO_ASCONF, &asconf, &sz) );
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
645 if (sz != sizeof(asconf))
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
646 {
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
647 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(asconf));
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
648 return ENOTSUP;
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
649 }
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
650 fd_log_debug( "Def SCTP_AUTO_ASCONF value : %s", asconf ? "true" : "false");
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
651 }
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
652
248
d3e892306468 Cannot read/write SCTP_AUTO_ASCONF for bound sockets in FreeBSD
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 246
diff changeset
653 asconf = 1; /* allow automatic use of added or removed addresses in the association (for bound-all sockets) */
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
654
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
655 /* Set the option to the socket */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
656 CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_AUTO_ASCONF, &asconf, sizeof(asconf)) );
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
657
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
658 if (TRACE_BOOL(ANNOYING)) {
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
659 socklen_t sz = sizeof(asconf);
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
660 /* Check new values */
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
661 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_AUTO_ASCONF, &asconf, &sz) );
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
662 fd_log_debug( "New SCTP_AUTO_ASCONF value : %s", asconf ? "true" : "false");
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
663 }
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
664 }
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
665 #else /* SCTP_AUTO_ASCONF */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
666 TRACE_DEBUG(ANNOYING, "Skipping SCTP_AUTO_ASCONF");
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
667 #endif /* SCTP_AUTO_ASCONF */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
668
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
669 return 0;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
670 }
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
671
220
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
672 /* Add addresses from a list to an array, with filter on the flags */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
673 static int add_addresses_from_list_mask(uint8_t ** array, size_t * size, int * addr_count, int target_family, uint16_t port, struct fd_list * list, uint32_t mask, uint32_t val)
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
674 {
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
675 struct fd_list * li;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
676 int to_add4 = 0;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
677 int to_add6 = 0;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
678 union {
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
679 uint8_t *buf;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
680 sSA4 *sin;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
681 sSA6 *sin6;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
682 } ptr;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
683 size_t sz;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
684
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
685 /* First, count the number of addresses to add */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
686 for (li = list->next; li != list; li = li->next) {
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
687 struct fd_endpoint * ep = (struct fd_endpoint *) li;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
688
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
689 /* Do the flag match ? */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
690 if ((val & mask) != (ep->flags & mask))
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
691 continue;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
692
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
693 if (ep->sa.sa_family == AF_INET) {
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
694 to_add4 ++;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
695 } else {
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
696 to_add6 ++;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
697 }
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
698 }
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
699
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
700 if ((to_add4 + to_add6) == 0)
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
701 return 0; /* nothing to do */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
702
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
703 /* The size to add */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
704 if (target_family == AF_INET) {
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
705 sz = to_add4 * sizeof(sSA4);
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
706 } else {
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
707 #ifndef SCTP_USE_MAPPED_ADDRESSES
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
708 sz = (to_add4 * sizeof(sSA4)) + (to_add6 * sizeof(sSA6));
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
709 #else /* SCTP_USE_MAPPED_ADDRESSES */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
710 sz = (to_add4 + to_add6) * sizeof(sSA6);
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
711 #endif /* SCTP_USE_MAPPED_ADDRESSES */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
712 }
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
713
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
714 /* Now, (re)alloc the array to store the new addresses */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
715 CHECK_MALLOC( *array = realloc(*array, *size + sz) );
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
716
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
717 /* Finally, add the addresses */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
718 for (li = list->next; li != list; li = li->next) {
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
719 struct fd_endpoint * ep = (struct fd_endpoint *) li;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
720
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
721 /* Skip v6 addresses for v4 socket */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
722 if ((target_family == AF_INET) && (ep->sa.sa_family == AF_INET6))
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
723 continue;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
724
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
725 /* Are the flags matching ? */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
726 if ((val & mask) != (ep->flags & mask))
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
727 continue;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
728
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
729 /* Size of the new SA we are adding (array may contain a mix of sockaddr_in and sockaddr_in6) */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
730 #ifndef SCTP_USE_MAPPED_ADDRESSES
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
731 if (ep->sa.sa_family == AF_INET6)
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
732 #else /* SCTP_USE_MAPPED_ADDRESSES */
921
a0ab56aa089f Fix compilation when SCTP_USE_MAPPED_ADDRESSES is true, and add a note about this for FreeBSD (seems to be needed at least for FreeBSD 9.1)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 914
diff changeset
733 if (target_family == AF_INET6)
220
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
734 #endif /* SCTP_USE_MAPPED_ADDRESSES */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
735 sz = sizeof(sSA6);
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
736 else
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
737 sz = sizeof(sSA4);
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
738
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
739 /* Place where we add the new address */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
740 ptr.buf = *array + *size; /* place of the new SA */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
741
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
742 /* Update other information */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
743 *size += sz;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
744 *addr_count += 1;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
745
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
746 /* And write the addr in the buffer */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
747 if (sz == sizeof(sSA4)) {
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
748 memcpy(ptr.buf, &ep->sin, sz);
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
749 ptr.sin->sin_port = port;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
750 } else {
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
751 if (ep->sa.sa_family == AF_INET) { /* We must map the address */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
752 memset(ptr.buf, 0, sz);
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
753 ptr.sin6->sin6_family = AF_INET6;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
754 IN6_ADDR_V4MAP( &ptr.sin6->sin6_addr.s6_addr, ep->sin.sin_addr.s_addr );
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
755 } else {
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
756 memcpy(ptr.sin6, &ep->sin6, sz);
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
757 }
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
758 ptr.sin6->sin6_port = port;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
759 }
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
760 }
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
761
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
762 return 0;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
763 }
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
764
22
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
765 /* Create a socket server and bind it according to daemon s configuration */
220
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
766 int fd_sctp_create_bind_server( int * sock, int family, struct fd_list * list, uint16_t port )
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
767 {
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
768 int bind_default;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
769
220
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
770 TRACE_ENTRY("%p %i %p %hu", sock, family, list, port);
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
771 CHECK_PARAMS(sock);
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
772
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
773 /* Create the socket */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
774 CHECK_SYS( *sock = socket(family, SOCK_STREAM, IPPROTO_SCTP) );
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
775
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
776 /* Set pre-binding socket options, including number of streams etc... */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
777 CHECK_FCT( fd_setsockopt_prebind(*sock) );
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
778
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
779 bind_default = (! list) || (FD_IS_LIST_EMPTY(list)) ;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
780 redo:
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
781 if ( bind_default ) {
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
782 /* Implicit endpoints : bind to default addresses */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
783 union {
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
784 sSS ss;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
785 sSA sa;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
786 sSA4 sin;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
787 sSA6 sin6;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
788 } s;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
789
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
790 /* 0.0.0.0 and [::] are all zeros */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
791 memset(&s, 0, sizeof(s));
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
792
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
793 s.sa.sa_family = family;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
794
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
795 if (family == AF_INET)
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
796 s.sin.sin_port = htons(port);
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
797 else
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
798 s.sin6.sin6_port = htons(port);
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
799
246
6418a188c1b5 getnameinfo is also more sensitive on freeBSD
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 245
diff changeset
800 CHECK_SYS( bind(*sock, &s.sa, sSAlen(&s)) );
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
801
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
802 } else {
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
803 /* Explicit endpoints to bind to from config */
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
804
220
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
805 sSA * sar = NULL; /* array of addresses */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
806 size_t sz = 0; /* size of the array */
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
807 int count = 0; /* number of sock addr in the array */
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
808
220
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
809 /* Create the array of configured addresses */
590
da93c7a5e1d0 Fix SCTP port when ListenOn is set (Patch by Vlada) - closes #20
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 486
diff changeset
810 CHECK_FCT( add_addresses_from_list_mask((void *)&sar, &sz, &count, family, htons(port), list, EP_FL_CONF, EP_FL_CONF) );
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
811
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
812 if (!count) {
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
813 /* None of the addresses in the list came from configuration, we bind to default */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
814 bind_default = 1;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
815 goto redo;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
816 }
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
817
1107
96f2051215c8 Replaced calls to TRACE_sSA and sSA_DUMP_NODE* macros
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
818 #if 0
220
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
819 union {
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
820 sSA *sa;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
821 uint8_t *buf;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
822 } ptr;
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
823 int i;
220
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
824 ptr.sa = sar;
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
825 fd_log_debug("Calling sctp_bindx with the following address array:");
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
826 for (i = 0; i < count; i++) {
965
9b37f34c1b1f Some modifications to logging code:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 961
diff changeset
827 TRACE_sSA(FD_LOG_DEBUG, FULL, " - ", ptr.sa, NI_NUMERICHOST | NI_NUMERICSERV, "" );
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
828 ptr.buf += (ptr.sa->sa_family == AF_INET) ? sizeof(sSA4) : sizeof(sSA6) ;
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
829 }
1107
96f2051215c8 Replaced calls to TRACE_sSA and sSA_DUMP_NODE* macros
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
830 #endif
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
831
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
832 /* Bind to this array */
220
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
833 CHECK_SYS( sctp_bindx(*sock, sar, count, SCTP_BINDX_ADD_ADDR) );
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
834
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
835 /* We don't need sar anymore */
220
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
836 free(sar);
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
837 }
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
838
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
839 /* Now, the server is bound, set remaining sockopt */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
840 CHECK_FCT( fd_setsockopt_postbind(*sock, bind_default) );
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
841
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
842 /* Debug: show all local listening addresses */
1107
96f2051215c8 Replaced calls to TRACE_sSA and sSA_DUMP_NODE* macros
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
843 #if 0
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
844 sSA *sar;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
845 union {
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
846 sSA *sa;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
847 uint8_t *buf;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
848 } ptr;
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
849 int sz;
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
850
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
851 CHECK_SYS( sz = sctp_getladdrs(*sock, 0, &sar) );
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
852
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
853 fd_log_debug("SCTP server bound on :");
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
854 for (ptr.sa = sar; sz-- > 0; ptr.buf += (ptr.sa->sa_family == AF_INET) ? sizeof(sSA4) : sizeof(sSA6)) {
965
9b37f34c1b1f Some modifications to logging code:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 961
diff changeset
855 TRACE_sSA(FD_LOG_DEBUG, FULL, " - ", ptr.sa, NI_NUMERICHOST | NI_NUMERICSERV, "" );
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
856 }
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
857 sctp_freeladdrs(sar);
1107
96f2051215c8 Replaced calls to TRACE_sSA and sSA_DUMP_NODE* macros
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
858 #endif
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
859
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
860 return 0;
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
861 }
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
862
22
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
863 /* Allow clients connections on server sockets */
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
864 int fd_sctp_listen( int sock )
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
865 {
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
866 TRACE_ENTRY("%d", sock);
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
867 CHECK_SYS( listen(sock, 5) );
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
868 return 0;
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
869 }
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
870
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
871 /* Create a client socket and connect to remote server */
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
872 int fd_sctp_client( int *sock, int no_ip6, uint16_t port, struct fd_list * list )
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
873 {
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
874 int family;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
875 union {
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
876 uint8_t *buf;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
877 sSA *sa;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
878 } sar;
220
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
879 size_t size = 0;
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
880 int count = 0;
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
881 int ret;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
882
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
883 sar.buf = NULL;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
884
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
885 TRACE_ENTRY("%p %i %hu %p", sock, no_ip6, port, list);
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
886 CHECK_PARAMS( sock && list && (!FD_IS_LIST_EMPTY(list)) );
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
887
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
888 if (no_ip6) {
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
889 family = AF_INET;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
890 } else {
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
891 family = AF_INET6;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
892 }
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
893
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
894 /* Create the socket */
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
895 CHECK_SYS( *sock = socket(family, SOCK_STREAM, IPPROTO_SCTP) );
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
896
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
897 /* Cleanup if we are cancelled */
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
898 pthread_cleanup_push(fd_cleanup_socket, sock);
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
899
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
900 /* Set the socket options */
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
901 CHECK_FCT_DO( ret = fd_setsockopt_prebind(*sock), goto out );
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
902
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
903 /* Create the array of addresses, add first the configured addresses, then the discovered, then the other ones */
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
904 CHECK_FCT_DO( ret = add_addresses_from_list_mask(&sar.buf, &size, &count, family, htons(port), list, EP_FL_CONF, EP_FL_CONF ), goto out );
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
905 CHECK_FCT_DO( ret = add_addresses_from_list_mask(&sar.buf, &size, &count, family, htons(port), list, EP_FL_CONF | EP_FL_DISC, EP_FL_DISC ), goto out );
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
906 CHECK_FCT_DO( ret = add_addresses_from_list_mask(&sar.buf, &size, &count, family, htons(port), list, EP_FL_CONF | EP_FL_DISC, 0 ), goto out );
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
907
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
908 /* Try connecting */
1107
96f2051215c8 Replaced calls to TRACE_sSA and sSA_DUMP_NODE* macros
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
909 LOG_A("Attempting SCTP connection (%d addresses attempted) ", count);
96f2051215c8 Replaced calls to TRACE_sSA and sSA_DUMP_NODE* macros
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
910
96f2051215c8 Replaced calls to TRACE_sSA and sSA_DUMP_NODE* macros
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
911 #if 0
177
09b9cb9cfd01 Added more information for SCTP connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 172
diff changeset
912 /* Dump the SAs */
09b9cb9cfd01 Added more information for SCTP connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 172
diff changeset
913 union {
09b9cb9cfd01 Added more information for SCTP connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 172
diff changeset
914 uint8_t *buf;
09b9cb9cfd01 Added more information for SCTP connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 172
diff changeset
915 sSA *sa;
09b9cb9cfd01 Added more information for SCTP connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 172
diff changeset
916 sSA4 *sin;
09b9cb9cfd01 Added more information for SCTP connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 172
diff changeset
917 sSA6 *sin6;
09b9cb9cfd01 Added more information for SCTP connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 172
diff changeset
918 } ptr;
09b9cb9cfd01 Added more information for SCTP connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 172
diff changeset
919 int i;
09b9cb9cfd01 Added more information for SCTP connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 172
diff changeset
920 ptr.buf = sar.buf;
09b9cb9cfd01 Added more information for SCTP connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 172
diff changeset
921 for (i=0; i< count; i++) {
965
9b37f34c1b1f Some modifications to logging code:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 961
diff changeset
922 TRACE_sSA(FD_LOG_DEBUG, FULL, " - ", ptr.sa, NI_NUMERICHOST | NI_NUMERICSERV, "" );
177
09b9cb9cfd01 Added more information for SCTP connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 172
diff changeset
923 ptr.buf += (ptr.sa->sa_family == AF_INET) ? sizeof(sSA4) : sizeof(sSA6);
09b9cb9cfd01 Added more information for SCTP connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 172
diff changeset
924 }
1107
96f2051215c8 Replaced calls to TRACE_sSA and sSA_DUMP_NODE* macros
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
925 #endif
177
09b9cb9cfd01 Added more information for SCTP connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 172
diff changeset
926
1175
2da13c87baa7 Allow cancelation of thread in sctp_connectx when this function is not a cancelation point (bug of the system, seen on Ubuntu Precise at least)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1174
diff changeset
927 /* Bug in some Linux kernel, the sctp_connectx is not a cancellation point. To avoid blocking freeDiameter, we allow async cancel here */
2da13c87baa7 Allow cancelation of thread in sctp_connectx when this function is not a cancelation point (bug of the system, seen on Ubuntu Precise at least)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1174
diff changeset
928 pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
51
08d8cbeff30b Fix for number of args to sctp_connectx
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 47
diff changeset
929 #ifdef SCTP_CONNECTX_4_ARGS
227
80a7e65167c4 Cleanup verbosity and fix unintialized variable
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 222
diff changeset
930 ret = sctp_connectx(*sock, sar.sa, count, NULL);
51
08d8cbeff30b Fix for number of args to sctp_connectx
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 47
diff changeset
931 #else /* SCTP_CONNECTX_4_ARGS */
227
80a7e65167c4 Cleanup verbosity and fix unintialized variable
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 222
diff changeset
932 ret = sctp_connectx(*sock, sar.sa, count);
51
08d8cbeff30b Fix for number of args to sctp_connectx
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 47
diff changeset
933 #endif /* SCTP_CONNECTX_4_ARGS */
1175
2da13c87baa7 Allow cancelation of thread in sctp_connectx when this function is not a cancelation point (bug of the system, seen on Ubuntu Precise at least)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1174
diff changeset
934 /* back to normal cancelation behabior */
2da13c87baa7 Allow cancelation of thread in sctp_connectx when this function is not a cancelation point (bug of the system, seen on Ubuntu Precise at least)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1174
diff changeset
935 pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
75
e6bf3e262e49 Added comment about a bug
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 68
diff changeset
936
227
80a7e65167c4 Cleanup verbosity and fix unintialized variable
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 222
diff changeset
937 if (ret < 0) {
1198
8c4dd4b693c6 Some cleanups in the traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1197
diff changeset
938 ret = errno;
227
80a7e65167c4 Cleanup verbosity and fix unintialized variable
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 222
diff changeset
939 /* Some errors are expected, we log at different level */
1198
8c4dd4b693c6 Some cleanups in the traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1197
diff changeset
940 LOG_A("sctp_connectx returned an error: %s", strerror(ret));
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
941 goto out;
227
80a7e65167c4 Cleanup verbosity and fix unintialized variable
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 222
diff changeset
942 }
80a7e65167c4 Cleanup verbosity and fix unintialized variable
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 222
diff changeset
943
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
944 free(sar.buf); sar.buf = NULL;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
945
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
946 /* Set the remaining sockopts */
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
947 CHECK_FCT_DO( ret = fd_setsockopt_postbind(*sock, 1),
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
948 {
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
949 CHECK_SYS_DO( shutdown(*sock, SHUT_RDWR), /* continue */ );
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
950 } );
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
951
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
952 out:
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
953 ;
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
954 pthread_cleanup_pop(0);
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
955
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
956 if (ret) {
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
957 if (*sock > 0) {
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
958 CHECK_SYS_DO( close(*sock), /* continue */ );
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
959 *sock = -1;
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
960 }
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
961 free(sar.buf);
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
962 }
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
963 return ret;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
964 }
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
965
1228
e5010975da35 Fix typo in comment.
Thomas Klausner <tk@giga.or.at>
parents: 1200
diff changeset
966 /* Retrieve streams information from a connected association -- optionally provide the primary address */
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
967 int fd_sctp_get_str_info( int sock, uint16_t *in, uint16_t *out, sSS *primary )
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
968 {
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
969 struct sctp_status status;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
970 socklen_t sz = sizeof(status);
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
971
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
972 TRACE_ENTRY("%d %p %p %p", sock, in, out, primary);
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
973 CHECK_PARAMS( (sock > 0) && in && out );
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
974
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
975 /* Read the association parameters */
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
976 memset(&status, 0, sizeof(status));
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
977 CHECK_SYS( getsockopt(sock, IPPROTO_SCTP, SCTP_STATUS, &status, &sz) );
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
978 if (sz != sizeof(status))
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
979 {
27
b3a1773e9f46 again, correct was actually %zd
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 26
diff changeset
980 TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %zd", sz, sizeof(status));
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
981 return ENOTSUP;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
982 }
1107
96f2051215c8 Replaced calls to TRACE_sSA and sSA_DUMP_NODE* macros
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
983 #if 0
96f2051215c8 Replaced calls to TRACE_sSA and sSA_DUMP_NODE* macros
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
984 char sa_buf[sSA_DUMP_STRLEN];
96f2051215c8 Replaced calls to TRACE_sSA and sSA_DUMP_NODE* macros
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
985 fd_sa_sdump_numeric(sa_buf, &status.sstat_primary.spinfo_address);
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
986 fd_log_debug( "SCTP_STATUS : sstat_state : %i" , status.sstat_state);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
987 fd_log_debug( " sstat_rwnd : %u" , status.sstat_rwnd);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
988 fd_log_debug( " sstat_unackdata : %hu", status.sstat_unackdata);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
989 fd_log_debug( " sstat_penddata : %hu", status.sstat_penddata);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
990 fd_log_debug( " sstat_instrms : %hu", status.sstat_instrms);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
991 fd_log_debug( " sstat_outstrms : %hu", status.sstat_outstrms);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
992 fd_log_debug( " sstat_fragmentation_point : %u" , status.sstat_fragmentation_point);
1107
96f2051215c8 Replaced calls to TRACE_sSA and sSA_DUMP_NODE* macros
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
993 fd_log_debug( " sstat_primary.spinfo_address : %s" , sa_buf);
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
994 fd_log_debug( " sstat_primary.spinfo_state : %d" , status.sstat_primary.spinfo_state);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
995 fd_log_debug( " sstat_primary.spinfo_cwnd : %u" , status.sstat_primary.spinfo_cwnd);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
996 fd_log_debug( " sstat_primary.spinfo_srtt : %u" , status.sstat_primary.spinfo_srtt);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
997 fd_log_debug( " sstat_primary.spinfo_rto : %u" , status.sstat_primary.spinfo_rto);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
998 fd_log_debug( " sstat_primary.spinfo_mtu : %u" , status.sstat_primary.spinfo_mtu);
1107
96f2051215c8 Replaced calls to TRACE_sSA and sSA_DUMP_NODE* macros
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
999 #endif /* 0 */
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1000
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1001 *in = status.sstat_instrms;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1002 *out = status.sstat_outstrms;
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1003
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1004 if (primary)
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1005 memcpy(primary, &status.sstat_primary.spinfo_address, sizeof(sSS));
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1006
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1007 return 0;
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1008 }
22
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
1009
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
1010 /* Get the list of remote endpoints of the socket */
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
1011 int fd_sctp_get_remote_ep(int sock, struct fd_list * list)
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
1012 {
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1013 union {
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1014 sSA *sa;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1015 uint8_t *buf;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1016 } ptr;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1017
60
04ae89829faa Initialize pointer
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 58
diff changeset
1018 sSA * data = NULL;
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1019 int count;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1020
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1021 TRACE_ENTRY("%d %p", sock, list);
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1022 CHECK_PARAMS(list);
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1023
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1024 /* Read the list on the socket */
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1025 CHECK_SYS( count = sctp_getpaddrs(sock, 0, &data) );
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1026 ptr.sa = data;
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
1027
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1028 while (count) {
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1029 socklen_t sl;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1030 switch (ptr.sa->sa_family) {
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1031 case AF_INET: sl = sizeof(sSA4); break;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1032 case AF_INET6: sl = sizeof(sSA6); break;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1033 default:
231
7ebe220d6572 Fix typo
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 228
diff changeset
1034 TRACE_DEBUG(INFO, "Unknown address family returned in sctp_getpaddrs: %d, skip", ptr.sa->sa_family);
222
c8ad11effa95 Added comment about bug in sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 221
diff changeset
1035 /* There is a bug in current Linux kernel: http://www.spinics.net/lists/linux-sctp/msg00760.html */
220
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
1036 goto stop;
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1037 }
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1038
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1039 CHECK_FCT( fd_ep_add_merge( list, ptr.sa, sl, EP_FL_LL ) );
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1040 ptr.buf += sl;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1041 count --;
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1042 }
220
5f2ce627db3c Try to fix the old bug on sctp_getpaddrs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 209
diff changeset
1043 stop:
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1044 /* Free the list */
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1045 sctp_freepaddrs(data);
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1046
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1047 /* Now get the primary address, the add function will take care of merging with existing entry */
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1048 {
193
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1049
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1050 struct sctp_status status;
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1051 socklen_t sz = sizeof(status);
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1052 int ret;
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1053
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1054 memset(&status, 0, sizeof(status));
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1055 /* Attempt to use SCTP_STATUS message to retrieve the primary address */
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1056 CHECK_SYS_DO( ret = getsockopt(sock, IPPROTO_SCTP, SCTP_STATUS, &status, &sz), /* continue */);
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1057 if (sz != sizeof(status))
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1058 ret = -1;
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1059 sz = sizeof(sSS);
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1060 if (ret < 0)
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1061 {
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1062 /* Fallback to getsockname -- not recommended by draft-ietf-tsvwg-sctpsocket-19#section-7.4 */
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1063 CHECK_SYS(getpeername(sock, (sSA *)&status.sstat_primary.spinfo_address, &sz));
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1064 }
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1065
ee247ce69349 Fix invalid use of SCTP_STATUS
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 192
diff changeset
1066 CHECK_FCT( fd_ep_add_merge( list, (sSA *)&status.sstat_primary.spinfo_address, sz, EP_FL_PRIMARY ) );
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1067 }
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1068
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1069 /* Done! */
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
1070 return 0;
23
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
1071 }
db6c40b8b307 Added some code in cnxctx.c mainly
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
1072
1186
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1175
diff changeset
1073 /* Send a vector over a specified stream */
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1175
diff changeset
1074 ssize_t fd_sctp_sendstrv(struct cnxctx * conn, uint16_t strid, const struct iovec *iov, int iovcnt)
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1075 {
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1076 struct msghdr mhdr;
486
65efe8ff2c30 Change creation of anciliary data to avoid padding, should close #12
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
1077 struct cmsghdr *hdr;
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1078 #ifdef OLD_SCTP_SOCKET_API
486
65efe8ff2c30 Change creation of anciliary data to avoid padding, should close #12
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
1079 struct sctp_sndrcvinfo *sndrcv;
65efe8ff2c30 Change creation of anciliary data to avoid padding, should close #12
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
1080 uint8_t anci[CMSG_SPACE(sizeof(struct sctp_sndrcvinfo))];
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1081 #else /* OLD_SCTP_SOCKET_API */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1082 struct sctp_sndinfo *sndinf;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1083 uint8_t anci[CMSG_SPACE(sizeof(struct sctp_sndinfo))];
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1084 #endif /* OLD_SCTP_SOCKET_API */
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1085 ssize_t ret;
1200
ce2b00dc86c1 React quickly to head-of-the-line blocking in case of network failure. Can be adapted with MAX_HOTL_BLOCKING_TIME constant in cnxctx.h
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
1086 struct timespec ts, now;
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1087
1186
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1175
diff changeset
1088 TRACE_ENTRY("%p %hu %p %d", conn, strid, iov, iovcnt);
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1175
diff changeset
1089 CHECK_PARAMS_DO(conn && iov && iovcnt, { errno = EINVAL; return -1; } );
1200
ce2b00dc86c1 React quickly to head-of-the-line blocking in case of network failure. Can be adapted with MAX_HOTL_BLOCKING_TIME constant in cnxctx.h
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
1090 CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &ts), return -1 );
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1091
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1092 memset(&mhdr, 0, sizeof(mhdr));
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1093 memset(&anci, 0, sizeof(anci));
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1094
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1095 /* Anciliary data: specify SCTP stream */
486
65efe8ff2c30 Change creation of anciliary data to avoid padding, should close #12
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
1096 hdr = (struct cmsghdr *)anci;
65efe8ff2c30 Change creation of anciliary data to avoid padding, should close #12
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
1097 hdr->cmsg_len = sizeof(anci);
65efe8ff2c30 Change creation of anciliary data to avoid padding, should close #12
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
1098 hdr->cmsg_level = IPPROTO_SCTP;
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1099 #ifdef OLD_SCTP_SOCKET_API
486
65efe8ff2c30 Change creation of anciliary data to avoid padding, should close #12
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
1100 hdr->cmsg_type = SCTP_SNDRCV;
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1101 sndrcv = (struct sctp_sndrcvinfo *)CMSG_DATA(hdr);
486
65efe8ff2c30 Change creation of anciliary data to avoid padding, should close #12
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
1102 sndrcv->sinfo_stream = strid;
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1103 #else /* OLD_SCTP_SOCKET_API */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1104 hdr->cmsg_type = SCTP_SNDINFO;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1105 sndinf = (struct sctp_sndinfo *)CMSG_DATA(hdr);
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1106 sndinf->snd_sid = strid;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1107 #endif /* OLD_SCTP_SOCKET_API */
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1108 /* note : we could store other data also, for example in .sinfo_ppid for remote peer or in .sinfo_context for errors. */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1109
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1110 /* We don't use mhdr.msg_name here; it could be used to specify an address different from the primary */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1111
1186
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1175
diff changeset
1112 mhdr.msg_iov = (struct iovec *)iov;
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1175
diff changeset
1113 mhdr.msg_iovlen = iovcnt;
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1114
486
65efe8ff2c30 Change creation of anciliary data to avoid padding, should close #12
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
1115 mhdr.msg_control = anci;
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1116 mhdr.msg_controllen = sizeof(anci);
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1117
1186
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1175
diff changeset
1118 TRACE_DEBUG(FULL, "Sending %d chunks of data (first:%zdb) on stream %hu of socket %d", iovcnt, iov[0].iov_len, strid, conn->cc_socket);
201
1b47afa59358 Also timeout on sends
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 196
diff changeset
1119 again:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
1120 ret = sendmsg(conn->cc_socket, &mhdr, 0);
201
1b47afa59358 Also timeout on sends
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 196
diff changeset
1121 /* Handle special case of timeout */
710
e60376cb15e8 Minor changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
1122 if ((ret < 0) && ((errno == EAGAIN) || (errno == EINTR))) {
e60376cb15e8 Minor changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
1123 pthread_testcancel();
1200
ce2b00dc86c1 React quickly to head-of-the-line blocking in case of network failure. Can be adapted with MAX_HOTL_BLOCKING_TIME constant in cnxctx.h
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
1124 /* Check how much time we were blocked for this sending. */
ce2b00dc86c1 React quickly to head-of-the-line blocking in case of network failure. Can be adapted with MAX_HOTL_BLOCKING_TIME constant in cnxctx.h
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
1125 CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &now), return -1 );
ce2b00dc86c1 React quickly to head-of-the-line blocking in case of network failure. Can be adapted with MAX_HOTL_BLOCKING_TIME constant in cnxctx.h
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
1126 if ( ((now.tv_sec - ts.tv_sec) * 1000 + ((now.tv_nsec - ts.tv_nsec) / 1000000L)) > MAX_HOTL_BLOCKING_TIME) {
ce2b00dc86c1 React quickly to head-of-the-line blocking in case of network failure. Can be adapted with MAX_HOTL_BLOCKING_TIME constant in cnxctx.h
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
1127 LOG_D("Unable to send any data for %dms, closing the connection", MAX_HOTL_BLOCKING_TIME);
ce2b00dc86c1 React quickly to head-of-the-line blocking in case of network failure. Can be adapted with MAX_HOTL_BLOCKING_TIME constant in cnxctx.h
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
1128 } else if (! fd_cnx_teststate(conn, CC_STATUS_CLOSING )) {
201
1b47afa59358 Also timeout on sends
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 196
diff changeset
1129 goto again; /* don't care, just ignore */
1b47afa59358 Also timeout on sends
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 196
diff changeset
1130 }
1200
ce2b00dc86c1 React quickly to head-of-the-line blocking in case of network failure. Can be adapted with MAX_HOTL_BLOCKING_TIME constant in cnxctx.h
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
1131
ce2b00dc86c1 React quickly to head-of-the-line blocking in case of network failure. Can be adapted with MAX_HOTL_BLOCKING_TIME constant in cnxctx.h
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
1132 /* propagate the error */
ce2b00dc86c1 React quickly to head-of-the-line blocking in case of network failure. Can be adapted with MAX_HOTL_BLOCKING_TIME constant in cnxctx.h
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
1133 errno = -ret;
ce2b00dc86c1 React quickly to head-of-the-line blocking in case of network failure. Can be adapted with MAX_HOTL_BLOCKING_TIME constant in cnxctx.h
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
1134 ret = -1;
201
1b47afa59358 Also timeout on sends
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 196
diff changeset
1135 }
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1136
1186
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1175
diff changeset
1137 CHECK_SYS_DO( ret, ); /* for tracing error only */
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1138
1186
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1175
diff changeset
1139 return ret;
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1140 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1141
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1142 /* Receive the next data from the socket, or next notification */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
1143 int fd_sctp_recvmeta(struct cnxctx * conn, uint16_t * strid, uint8_t ** buf, size_t * len, int *event)
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1144 {
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1145 ssize_t ret = 0;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1146 struct msghdr mhdr;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1147 char ancidata[ CMSG_BUF_LEN ];
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1148 struct iovec iov;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1149 uint8_t *data = NULL;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1150 size_t bufsz = 0, datasize = 0;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1151 size_t mempagesz = sysconf(_SC_PAGESIZE); /* We alloc buffer by memory pages for efficiency */
194
d1af490d6e85 Change in sockets options to avoid waiting forever on closing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 193
diff changeset
1152 int timedout = 0;
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1153
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
1154 TRACE_ENTRY("%p %p %p %p %p", conn, strid, buf, len, event);
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
1155 CHECK_PARAMS( conn && buf && len && event );
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1156
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1157 /* Cleanup out parameters */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1158 *buf = NULL;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1159 *len = 0;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1160 *event = 0;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1161
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1162 /* Prepare header for receiving message */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1163 memset(&mhdr, 0, sizeof(mhdr));
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1164 mhdr.msg_iov = &iov;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1165 mhdr.msg_iovlen = 1;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1166 mhdr.msg_control = &ancidata;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1167 mhdr.msg_controllen = sizeof(ancidata);
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1168
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1169 next_message:
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1170 datasize = 0;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1171
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1172 /* We will loop while all data is not received. */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1173 incomplete:
1102
1d7b3ebda27f Implemented the calls to HOOK_DATA_RECEIVED hook
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
1174 while (datasize >= bufsz ) {
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1175 /* The buffer is full, enlarge it */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1176 bufsz += mempagesz;
894
43fb27a9037f Intrumented socket reception to store the timestamp along the received buffer
Sebastien Decugis <sdecugis@freediameter.net>
parents: 817
diff changeset
1177 CHECK_MALLOC( data = realloc(data, bufsz ) );
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1178 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1179 /* the new data will be received following the preceding */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1180 memset(&iov, 0, sizeof(iov));
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1181 iov.iov_base = data + datasize ;
1102
1d7b3ebda27f Implemented the calls to HOOK_DATA_RECEIVED hook
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
1182 iov.iov_len = bufsz - datasize;
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1183
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1184 /* Receive data from the socket */
194
d1af490d6e85 Change in sockets options to avoid waiting forever on closing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 193
diff changeset
1185 again:
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1186 pthread_cleanup_push(free, data);
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
1187 ret = recvmsg(conn->cc_socket, &mhdr, 0);
710
e60376cb15e8 Minor changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
1188 pthread_testcancel();
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1189 pthread_cleanup_pop(0);
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1190
194
d1af490d6e85 Change in sockets options to avoid waiting forever on closing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 193
diff changeset
1191 /* First, handle timeouts (same as fd_cnx_s_recv) */
710
e60376cb15e8 Minor changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
1192 if ((ret < 0) && ((errno == EAGAIN) || (errno == EINTR))) {
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
1193 if (! fd_cnx_teststate(conn, CC_STATUS_CLOSING ))
194
d1af490d6e85 Change in sockets options to avoid waiting forever on closing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 193
diff changeset
1194 goto again; /* don't care, just ignore */
d1af490d6e85 Change in sockets options to avoid waiting forever on closing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 193
diff changeset
1195 if (!timedout) {
d1af490d6e85 Change in sockets options to avoid waiting forever on closing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 193
diff changeset
1196 timedout ++; /* allow for one timeout while closing */
d1af490d6e85 Change in sockets options to avoid waiting forever on closing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 193
diff changeset
1197 goto again;
d1af490d6e85 Change in sockets options to avoid waiting forever on closing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 193
diff changeset
1198 }
d1af490d6e85 Change in sockets options to avoid waiting forever on closing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 193
diff changeset
1199 /* fallback to normal handling */
d1af490d6e85 Change in sockets options to avoid waiting forever on closing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 193
diff changeset
1200 }
d1af490d6e85 Change in sockets options to avoid waiting forever on closing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 193
diff changeset
1201
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1202 /* Handle errors */
194
d1af490d6e85 Change in sockets options to avoid waiting forever on closing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 193
diff changeset
1203 if (ret <= 0) { /* Socket timedout, closed, or an error occurred */
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1204 CHECK_SYS_DO(ret, /* to log in case of error */);
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1205 free(data);
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1206 *event = FDEVP_CNX_ERROR;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1207 return 0;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1208 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1209
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1210 /* Update the size of data we received */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1211 datasize += ret;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1212
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1213 /* SCTP provides an indication when we received a full record; loop if it is not the case */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1214 if ( ! (mhdr.msg_flags & MSG_EOR) ) {
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1215 goto incomplete;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1216 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1217
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1218 /* Handle the case where the data received is a notification */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1219 if (mhdr.msg_flags & MSG_NOTIFICATION) {
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1220 union sctp_notification * notif = (union sctp_notification *) data;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1221
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 974
diff changeset
1222 TRACE_DEBUG(FULL, "Received %zdb data of notification on socket %d", datasize, conn->cc_socket);
68
f09247048015 Add stream information in debug messages
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 60
diff changeset
1223
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1224 switch (notif->sn_header.sn_type) {
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1225
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1226 case SCTP_ASSOC_CHANGE: /* We should not receive these as we did not subscribe for it */
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1227 TRACE_DEBUG(FULL, "Received SCTP_ASSOC_CHANGE notification");
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1228 TRACE_DEBUG(ANNOYING, " state : %hu", notif->sn_assoc_change.sac_state);
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1229 TRACE_DEBUG(ANNOYING, " error : %hu", notif->sn_assoc_change.sac_error);
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1230 TRACE_DEBUG(ANNOYING, " instr : %hu", notif->sn_assoc_change.sac_inbound_streams);
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1231 TRACE_DEBUG(ANNOYING, " outstr : %hu", notif->sn_assoc_change.sac_outbound_streams);
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1232
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1233 *event = FDEVP_CNX_EP_CHANGE;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1234 break;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1235
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1236 case SCTP_PEER_ADDR_CHANGE:
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1237 TRACE_DEBUG(FULL, "Received SCTP_PEER_ADDR_CHANGE notification");
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1238 /* TRACE_sSA(FD_LOG_DEBUG, ANNOYING, " intf_change : ", &(notif->sn_paddr_change.spc_aaddr), NI_NUMERICHOST | NI_NUMERICSERV, "" ); */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1239 TRACE_DEBUG(ANNOYING, " state : %d", notif->sn_paddr_change.spc_state);
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1240 TRACE_DEBUG(ANNOYING, " error : %d", notif->sn_paddr_change.spc_error);
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1241
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1242 *event = FDEVP_CNX_EP_CHANGE;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1243 break;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1244
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1245 case SCTP_REMOTE_ERROR:
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1246 TRACE_DEBUG(FULL, "Received SCTP_REMOTE_ERROR notification");
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1247 TRACE_DEBUG(ANNOYING, " err : %hu", ntohs(notif->sn_remote_error.sre_error));
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1248 TRACE_DEBUG(ANNOYING, " len : %hu", ntohs(notif->sn_remote_error.sre_length));
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1249
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1250 *event = FDEVP_CNX_ERROR;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1251 break;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1252
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1253 #ifdef OLD_SCTP_SOCKET_API
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1254 case SCTP_SEND_FAILED:
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1255 TRACE_DEBUG(FULL, "Received SCTP_SEND_FAILED notification");
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1256 TRACE_DEBUG(ANNOYING, " len : %hu", notif->sn_send_failed.ssf_length);
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1257 TRACE_DEBUG(ANNOYING, " err : %d", notif->sn_send_failed.ssf_error);
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1258
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1259 *event = FDEVP_CNX_ERROR;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1260 break;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1261 #else /* OLD_SCTP_SOCKET_API */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1262 case SCTP_SEND_FAILED_EVENT:
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1263 TRACE_DEBUG(FULL, "Received SCTP_SEND_FAILED_EVENT notification");
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1264 *event = FDEVP_CNX_ERROR;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1265 break;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1266 #endif /* OLD_SCTP_SOCKET_API */
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1267 case SCTP_SHUTDOWN_EVENT:
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1268 TRACE_DEBUG(FULL, "Received SCTP_SHUTDOWN_EVENT notification");
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1269
228
dcb58243e91f More cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 227
diff changeset
1270 *event = FDEVP_CNX_SHUTDOWN;
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1271 break;
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1272
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1273 #ifndef OLD_SCTP_SOCKET_API
1495
acbfec3df281 Fix SCTP build on Fedora 31
Luke Mewburn <luke@mewburn.net>
parents: 1474
diff changeset
1274 #ifdef SCTP_NOTIFICATIONS_STOPPED_EVENT
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1275 case SCTP_NOTIFICATIONS_STOPPED_EVENT:
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1276 TRACE_DEBUG(INFO, "Received SCTP_NOTIFICATIONS_STOPPED_EVENT notification, marking the association in error state");
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1277 *event = FDEVP_CNX_ERROR;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1278 break;
1495
acbfec3df281 Fix SCTP build on Fedora 31
Luke Mewburn <luke@mewburn.net>
parents: 1474
diff changeset
1279 #endif /* SCTP_NOTIFICATIONS_STOPPED_EVENT */
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1280 #endif /* OLD_SCTP_SOCKET_API */
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1281
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1282 default:
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1283 TRACE_DEBUG(FULL, "Received unknown notification %d, ignored", notif->sn_header.sn_type);
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1284 goto next_message;
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1285 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1286
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1287 free(data);
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1288 return 0;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1289 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1290
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1291 /* From this point, we have received a message */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1292 *event = FDEVP_CNX_MSG_RECV;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1293 *buf = data;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1294 *len = datasize;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1295
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1296 if (strid) {
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1297 struct cmsghdr *hdr;
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1298 #ifdef OLD_SCTP_SOCKET_API
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1299 struct sctp_sndrcvinfo *sndrcv;
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1300 #else /* OLD_SCTP_SOCKET_API */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1301 struct sctp_rcvinfo *rcvinf;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1302 #endif /* OLD_SCTP_SOCKET_API */
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1303
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1304 /* Handle the anciliary data */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1305 for (hdr = CMSG_FIRSTHDR(&mhdr); hdr; hdr = CMSG_NXTHDR(&mhdr, hdr)) {
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1306
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1307 /* We deal only with anciliary data at SCTP level */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1308 if (hdr->cmsg_level != IPPROTO_SCTP) {
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1309 TRACE_DEBUG(FULL, "Received some anciliary data at level %d, skipped", hdr->cmsg_level);
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1310 continue;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1311 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1312
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1313 #ifdef OLD_SCTP_SOCKET_API
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1314 /* Also only interested in SCTP_SNDRCV message for the moment */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1315 if (hdr->cmsg_type != SCTP_SNDRCV) {
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1316 TRACE_DEBUG(FULL, "Anciliary block IPPROTO_SCTP / %d, skipped", hdr->cmsg_type);
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1317 continue;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1318 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1319
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1320 sndrcv = (struct sctp_sndrcvinfo *) CMSG_DATA(hdr);
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1321 if (TRACE_BOOL(ANNOYING)) {
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1322 fd_log_debug( "Anciliary block IPPROTO_SCTP / SCTP_SNDRCV");
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1323 fd_log_debug( " sinfo_stream : %hu", sndrcv->sinfo_stream);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1324 fd_log_debug( " sinfo_ssn : %hu", sndrcv->sinfo_ssn);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1325 fd_log_debug( " sinfo_flags : %hu", sndrcv->sinfo_flags);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1326 /* fd_log_debug( " sinfo_pr_policy : %hu", sndrcv->sinfo_pr_policy); */
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1327 fd_log_debug( " sinfo_ppid : %u" , sndrcv->sinfo_ppid);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1328 fd_log_debug( " sinfo_context : %u" , sndrcv->sinfo_context);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1329 /* fd_log_debug( " sinfo_pr_value : %u" , sndrcv->sinfo_pr_value); */
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1330 fd_log_debug( " sinfo_tsn : %u" , sndrcv->sinfo_tsn);
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1331 fd_log_debug( " sinfo_cumtsn : %u" , sndrcv->sinfo_cumtsn);
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 27
diff changeset
1332 }
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1333
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1334 *strid = sndrcv->sinfo_stream;
1174
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1335 #else /* OLD_SCTP_SOCKET_API */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1336 /* Also only interested in SCTP_RCVINFO message for the moment */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1337 if (hdr->cmsg_type != SCTP_RCVINFO) {
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1338 TRACE_DEBUG(FULL, "Anciliary block IPPROTO_SCTP / %d, skipped", hdr->cmsg_type);
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1339 continue;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1340 }
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1341
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1342 rcvinf = (struct sctp_rcvinfo *) CMSG_DATA(hdr);
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1343
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1344 *strid = rcvinf->rcv_sid;
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1345 #endif /* OLD_SCTP_SOCKET_API */
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1346
b72836fb814b Add some compliancy to RFC6458. Not tested however as Ubuntu does not support this yet
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
1347
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1348 }
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 974
diff changeset
1349 TRACE_DEBUG(FULL, "Received %zdb data on socket %d, stream %hu", datasize, conn->cc_socket, *strid);
68
f09247048015 Add stream information in debug messages
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 60
diff changeset
1350 } else {
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 974
diff changeset
1351 TRACE_DEBUG(FULL, "Received %zdb data on socket %d (stream ignored)", datasize, conn->cc_socket);
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1352 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1353
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1354 return 0;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1355 }
"Welcome to our mercurial repository"