NgMkSockNode NgNameNode NgSendMsg NgSendAsciiMsg NgSendMsgReply NgRecvMsg NgAllocRecvMsg NgRecvAsciiMsg NgAllocRecvAsciiMsg NgSendData NgRecvData NgAllocRecvData NgSetDebug NgSetErrLog - netgraph user library
Lb libnetgraph
The
NgMkSockNode ();
function should be called first, to create a new
Vt socket
type netgraph node with associated control and data sockets.
If
Fa name
is
non- NULL
the node will have that global name assigned to it.
The
Fa csp
and
Fa dsp
arguments will be set to the newly opened control and data sockets
associated with the node; either
Fa csp
or
Fa dsp
may be
NULL
if only one socket is desired.
The
NgMkSockNode ();
function loads the
Vt socket
node type KLD if it is not already loaded.
The
NgNameNode ();
function assigns a global name to the node addressed by
Fa path .
The
NgSendMsg ();
function sends a binary control message from the
Vt socket
node associated with control socket
Fa cs
to the node addressed by
Fa path .
The
Fa cookie
indicates how to interpret
Fa cmd ,
which indicates a specific command.
Extra argument data (if any) is specified by
Fa arg
and
Fa arglen .
The
Fa cookie , cmd ,
and argument data are defined by the header file corresponding
to the type of the node being addressed.
The unique, non-negative token value chosen for use in the message
header is returned.
This value is typically used to associate replies.
Use
NgSendMsgReply ();
to send reply to a previously received control message.
The original message header should be pointed to by
Fa msg .
The
NgSendAsciiMsg ();
function performs the same function as
NgSendMsg (,);
but adds support for
ASCII
encoding of control messages.
The
NgSendAsciiMsg ();
function formats its input a la
printf(3)
and then sends the resulting
ASCII
string to the node in a
NGM_ASCII2BINARY
control message.
The node returns a binary version of the
message, which is then sent back to the node just as with
NgSendMsg (.);
As with
NgSendMsg (,);
the message token value is returned.
Note that
ASCII
conversion may not be supported by all node types.
The
NgRecvMsg ();
function reads the next control message received by the node associated with
control socket
Fa cs .
The message and any extra argument data must fit in
Fa replen
bytes.
If
Fa path
is
non- NULL
it must point to a buffer of at least
NG_PATHSIZ
bytes, which will be filled in (and
NUL
terminated) with the path to
the node from which the message was received.
The length of the control message is returned. A return value of zero indicates that the socket was closed.
The
NgAllocRecvMsg ();
function works exactly like
NgRecvMsg (,);
except that the buffer for a message is dynamically allocated
to guarantee that a message is not truncated.
The size of the buffer is equal to the socket's receive buffer size.
The caller is responsible for freeing the buffer when it is no longer required.
The
NgRecvAsciiMsg ();
function works exactly like
NgRecvMsg (,);
except that after the message is received, any binary arguments
are converted to
ASCII
by sending a
NGM_BINARY2ASCII
request back to the originating node.
The result is the same as
NgRecvMsg (,);
with the exception that the reply arguments field will contain a
NUL -terminated
ASCII
version of the arguments (and the reply
header argument length field will be adjusted).
The
NgAllocRecvAsciiMsg ();
function works exactly like
NgRecvAsciiMsg (,);
except that the buffer for a message is dynamically allocated
to guarantee that a message is not truncated.
The size of the buffer is equal to the socket's receive buffer size.
The caller is responsible for freeing the buffer when it is no longer required.
The
NgSendData ();
function writes a data packet out on the specified hook of the node
corresponding to data socket
Fa ds .
The node must already be connected to some other node via that hook.
The
NgRecvData ();
function reads the next data packet (of up to
Fa len
bytes) received by the node corresponding to data socket
Fa ds
and stores it in
Fa buf ,
which must be large enough to hold the entire packet.
If
Fa hook
is
non- NULL
it must point to a buffer of at least
NG_HOOKSIZ
bytes, which will be filled in (and
NUL
terminated) with the name of
the hook on which the data was received.
The length of the packet is returned. A return value of zero indicates that the socket was closed.
The
NgAllocRecvData ();
function works exactly like
NgRecvData (,);
except that the buffer for a data packet is dynamically allocated
to guarantee that a data packet is not truncated.
The size of the buffer is equal to the socket's receive buffer size.
The caller is responsible for freeing the buffer when it is no longer required.
The
NgSetDebug ();
and
NgSetErrLog ();
functions are used for debugging.
The
NgSetDebug ();
function sets the debug level (if non-negative), and returns the old setting.
Higher debug levels result in more verbosity.
The default is zero.
All debug and error messages are logged via the functions
specified in the most recent call to
NgSetErrLog (.);
The default logging functions are
vwarn(3)
and
vwarnx(3).
At debug level 3, the library attempts to display control message arguments in ASCII format; however, this results in additional messages being sent which may interfere with debugging. At even higher levels, even these additional messages will be displayed, etc.
Note that select(2) can be used on the data and the control sockets to detect the presence of incoming data and control messages, respectively. Data and control packets are always written and read atomically, i.e., in one whole piece.
User mode programs must be linked with the -l netgraph flag to link in this library.
The
NgSetErrLog ();
function has no return value.
All other functions return -1 if there was an error and set errno accordingly.
A return value of zero from
NgRecvMsg ();
or
NgRecvData ();
indicates that the netgraph socket has been closed.
For
NgSendAsciiMsg ();
and
NgRecvAsciiMsg (,);
the following additional errors are possible:
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |