summaryrefslogtreecommitdiffstats
path: root/contrib/ngatm/man/unimsg.3
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ngatm/man/unimsg.3')
-rw-r--r--contrib/ngatm/man/unimsg.3234
1 files changed, 234 insertions, 0 deletions
diff --git a/contrib/ngatm/man/unimsg.3 b/contrib/ngatm/man/unimsg.3
new file mode 100644
index 0000000..eafa7b1
--- /dev/null
+++ b/contrib/ngatm/man/unimsg.3
@@ -0,0 +1,234 @@
+.\"
+.\" Copyright (c) 2001-2003
+.\" Fraunhofer Institute for Open Communication Systems (FhG Fokus).
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Author: Hartmut Brandt <harti@freebsd.org>
+.\"
+.\" $Begemot: libunimsg/man/unimsg.3,v 1.2 2003/08/21 16:01:08 hbb Exp $
+.\"
+.Dd August 23, 2002
+.Dt unimsg 3
+.Os
+.Sh NAME
+.Nm uni_msg_len ,
+.Nm uni_msg_space ,
+.Nm uni_msg_leading ,
+.Nm uni_msg_size ,
+.Nm uni_msg_ensure ,
+.Nm uni_msg_append ,
+.Nm uni_msg_extend ,
+.Nm uni_msg_alloc ,
+.Nm uni_msg_build ,
+.Nm uni_msg_destroy ,
+.Nm uni_msg_strip32 ,
+.Nm uni_msg_get32 ,
+.Nm uni_msg_append32 ,
+.Nm uni_msg_append8 ,
+.Nm uni_msg_trail32 ,
+.Nm uni_msg_dup
+.Nd "ATM signalling library - message buffers"
+.Sh LIBRARY
+Begemot ATM signalling library
+.Pq libunimsg, -lunimsg
+.Sh SYNOPSIS
+.In uni4/unimsg.h
+.Ft size_t
+.Fn uni_msg_len "const struct uni_msg *msg"
+.Ft size_t
+.Fn uni_msg_space "const struct uni_msg *msg"
+.Ft size_t
+.Fn uni_msg_leading "const struct uni_msg *msg"
+.Ft size_t
+.Fn uni_msg_size "const struct uni_msg *msg"
+.Ft int
+.Fn uni_msg_ensure "struct uni_msg *msg" "size_t bytes"
+.Ft int
+.Fn uni_msg_append "struct uni_msg *msg" "void *buf" "size_t buflen"
+.Ft int
+.Fn uni_msg_extend "struct uni_msg *msg" "size_t bytes"
+.Ft struct uni_msg *
+.Fn uni_msg_alloc "size_t space"
+.Ft struct uni_msg *
+.Fn uni_msg_build "void *buf" "..."
+.Ft void
+.Fn uni_msg_destroy "struct uni_msg *msg"
+.Ft u_int
+.Fn uni_msg_strip32 "struct uni_msg *msg"
+.Ft u_int
+.Fn uni_msg_get32 "struct uni_msg *msg"
+.Ft int
+.Fn uni_msg_append32 "struct uni_msg *msg" "u_int value"
+.Ft int
+.Fn uni_msg_append8 "struct uni_msg *msg" "u_int byte"
+.Ft u_int
+.Fn uni_msg_trail32 "const struct uni_msg *msg" "int n"
+.Ft struct uni_msg *
+.Fn uni_msg_dup "const struct uni_msg *msg"
+.Sh DESCRIPTION
+These functions are used to manipulate variable sized message. They are
+inspired by BSD mbufs and SysV stream buffers, but somewhat simplified because
+signalling generally is a low bandwidth task. All the functions operation on
+a
+.Li uni_msg
+data structure:
+.Bd -literal -offset indent
+struct uni_msg {
+ u_char *b_wptr; /* tail pointer */
+ u_char *b_rptr; /* head pointer */
+ u_char *b_buf; /* data buffer */
+ u_char *b_lim; /* end of data buffer */
+};
+.Ed
+.Pp
+The field
+.Fa b_buf
+points to the begin of a memory block that is used to store the actual message
+and the field
+.Fa b_lim
+points just to the first byte behind that buffer. This buffer is allocated
+separate from the structure itself and the user calling any of the above
+functions with a non const
+.Vt struct uni_msg
+argument should expect the buffer to be reallocated and hence not hold pointers
+into the buffer accross call to these functions.
+The pointer
+.Fa b_rptr
+points to the first used byte in the message and
+.Fa b_wptr
+to the first unused byte behind all used bytes.
+If the message is empty, both pointers point to the same place somewhere in
+the allocated buffer.
+.Pp
+There are several functions and macros that return various sizes and lengths.
+The macro
+.Fn uni_msg_len
+returns the actual size of the message (the number of used bytes). The
+macro
+.Fn uni_msg_space
+returns the number of bytes that are left unused behind the used space.
+The macro
+.Fn uni_msg_leading
+returns the number of bytes that are unused before the used space and the
+macro
+.Fn uni_msg_size
+returns the maximum size of the message (that is the size of the allocated
+buffer).
+.Pp
+Two functions may be used to create new messages: The function
+.Fn uni_msg_alloc
+allocates the message structure and a buffer to hold at least
+.Ar space
+bytes (In fact it allocates a couple of bytes more). If the allocation fails
+NULL is returned. The pointers are setup so that there is no leading space
+in the buffer.
+The function
+.Fn uni_msg_build
+constructs a new message from a variable number of buffers. The arguments
+are pairs of
+.Vt void *
+pointers to buffers and
+.Vt size_t
+buffer sizes, terminated by a NULL pointer. The function computes the total
+resulting message size, allocates a message and copies all the buffers
+into the message. The message is built to have no leading space. If the
+allocation fails, NULL is returned.
+.Pp
+The function
+.Fn uni_msg_destroy
+deallocates the buffer pointed to by the message and the message itself.
+It is save to pass a message with a NULL buffer, but not a NULL message.
+.Pp
+The function
+.Fn uni_msg_dup
+returns a copy of a message with exact the same leading space.
+.Pp
+A number of functions are used to add bytes to an existing message.
+The function
+.Fn uni_msg_extend
+extends the message buffer to have space for at least
+.Ar bytes
+additional byte at the end. The leading space does not change. This function
+may reallocate the message buffer. The function returns 0 on success and ENOMEM
+if the reallocation fails. In this case the message buffer is not changed.
+The macro
+.Fn uni_msg_ensure
+checks whether the message has space for additional
+.Ar bytes
+bytes. If not it calls
+.Fn uni_msg_extend
+to make the message buffer larger. The macro returns 0 on success or ENOMEM
+if there is not enough space and the reallocation fails.
+In this case the message buffer is not changed.
+The function
+.Fn uni_msg_append
+appends
+.Ar buflen
+bytes from the buffer pointed to by
+.Ar buf
+to the message.
+The function
+.Fn uni_msg_append8
+appends one byte to the message and the function
+.Fn uni_msg_append32
+appends a 32-bit value in network byte order to the message (
+.Fa b_wptr
+needs not to be aligned). All three functions call
+.Fn uni_msg_ensure
+to make sure, that the buffer contents fit into the message. They
+return 0 on success and ENOMEM if the buffer is too small and the reallocation
+fails. In this case the message buffer is not changed.
+.Pp
+A number of functions can be used to retrieve parts of the message.
+The function
+.Fn uni_msg_strip32
+returns the last four bytes of the message as a 32-bit integer assumed to
+be in network byte order. It adjusts
+.Fa b_wptr
+to remove these four bytes from the message.
+.Fa b_wptr
+does not need to be aligned.
+The function
+.Fn uni_msg_get32
+returns the first four bytes of the message as a 32-bit integer assumed to
+be in network byte order. It adjusts
+.Fa b_rptr
+to remove these four bytes from the message.
+.Fa b_rptr
+does not need to be aligned.
+The function
+.Fn uni_msg_trail32
+returns the
+.Fa n 'th
+32-bit integer from the buffer counted from the end of the buffer. The
+integer is assumed to be in network byte order. A value of -1 for
+.Fa n
+returns the last four bytes of the buffer, a value of -2 the four bytes
+just before the last four bytes and so on. All three functions do not check
+that the message is large enough.
+.Sh SEE ALSO
+.Xr libunimsg 3 ,
+.Xr mbuf 9
+.Sh AUTHORS
+.An Hartmut Brandt Aq harti@freebsd.org
OpenPOWER on IntegriCloud