xref: /freebsd/sys/netgraph/ng_macfilter.h (revision 95ee2897)
1e8db04c3SNick Hibma /*
24d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3e8db04c3SNick Hibma  *
4e8db04c3SNick Hibma  * Copyright (c) 2002 Ericsson Research & Pekka Nikander
5e8db04c3SNick Hibma  * Copyright (c) 2020 Nick Hibma <n_hibma@FreeBSD.org>
6e8db04c3SNick Hibma  * All rights reserved.
7e8db04c3SNick Hibma  *
8e8db04c3SNick Hibma  * Redistribution and use in source and binary forms, with or without
9e8db04c3SNick Hibma  * modification, are permitted provided that the following conditions
10e8db04c3SNick Hibma  * are met:
11e8db04c3SNick Hibma  * 1. Redistributions of source code must retain the above copyright
12e8db04c3SNick Hibma  *    notice unmodified, this list of conditions, and the following
13e8db04c3SNick Hibma  *    disclaimer.
14e8db04c3SNick Hibma  * 2. Redistributions in binary form must reproduce the above copyright
15e8db04c3SNick Hibma  *    notice, this list of conditions and the following disclaimer in the
16e8db04c3SNick Hibma  *    documentation and/or other materials provided with the distribution.
17e8db04c3SNick Hibma  *
18e8db04c3SNick Hibma  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19e8db04c3SNick Hibma  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20e8db04c3SNick Hibma  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21e8db04c3SNick Hibma  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22e8db04c3SNick Hibma  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23e8db04c3SNick Hibma  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24e8db04c3SNick Hibma  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25e8db04c3SNick Hibma  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26e8db04c3SNick Hibma  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27e8db04c3SNick Hibma  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28e8db04c3SNick Hibma  * SUCH DAMAGE.
29e8db04c3SNick Hibma  */
30e8db04c3SNick Hibma 
31e8db04c3SNick Hibma #ifndef _NETGRAPH_MACFILTER_H_
32e8db04c3SNick Hibma #define _NETGRAPH_MACFILTER_H_
33e8db04c3SNick Hibma 
34e8db04c3SNick Hibma #define NG_MACFILTER_NODE_TYPE		"macfilter"
35e8db04c3SNick Hibma #define NGM_MACFILTER_COOKIE 		1042445461
36e8db04c3SNick Hibma 
37e8db04c3SNick Hibma /* Hook names */
38e8db04c3SNick Hibma #define NG_MACFILTER_HOOK_ETHER		"ether"         /* connected to ether:lower */
39e8db04c3SNick Hibma #define NG_MACFILTER_HOOK_DEFAULT 	"default"       /* connected to ether:upper; upper[0] */
40e8db04c3SNick Hibma /* Other hooks may be named freely                         connected to ether:upper; upper[1..n]*/
41e8db04c3SNick Hibma #define NG_MACFILTER_HOOK_DEFAULT_ID    0
42e8db04c3SNick Hibma 
43e8db04c3SNick Hibma #define OFFSETOF(s, e) ((char *)&((s *)0)->e - (char *)((s *)0))
44e8db04c3SNick Hibma 
45e8db04c3SNick Hibma /* Netgraph commands understood/sent by this node type */
46e8db04c3SNick Hibma enum {
47e8db04c3SNick Hibma     NGM_MACFILTER_RESET = 1,
48e8db04c3SNick Hibma     NGM_MACFILTER_DIRECT = 2,
49e8db04c3SNick Hibma     NGM_MACFILTER_DIRECT_HOOKID = 3,
50e8db04c3SNick Hibma     NGM_MACFILTER_GET_MACS = 4,
51e8db04c3SNick Hibma     NGM_MACFILTER_GETCLR_MACS = 5,
52e8db04c3SNick Hibma     NGM_MACFILTER_CLR_MACS = 6,
53e8db04c3SNick Hibma     NGM_MACFILTER_GET_HOOKS = 7
54e8db04c3SNick Hibma };
55e8db04c3SNick Hibma 
56e8db04c3SNick Hibma /* This structure is supplied with the NGM_MACFILTER_DIRECT command */
57e8db04c3SNick Hibma struct ngm_macfilter_direct {
58e8db04c3SNick Hibma     u_char	ether[ETHER_ADDR_LEN];  	/* MAC address */
59e8db04c3SNick Hibma     u_char	hookname[NG_HOOKSIZ];   	/* Upper hook name*/
60e8db04c3SNick Hibma };
61e8db04c3SNick Hibma #define NGM_MACFILTER_DIRECT_FIELDS {                   \
62e8db04c3SNick Hibma     { "ether",          &ng_parse_enaddr_type },        \
63e8db04c3SNick Hibma     { "hookname",       &ng_parse_hookbuf_type },       \
64e8db04c3SNick Hibma     { NULL }                                            \
65e8db04c3SNick Hibma }
66e8db04c3SNick Hibma 
67e8db04c3SNick Hibma /* This structure is supplied with the NGM_MACFILTER_DIRECT_HOOKID command */
68e8db04c3SNick Hibma struct ngm_macfilter_direct_hookid {
69e8db04c3SNick Hibma     u_char	ether[ETHER_ADDR_LEN];  	/* MAC address */
70e8db04c3SNick Hibma     u_int16_t	hookid;		        	/* Upper hook hookid */
71e8db04c3SNick Hibma };
72e8db04c3SNick Hibma #define NGM_MACFILTER_DIRECT_NDX_FIELDS {               \
73e8db04c3SNick Hibma     { "ether",          &ng_parse_enaddr_type },        \
74e8db04c3SNick Hibma     { "hookid",         &ng_parse_uint16_type },        \
75e8db04c3SNick Hibma     { NULL }                                            \
76e8db04c3SNick Hibma }
77e8db04c3SNick Hibma 
78e8db04c3SNick Hibma /* This structure is returned in the array by the NGM_MACFILTER_GET(CLR)_MACS commands */
79e8db04c3SNick Hibma struct ngm_macfilter_mac {
80e8db04c3SNick Hibma     u_char	ether[ETHER_ADDR_LEN];  	/* MAC address */
81e8db04c3SNick Hibma     u_int16_t	hookid;		        	/* Upper hook hookid */
82e8db04c3SNick Hibma     u_int64_t	packets_in;			/* packets in from downstream */
83e8db04c3SNick Hibma     u_int64_t	bytes_in;			/* bytes in from upstream */
84e8db04c3SNick Hibma     u_int64_t	packets_out;			/* packets out towards downstream */
85e8db04c3SNick Hibma     u_int64_t	bytes_out;			/* bytes out towards downstream */
86e8db04c3SNick Hibma };
87e8db04c3SNick Hibma #define NGM_MACFILTER_MAC_FIELDS {                      \
88e8db04c3SNick Hibma     { "ether",          &ng_parse_enaddr_type },        \
89e8db04c3SNick Hibma     { "hookid",         &ng_parse_uint16_type },        \
90e8db04c3SNick Hibma     { "packets_in",	&ng_parse_uint64_type },        \
91e8db04c3SNick Hibma     { "bytes_in",  	&ng_parse_uint64_type },        \
92e8db04c3SNick Hibma     { "packets_out",    &ng_parse_uint64_type },        \
93e8db04c3SNick Hibma     { "bytes_out",      &ng_parse_uint64_type },        \
94e8db04c3SNick Hibma     { NULL }                                            \
95e8db04c3SNick Hibma }
96e8db04c3SNick Hibma /* This structure is returned by the NGM_MACFILTER_GET(CLR)_MACS commands */
97e8db04c3SNick Hibma struct ngm_macfilter_macs {
98e8db04c3SNick Hibma     u_int32_t   n;                              /* Number of entries in macs */
99e8db04c3SNick Hibma     struct ngm_macfilter_mac macs[];            /* Macs table */
100e8db04c3SNick Hibma };
101e8db04c3SNick Hibma #define NGM_MACFILTER_MACS_FIELDS {                     \
102e8db04c3SNick Hibma     { "n",              &ng_parse_uint32_type },        \
103e8db04c3SNick Hibma     { "macs",           &ng_macfilter_macs_array_type },\
104e8db04c3SNick Hibma     { NULL }                                            \
105e8db04c3SNick Hibma }
106e8db04c3SNick Hibma 
107e8db04c3SNick Hibma /* This structure is returned in an array by the NGM_MACFILTER_GET_HOOKS command */
108e8db04c3SNick Hibma struct ngm_macfilter_hook {
109e8db04c3SNick Hibma     u_char	hookname[NG_HOOKSIZ];   	/* Upper hook name*/
110e8db04c3SNick Hibma     u_int16_t	hookid;		        	/* Upper hook hookid */
111e8db04c3SNick Hibma     u_int32_t   maccnt;                         /* Number of mac addresses associated with hook */
112e8db04c3SNick Hibma };
113e8db04c3SNick Hibma #define NGM_MACFILTER_HOOK_FIELDS {                     \
114e8db04c3SNick Hibma     { "hookname",       &ng_parse_hookbuf_type },       \
115e8db04c3SNick Hibma     { "hookid",         &ng_parse_uint16_type },        \
116e8db04c3SNick Hibma     { "maccnt",         &ng_parse_uint32_type },        \
117e8db04c3SNick Hibma     { NULL }                                            \
118e8db04c3SNick Hibma }
119e8db04c3SNick Hibma /* This structure is returned by the NGM_MACFILTER_GET_HOOKS command */
120e8db04c3SNick Hibma struct ngm_macfilter_hooks {
121e8db04c3SNick Hibma     u_int32_t   n;                              /* Number of entries in hooks */
122e8db04c3SNick Hibma     struct ngm_macfilter_hook hooks[];          /* Hooks table */
123e8db04c3SNick Hibma };
124e8db04c3SNick Hibma #define NGM_MACFILTER_HOOKS_FIELDS {                     \
125e8db04c3SNick Hibma     { "n",              &ng_parse_uint32_type },         \
126e8db04c3SNick Hibma     { "hooks",          &ng_macfilter_hooks_array_type },\
127e8db04c3SNick Hibma     { NULL }                                             \
128e8db04c3SNick Hibma }
129e8db04c3SNick Hibma 
130e8db04c3SNick Hibma #endif /* _NETGRAPH_MACFILTER_H_ */
131