aboutsummaryrefslogtreecommitdiff
path: root/share/man/man9/mdchain.9
diff options
context:
space:
mode:
Diffstat (limited to 'share/man/man9/mdchain.9')
-rw-r--r--share/man/man9/mdchain.9211
1 files changed, 211 insertions, 0 deletions
diff --git a/share/man/man9/mdchain.9 b/share/man/man9/mdchain.9
new file mode 100644
index 000000000000..57291c70f6ed
--- /dev/null
+++ b/share/man/man9/mdchain.9
@@ -0,0 +1,211 @@
+.\" -*- nroff -*-
+.\"
+.\" Copyright (c) 2001 Boris Popov
+.\"
+.\" 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 DEVELOPERS ``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 DEVELOPERS 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.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd February 28, 2001
+.Dt MDCHAIN 9
+.Os
+.Sh NAME
+.Nm mdchain ,
+.Nm md_initm ,
+.Nm md_done ,
+.Nm md_append_record ,
+.Nm md_next_record ,
+.Nm md_get_uint8 ,
+.Nm md_get_uint16 ,
+.Nm md_get_uint16be ,
+.Nm md_get_uint16le ,
+.Nm md_get_uint32 ,
+.Nm md_get_uint32be ,
+.Nm md_get_uint32le ,
+.Nm md_get_int64 ,
+.Nm md_get_int64be ,
+.Nm md_get_int64le ,
+.Nm md_get_mem ,
+.Nm md_get_mbuf ,
+.Nm md_get_uio
+.Nd "set of functions to dissect an mbuf chain to various data types"
+.Sh SYNOPSIS
+.Cd options LIBMCHAIN
+.Li kldload libmchain
+.Pp
+.In sys/param.h
+.In sys/uio.h
+.In sys/mchain.h
+.Ft void
+.Fn md_initm "struct mdchain *mdp" "struct mbuf *m"
+.Ft void
+.Fn md_done "struct mdchain *mdp"
+.Ft void
+.Fn md_append_record "struct mdchain *mdp" "struct mbuf *top"
+.Ft int
+.Fn md_next_record "struct mdchain *mdp"
+.Ft int
+.Fn md_get_uint8 "struct mdchain *mdp" "u_int8_t *x"
+.Ft int
+.Fn md_get_uint16 "struct mdchain *mdp" "u_int16_t *x"
+.Ft int
+.Fn md_get_uint16be "struct mdchain *mdp" "u_int16_t *x"
+.Ft int
+.Fn md_get_uint16le "struct mdchain *mdp" "u_int16_t *x"
+.Ft int
+.Fn md_get_uint32 "struct mdchain *mdp" "u_int32_t *x"
+.Ft int
+.Fn md_get_uint32be "struct mdchain *mdp" "u_int32_t *x"
+.Ft int
+.Fn md_get_uint32le "struct mdchain *mdp" "u_int32_t *x"
+.Ft int
+.Fn md_get_int64 "struct mdchain *mdp" "int64_t *x"
+.Ft int
+.Fn md_get_int64be "struct mdchain *mdp" "int64_t *x"
+.Ft int
+.Fn md_get_int64le "struct mdchain *mdp" "int64_t *x"
+.Ft int
+.Fn md_get_mem "struct mdchain *mdp" "caddr_t target" "int size" "int type"
+.Ft int
+.Fn md_get_mbuf "struct mdchain *mdp" "int size" "struct mbuf **m"
+.Ft int
+.Fn md_get_uio "struct mdchain *mdp" "struct uio *uiop" "int size"
+.Sh DESCRIPTION
+These functions are used to decompose mbuf chains to various data types.
+The
+.Vt mdchain
+structure is used as a working context
+and should be initialized through a call of the
+.Fn mb_initm
+function.
+It has the following fields:
+.Bl -tag -width "md_top"
+.It Va "md_top"
+.Pq Vt "struct mbuf *"
+A pointer to the top of the parsed mbuf chain.
+.It Va md_cur
+.Pq Vt "struct mbuf *"
+A pointer to the currently parsed mbuf.
+.It Va md_pas
+.Pq Vt int
+Offset in the current mbuf.
+.El
+.Pp
+The
+.Fn md_done
+function disposes of an mbuf chain pointed to by the
+.Fa mdp->md_top
+field and sets the field to
+.Dv NULL .
+.Pp
+The
+.Fn md_append_record
+appends a new mbuf chain using
+.Va m_nextpkt
+field to form a single linked list of mbuf chains.
+If the
+.Fa mdp->md_top
+field is
+.Dv NULL ,
+then this function behaves exactly as the
+.Fn md_initm
+function.
+.Pp
+The
+.Fn md_next_record
+function extracts the next mbuf chain and disposes the current one, if any.
+For a new mbuf chain it calls the
+.Fn md_initm
+function.
+If there is no data left the function returns
+.Er ENOENT .
+.Pp
+All
+.Fn md_get_*
+functions perform an actual copy of the data from an mbuf chain.
+Functions which have
+.Cm le
+or
+.Cm be
+suffixes will perform conversion to the little\- or big\-endian data formats.
+.Pp
+.Fn md_get_mem
+function copies
+.Fa size
+bytes of data specified by the
+.Fa source
+argument from an mbuf chain.
+The
+.Fa type
+argument specifies the method used to perform a copy,
+and can be one of the following:
+.Bl -tag -width ".Dv MB_MINLINE"
+.It Dv MB_MSYSTEM
+Use the
+.Fn bcopy
+function.
+.It Dv MB_MUSER
+Use the
+.Xr copyin 9
+function.
+.It Dv MB_MINLINE
+Use an
+.Dq inline
+loop which does not call any function.
+.El
+.Pp
+If
+.Fa target
+is
+.Dv NULL ,
+an actual copy is not performed
+and the function just skips the given number of bytes.
+.Sh RETURN VALUES
+All
+.Ft int
+functions return zero if successful,
+otherwise an error code is returned.
+.Pp
+.Em Note :
+after failure of any function,
+an mbuf chain is left in the broken state and only the
+.Fn md_done
+function can safely be called to destroy it.
+.Sh EXAMPLES
+.Bd -literal
+struct mdchain *mdp;
+struct mbuf *m;
+u_int16_t length;
+u_int8_t byte;
+
+receive(so, &m);
+md_initm(mdp, m);
+if (md_get_uint8(mdp, &byte) != 0 ||
+ md_get_uint16le(mdp, &length) != 0)
+ error = EBADRPC;
+mb_done(mdp);
+.Ed
+.Sh SEE ALSO
+.Xr mbchain 9 ,
+.Xr mbuf 9
+.Sh AUTHORS
+This manual page was written by
+.An Boris Popov Aq bp@FreeBSD.org .