1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
|
Release 1.0 - January 2003
SCTP Features Accessible Within ACE
-----------------------------------
* SOCK_STREAM (byte stream oriented) data transport service
* SOCK_SEQPACKET (message oriented) data transport service (this is
the service used by TAO's SCIOP pluggable protocol)
* Explicit control of binding network interfaces (all, one, or any
subset) to server-side passive- and active- mode sockets on
multi-homed machines. (for SOCK_SEQPACKET service only. The
SOCK_STREAM service may only bind one or all interfaces because we
avoided changing the interface of ACE_SOCK_Acceptor.)
* Setting and getting of all parameters exposed by SCTP
(e.g. retransmission timeout (RTO)) via ACE_SOCK::set_option(...)
and ACE_SOCK::get_option(...) for both SOCK_STREAM and
SOCK_SEQPACKET sockets
* Multiplexing of lightweight "SCTP Streams" and "SCTP Associations"
(over the SOCK_STREAM and SOCK_SEQPACKET services, respectively)
via ACE_SOCK::set_option(...)
* Network path multiplexing (provided opaquely by the protocol---no
explicit support required in ACE other than the ability to
configure various parameters and the set of interfaces as described
above)
Supported SCTP Implementations
------------------------------
* OpenSS7's Linux Implementation (Berkeley UNIX Network API)
(www.openss7.org)
BUGS
----
* OpenSS7 BUGS
- implementation is flaky for message sizes greater than PATH MTU
SIZE where message size includes SCTP and IP headers and data.
- Variably long delays in data transmission when
RTO_Init = RTO_Min = 0 and link failures are occurring.
- Strange "connection refused" errors (even though link and server
are up) when RTO_Min = RTO_Init = 0.
TO-DO
----
* Provide explicit control of binding network interfaces to
client-side active-mode sockets on multi-homed machines. Current
implementation supports all interfaces but not restriction to one
or to an arbitrary subset. (This will be done for SOCK_SEQPACKET
service only. We want to avoid changing the existing interfaces for
the SOCK_STREAM service).
* Integrate management and use of "SCTP Associations" into the
ACE_SOCK_SEQPACK_* wrapper-facade. (currently they can only be
accessed indirectly through ACE_SOCK::set_option(...))
* Support the Draft-API Standard for SCTP. Current implementation is
written to the Berkeley Unix Networking API that is used by the
OpenSS7 implementation for Linux.
* Support SOCK_RDM service within ACE.
Usage
-----
SOCK_STREAM - Use the ACE_SOCK_Connector, ACE_SOCK_Stream and
ACE_SOCK_Acceptor classes. In ACE_SOCK_Connector pass
the value IPPROTO_SCTP for the protocol parameter in
either the constructor or the connect(...) method
as shown in SOCK_STREAM_clt.cpp. In ACE_SOCK_Acceptor
pass the value IPPROTO_SCTP for the protocol parameter
in either the constructor or the open(...) method
as shown in SOCK_STREAM_srv.cpp.
You must include the file sctp.h in order for
IPPROTO_SCTP to be defined. The OpenSS7 implementation
for Linux places this file in
/usr/include/netinet.
Aside from these changes, the classes can be used as
they are under TCP (the protocol they use by
default). Be cautious to use SCTP protocol options when
setting socket options on SCTP sockets (e.g., use
SCTP_NODELAY, not TCP_NODELAY, to disable Nagle's
algorithm on an SCTP socket.)
SOCK_SEQPACKET - Use the ACE_SOCK_SEQPACK_Connector,
ACE_SOCK_SEQPACK_Association, and
ACE_SOCK_SEQPACK_Acceptor classes, which parallel
the familiar ACE_SOCK_Connector, ACE_SOCK_Stream,
and ACE_SOCK_Acceptor classes, respectively. Please
see SOCK_SEQPACK_clt.cpp and SOCK_SEQPACK_srv.cpp for
more details.
In the special case where you want to specify a set
of interfaces---other than one or all
interfaces---for an ACE_SOCK_SEQPACK_Acceptor, use
an ACE_Multihomed_INET_Addr in place of the familiar
ACE_INET_Addr. (See SOCK_SEQPACK_srv.cpp for an
example.)
SCTP associations may have more than one local and
more than one remote address bound to them.
Accordingly, ACE_SOCK_SEQPACK_Association provides
methods get_local_addrs(...) and
get_remote_addrs(...). These methods return the list
of local and remote addresses bound to an active
mode SCTP socket. Alternately, the familiar
ACE_SOCK::get_local_addr(...) and
ACE_SOCK::get_remote_addr(...) methods will work
properly with an active mode SCTP socket, but each
will only return a single address.
DESIGN
------
Explanation TBD. Class diagram TBD.
Here are the files under $(ACE_ROOT) that were either modified or
added. NO files were removed.
$(ACE_ROOT)/ace/ace_dll.dsp MODIFIED
$(ACE_ROOT)/ace/OS.h MODIFIED
$(ACE_ROOT)/ace/Makefile.ace MODIFIED
$(ACE_ROOT)/ace/SOCK_Connector.h MODIFIED
$(ACE_ROOT)/ace/SOCK_Connector.cpp MODIFIED
$(ACE_ROOT)/ace/SOCK_SEQPACK_Acceptor.h ADDED
$(ACE_ROOT)/ace/SOCK_SEQPACK_Acceptor.i ADDED
$(ACE_ROOT)/ace/SOCK_SEQPACK_Acceptor.cpp ADDED
$(ACE_ROOT)/ace/SOCK_SEQPACK_Connector.h ADDED
$(ACE_ROOT)/ace/SOCK_SEQPACK_Connector.i ADDED
$(ACE_ROOT)/ace/SOCK_SEQPACK_Connector.cpp ADDED
$(ACE_ROOT)/ace/SOCK_SEQPACK_Association.h ADDED
$(ACE_ROOT)/ace/SOCK_SEQPACK_Association.i ADDED
$(ACE_ROOT)/ace/SOCK_SEQPACK_Association.cpp ADDED
$(ACE_ROOT)/ace/Multihomed_INET_Addr.h ADDED
$(ACE_ROOT)/ace/Multihomed_INET_Addr.i ADDED
$(ACE_ROOT)/ace/Multihomed_INET_Addr.cpp ADDED
$(ACE_ROOT)/bin/PerlACE/Process_Unix.pm MODIFIED
$(ACE_ROOT)/bin/PerlACE/Process_Win32.pm MODIFIED
$(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU MODIFIED
$(ACE_ROOT)/include/makeinclude/platform_linux.GNU MODIFIED
$(ACE_ROOT)/tests/Makefile MODIFIED
$(ACE_ROOT)/tests/Multihomed_INET_Addr_Test.cpp ADDED
$(ACE_ROOT)/tests/Multihomed_INET_Addr_Test.dsp ADDED
$(ACE_ROOT)/tests/SOCK_SEQPACK_Association_Test.cpp ADDED
$(ACE_ROOT)/tests/SOCK_SEQPACK_Association_Test.dsp ADDED
$(ACE_ROOT)/tests/run_test.lst MODIFIED
$(ACE_ROOT)/tests/run_tests.bat MODIFIED
$(ACE_ROOT)/tests/tests.dsw MODIFIED
$(ACE_ROOT)/performance-tests/SCTP/THANKS ADDED
$(ACE_ROOT)/performance-tests/SCTP/README ADDED
$(ACE_ROOT)/performance-tests/SCTP/README.SCTP ADDED
$(ACE_ROOT)/performance-tests/SCTP/README.SCTP_in_ACE ADDED
$(ACE_ROOT)/performance-tests/SCTP/README.SCTP_PERF_TEST ADDED
$(ACE_ROOT)/performance-tests/SCTP/Makefile ADDED
$(ACE_ROOT)/performance-tests/SCTP/run_spectrum.pl ADDED
$(ACE_ROOT)/performance-tests/SCTP/hist.h ADDED
$(ACE_ROOT)/performance-tests/SCTP/hist.cpp ADDED
$(ACE_ROOT)/performance-tests/SCTP/Options_Manager.h ADDED
$(ACE_ROOT)/performance-tests/SCTP/Options_Manager.cpp ADDED
$(ACE_ROOT)/performance-tests/SCTP/SOCK_STREAM_clt.cpp ADDED
$(ACE_ROOT)/performance-tests/SCTP/SOCK_STREAM_srv.cpp ADDED
$(ACE_ROOT)/performance-tests/SCTP/SOCK_SEQPACK_clt.cpp ADDED
$(ACE_ROOT)/performance-tests/SCTP/SOCK_SEQPACK_srv.cpp ADDED
|