diff options
Diffstat (limited to 'doc/man')
| -rw-r--r-- | doc/man/CMakeLists.txt | 58 | ||||
| -rw-r--r-- | doc/man/flow_alloc.3 | 88 | ||||
| -rw-r--r-- | doc/man/flow_read.3 | 46 | ||||
| -rw-r--r-- | doc/man/fqueue.3 | 21 | ||||
| -rw-r--r-- | doc/man/ouroboros.8 | 43 |
5 files changed, 180 insertions, 76 deletions
diff --git a/doc/man/CMakeLists.txt b/doc/man/CMakeLists.txt deleted file mode 100644 index add68d62..00000000 --- a/doc/man/CMakeLists.txt +++ /dev/null @@ -1,58 +0,0 @@ -set(MAN_NAMES - # Add man page sources here - flow_accept.3 - flow_alloc.3 - flow_dealloc.3 - flow_read.3 - flow_write.3 - fccntl.3 - fqueue.3 - fqueue_create.3 - fqueue_destroy.3 - fqueue_next.3 - fevent.3 - fset.3 - fset_create.3 - fset_destroy.3 - fset_zero.3 - fset_add.3 - fset_del.3 - fset_has.3 - ouroboros-glossary.7 - ouroboros-tutorial.7 - ouroboros.8 - irmd.8 - irm.8 - ) - -macro(INSTALL_MAN __mans) - foreach (_man ${ARGV}) - string(REGEX REPLACE "^.+[.]([1-9]).gz" "\\1" _mansect ${_man}) - install(FILES ${_man} DESTINATION "${CMAKE_INSTALL_MANDIR}/man${_mansect}") - endforeach (_man) -endmacro(INSTALL_MAN __mans) - -find_program(GZIP_EXECUTABLE - NAMES gzip - DOC "Will gzip the man pages") - -mark_as_advanced(GZIP_EXECUTABLE) - -if (GZIP_EXECUTABLE) - foreach (m ${MAN_NAMES}) - set(md ${CMAKE_CURRENT_BINARY_DIR}/${m}.gz) - - add_custom_command( - OUTPUT ${md} - COMMAND ${GZIP_EXECUTABLE} - ARGS -c ${CMAKE_CURRENT_SOURCE_DIR}/${m} > ${md} - COMMENT "Compressing manpage ${m}" - VERBATIM) - - set(MAN_FILES ${MAN_FILES} ${md}) - endforeach () - - add_custom_target(man ALL DEPENDS ${MAN_FILES}) - - INSTALL_MAN(${MAN_FILES}) -endif () diff --git a/doc/man/flow_alloc.3 b/doc/man/flow_alloc.3 index dbe5323c..8a9b5f5b 100644 --- a/doc/man/flow_alloc.3 +++ b/doc/man/flow_alloc.3 @@ -62,10 +62,60 @@ The \fBflow_dealloc\fR() function will release any resources associated with the flow. This call may block and keep reliable flows active until all packets are acknowledged. -A \fBqosspec_t\fR specifies the following QoS characteristics of a -flow: - -TODO: specify a qosspec_t +A \fBqosspec_t\fR specifies the QoS characteristics of a flow. +The fields are: + +.TP +\fBdelay\fR (ms) +Maximum one-way delay. +.TP +\fBbandwidth\fR (bits/s) +Minimum bandwidth. +.TP +\fBavailability\fR +Class of 9s (e.g. 5 = 99.999%). +.TP +\fBloss\fR +Tolerated packet loss; 0 selects reliable delivery. +.TP +\fBber\fR +Tolerated bit error rate (errors per billion bits); 0 enables an +end-to-end integrity check (corrupted packets are dropped). +.TP +\fBservice\fR +Framing / reliability class: \fBSVC_RAW\fR (0) disables FRCT; +\fBSVC_MESSAGE\fR (1) preserves SDU boundaries; \fBSVC_STREAM\fR (2) is +a byte stream with no SDU boundaries. \fBSVC_STREAM\fR requires +\fIloss\fR = 0; otherwise +\fBflow_alloc\fR()/\fBflow_accept\fR() returns \fB-EINVAL\fR. +.TP +\fBmax_gap\fR (ms) +Maximum tolerated inter-packet gap. Packets exceeding the gap +budget are dropped under the real-time cubes. +.TP +\fBtimeout\fR (ms) +Peer-liveness timeout; 0 disables. Only applies when FRCT is +enabled (service > 0). + +.PP +The library provides predefined cubes: + +.TP +\fBqos_raw\fR +No guarantees, no integrity check. +.TP +\fBqos_raw_safe\fR +Best-effort with end-to-end integrity (ber = 0). +.TP +\fBqos_rt\fR / \fBqos_rt_safe\fR +Real-time messages, optimised for latency over reliability; +\fBqos_rt_safe\fR adds an end-to-end integrity check. +.TP +\fBqos_msg\fR +Reliable, SDU-preserving delivery. +.TP +\fBqos_stream\fR +Reliable byte stream; no SDU boundaries are preserved. .SH RETURN VALUE @@ -117,13 +167,39 @@ _ \fBflow_dealloc\fR() & Thread safety & MT-Safe .TE +.SH NOTES +The returned file descriptor is subject to a single-reader and +single-writer discipline \(em at most one thread may call +.BR flow_read () +(or monitor the fd via +.BR fevent ()) +and at most one thread may call +.BR flow_write () +concurrently. See +.BR flow_read (3), +.BR flow_write (3), +and +.BR fevent (3) +for details. +.PP +.BR flow_dealloc () +must not be called concurrently with any thread that is inside +.BR flow_read (), +.BR flow_write (), +.BR fevent (), +or any other Ouroboros library call on the same fd; the result is +undefined behaviour. Applications must serialise teardown with +in-flight use, e.g. by signalling worker threads to drop the fd +before calling +.BR flow_dealloc (). + .SH TERMINOLOGY Please see \fBouroboros-glossary\fR(7). .SH SEE ALSO -.BR fccntl "(3), " flow_read "(3), " fqueue "(3), " fset "(3), " \ -ouroboros (8) +.BR fccntl "(3), " fevent "(3), " flow_read "(3), " flow_write "(3), " \ +fqueue "(3), " fset "(3), " ouroboros (8) .SH COLOPHON This page is part of the Ouroboros project, found at diff --git a/doc/man/flow_read.3 b/doc/man/flow_read.3 index acc1f61e..d4a5e883 100644 --- a/doc/man/flow_read.3 +++ b/doc/man/flow_read.3 @@ -39,8 +39,7 @@ end of the datagram. On success, \fBflow_write\fR() returns the number of bytes written. On failure, a negative value indicating the error will be returned. -Partial writes needs to be explicitly enabled. Passing a -NULL pointer for \fIbuf\fR returns 0 with no other effects. +Passing a NULL pointer for \fIbuf\fR returns 0 with no other effects. .SH ERRORS .B -EINVAL @@ -62,7 +61,8 @@ The flow has been reported down. The flow's peer is unresponsive (flow timed out). .B -EMSGSIZE -The buffer was too large to be written. +The received packet does not fit in the caller's buffer and partial +reads are disabled (see \fBfccntl\fR(3), \fBFLOWFRNOPART\fR). .SH ATTRIBUTES @@ -74,11 +74,47 @@ LB|LB|LB L|L|L. Interface & Attribute & Value _ -\fBflow_read\fR() & Thread safety & MT-Safe +\fBflow_read\fR() & Thread safety & MT-Safe race:fd _ -\fBflow_write\fR() & Thread safety & MT-Safe +\fBflow_write\fR() & Thread safety & MT-Safe race:fd .TE +.SH THREAD SAFETY +Only one thread may call +.BR flow_read () +on a given file descriptor at any time. Partial-read state kept +across calls assumes a single logical reader; two threads racing +.BR flow_read () +on the same fd is undefined behaviour. Likewise, only one thread +may call +.BR flow_write () +on a given fd at a time; two writer threads on the same fd is +undefined behaviour. +.PP +Combining a writer thread with a reader thread (one thread calling +.BR flow_write (), +another calling +.BR flow_read () +or +.BR fevent ()) +is permitted and safe. The writer does not need a dedicated reader +thread \(em when the FRCT send window fills, +.BR flow_write () +drives its own inbound rx draining internally to process incoming +ACKs and reopen the window, clamped by the caller's +.BR fccntl (3) +send-timeout if any. +.PP +Monitoring the same fd via +.BR fevent () +from a different thread is well-defined but races: events reported +by +.BR fevent () +may already have been consumed by the racing +.BR flow_read (), +so the second reader may then block. See +.BR fevent (3). + .SH TERMINOLOGY Please see \fBouroboros-glossary\fR(7). diff --git a/doc/man/fqueue.3 b/doc/man/fqueue.3 index 72a0bc25..f2fb8c9f 100644 --- a/doc/man/fqueue.3 +++ b/doc/man/fqueue.3 @@ -116,6 +116,27 @@ _ \fBfevent\fR() & Thread safety & MT-Safe .TE +.SH THREAD SAFETY +.BR fevent () +and +.BR flow_read () +on the same fd from distinct threads is well-defined but races: +events reported by +.BR fevent () +may already have been consumed by the racing +.BR flow_read (), +so the reader may then block. Same shape as +.BR select (2) ++ +.BR read (2) +from distinct threads. The intended pattern is that the thread +invoking +.BR fevent () +is the same thread that calls +.BR flow_read () +on the fds returned by +.BR fqueue_next (). + .SH TERMINOLOGY Please see \fBouroboros-glossary\fR(7). diff --git a/doc/man/ouroboros.8 b/doc/man/ouroboros.8 index df328fcc..759b1433 100644 --- a/doc/man/ouroboros.8 +++ b/doc/man/ouroboros.8 @@ -127,7 +127,9 @@ creates an IPCP process of type \fItype\fR in the system with name .PP \fBeth-dix\fR - create an IPCP that attaches to Ethernet using DIX frames. .PP -\fBudp\fR - create an IPCP that attaches to a UDP socket. +\fBudp4\fR - create an IPCP that attaches to a UDP/IPv4 socket. +.PP +\fBudp6\fR - create an IPCP that attaches to a UDP/IPv6 socket. .PP \fBunicast\fR - create a unicast IPCP that uses lower level layers. .PP @@ -190,17 +192,17 @@ default: SHA3_256. .RE .PP -\fBudp\fR +\fBudp4\fR .RS 4 .PP -ip \fIip\fR specifies the local IP address to bind to +ip \fIip\fR specifies the local IPv4 address to bind to .PP [dns \fIdns\fR] specifies an optional DDNS server that will be used for the directory. .PP [port \fIport\fR] specifies a UDP port that is used for sending and -receiving ouroboros traffic. This must be the same for the entire UDP -layer. Parallel UDP layers should use different ports. This UDP port +receiving ouroboros traffic. This must be the same for the entire UDP4 +layer. Parallel UDP4 layers should use different ports. This UDP port needs to be forwarded if the server is behind a NAT and wants to receive incoming requests. .br @@ -208,6 +210,22 @@ default: 3435 .RE .PP +\fBudp6\fR +.RS 4 +.PP +ip \fIip\fR specifies the local IPv6 address to bind to +.PP +[dns \fIdns\fR] specifies an optional DDNS server that will be used for +the directory. +.PP +[port \fIport\fR] specifies a UDP port that is used for sending and +receiving ouroboros traffic. This must be the same for the entire UDP6 +layer. Parallel UDP6 layers should use different ports. +.br +default: 3435 +.RE + +.PP \fBunicast\fR .RS 4 .PP @@ -370,12 +388,23 @@ not accept future flow allocation requests for \fIname\fR. .SH IRM NAME COMMANDS .PP -\fBirm name create \fIname\fR \fIlb\fR policy +\fBirm name create \fIname\fR lb \fIpolicy\fR +[sencpath \fI/path/to/server/enc.conf\fR] +[scrtpath \fI/path/to/server/crt.pem\fR] +[skeypath \fI/path/to/server/key.pem\fR] + +[cencpath \fI/path/to/client/enc.conf\fR] +[ccrtpath \fI/path/to/client/crt.pem\fR] +[ckeypath \fI/path/to/client/key.pem\fR] .RS 4 -Create a name \fIname\fR with a load-balancing policy +Create a name \fIname\fR with a load-balancing policy and security credentials .br \fIpolicy\fR: round-robin, spillover .br +\fI/path/to/enc.conf\fR: The path to the server and client encryption configuration. +\fI/path/to/pem\fR: The path to the server and client certificates and +private keys, in pem format. +.br .RE .PP |
