]> git.llucax.com Git - software/posixx.git/blob - src/linux/tipc/opt.hpp
Improve tipc::subscr construction
[software/posixx.git] / src / linux / tipc / opt.hpp
1 #ifndef POSIXX_LINUX_TIPC_OPT_HPP_
2 #define POSIXX_LINUX_TIPC_OPT_HPP_
3
4 #include <linux/tipc.h>
5
6 /// @file
7
8 namespace posixx { namespace linux { namespace tipc {
9
10 /**
11  * Specific options for TIPC sockets.
12  *
13  * @see tipc::socket::opt() and setsockopt(2) in TIPC documentation for more
14  * details.
15  */
16 namespace opt {
17
18 #define MKSOLOPT(O, T) \
19         struct O { \
20                 enum { \
21                         level   = SOL_TIPC, \
22                         optname = TIPC_ ## O, \
23                         read    = true, \
24                         write   = true }; \
25                 typedef T type; }
26
27 /**
28  * How to handle messages sent by the socket if link congestion occurs.
29  *
30  * If enabled, the message is discarded; otherwise the system queues the
31  * message for later transmission.
32  *
33  * By default, this option is disabled for socket::SEQPACKET, socket::STREAM,
34  * and socket::RDM socket types (resulting in "reliable" data transfer), and
35  * enabled for socket::DGRAM (resulting in "unreliable" data transfer).
36  */
37 MKSOLOPT(SRC_DROPPABLE, int);
38
39 /**
40  * How to handle messages sent by the socket if they cannot be delivered.
41  *
42  * This option governs the handling of messages sent by the socket if the
43  * message cannot be delivered to its destination, either because the receiver
44  * is congested or because the specified receiver does not exist. If enabled,
45  * the message is discarded; otherwise the message is returned to the sender.
46  *
47  * By default, this option is disabled for socket::SEQPACKET and socket::STREAM
48  * socket types, and enabled for socket::RDM and socket::DGRAM, This
49  * arrangement ensures proper teardown of failed connections when
50  * connection-oriented data transfer is used, without increasing the complexity
51  * of connectionless data transfer.
52  */
53 MKSOLOPT(DEST_DROPPABLE, int);
54
55 /**
56  * Number of ms connect() will wait before aborting a connection attempt.
57  *
58  * This option specifies the number of milliseconds socket::connect() will wait
59  * before aborting a connection attempt because the destination has not
60  * responded. By default, 8000 (i.e.  8 seconds) is used.
61  *
62  * This option has no effect when establishing connections using
63  * socket::sendto().
64  */
65 MKSOLOPT(CONN_TIMEOUT, int);
66
67 #undef MKSOLOPT
68
69 /// @see IMPORTANCE
70 enum importance
71 {
72         LOW      = TIPC_LOW_IMPORTANCE,      ///< Low importance
73         MEDIUM   = TIPC_MEDIUM_IMPORTANCE,   ///< Medium importance
74         HIGH     = TIPC_HIGH_IMPORTANCE,     ///< High importance
75         CRITICAL = TIPC_CRITICAL_IMPORTANCE  ///< Critical importance
76 };
77
78 /**
79  * How likely a message sent by the socket is to be affected by congestion.
80  *
81  * A message with higher importance is less likely to be delayed or dropped due
82  * to link congestion, and also less likely to be rejected due to receiver
83  * congestion. The following values are defined: ::LOW, ::MEDIUM, ::HIGH, and
84  * ::CRITICAL.
85  *
86  * By default, ::LOW is used for all TIPC socket types.
87  */
88 struct IMPORTANCE
89 {
90         typedef importance type;
91         enum
92         {
93                 level   = SOL_TIPC,
94                 optname = TIPC_IMPORTANCE,
95                 read    = true,
96                 write   = true
97         };
98 };
99
100 } } } } // namespace posixx::linux::tipc::opt
101
102 #endif // POSIXX_LINUX_TIPC_OPT_HPP_