xref: /freebsd/sys/netgraph/ng_etf.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
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