.\" Automatically generated by Pod::Man 4.07 (Pod::Simple 3.32) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .if !\nF .nr F 0 .if \nF>0 \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "ici::doc::pod3::ion 3" .TH ici::doc::pod3::ion 3 "2016-07-07" "perl v5.24.1" "ICI library functions" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ion \- Interplanetary Overlay Network common definitions and functions .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& #include "ion.h" \& \& [see description for available functions] .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" The Interplanetary Overlay Network (\s-1ION\s0) software distribution is an implementation of Delay-Tolerant Networking (\s-1DTN\s0) architecture as described in Internet \s-1RFC 4838. \s0 It is designed to enable inexpensive insertion of \&\s-1DTN\s0 functionality into embedded systems such as robotic spacecraft. The intent of \s-1ION\s0 deployment in space flight mission systems is to reduce cost and risk in mission communications by simplifying the construction and operation of automated digital data communication networks spanning space links, planetary surface links, and terrestrial links. .PP The \s-1ION\s0 distribution comprises the following software packages: .Sp .RS 4 \&\fIici\fR (Interplanetary Communication Infrastructure), a set of general-purpose libraries providing common functionality to the other packages. .Sp \&\fIltp\fR (Licklider Transmission Protocol), a core \s-1DTN\s0 protocol that provides transmission reliability based on delay-tolerant acknowledgments, timeouts, and retransmissions. .Sp \&\fIbp\fR (Bundle Protocol), a core \s-1DTN\s0 protocol that provides delay-tolerant forwarding of data through a network in which continuous end-to-end connectivity is never assured, including support for delay-tolerant dynamic routing. The Bundle Protocol (\s-1BP\s0) specification is defined in Internet \s-1RFC 5050.\s0 .Sp \&\fIdgr\fR (Datagram Retransmission), a library that enables data to be transmitted via \s-1UDP\s0 with reliability comparable to that provided by \s-1TCP. DGR\s0 is an alternative implementation of \s-1LTP,\s0 designed for use within an internet. .Sp \&\fIams\fR (Asynchronous Message Service), \fIcfdp\fR (\s-1CCSDS\s0 File Delivery Protocol), and \fIbss\fR (Bundle Streaming Service), application-layer services that are not part of the \s-1DTN\s0 architecture but utilize underlying \s-1DTN\s0 protocols. .RE .PP Taken together, the packages included in the \s-1ION\s0 software distribution constitute a communication capability characterized by the following operational features: .Sp .RS 4 Reliable conveyance of data over a \s-1DTN,\s0 i.e., a network in which it might never be possible for any node to have reliable information about the detailed current state of any other node. .Sp Built on this capability, reliable distribution of short messages to multiple recipients (subscribers) residing in such a network. .Sp Management of traffic through such a network. .Sp Facilities for monitoring the performance of the network. .Sp Robustness against node failure. .Sp Portability across heterogeneous computing platforms. .Sp High speed with low overhead. .Sp Easy integration with heterogeneous underlying communication infrastructure, ranging from Internet to dedicated spacecraft communication links. .RE .PP While most of the ici package consists of libraries providing functionality that may be of general utility in any complex embedded software system, the functions and macros described below are specifically designed to support operations of \s-1ION\s0's delay-tolerant networking protocol stack. .IP "\s-1TIMESTAMPBUFSZ\s0" 4 .IX Item "TIMESTAMPBUFSZ" This macro returns the recommended size of a buffer that is intended to contain a timestamp in ION-standard format: .RS 4 .Sp .RS 4 yyyy/mm/dd\-hh:mm:ss .RE .RE .RS 4 .RE .IP "int \fIionAttach()\fR" 4 .IX Item "int ionAttach()" Attaches the invoking task to \s-1ION\s0 infrastructure as previously established by running the \fIionadmin\fR utility program on the same computer. Returns zero on success, \-1 on any error. .IP "void \fIionDetach()\fR" 4 .IX Item "void ionDetach()" Detaches the invoking task from \s-1ION\s0 infrastructure. In particular, releases handle allocated for access to \s-1ION\s0's non-volatile database. \fB\s-1NOTE\s0\fR, though, that \fIionDetach()\fR has no effect when the invoking task is running in a non-memory-protected environment, such as VxWorks, where all \s-1ION\s0 resource access variables are shared by all tasks: no single task could detach without crashing all other \s-1ION\s0 tasks. .IP "void ionProd(uvast fromNode, uvast toNode, unsigned int xmitRate, unsigned int owlt)" 4 .IX Item "void ionProd(uvast fromNode, uvast toNode, unsigned int xmitRate, unsigned int owlt)" This function is designed to be called from an operating environment command or a fault protection routine, to enable operation of a node to resume when all of its scheduled contacts are in the past (making it impossible to use a \s-1DTN\s0 communication contact to assert additional future communication contacts). The function asserts a single new unidirectional contact conforming to the arguments provided, including the applicable one-way light time, with start time equal to the current time (at the moment of execution of the function) and end time equal to the start time plus 2 hours. The result of executing the function is written to the \s-1ION\s0 log using standard \&\s-1ION\s0 status message logging functions. .Sp \&\fB\s-1NOTE\s0\fR that the \fIionProd()\fR function must be invoked twice in order to establish bidirectional communication. .IP "void ionClear(char *srcEid, char *destEid, char *blockType)" 4 .IX Item "void ionClear(char *srcEid, char *destEid, char *blockType)" This function is designed to be called from an operating environment command or a fault protection routine, to delete some or all of \s-1ION\s0's Bundle Security Protocol rules when they are preventing nominal authorized operation of a node. If the first character of \fIblockType\fR is '~' then the function applies to rules for all types of \s-1BSP\s0 block; otherwise it applies only to rules for the named \s-1BSP\s0 block type: \*(L"bab\*(R", \*(L"pib\*(R", \*(L"pcb\*(R", or \*(L"esb\*(R". Only rules whose security source EIDs match \fIsrcEid\fR and whose security destination EIDs match \&\fIdestEid\fR are deleted. A rule \s-1EID\s0 matches a \*(L"clearing\*(R" \s-1EID\s0 if (a) every character of the clearing \s-1EID\s0 prior to the first '~' in the clearing \s-1ID \s0(if any) is equal to the corresponding character of the rule \s-1EID \s0\fBand\fR either the first '~' character in the clearing \s-1EID\s0 is the clearing \s-1EID\s0's last character or else the rule \s-1EID\s0 and clearing \s-1EID\s0 are of equal length. .IP "Object ionCreateZco(ZcoMedium source, Object location, vast offset, vast length, int *control)" 4 .IX Item "Object ionCreateZco(ZcoMedium source, Object location, vast offset, vast length, int *control)" This function provides a \*(L"blocking\*(R" implementation of admission control in \&\s-1ION. \s0 Like \fIzco_create()\fR, it constructs a zero-copy object (see \fIzco\fR\|(3)) that contains a single extent of source data residing at \fIlocation\fR in \fIsource\fR, of which the first \fIoffset\fR bytes are omitted and the next \fIlength\fR bytes are included. But unlike \fIzco_create()\fR, \fIionCreateZco()\fR will block (rather than return an immediate error indication) so long as the total amount of space in \fIsource\fR that is available for new \s-1ZCO\s0 formation is less than \&\fIlength\fR. \fIionCreateZco()\fR returns when either (a) space has become available and the \s-1ZCO\s0 has been created, in which case the location of the \s-1ZCO\s0 is returned, or (b) the function has failed (in which case ((Object) \-1) is returned), or (c) the function was interrupted by \&\fIionCancelZcoSpaceRequest()\fR before space for the \s-1ZCO\s0 became available (in which case 0 is returned). .Sp \&\fIionCreateZco()\fR is interruptible if and only if a non-NULL value of \fIcontrol\fR is passed to it; in that case, passing the \fBsame\fR value of \fIcontrol\fR to the \fIionCancelZcoSpaceRequest()\fR function will interrupt \fIionCreateZco()\fR. Note that the integer variable referenced by \fIcontrol\fR functions as a private \s-1ION\s0 work area; its content need not be initialized \*(-- and must not be altered \*(-- by the application. Be careful when referencing a dynamic variable in \fIcontrol\fR; static variables are safer. If \fIcontrol\fR is \s-1NULL\s0 then \fIionCreateZco()\fR is not interruptible by the application. .IP "vast ionAppendZcoExtent(Object zco, ZcoMedium source, Object location, vast offset, vast length, int *control)" 4 .IX Item "vast ionAppendZcoExtent(Object zco, ZcoMedium source, Object location, vast offset, vast length, int *control)" Similar to \fIionCreateZco()\fR except that instead of creating a new \s-1ZCO\s0 it appends an additional extent to an existing \s-1ZCO.\s0 Returns \-1 on failure, 0 on interruption by \fIionCancelZcoSpaceRequest()\fR, \fIlength\fR on success. .IP "void ionCancelZcoSpaceRequest(int *control)" 4 .IX Item "void ionCancelZcoSpaceRequest(int *control)" This function simply interrupts the currently blocked invocation of \&\fIionCreateZco()\fR or \fIionAppendZcoExtent()\fR that cites the same \fIcontrol\fR value. \fIionCancelZcoSpaceRequest()\fR is intended to be called from a signal handler, so that a signal can be used to cleanly terminate a thread that is waiting for an opportunity to create a new \s-1ZCO\s0 source data extent. .IP "Sdr \fIgetIonsdr()\fR" 4 .IX Item "Sdr getIonsdr()" Returns a pointer to the \s-1SDR\s0 management object, previously acquired by calling \&\fIionAttach()\fR, or zero on any error. .IP "PsmPartition \fIgetIonwm()\fR" 4 .IX Item "PsmPartition getIonwm()" Returns a pointer to the \s-1ION\s0 working memory partition, previously acquired by calling \fIionAttach()\fR, or zero on any error. .IP "int \fIgetIonMemoryMgr()\fR" 4 .IX Item "int getIonMemoryMgr()" Returns the memory manager \s-1ID\s0 for operations on \s-1ION\s0's working memory partition, previously acquired by calling \fIionAttach()\fR, or \-1 on any error. .IP "int \fIionLocked()\fR;" 4 .IX Item "int ionLocked();" Returns 1 if the calling task is the owner of the current \s-1SDR\s0 transaction. Assuring that \s-1ION\s0 is locked while related critical operations are performed is essential to the avoidance of race conditions. .IP "uvast \fIgetOwnNodeNbr()\fR" 4 .IX Item "uvast getOwnNodeNbr()" Returns the Bundle Protocol node number identifying this computer, as declared when \s-1ION\s0 was initialized by \fIionadmin\fR. .IP "time_t \fIgetUTCTime()\fR" 4 .IX Item "time_t getUTCTime()" Returns the current \s-1UTC\s0 time, as computed from local clock time and the computer's current offset from \s-1UTC \s0(due to clock drift, \fBnot\fR due to time zone difference; the \fButcdelta\fR) as managed from \fIionadmin\fR. .IP "int \fIionClockIsSynchronized()\fR" 4 .IX Item "int ionClockIsSynchronized()" Returns 1 if the computer on which the local \s-1ION\s0 node is running has a synchronized clock , i.e., a clock that reports the current \s-1UTC\s0 time as a value that differs from the correct time by an interval approximately equal to the currently asserted offset from \s-1UTC\s0 due to clock drift; returns zero otherwise. .Sp If the machine's clock is synchronized then its reported values (as returned by \fIgetUTCTime()\fR) can safely be used as the creation times of new bundles and the expiration time of such a bundle can accurately be computed as the sum of the bundle's creation time and time to live. If not, then the creation timestamp time of new bundles sourced at the local \s-1ION\s0 node must be zero and the creation timestamp sequence numbers must increase monotonically forever, never rolling over to zero. .IP "void writeTimestampLocal(time_t timestamp, char *timestampBuffer)" 4 .IX Item "void writeTimestampLocal(time_t timestamp, char *timestampBuffer)" Expresses the time value in \fItimestamp\fR as a local timestamp string in ION-standard format, as noted above, in \fItimestampBuffer\fR. .IP "void writeTimestampUTC(time_t timestamp, char *timestampBuffer)" 4 .IX Item "void writeTimestampUTC(time_t timestamp, char *timestampBuffer)" Expresses the time value in \fItimestamp\fR as a \s-1UTC\s0 timestamp string in ION-standard format, as noted above, in \fItimestampBuffer\fR. .IP "time_t readTimestampLocal(char *timestampBuffer, time_t referenceTime)" 4 .IX Item "time_t readTimestampLocal(char *timestampBuffer, time_t referenceTime)" Parses the local timestamp string in \fItimestampBuffer\fR and returns the corresponding time value (as would be returned by \fItime\fR\|(2)), or zero if the timestamp string cannot be parsed successfully. The timestamp string is normally expected to be an absolute expression of local time in ION-standard format as noted above. However, a relative time expression variant is also supported: if the first character of \fItimestampBuffer\fR is '+' then the remainder of the string is interpreted as a count of seconds; the sum of this value and the time value in \fIreferenceTime\fR is returned. .IP "time_t readTimestampUTC(char *timestampBuffer, time_t referenceTime)" 4 .IX Item "time_t readTimestampUTC(char *timestampBuffer, time_t referenceTime)" Same as \fIreadTimestampLocal()\fR except that if \fItimestampBuffer\fR is not a relative time expression then it is interpreted as an absolute expression of \s-1UTC\s0 time in ION-standard format as noted above. .SH "STATUS MESSAGES" .IX Header "STATUS MESSAGES" \&\s-1ION\s0 uses \fIwriteMemo()\fR, \fIputErrmsg()\fR, and \fIputSysErrmsg()\fR to log several different types of standardized status messages. .IP "Informational messages" 4 .IX Item "Informational messages" These messages are generated to inform the user of the occurrence of events that are nominal but significant, such as the controlled termination of a daemon or the production of a congestion forecast. Each informational message has the following format: .RS 4 .Sp .RS 4 {\fIyyyy/mm/dd hh:mm:ss\fR} [i] \fItext\fR .RE .RE .RS 4 .RE .IP "Warning messages" 4 .IX Item "Warning messages" These messages are generated to inform the user of the occurrence of events that are off-nominal but are likely caused by configuration or operational errors rather than software failure. Each warning message has the following format: .RS 4 .Sp .RS 4 {\fIyyyy/mm/dd hh:mm:ss\fR} [?] \fItext\fR .RE .RE .RS 4 .RE .IP "Diagnostic messages" 4 .IX Item "Diagnostic messages" These messages are produced by calling \fIputErrmsg()\fR or \fIputSysErrmsg()\fR. They are generated to inform the user of the occurrence of events that are off-nominal and might be due to errors in software. The location within the \s-1ION\s0 software at which the off-nominal condition was detected is indicated in the message: .RS 4 .Sp .RS 4 {\fIyyyy/mm/dd hh:mm:ss\fR} at line \fInnn\fR of \fIsourcefilename\fR, \fItext\fR (\fIargument\fR) .RE .RE .RS 4 .Sp Note that the \fIargument\fR portion of the message (including its enclosing parentheses) will be provided only when an argument value seems potentially helpful in fault analysis. .RE .IP "Bundle Status Report (\s-1BSR\s0) messages" 4 .IX Item "Bundle Status Report (BSR) messages" A \s-1BSR\s0 message informs the user of the arrival of a \s-1BSR,\s0 a Bundle Protocol report on the status of some bundle. BSRs are issued in the course of processing bundles for which one or more status report request flags are set, and they are also issued when bundles for which custody transfer is requested are destroyed prior to delivery to their destination endpoints. A \s-1BSR\s0 message is generated by \fBipnadminep\fR upon reception of a \s-1BSR. \s0 The time and place (node) at which the \s-1BSR\s0 was issued are indicated in the message: .RS 4 .Sp .RS 4 {\fIyyyy/mm/dd hh:mm:ss\fR} [s] (\fIsourceEID\fR)/\fIcreationTimeSeconds\fR:\fIcounter\fR/\fIfragmentOffset\fR status \fIflagsByte\fR at \fItime\fR on \fIendpointID\fR, '\fIreasonString\fR'. .RE .RE .RS 4 .RE .IP "Communication statistics messages" 4 .IX Item "Communication statistics messages" A network performance report is a set of eight communication statistics messages, one for each of eight different types of network activity. A report is issued every time contact transmission or reception starts or stops, except when there is no activity of any kind on the local node since the prior report. When a report is issued, statistic messages are generated to summarize all network activity detected since the prior report, after which all network activity counters and accumulators are reset to zero. .Sp \&\fB\s-1NOTE\s0\fR also that the \fBbpstats\fR utility program can be invoked to issue an interim network performance report at any time. Issuance of interim status reports does \fBnot\fR cause network activity counters and accumulators to be reset to zero. .Sp Statistics messages have the following format: .RS 4 .Sp .RS 4 {\fIyyyy/mm/dd hh:mm:ss\fR} [x] \fIxxx\fR from \fItttttttt\fR to \fI\s-1TTTTTTTT\s0\fR: (0) \fIaaaa\fR \fIbbbbbbbbbb\fR (1) \fIcccc\fR \fIdddddddddd\fR (2) \fIeeee\fR \fIffffffffff\fR (+) \fIgggg\fR \fIhhhhhhhhhh\fR .RE .RE .RS 4 .Sp \&\fIxxx\fR indicates the type of network activity that the message is reporting on. Statistics for eight different types of network activity are reported: .IP "\fBsrc\fR" 4 .IX Item "src" This message reports on the bundles sourced at the local node during the indicated interval. .IP "\fBfwd\fR" 4 .IX Item "fwd" This message reports on the bundles forwarded by the local node. When a bundle is re-forwarded due to custody transfer timeout it is counted a second time here. .IP "\fBxmt\fR" 4 .IX Item "xmt" This message reports on the bundles passed to the convergence layer protocol(s) for transmission from this node. Again, a re-forwarded bundle that is then re-transmitted at the convergence layer is counted a second time here. .IP "\fBrcv\fR" 4 .IX Item "rcv" This message reports on the bundles from other nodes that were received at the local node. .IP "\fBdlv\fR" 4 .IX Item "dlv" This message reports on the bundles delivered to applications via endpoints on the local node. .IP "\fBctr\fR" 4 .IX Item "ctr" This message reports on the custody refusal signals received at the local node. .IP "\fBrfw\fR" 4 .IX Item "rfw" This message reports on bundles for which convergence-layer transmission failed at this node, causing the bundles to be re-forwarded. .IP "\fBexp\fR" 4 .IX Item "exp" This message reports on the bundles destroyed at this node due to \s-1TTL\s0 expiration. .RE .RS 4 .Sp \&\fItttttttt\fR and \fI\s-1TTTTTTTT\s0\fR indicate the start and end times of the interval for which statistics are being reported, expressed in \fIyyyy/mm/dd\-hh:mm:ss\fR format. \fI\s-1TTTTTTTT\s0\fR is the current time and \fItttttttt\fR is the time of the prior report. .Sp Each of the four value pairs following the colon (:) reports on the number of bundles counted for the indicated type of network activity, for the indicated traffic flow, followed by the sum of the sizes of the payloads of all those bundles. The four traffic flows for which statistics are reported are \*(L"(0)\*(R" the priority\-0 or \*(L"bulk\*(R" traffic, \*(L"(1)\*(R" the priority\-1 \&\*(L"standard\*(R" traffic, \*(L"(2)\*(R" the priority\-2 \*(L"expedited\*(R" traffic, and \*(L"(+)\*(R" the total for all classes of service. .RE .IP "Free-form messages" 4 .IX Item "Free-form messages" Other status messages are free-form, except that date and time are always noted just as for the documented status message types. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIionadmin\fR\|(1), \fIrfxclock\fR\|(1), \fIbpstats\fR\|(1), \fIllcv\fR\|(3), \fIlyst\fR\|(3), \fImemmgr\fR\|(3), \fIplatform\fR\|(3), \fIpsm\fR\|(3), \fIsdr\fR\|(3), \fIzco\fR\|(3), \fIltp\fR\|(3), \fIbp\fR\|(3), \fIcfdp\fR\|(3), \fIams\fR\|(3), \fIbss\fR\|(3)