Mercurial > hg > freeDiameter
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 |
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 | 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 | 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 | 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 | 1122 if ((ret < 0) && ((errno == EAGAIN) || (errno == EINTR))) { |
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 | 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 | 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 | 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 } |