annotate libfdcore/sctp.c @ 1327:82b386714795

Set callback data also when only setting expire callback (and not answer callback as well). It is used when calling the expire callback, so not setting it makes no sense.
author Thomas Klausner <tk@giga.or.at>
date Mon, 27 Nov 2017 15:21:20 +0100
parents 25fad6714991
children b75556f40346
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 */
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
51 #if (!defined(SCTP_CONNECTX_4_ARGS) || (!defined(SCTP_RECVRCVINFO)) || (!defined(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
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 */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
85 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_RTOINFO, &rtoinfo, &sz) );
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 */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
105 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, 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 */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
124 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_ASSOCINFO, &assoc, &sz) );
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 */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
145 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, 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 */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
321 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, &parms, &sz) );
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 */
8ccbfdb49f1c Adjustments on the SCTP parameters
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 77
diff changeset
350 CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, 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);
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
403 fd_log_debug( " sctp_adaptation_layer_event : %hhu", event.sctp_adaptation_layer_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
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
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
1274 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
1275 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
1276 *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
1277 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
1278 #endif /* OLD_SCTP_SOCKET_API */
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1279
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1280 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
1281 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
1282 goto next_message;
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1283 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1284
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1285 free(data);
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1286 return 0;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1287 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1288
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1289 /* From this point, we have received a message */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1290 *event = FDEVP_CNX_MSG_RECV;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1291 *buf = data;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1292 *len = datasize;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1293
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1294 if (strid) {
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1295 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
1296 #ifdef OLD_SCTP_SOCKET_API
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1297 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
1298 #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
1299 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
1300 #endif /* OLD_SCTP_SOCKET_API */
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1301
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1302 /* Handle the anciliary data */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1303 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
1304
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1305 /* We deal only with anciliary data at SCTP level */
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1306 if (hdr->cmsg_level != IPPROTO_SCTP) {
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1307 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
1308 continue;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1309 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1310
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
1311 #ifdef OLD_SCTP_SOCKET_API
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1312 /* 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
1313 if (hdr->cmsg_type != SCTP_SNDRCV) {
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1314 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
1315 continue;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1316 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1317
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1318 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
1319 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
1320 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
1321 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
1322 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
1323 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
1324 /* 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
1325 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
1326 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
1327 /* 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
1328 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
1329 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
1330 }
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1331
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1332 *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
1333 #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
1334 /* 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
1335 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
1336 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
1337 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
1338 }
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
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 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
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 *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
1343 #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
1344
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
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1346 }
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 974
diff changeset
1347 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
1348 } else {
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 ignored)", datasize, conn->cc_socket);
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1350 }
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1351
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1352 return 0;
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
1353 }
"Welcome to our mercurial repository"