1cb3c7a5dSArchie Cobbs /* 2cb3c7a5dSArchie Cobbs * ng_ksocket.h 3c398230bSWarner Losh */ 4c398230bSWarner Losh 5c398230bSWarner Losh /*- 6cb3c7a5dSArchie Cobbs * Copyright (c) 1996-1999 Whistle Communications, Inc. 7cb3c7a5dSArchie Cobbs * All rights reserved. 8cb3c7a5dSArchie Cobbs * 9cb3c7a5dSArchie Cobbs * Subject to the following obligations and disclaimer of warranty, use and 10cb3c7a5dSArchie Cobbs * redistribution of this software, in source or object code forms, with or 11cb3c7a5dSArchie Cobbs * without modifications are expressly permitted by Whistle Communications; 12cb3c7a5dSArchie Cobbs * provided, however, that: 13cb3c7a5dSArchie Cobbs * 1. Any and all reproductions of the source or object code must include the 14cb3c7a5dSArchie Cobbs * copyright notice above and the following disclaimer of warranties; and 15cb3c7a5dSArchie Cobbs * 2. No rights are granted, in any manner or form, to use Whistle 16cb3c7a5dSArchie Cobbs * Communications, Inc. trademarks, including the mark "WHISTLE 17cb3c7a5dSArchie Cobbs * COMMUNICATIONS" on advertising, endorsements, or otherwise except as 18cb3c7a5dSArchie Cobbs * such appears in the above copyright notice or in the software. 19cb3c7a5dSArchie Cobbs * 20cb3c7a5dSArchie Cobbs * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND 21cb3c7a5dSArchie Cobbs * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO 22cb3c7a5dSArchie Cobbs * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, 23cb3c7a5dSArchie Cobbs * INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF 24cb3c7a5dSArchie Cobbs * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. 25cb3c7a5dSArchie Cobbs * WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY 26cb3c7a5dSArchie Cobbs * REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS 27cb3c7a5dSArchie Cobbs * SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE. 28cb3c7a5dSArchie Cobbs * IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES 29cb3c7a5dSArchie Cobbs * RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING 30cb3c7a5dSArchie Cobbs * WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 31cb3c7a5dSArchie Cobbs * PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR 32cb3c7a5dSArchie Cobbs * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY 33cb3c7a5dSArchie Cobbs * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 34cb3c7a5dSArchie Cobbs * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 35cb3c7a5dSArchie Cobbs * THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY 36cb3c7a5dSArchie Cobbs * OF SUCH DAMAGE. 37cb3c7a5dSArchie Cobbs * 38cc3bbd68SJulian Elischer * Author: Archie Cobbs <archie@freebsd.org> 39cb3c7a5dSArchie Cobbs * $Whistle: ng_ksocket.h,v 1.1 1999/11/16 20:04:40 archie Exp $ 40cb3c7a5dSArchie Cobbs */ 41cb3c7a5dSArchie Cobbs 42e20480bfSRuslan Ermilov #ifndef _NETGRAPH_NG_KSOCKET_H_ 43e20480bfSRuslan Ermilov #define _NETGRAPH_NG_KSOCKET_H_ 44cb3c7a5dSArchie Cobbs 45f97e0a07SJulian Elischer #include <sys/socket.h> 46f97e0a07SJulian Elischer 47cb3c7a5dSArchie Cobbs /* Node type name and magic cookie */ 48cb3c7a5dSArchie Cobbs #define NG_KSOCKET_NODE_TYPE "ksocket" 49cb3c7a5dSArchie Cobbs #define NGM_KSOCKET_COOKIE 942710669 50cb3c7a5dSArchie Cobbs 51f8307e12SArchie Cobbs /* For NGM_KSOCKET_SETOPT and NGM_KSOCKET_GETOPT control messages */ 52f8307e12SArchie Cobbs struct ng_ksocket_sockopt { 53cac2a7deSArchie Cobbs int32_t level; /* second arg of [gs]etsockopt() */ 54cac2a7deSArchie Cobbs int32_t name; /* third arg of [gs]etsockopt() */ 55d56ace09SRuslan Ermilov u_char value[]; /* fourth arg of [gs]etsockopt() */ 56f8307e12SArchie Cobbs }; 57f8307e12SArchie Cobbs 58f8307e12SArchie Cobbs /* Max length socket option we can return via NGM_KSOCKET_GETOPT 59f8307e12SArchie Cobbs XXX This should not be necessary, we should dynamically size 60f8307e12SArchie Cobbs XXX the response. Until then.. */ 61f8307e12SArchie Cobbs #define NG_KSOCKET_MAX_OPTLEN 1024 62f8307e12SArchie Cobbs 63f8307e12SArchie Cobbs /* Keep this in sync with the above structure definition */ 64f8307e12SArchie Cobbs #define NG_KSOCKET_SOCKOPT_INFO(svtype) { \ 65f8307e12SArchie Cobbs { "level", &ng_parse_int32_type }, \ 66f8307e12SArchie Cobbs { "name", &ng_parse_int32_type }, \ 67f8307e12SArchie Cobbs { "value", (svtype) }, \ 68f0184ff8SArchie Cobbs { NULL } \ 69f8307e12SArchie Cobbs } 70f8307e12SArchie Cobbs 71f97e0a07SJulian Elischer /* For NGM_KSOCKET_ACCEPT control message responses */ 72f97e0a07SJulian Elischer struct ng_ksocket_accept { 73f97e0a07SJulian Elischer u_int32_t nodeid; /* node ID of connected ksocket */ 74f97e0a07SJulian Elischer struct sockaddr addr; /* peer's address (variable length) */ 75f97e0a07SJulian Elischer }; 76f97e0a07SJulian Elischer 77f97e0a07SJulian Elischer /* Keep this in sync with the above structure definition */ 78f97e0a07SJulian Elischer #define NGM_KSOCKET_ACCEPT_INFO { \ 79f97e0a07SJulian Elischer { "nodeid", &ng_parse_hint32_type }, \ 80f97e0a07SJulian Elischer { "addr", &ng_ksocket_generic_sockaddr_type }, \ 81f97e0a07SJulian Elischer { NULL } \ 82f97e0a07SJulian Elischer } 83f97e0a07SJulian Elischer 84cb3c7a5dSArchie Cobbs /* Netgraph commands */ 85cb3c7a5dSArchie Cobbs enum { 86cb3c7a5dSArchie Cobbs NGM_KSOCKET_BIND = 1, 87cb3c7a5dSArchie Cobbs NGM_KSOCKET_LISTEN, 88cb3c7a5dSArchie Cobbs NGM_KSOCKET_ACCEPT, 89cb3c7a5dSArchie Cobbs NGM_KSOCKET_CONNECT, 90cb3c7a5dSArchie Cobbs NGM_KSOCKET_GETNAME, 91cb3c7a5dSArchie Cobbs NGM_KSOCKET_GETPEERNAME, 92cb3c7a5dSArchie Cobbs NGM_KSOCKET_SETOPT, 93cb3c7a5dSArchie Cobbs NGM_KSOCKET_GETOPT, 94cb3c7a5dSArchie Cobbs }; 95cb3c7a5dSArchie Cobbs 96601c644fSJulian Elischer #ifdef _KERNEL 97601c644fSJulian Elischer 98327b288eSJulian Elischer /* Structure for sockaddr tag */ 99327b288eSJulian Elischer struct sa_tag { 100327b288eSJulian Elischer struct m_tag tag; 101b07785efSGleb Smirnoff ng_ID_t id; 102327b288eSJulian Elischer struct sockaddr sa; 103327b288eSJulian Elischer }; 104327b288eSJulian Elischer 105327b288eSJulian Elischer /* Tag information ID's */ 106327b288eSJulian Elischer #define NG_KSOCKET_TAG_SOCKADDR 1 /* data is struct sockaddr */ 10719ff9e5fSArchie Cobbs 108601c644fSJulian Elischer #endif /* _KERNEL */ 109e20480bfSRuslan Ermilov #endif /* _NETGRAPH_NG_KSOCKET_H_ */ 110