13b2bd0f6Slogwang.\" Copyright (c) 1996-1999 Whistle Communications, Inc. 23b2bd0f6Slogwang.\" All rights reserved. 33b2bd0f6Slogwang.\" 43b2bd0f6Slogwang.\" Subject to the following obligations and disclaimer of warranty, use and 53b2bd0f6Slogwang.\" redistribution of this software, in source or object code forms, with or 63b2bd0f6Slogwang.\" without modifications are expressly permitted by Whistle Communications; 73b2bd0f6Slogwang.\" provided, however, that: 83b2bd0f6Slogwang.\" 1. Any and all reproductions of the source or object code must include the 93b2bd0f6Slogwang.\" copyright notice above and the following disclaimer of warranties; and 103b2bd0f6Slogwang.\" 2. No rights are granted, in any manner or form, to use Whistle 113b2bd0f6Slogwang.\" Communications, Inc. trademarks, including the mark "WHISTLE 123b2bd0f6Slogwang.\" COMMUNICATIONS" on advertising, endorsements, or otherwise except as 133b2bd0f6Slogwang.\" such appears in the above copyright notice or in the software. 143b2bd0f6Slogwang.\" 153b2bd0f6Slogwang.\" THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND 163b2bd0f6Slogwang.\" TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO 173b2bd0f6Slogwang.\" REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, 183b2bd0f6Slogwang.\" INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF 193b2bd0f6Slogwang.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. 203b2bd0f6Slogwang.\" WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY 213b2bd0f6Slogwang.\" REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS 223b2bd0f6Slogwang.\" SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE. 233b2bd0f6Slogwang.\" IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES 243b2bd0f6Slogwang.\" RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING 253b2bd0f6Slogwang.\" WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 263b2bd0f6Slogwang.\" PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR 273b2bd0f6Slogwang.\" SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY 283b2bd0f6Slogwang.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 293b2bd0f6Slogwang.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 303b2bd0f6Slogwang.\" THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY 313b2bd0f6Slogwang.\" OF SUCH DAMAGE. 323b2bd0f6Slogwang.\" 333b2bd0f6Slogwang.\" Author: Archie Cobbs <[email protected]> 343b2bd0f6Slogwang.\" 353b2bd0f6Slogwang.\" $FreeBSD$ 363b2bd0f6Slogwang.\" $Whistle: netgraph.3,v 1.7 1999/01/25 07:14:06 archie Exp $ 373b2bd0f6Slogwang.\" 38*22ce4affSfengbojiang.Dd May 15, 2020 393b2bd0f6Slogwang.Dt NETGRAPH 3 403b2bd0f6Slogwang.Os 413b2bd0f6Slogwang.Sh NAME 423b2bd0f6Slogwang.Nm NgMkSockNode , 433b2bd0f6Slogwang.Nm NgNameNode , 443b2bd0f6Slogwang.Nm NgSendMsg , 453b2bd0f6Slogwang.Nm NgSendAsciiMsg , 46*22ce4affSfengbojiang.Nm NgSendReplyMsg , 473b2bd0f6Slogwang.Nm NgRecvMsg , 483b2bd0f6Slogwang.Nm NgAllocRecvMsg , 493b2bd0f6Slogwang.Nm NgRecvAsciiMsg , 503b2bd0f6Slogwang.Nm NgAllocRecvAsciiMsg , 513b2bd0f6Slogwang.Nm NgSendData , 523b2bd0f6Slogwang.Nm NgRecvData , 533b2bd0f6Slogwang.Nm NgAllocRecvData , 543b2bd0f6Slogwang.Nm NgSetDebug , 553b2bd0f6Slogwang.Nm NgSetErrLog 563b2bd0f6Slogwang.Nd netgraph user library 573b2bd0f6Slogwang.Sh LIBRARY 583b2bd0f6Slogwang.Lb libnetgraph 593b2bd0f6Slogwang.Sh SYNOPSIS 60*22ce4affSfengbojiang.In netgraph.h 613b2bd0f6Slogwang.Ft int 623b2bd0f6Slogwang.Fn NgMkSockNode "const char *name" "int *csp" "int *dsp" 633b2bd0f6Slogwang.Ft int 643b2bd0f6Slogwang.Fn NgNameNode "int cs" "const char *path" "const char *fmt" ... 653b2bd0f6Slogwang.Ft int 663b2bd0f6Slogwang.Fo NgSendMsg 673b2bd0f6Slogwang.Fa "int cs" "const char *path" "int cookie" "int cmd" "const void *arg" 683b2bd0f6Slogwang.Fa "size_t arglen" 693b2bd0f6Slogwang.Fc 703b2bd0f6Slogwang.Ft int 713b2bd0f6Slogwang.Fn NgSendAsciiMsg "int cs" "const char *path" "const char *fmt" ... 723b2bd0f6Slogwang.Ft int 73*22ce4affSfengbojiang.Fo NgSendReplyMsg 743b2bd0f6Slogwang.Fa "int cs" "const char *path" "struct ng_mesg *msg" "const void *arg" 753b2bd0f6Slogwang.Fa "size_t arglen" 763b2bd0f6Slogwang.Fc 773b2bd0f6Slogwang.Ft int 783b2bd0f6Slogwang.Fn NgRecvMsg "int cs" "struct ng_mesg *rep" "size_t replen" "char *path" 793b2bd0f6Slogwang.Ft int 803b2bd0f6Slogwang.Fn NgAllocRecvMsg "int cs" "struct ng_mesg **rep" "char *path" 813b2bd0f6Slogwang.Ft int 823b2bd0f6Slogwang.Fn NgRecvAsciiMsg "int cs" "struct ng_mesg *rep" "size_t replen" "char *path" 833b2bd0f6Slogwang.Ft int 843b2bd0f6Slogwang.Fn NgAllocRecvAsciiMsg "int cs" "struct ng_mesg **rep" "char *path" 853b2bd0f6Slogwang.Ft int 863b2bd0f6Slogwang.Fn NgSendData "int ds" "const char *hook" "const u_char *buf" "size_t len" 873b2bd0f6Slogwang.Ft int 883b2bd0f6Slogwang.Fn NgRecvData "int ds" "u_char *buf" "size_t len" "char *hook" 893b2bd0f6Slogwang.Ft int 903b2bd0f6Slogwang.Fn NgAllocRecvData "int ds" "u_char **buf" "char *hook" 913b2bd0f6Slogwang.Ft int 923b2bd0f6Slogwang.Fn NgSetDebug "int level" 933b2bd0f6Slogwang.Ft void 943b2bd0f6Slogwang.Fo NgSetErrLog 953b2bd0f6Slogwang.Fa "void \*[lp]*log\*[rp]\*[lp]const char *fmt, ...\*[rp]" 963b2bd0f6Slogwang.Fa "void \*[lp]*logx\*[rp]\*[lp]const char *fmt, ...\*[rp]" 973b2bd0f6Slogwang.Fc 983b2bd0f6Slogwang.Sh DESCRIPTION 993b2bd0f6SlogwangThese functions facilitate user-mode program participation in the kernel 1003b2bd0f6Slogwang.Xr netgraph 4 1013b2bd0f6Slogwanggraph-based networking system, by utilizing the netgraph 1023b2bd0f6Slogwang.Vt socket 1033b2bd0f6Slogwangnode type (see 1043b2bd0f6Slogwang.Xr ng_socket 4 ) . 1053b2bd0f6Slogwang.Pp 1063b2bd0f6SlogwangThe 1073b2bd0f6Slogwang.Fn NgMkSockNode 1083b2bd0f6Slogwangfunction should be called first, to create a new 1093b2bd0f6Slogwang.Vt socket 1103b2bd0f6Slogwangtype netgraph node with associated control and data sockets. 1113b2bd0f6SlogwangIf 1123b2bd0f6Slogwang.Fa name 1133b2bd0f6Slogwangis 1143b2bd0f6Slogwang.No non- Ns Dv NULL , 1153b2bd0f6Slogwangthe node will have that global name assigned to it. 1163b2bd0f6SlogwangThe 1173b2bd0f6Slogwang.Fa csp 1183b2bd0f6Slogwangand 1193b2bd0f6Slogwang.Fa dsp 1203b2bd0f6Slogwangarguments will be set to the newly opened control and data sockets 1213b2bd0f6Slogwangassociated with the node; either 1223b2bd0f6Slogwang.Fa csp 1233b2bd0f6Slogwangor 1243b2bd0f6Slogwang.Fa dsp 1253b2bd0f6Slogwangmay be 1263b2bd0f6Slogwang.Dv NULL 1273b2bd0f6Slogwangif only one socket is desired. 1283b2bd0f6SlogwangThe 1293b2bd0f6Slogwang.Fn NgMkSockNode 1303b2bd0f6Slogwangfunction loads the 1313b2bd0f6Slogwang.Vt socket 1323b2bd0f6Slogwangnode type KLD if it is not already loaded. 1333b2bd0f6Slogwang.Pp 1343b2bd0f6SlogwangThe 1353b2bd0f6Slogwang.Fn NgNameNode 1363b2bd0f6Slogwangfunction assigns a global name to the node addressed by 1373b2bd0f6Slogwang.Fa path . 1383b2bd0f6Slogwang.Pp 1393b2bd0f6SlogwangThe 1403b2bd0f6Slogwang.Fn NgSendMsg 1413b2bd0f6Slogwangfunction sends a binary control message from the 1423b2bd0f6Slogwang.Vt socket 1433b2bd0f6Slogwangnode associated with control socket 1443b2bd0f6Slogwang.Fa cs 1453b2bd0f6Slogwangto the node addressed by 1463b2bd0f6Slogwang.Fa path . 1473b2bd0f6SlogwangThe 1483b2bd0f6Slogwang.Fa cookie 1493b2bd0f6Slogwangindicates how to interpret 1503b2bd0f6Slogwang.Fa cmd , 1513b2bd0f6Slogwangwhich indicates a specific command. 1523b2bd0f6SlogwangExtra argument data (if any) is specified by 1533b2bd0f6Slogwang.Fa arg 1543b2bd0f6Slogwangand 1553b2bd0f6Slogwang.Fa arglen . 1563b2bd0f6SlogwangThe 1573b2bd0f6Slogwang.Fa cookie , cmd , 1583b2bd0f6Slogwangand argument data are defined by the header file corresponding 1593b2bd0f6Slogwangto the type of the node being addressed. 1603b2bd0f6SlogwangThe unique, non-negative token value chosen for use in the message 1613b2bd0f6Slogwangheader is returned. 1623b2bd0f6SlogwangThis value is typically used to associate replies. 1633b2bd0f6Slogwang.Pp 1643b2bd0f6SlogwangUse 165*22ce4affSfengbojiang.Fn NgSendReplyMsg 1663b2bd0f6Slogwangto send reply to a previously received control message. 1673b2bd0f6SlogwangThe original message header should be pointed to by 1683b2bd0f6Slogwang.Fa msg . 1693b2bd0f6Slogwang.Pp 1703b2bd0f6SlogwangThe 1713b2bd0f6Slogwang.Fn NgSendAsciiMsg 1723b2bd0f6Slogwangfunction performs the same function as 1733b2bd0f6Slogwang.Fn NgSendMsg , 1743b2bd0f6Slogwangbut adds support for 1753b2bd0f6Slogwang.Tn ASCII 1763b2bd0f6Slogwangencoding of control messages. 1773b2bd0f6SlogwangThe 1783b2bd0f6Slogwang.Fn NgSendAsciiMsg 1793b2bd0f6Slogwangfunction formats its input a la 1803b2bd0f6Slogwang.Xr printf 3 1813b2bd0f6Slogwangand then sends the resulting 1823b2bd0f6Slogwang.Tn ASCII 1833b2bd0f6Slogwangstring to the node in a 1843b2bd0f6Slogwang.Dv NGM_ASCII2BINARY 1853b2bd0f6Slogwangcontrol message. 1863b2bd0f6SlogwangThe node returns a binary version of the 1873b2bd0f6Slogwangmessage, which is then sent back to the node just as with 1883b2bd0f6Slogwang.Fn NgSendMsg . 1893b2bd0f6SlogwangAs with 1903b2bd0f6Slogwang.Fn NgSendMsg , 1913b2bd0f6Slogwangthe message token value is returned. 1923b2bd0f6SlogwangNote that 1933b2bd0f6Slogwang.Tn ASCII 1943b2bd0f6Slogwangconversion may not be supported by all node types. 1953b2bd0f6Slogwang.Pp 1963b2bd0f6SlogwangThe 1973b2bd0f6Slogwang.Fn NgRecvMsg 1983b2bd0f6Slogwangfunction reads the next control message received by the node associated with 1993b2bd0f6Slogwangcontrol socket 2003b2bd0f6Slogwang.Fa cs . 2013b2bd0f6SlogwangThe message and any extra argument data must fit in 2023b2bd0f6Slogwang.Fa replen 2033b2bd0f6Slogwangbytes. 2043b2bd0f6SlogwangIf 2053b2bd0f6Slogwang.Fa path 2063b2bd0f6Slogwangis 2073b2bd0f6Slogwang.No non- Ns Dv NULL , 2083b2bd0f6Slogwangit must point to a buffer of at least 2093b2bd0f6Slogwang.Dv NG_PATHSIZ 2103b2bd0f6Slogwangbytes, which will be filled in (and 2113b2bd0f6Slogwang.Dv NUL 2123b2bd0f6Slogwangterminated) with the path to 2133b2bd0f6Slogwangthe node from which the message was received. 2143b2bd0f6Slogwang.Pp 2153b2bd0f6SlogwangThe length of the control message is returned. 2163b2bd0f6SlogwangA return value of zero indicates that the socket was closed. 2173b2bd0f6Slogwang.Pp 2183b2bd0f6SlogwangThe 2193b2bd0f6Slogwang.Fn NgAllocRecvMsg 2203b2bd0f6Slogwangfunction works exactly like 2213b2bd0f6Slogwang.Fn NgRecvMsg , 2223b2bd0f6Slogwangexcept that the buffer for a message is dynamically allocated 2233b2bd0f6Slogwangto guarantee that a message is not truncated. 2243b2bd0f6SlogwangThe size of the buffer is equal to the socket's receive buffer size. 2253b2bd0f6SlogwangThe caller is responsible for freeing the buffer when it is no longer required. 2263b2bd0f6Slogwang.Pp 2273b2bd0f6SlogwangThe 2283b2bd0f6Slogwang.Fn NgRecvAsciiMsg 2293b2bd0f6Slogwangfunction works exactly like 2303b2bd0f6Slogwang.Fn NgRecvMsg , 2313b2bd0f6Slogwangexcept that after the message is received, any binary arguments 2323b2bd0f6Slogwangare converted to 2333b2bd0f6Slogwang.Tn ASCII 2343b2bd0f6Slogwangby sending a 2353b2bd0f6Slogwang.Dv NGM_BINARY2ASCII 2363b2bd0f6Slogwangrequest back to the originating node. 2373b2bd0f6SlogwangThe result is the same as 2383b2bd0f6Slogwang.Fn NgRecvMsg , 2393b2bd0f6Slogwangwith the exception that the reply arguments field will contain a 2403b2bd0f6Slogwang.Dv NUL Ns -terminated 2413b2bd0f6Slogwang.Tn ASCII 2423b2bd0f6Slogwangversion of the arguments (and the reply 2433b2bd0f6Slogwangheader argument length field will be adjusted). 2443b2bd0f6Slogwang.Pp 2453b2bd0f6SlogwangThe 2463b2bd0f6Slogwang.Fn NgAllocRecvAsciiMsg 2473b2bd0f6Slogwangfunction works exactly like 2483b2bd0f6Slogwang.Fn NgRecvAsciiMsg , 2493b2bd0f6Slogwangexcept that the buffer for a message is dynamically allocated 2503b2bd0f6Slogwangto guarantee that a message is not truncated. 2513b2bd0f6SlogwangThe size of the buffer is equal to the socket's receive buffer size. 2523b2bd0f6SlogwangThe caller is responsible for freeing the buffer when it is no longer required. 2533b2bd0f6Slogwang.Pp 2543b2bd0f6SlogwangThe 2553b2bd0f6Slogwang.Fn NgSendData 2563b2bd0f6Slogwangfunction writes a data packet out on the specified hook of the node 2573b2bd0f6Slogwangcorresponding to data socket 2583b2bd0f6Slogwang.Fa ds . 2593b2bd0f6SlogwangThe node must already be connected to some other node via that hook. 2603b2bd0f6Slogwang.Pp 2613b2bd0f6SlogwangThe 2623b2bd0f6Slogwang.Fn NgRecvData 2633b2bd0f6Slogwangfunction reads the next data packet (of up to 2643b2bd0f6Slogwang.Fa len 2653b2bd0f6Slogwangbytes) received by the node corresponding to data socket 2663b2bd0f6Slogwang.Fa ds 2673b2bd0f6Slogwangand stores it in 2683b2bd0f6Slogwang.Fa buf , 2693b2bd0f6Slogwangwhich must be large enough to hold the entire packet. 2703b2bd0f6SlogwangIf 2713b2bd0f6Slogwang.Fa hook 2723b2bd0f6Slogwangis 2733b2bd0f6Slogwang.No non- Ns Dv NULL , 2743b2bd0f6Slogwangit must point to a buffer of at least 2753b2bd0f6Slogwang.Dv NG_HOOKSIZ 2763b2bd0f6Slogwangbytes, which will be filled in (and 2773b2bd0f6Slogwang.Dv NUL 2783b2bd0f6Slogwangterminated) with the name of 2793b2bd0f6Slogwangthe hook on which the data was received. 2803b2bd0f6Slogwang.Pp 2813b2bd0f6SlogwangThe length of the packet is returned. 2823b2bd0f6SlogwangA return value of zero indicates that the socket was closed. 2833b2bd0f6Slogwang.Pp 2843b2bd0f6SlogwangThe 2853b2bd0f6Slogwang.Fn NgAllocRecvData 2863b2bd0f6Slogwangfunction works exactly like 2873b2bd0f6Slogwang.Fn NgRecvData , 2883b2bd0f6Slogwangexcept that the buffer for a data packet is dynamically allocated 2893b2bd0f6Slogwangto guarantee that a data packet is not truncated. 2903b2bd0f6SlogwangThe size of the buffer is equal to the socket's receive buffer size. 2913b2bd0f6SlogwangThe caller is responsible for freeing the buffer when it is no longer required. 2923b2bd0f6Slogwang.Pp 2933b2bd0f6SlogwangThe 2943b2bd0f6Slogwang.Fn NgSetDebug 2953b2bd0f6Slogwangand 2963b2bd0f6Slogwang.Fn NgSetErrLog 2973b2bd0f6Slogwangfunctions are used for debugging. 2983b2bd0f6SlogwangThe 2993b2bd0f6Slogwang.Fn NgSetDebug 3003b2bd0f6Slogwangfunction sets the debug level (if non-negative), and returns the old setting. 3013b2bd0f6SlogwangHigher debug levels result in more verbosity. 3023b2bd0f6SlogwangThe default is zero. 3033b2bd0f6SlogwangAll debug and error messages are logged via the functions 3043b2bd0f6Slogwangspecified in the most recent call to 3053b2bd0f6Slogwang.Fn NgSetErrLog . 3063b2bd0f6SlogwangThe default logging functions are 3073b2bd0f6Slogwang.Xr vwarn 3 3083b2bd0f6Slogwangand 3093b2bd0f6Slogwang.Xr vwarnx 3 . 3103b2bd0f6Slogwang.Pp 3113b2bd0f6SlogwangAt debug level 3, the library attempts to display control message arguments 3123b2bd0f6Slogwangin 3133b2bd0f6Slogwang.Tn ASCII 3143b2bd0f6Slogwangformat; however, this results in additional messages being 3153b2bd0f6Slogwangsent which may interfere with debugging. 3163b2bd0f6SlogwangAt even higher levels, 3173b2bd0f6Slogwangeven these additional messages will be displayed, etc. 3183b2bd0f6Slogwang.Pp 3193b2bd0f6SlogwangNote that 3203b2bd0f6Slogwang.Xr select 2 3213b2bd0f6Slogwangcan be used on the data and the control sockets to detect the presence of 3223b2bd0f6Slogwangincoming data and control messages, respectively. 3233b2bd0f6SlogwangData and control packets are always written and read atomically, i.e., 3243b2bd0f6Slogwangin one whole piece. 3253b2bd0f6Slogwang.Pp 3263b2bd0f6SlogwangUser mode programs must be linked with the 3273b2bd0f6Slogwang.Fl l Ns Li netgraph 3283b2bd0f6Slogwangflag to link in this library. 3293b2bd0f6Slogwang.Sh INITIALIZATION 3303b2bd0f6SlogwangTo enable netgraph in your kernel, either your kernel must be 3313b2bd0f6Slogwangcompiled with 3323b2bd0f6Slogwang.Cd "options NETGRAPH" 3333b2bd0f6Slogwangin the kernel configuration 3343b2bd0f6Slogwangfile, or else the 3353b2bd0f6Slogwang.Xr netgraph 4 3363b2bd0f6Slogwangand 3373b2bd0f6Slogwang.Xr ng_socket 4 3383b2bd0f6SlogwangKLD modules must have been loaded via 3393b2bd0f6Slogwang.Xr kldload 8 . 3403b2bd0f6Slogwang.Sh RETURN VALUES 3413b2bd0f6SlogwangThe 3423b2bd0f6Slogwang.Fn NgSetDebug 3433b2bd0f6Slogwangfunction returns the previous debug setting. 3443b2bd0f6Slogwang.Pp 3453b2bd0f6SlogwangThe 3463b2bd0f6Slogwang.Fn NgSetErrLog 3473b2bd0f6Slogwangfunction has no return value. 3483b2bd0f6Slogwang.Pp 3493b2bd0f6SlogwangAll other functions return \-1 if there was an error and set 3503b2bd0f6Slogwang.Va errno 3513b2bd0f6Slogwangaccordingly. 3523b2bd0f6Slogwang.Pp 3533b2bd0f6SlogwangA return value of zero from 3543b2bd0f6Slogwang.Fn NgRecvMsg 3553b2bd0f6Slogwangor 3563b2bd0f6Slogwang.Fn NgRecvData 3573b2bd0f6Slogwangindicates that the netgraph socket has been closed. 3583b2bd0f6Slogwang.Pp 3593b2bd0f6SlogwangFor 3603b2bd0f6Slogwang.Fn NgSendAsciiMsg 3613b2bd0f6Slogwangand 3623b2bd0f6Slogwang.Fn NgRecvAsciiMsg , 3633b2bd0f6Slogwangthe following additional errors are possible: 3643b2bd0f6Slogwang.Bl -tag -width Er 3653b2bd0f6Slogwang.It Bq Er ENOSYS 3663b2bd0f6SlogwangThe node type does not know how to encode or decode the control message. 3673b2bd0f6Slogwang.It Bq Er ERANGE 3683b2bd0f6SlogwangThe encoded or decoded arguments were too long for the supplied buffer. 3693b2bd0f6Slogwang.It Bq Er ENOENT 3703b2bd0f6SlogwangAn unknown structure field was seen in an 3713b2bd0f6Slogwang.Tn ASCII 3723b2bd0f6Slogwangcontrol message. 3733b2bd0f6Slogwang.It Bq Er EALREADY 3743b2bd0f6SlogwangThe same structure field was specified twice in an 3753b2bd0f6Slogwang.Tn ASCII 3763b2bd0f6Slogwangcontrol message. 3773b2bd0f6Slogwang.It Bq Er EINVAL 3783b2bd0f6Slogwang.Tn ASCII 3793b2bd0f6Slogwangcontrol message parse error or illegal value. 3803b2bd0f6Slogwang.It Bq Er E2BIG 3813b2bd0f6SlogwangASCII control message array or fixed width string buffer overflow. 3823b2bd0f6Slogwang.El 3833b2bd0f6Slogwang.Sh SEE ALSO 3843b2bd0f6Slogwang.Xr select 2 , 3853b2bd0f6Slogwang.Xr socket 2 , 3863b2bd0f6Slogwang.Xr warnx 3 , 3873b2bd0f6Slogwang.Xr kld 4 , 3883b2bd0f6Slogwang.Xr netgraph 4 , 3893b2bd0f6Slogwang.Xr ng_socket 4 3903b2bd0f6Slogwang.Sh HISTORY 3913b2bd0f6SlogwangThe 3923b2bd0f6Slogwang.Nm netgraph 3933b2bd0f6Slogwangsystem was designed and first implemented at Whistle Communications, Inc.\& in 3943b2bd0f6Slogwanga version of 3953b2bd0f6Slogwang.Fx 2.2 3963b2bd0f6Slogwangcustomized for the Whistle InterJet. 3973b2bd0f6Slogwang.Sh AUTHORS 3983b2bd0f6Slogwang.An Archie Cobbs Aq Mt [email protected] 399