110d7ccabSJulian Elischer /*- 210d7ccabSJulian Elischer * ng_etf.h 3c398230bSWarner Losh */ 4c398230bSWarner Losh 5c398230bSWarner Losh /*- 6*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 7fe267a55SPedro F. Giffuni * 810d7ccabSJulian Elischer * Copyright (c) 2001, FreeBSD Incorporated 910d7ccabSJulian Elischer * All rights reserved. 1010d7ccabSJulian Elischer * 1110d7ccabSJulian Elischer * Redistribution and use in source and binary forms, with or without 1210d7ccabSJulian Elischer * modification, are permitted provided that the following conditions 1310d7ccabSJulian Elischer * are met: 1410d7ccabSJulian Elischer * 1. Redistributions of source code must retain the above copyright 1510d7ccabSJulian Elischer * notice unmodified, this list of conditions, and the following 1610d7ccabSJulian Elischer * disclaimer. 1710d7ccabSJulian Elischer * 2. Redistributions in binary form must reproduce the above copyright 1810d7ccabSJulian Elischer * notice, this list of conditions and the following disclaimer in the 1910d7ccabSJulian Elischer * documentation and/or other materials provided with the distribution. 2010d7ccabSJulian Elischer * 2110d7ccabSJulian Elischer * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 2210d7ccabSJulian Elischer * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2310d7ccabSJulian Elischer * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2410d7ccabSJulian Elischer * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2510d7ccabSJulian Elischer * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2610d7ccabSJulian Elischer * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2710d7ccabSJulian Elischer * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2810d7ccabSJulian Elischer * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2910d7ccabSJulian Elischer * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3010d7ccabSJulian Elischer * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3110d7ccabSJulian Elischer * SUCH DAMAGE. 3210d7ccabSJulian Elischer * 3310d7ccabSJulian Elischer * Author: Julian Elischer <julian@freebsd.org> 3410d7ccabSJulian Elischer */ 3510d7ccabSJulian Elischer 36e20480bfSRuslan Ermilov #ifndef _NETGRAPH_NG_ETF_H_ 37e20480bfSRuslan Ermilov #define _NETGRAPH_NG_ETF_H_ 3810d7ccabSJulian Elischer 3910d7ccabSJulian Elischer /* Node type name. This should be unique among all netgraph node types */ 4010d7ccabSJulian Elischer #define NG_ETF_NODE_TYPE "etf" 4110d7ccabSJulian Elischer 4210d7ccabSJulian Elischer /* Node type cookie. Should also be unique. This value MUST change whenever 4310d7ccabSJulian Elischer an incompatible change is made to this header file, to insure consistency. 4410d7ccabSJulian Elischer The de facto method for generating cookies is to take the output of the 4510d7ccabSJulian Elischer date command: date -u +'%s' */ 4610d7ccabSJulian Elischer #define NGM_ETF_COOKIE 983084516 4710d7ccabSJulian Elischer 4810d7ccabSJulian Elischer /* Hook names */ 4910d7ccabSJulian Elischer #define NG_ETF_HOOK_DOWNSTREAM "downstream" 5010d7ccabSJulian Elischer #define NG_ETF_HOOK_NOMATCH "nomatch" 5110d7ccabSJulian Elischer 5210d7ccabSJulian Elischer /* Netgraph commands understood by this node type */ 5310d7ccabSJulian Elischer enum { 5410d7ccabSJulian Elischer NGM_ETF_SET_FLAG = 1, 5510d7ccabSJulian Elischer NGM_ETF_GET_STATUS, 5610d7ccabSJulian Elischer NGM_ETF_SET_FILTER, 5710d7ccabSJulian Elischer 5810d7ccabSJulian Elischer }; 5910d7ccabSJulian Elischer 6010d7ccabSJulian Elischer /* This structure is returned by the NGM_ETF_GET_STATUS command */ 6110d7ccabSJulian Elischer struct ng_etfstat { 6210d7ccabSJulian Elischer u_int32_t packets_in; /* packets in from downstream */ 6310d7ccabSJulian Elischer u_int32_t packets_out; /* packets out towards downstream */ 6410d7ccabSJulian Elischer }; 6510d7ccabSJulian Elischer 6610d7ccabSJulian Elischer /* 6710d7ccabSJulian Elischer * This needs to be kept in sync with the above structure definition 6810d7ccabSJulian Elischer */ 6910d7ccabSJulian Elischer #define NG_ETF_STATS_TYPE_INFO { \ 7010d7ccabSJulian Elischer { "packets_in", &ng_parse_uint32_type }, \ 7110d7ccabSJulian Elischer { "packets_out", &ng_parse_uint32_type }, \ 72f0184ff8SArchie Cobbs { NULL } \ 7310d7ccabSJulian Elischer } 7410d7ccabSJulian Elischer 7510d7ccabSJulian Elischer /* This structure is returned by the NGM_ETF_GET_STATUS command */ 7610d7ccabSJulian Elischer struct ng_etffilter { 7787e2c66aSHartmut Brandt char matchhook[NG_HOOKSIZ]; /* hook name */ 7810d7ccabSJulian Elischer u_int16_t ethertype; /* this ethertype to this hook */ 7910d7ccabSJulian Elischer }; 8010d7ccabSJulian Elischer 8110d7ccabSJulian Elischer /* 8210d7ccabSJulian Elischer * This needs to be kept in sync with the above structure definition 8310d7ccabSJulian Elischer */ 8410d7ccabSJulian Elischer #define NG_ETF_FILTER_TYPE_INFO { \ 8510d7ccabSJulian Elischer { "matchhook", &ng_parse_hookbuf_type }, \ 8610d7ccabSJulian Elischer { "ethertype", &ng_parse_uint16_type }, \ 87f0184ff8SArchie Cobbs { NULL } \ 8810d7ccabSJulian Elischer } 8910d7ccabSJulian Elischer 90e20480bfSRuslan Ermilov #endif /* _NETGRAPH_NG_ETF_H_ */ 91