Age | Commit message (Collapse) | Author |
|
Added support for the SCTP option RTOINFO.
We have the same questions for this option as for ASSOCINFO.
Maybe the assoc field shall be made 'out' only (that is, it will
be ignored for setopt). The assoc id used will be that which
is stored in the descriptor (how do we get it to begin with?).
Questions, questions...
OTP-14831
|
|
Added support for the SCTP option ASSOCINFO.
This option is a bit tricky. As the underlying structure (sctp_assocparams)
contains the assoc_id, it begs the question what happens if this option
is fetched for:
* The own assoc (which means that we might have the assoc id in the
descriptor and can initiate that part of the struct accordningly).
* Another assoc: From assoc A asks for info with assoc_id set to
that of assoc B.
* The "owning" endpoint.
* Another endpoint (an endpoint to which the assoc does not belong).
So, if the user calls socket:[getopt|setopt] for an association socket,
shall we require that the assoc_id field is set to -1? Or not set at all
and therefor filled in automatically by the nif-code?
And, if the user calls socket:[getopt|setopt] for an endpoint socket,
shall we require that the assoc_id field is set to a valid id? Or shall
it not be allowed?
Questions, questions...
OTP-14831
|
|
Added support for the SCTP option DISABLE_FRAGMENTS.
OTP-14831
|
|
Added support for the SCTP option EVENTS.
OTP-14831
|
|
Added support for the VPv6 socket option MTU_DISCOVER.
OTP-14831.
|
|
Added support for the VPv6 socket option MTU.
OTP-14831.
|
|
Added support for the IPv6 option V6ONLY.
OTP-14831
|
|
Added default for code un-implemented TCP socket options.
OTP-14831
|
|
Its now possible to have multiple (simultaneous) acceptor
processes for the same listening socket.
OTP-14831
|
|
Added support for socket level socket option REUSEPORT.
OTP-14831
|
|
Added support for socket level socket option BINDTODEVICE.
OTP-14831
|
|
Added support for the IPv6 options ADD_MEMBERSHIP, DROP_MEMBERSHIP
OTP-14831
|
|
Added support for the IP option MINTTL.
OTP-14831
|
|
Added support for the IP option RECVIF.
OTP-14831
|
|
Added support for the IP options:
ADD_SOURCE_MEMBERSHIP, DROP_SOURCE_MEMBERSHIP, BLOCK_SOURCE and UNBLOCK_SOURCE.
OTP-14831
|
|
Added support for the IP option RECVTTL.
OTP-14831
|
|
Added support for the IP option NODEFRAG.
OTP-14831
|
|
Added support for the IP option MULTICAST_ALL.
OTP-14831
|
|
Added support for the IP option MTU_DISCOVER.
OTP-14831
|
|
Added support for the IP option MTU.
OTP-14831
|
|
Added support for the socket options (level ip) add_membership and
drop_membership.
OTP-14831
|
|
Added support for the IP option MULTICAST_IF.
OTP-14831
|
|
Added support for the IP option MULTICAST_TTL.
OTP-14831
|
|
Added support for the IP option MULTICAST_LOOP.
OTP-14831
|
|
Added support for socket level socket option oobinline (both get
and set).
OTP-14831
|
|
The socket option (level socket) peek_off is now supported.
OTP-14831
|
|
The socket option (level socket) debug is now supported.
To actually set this option, the user must have the proper
"authority" (CAP_NET_ADMIN capability or an effective user ID of 0).
OTP-14831
|
|
The socket (level socket) option acceptconn is now supported
(for getopt).
OTP-14831
|
|
Make it possible to *get* the socket options domain and
protocol (in addition to type).
OTP-14831
|
|
Added doc for the net module.
Also some socket-nif cleanup.
OTP-14831
|
|
Updated the documentation of recv, recvfrom, send and sendto.
Also added doc for functions peername and sockname.
OTP-14831
|
|
Fixed handling of recvfrom (used by dgram sockets).
Had forgot to do select(read) when we got block from
the call to recvfrom. Argh!
Also updated the (simple) test server and client to to
be able to use udp (dgram+udp).
OTP-14831
|
|
Fixed handling of closed in the recv function.
We still need to properly handle when we get
0 bytes of data for other types ock sockets
then stream (its valid for dgram for instance).
OTP-14831
|
|
The common stuff, like decode and encode of common types
(soch as socket address), has been moved into a util file
(socket_util). The debug stuff has also been moved into its
own file. Also introduced a common include file for common
macros and types.
OTP-14831
|
|
|
|
And now fixed the getnameinfo function.
OTP-14831
|
|
|
|
Added a command function, which is currently only used
to enable and disable debug, which is also added.
|
|
The net (nif) module now actually loads (automatically)
when the VM is started (*on linux*).
Now we must make sure it *actually* works, and implement
the rest of the stuff...
|
|
Added (some) use of the debug printouts in (nif-) open
and bind. Also fixed handling of the address argument
in the bind function(s) (since it was changed to be
of the in_sockaddr()).
OTP-14831
|
|
The map returned by the info function is now populated
with the "global stuff". That is, debug, iow and the
(global) counters (which are still not actually incremented).
Also added debug functions and macros (not yet used).
OTP-14831
|
|
|
|
|
|
|
|
|
|
* raimo/receive-TOS-TCLASS/ERIERL-187/OTP-15145:
Write testcases for recvtos and friends
Fix term buffer overflow bug
Fix documentation due to feedback
Implement socket option recvtos and friends
|
|
* maint:
Improve trapping in lists:reverse/2
Fix unsafe use of lists:reverse/1
|
|
We said reverse/2 but used reverse/1 which is unsafe to use in
preloaded modules. This didn't have any effect in practice as the
affected functions weren't used before the code server was started,
but it's still an error.
|
|
Implement socket options recvtclass, recvtos, recvttl and pktoptions.
Document the implemented socket options, new types and message formats.
The options recvtclass, recvtos and recvttl are boolean options that
when activated (true) for a socket will cause ancillary data to be
received through recvmsg(). That is for packet oriented sockets
(UDP and SCTP).
The required options for this feature were recvtclass and recvtos,
and recvttl was only added to test that the ancillary data parsing
handled multiple data items in one message correctly.
These options does not work on Windows since ancillary data
is not handled by the Winsock2 API.
For stream sockets (TCP) there is no clear connection between
a received packet and what is returned when reading data from
the socket, so recvmsg() is not useful. It is possible to get
the same ancillary data through a getsockopt() call with
the IPv6 socket option IPV6_PKTOPTIONS, on Linux named
IPV6_2292PKTOPTIONS after the now obsoleted RFC where it originated.
(unfortunately RFC 3542 that obsoletes it explicitly undefines
this way to get packet ancillary data from a stream socket)
Linux also has got a way to get packet ancillary data for IPv4
TCP sockets through a getsockopt() call with IP_PKTOPTIONS,
which appears to be Linux specific.
This implementation uses a flag field in the inet_drv.c socket
internal data that records if any setsockopt() call with recvtclass,
recvtos or recvttl (IPV6_RECVTCLASS, IP_RECVTOS or IP_RECVTTL)
has been activated. If so recvmsg() is used instead of recvfrom().
Ancillary data is delivered to the application by a new return
tuple format from gen_udp:recv/2,3 containing a list of
ancillary data tuples [{tclass,TCLASS} | {tos,TOS} | {ttl,TTL}],
as returned by recvmsg(). For a socket in active mode a new
message format, containing the ancillary data list, delivers
the data in the same way.
For gen_sctp the ancillary data is delivered in the same way,
except that the gen_sctp return tuple format already contained
an ancillary data list so there are just more possible elements
when using these socket options. Note that the active mode
message format has got an extra tuple level for the ancillary
data compared to what is now implemented gen_udp.
The gen_sctp active mode format was considered to be the odd one
- now all tuples containing ancillary data are flat,
except for gen_sctp active mode.
Note that testing has not shown that Linux SCTP sockets deliver
any ancillary data for these socket options, so it is probably
not implemented yet. Remains to be seen what FreeBSD does...
For gen_tcp inet:getopts([pktoptions]) will deliver the latest
received ancillary data for any activated socket option recvtclass,
recvtos or recvttl, on platforms where IP_PKTOPTIONS is defined
for an IPv4 socket, or where IPV6_PKTOPTIONS or IPV6_2292PKTOPTIONS
is defined for an IPv6 socket. It will be delivered as a
list of ancillary data items in the same way as for gen_udp
(and gen_sctp).
On some platforms, e.g the BSD:s, when you activate IP_RECVTOS
you get ancillary data tagged IP_RECVTOS with the TOS value,
but on Linux you get ancillary data tagged IP_TOS with the
TOS value. Linux follows the style of RFC 2292, and the BSD:s
use an older notion. For RFC 2292 that defines the IP_PKTOPTIONS
socket option it is more logical to tag the items with the
tag that is the item's, than with the tag that defines that you
want the item. Therefore this implementation translates all
BSD style ancillary data tags to the corresponding Linux style
data tags, so the application will only see the tags 'tclass',
'tos' and 'ttl' on all platforms.
|
|
|