186d7f5d3SJohn Marino 286d7f5d3SJohn Marino /* 386d7f5d3SJohn Marino * ng_bpf.h 486d7f5d3SJohn Marino * 586d7f5d3SJohn Marino * Copyright (c) 1996-1999 Whistle Communications, Inc. 686d7f5d3SJohn Marino * All rights reserved. 786d7f5d3SJohn Marino * 886d7f5d3SJohn Marino * Subject to the following obligations and disclaimer of warranty, use and 986d7f5d3SJohn Marino * redistribution of this software, in source or object code forms, with or 1086d7f5d3SJohn Marino * without modifications are expressly permitted by Whistle Communications; 1186d7f5d3SJohn Marino * provided, however, that: 1286d7f5d3SJohn Marino * 1. Any and all reproductions of the source or object code must include the 1386d7f5d3SJohn Marino * copyright notice above and the following disclaimer of warranties; and 1486d7f5d3SJohn Marino * 2. No rights are granted, in any manner or form, to use Whistle 1586d7f5d3SJohn Marino * Communications, Inc. trademarks, including the mark "WHISTLE 1686d7f5d3SJohn Marino * COMMUNICATIONS" on advertising, endorsements, or otherwise except as 1786d7f5d3SJohn Marino * such appears in the above copyright notice or in the software. 1886d7f5d3SJohn Marino * 1986d7f5d3SJohn Marino * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND 2086d7f5d3SJohn Marino * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO 2186d7f5d3SJohn Marino * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, 2286d7f5d3SJohn Marino * INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF 2386d7f5d3SJohn Marino * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. 2486d7f5d3SJohn Marino * WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANBPF, OR MAKE ANY 2586d7f5d3SJohn Marino * REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS 2686d7f5d3SJohn Marino * SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE. 2786d7f5d3SJohn Marino * IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES 2886d7f5d3SJohn Marino * RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING 2986d7f5d3SJohn Marino * WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 3086d7f5d3SJohn Marino * PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR 3186d7f5d3SJohn Marino * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY 3286d7f5d3SJohn Marino * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3386d7f5d3SJohn Marino * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 3486d7f5d3SJohn Marino * THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY 3586d7f5d3SJohn Marino * OF SUCH DAMAGE. 3686d7f5d3SJohn Marino * 3786d7f5d3SJohn Marino * Author: Archie Cobbs <archie@freebsd.org> 3886d7f5d3SJohn Marino * 3986d7f5d3SJohn Marino * $FreeBSD: src/sys/netgraph/ng_bpf.h,v 1.2.4.3 2002/07/02 23:44:02 archie Exp $ 4086d7f5d3SJohn Marino * $DragonFly: src/sys/netgraph/bpf/ng_bpf.h,v 1.5 2007/06/03 20:51:11 dillon Exp $ 4186d7f5d3SJohn Marino * $Whistle: ng_bpf.h,v 1.3 1999/12/03 20:30:23 archie Exp $ 4286d7f5d3SJohn Marino */ 4386d7f5d3SJohn Marino 4486d7f5d3SJohn Marino #ifndef _NETGRAPH_BPF_H_ 4586d7f5d3SJohn Marino #define _NETGRAPH_BPF_H_ 4686d7f5d3SJohn Marino 4786d7f5d3SJohn Marino /* Node type name and magic cookie */ 4886d7f5d3SJohn Marino #define NG_BPF_NODE_TYPE "bpf" 4986d7f5d3SJohn Marino #define NGM_BPF_COOKIE 944100792 5086d7f5d3SJohn Marino 5186d7f5d3SJohn Marino /* Program structure for one hook */ 5286d7f5d3SJohn Marino struct ng_bpf_hookprog { 5386d7f5d3SJohn Marino char thisHook[NG_HOOKSIZ]; /* name of hook */ 5486d7f5d3SJohn Marino char ifMatch[NG_HOOKSIZ]; /* match dest hook */ 5586d7f5d3SJohn Marino char ifNotMatch[NG_HOOKSIZ]; /* !match dest hook */ 5686d7f5d3SJohn Marino int32_t bpf_prog_len; /* #isns in program */ 5786d7f5d3SJohn Marino struct bpf_insn bpf_prog[__ARRAY_ZERO]; /* bpf program */ 5886d7f5d3SJohn Marino }; 5986d7f5d3SJohn Marino 6086d7f5d3SJohn Marino #define NG_BPF_HOOKPROG_SIZE(numInsn) \ 6186d7f5d3SJohn Marino (sizeof(struct ng_bpf_hookprog) + (numInsn) * sizeof(struct bpf_insn)) 6286d7f5d3SJohn Marino 6386d7f5d3SJohn Marino /* Keep this in sync with the above structure definition */ 6486d7f5d3SJohn Marino #define NG_BPF_HOOKPROG_TYPE_INFO(bptype) { \ 6586d7f5d3SJohn Marino { "thisHook", &ng_parse_hookbuf_type }, \ 6686d7f5d3SJohn Marino { "ifMatch", &ng_parse_hookbuf_type }, \ 6786d7f5d3SJohn Marino { "ifNotMatch", &ng_parse_hookbuf_type }, \ 6886d7f5d3SJohn Marino { "bpf_prog_len", &ng_parse_int32_type }, \ 6986d7f5d3SJohn Marino { "bpf_prog", (bptype) }, \ 7086d7f5d3SJohn Marino { NULL } \ 7186d7f5d3SJohn Marino } 7286d7f5d3SJohn Marino 7386d7f5d3SJohn Marino /* Statistics structure for one hook */ 7486d7f5d3SJohn Marino struct ng_bpf_hookstat { 7586d7f5d3SJohn Marino u_int64_t recvFrames; 7686d7f5d3SJohn Marino u_int64_t recvOctets; 7786d7f5d3SJohn Marino u_int64_t recvMatchFrames; 7886d7f5d3SJohn Marino u_int64_t recvMatchOctets; 7986d7f5d3SJohn Marino u_int64_t xmitFrames; 8086d7f5d3SJohn Marino u_int64_t xmitOctets; 8186d7f5d3SJohn Marino }; 8286d7f5d3SJohn Marino 8386d7f5d3SJohn Marino /* Keep this in sync with the above structure definition */ 8486d7f5d3SJohn Marino #define NG_BPF_HOOKSTAT_TYPE_INFO { \ 8586d7f5d3SJohn Marino { "recvFrames", &ng_parse_uint64_type }, \ 8686d7f5d3SJohn Marino { "recvOctets", &ng_parse_uint64_type }, \ 8786d7f5d3SJohn Marino { "recvMatchFrames", &ng_parse_uint64_type }, \ 8886d7f5d3SJohn Marino { "recvMatchOctets", &ng_parse_uint64_type }, \ 8986d7f5d3SJohn Marino { "xmitFrames", &ng_parse_uint64_type }, \ 9086d7f5d3SJohn Marino { "xmitOctets", &ng_parse_uint64_type }, \ 9186d7f5d3SJohn Marino { NULL } \ 9286d7f5d3SJohn Marino } 9386d7f5d3SJohn Marino 9486d7f5d3SJohn Marino /* Netgraph commands */ 9586d7f5d3SJohn Marino enum { 9686d7f5d3SJohn Marino NGM_BPF_SET_PROGRAM = 1, /* supply a struct ng_bpf_hookprog */ 9786d7f5d3SJohn Marino NGM_BPF_GET_PROGRAM, /* returns a struct ng_bpf_hookprog */ 9886d7f5d3SJohn Marino NGM_BPF_GET_STATS, /* supply name as char[NG_HOOKSIZ] */ 9986d7f5d3SJohn Marino NGM_BPF_CLR_STATS, /* supply name as char[NG_HOOKSIZ] */ 10086d7f5d3SJohn Marino NGM_BPF_GETCLR_STATS, /* supply name as char[NG_HOOKSIZ] */ 10186d7f5d3SJohn Marino }; 10286d7f5d3SJohn Marino 10386d7f5d3SJohn Marino #endif /* _NETGRAPH_BPF_H_ */ 104