xref: /freebsd/sys/net/pfil.h (revision f1eafd6db8628ad3efbcbf878cda3a3f39bf7df8)
1e9c7bebfSDarren Reed /*	$FreeBSD$	*/
2e9c7bebfSDarren Reed 
3e9c7bebfSDarren Reed /*
4e9c7bebfSDarren Reed  * Copyright (c) 1996 Matthew R. Green
5e9c7bebfSDarren Reed  * All rights reserved.
6e9c7bebfSDarren Reed  *
7e9c7bebfSDarren Reed  * Redistribution and use in source and binary forms, with or without
8e9c7bebfSDarren Reed  * modification, are permitted provided that the following conditions
9e9c7bebfSDarren Reed  * are met:
10e9c7bebfSDarren Reed  * 1. Redistributions of source code must retain the above copyright
11e9c7bebfSDarren Reed  *    notice, this list of conditions and the following disclaimer.
12e9c7bebfSDarren Reed  * 2. Redistributions in binary form must reproduce the above copyright
13e9c7bebfSDarren Reed  *    notice, this list of conditions and the following disclaimer in the
14e9c7bebfSDarren Reed  *    documentation and/or other materials provided with the distribution.
15e9c7bebfSDarren Reed  * 3. The name of the author may not be used to endorse or promote products
16e9c7bebfSDarren Reed  *    derived from this software without specific prior written permission.
17e9c7bebfSDarren Reed  *
18e9c7bebfSDarren Reed  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19e9c7bebfSDarren Reed  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20e9c7bebfSDarren Reed  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21e9c7bebfSDarren Reed  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22e9c7bebfSDarren Reed  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23e9c7bebfSDarren Reed  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24e9c7bebfSDarren Reed  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25e9c7bebfSDarren Reed  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26e9c7bebfSDarren Reed  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27e9c7bebfSDarren Reed  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28e9c7bebfSDarren Reed  * SUCH DAMAGE.
29e9c7bebfSDarren Reed  */
30e9c7bebfSDarren Reed 
31e9c7bebfSDarren Reed #ifndef _NET_PFIL_H_
32e9c7bebfSDarren Reed #define _NET_PFIL_H_
33e9c7bebfSDarren Reed 
34e9c7bebfSDarren Reed #include <sys/queue.h>
35e9c7bebfSDarren Reed 
36e9c7bebfSDarren Reed struct mbuf;
37e9c7bebfSDarren Reed struct ifnet;
38e9c7bebfSDarren Reed 
39e9c7bebfSDarren Reed /*
40e9c7bebfSDarren Reed  * The packet filter hooks are designed for anything to call them to
41e9c7bebfSDarren Reed  * possibly intercept the packet.
42e9c7bebfSDarren Reed  */
43e9c7bebfSDarren Reed struct packet_filter_hook {
44e3975643SJake Burkholder         TAILQ_ENTRY(packet_filter_hook) pfil_link;
45e9c7bebfSDarren Reed         int	(*pfil_func) __P((void *, int, struct ifnet *, int,
46e9c7bebfSDarren Reed 				  struct mbuf **));
47e9c7bebfSDarren Reed 	int	pfil_flags;
48e9c7bebfSDarren Reed };
49e9c7bebfSDarren Reed 
50e9c7bebfSDarren Reed #define PFIL_IN		0x00000001
51e9c7bebfSDarren Reed #define PFIL_OUT	0x00000002
52e9c7bebfSDarren Reed #define PFIL_WAITOK	0x00000004
53e9c7bebfSDarren Reed #define PFIL_ALL	(PFIL_IN|PFIL_OUT)
54e9c7bebfSDarren Reed 
55e3975643SJake Burkholder typedef	TAILQ_HEAD(pfil_list, packet_filter_hook) pfil_list_t;
56e9c7bebfSDarren Reed 
57e9c7bebfSDarren Reed struct pfil_head {
58e9c7bebfSDarren Reed 	pfil_list_t	ph_in;
59e9c7bebfSDarren Reed 	pfil_list_t	ph_out;
60e9c7bebfSDarren Reed 	int		ph_init;
61f1eafd6dSRuslan Ermilov };
62e9c7bebfSDarren Reed 
63e9c7bebfSDarren Reed struct packet_filter_hook *pfil_hook_get __P((int, struct pfil_head *));
64e9c7bebfSDarren Reed int	pfil_add_hook __P((int (*func) __P((void *, int,
65e9c7bebfSDarren Reed 	    struct ifnet *, int, struct mbuf **)), int, struct pfil_head *));
66e9c7bebfSDarren Reed int	pfil_remove_hook __P((int (*func) __P((void *, int,
67e9c7bebfSDarren Reed 	    struct ifnet *, int, struct mbuf **)), int, struct pfil_head *));
68e9c7bebfSDarren Reed 
69e9c7bebfSDarren Reed /* XXX */
70e7278dcfSAndrey A. Chernov #if defined(_KERNEL) && !defined(KLD_MODULE)
71d61dfe72SAndrey A. Chernov #include "opt_ipfilter.h"
72e9c7bebfSDarren Reed #endif
73e9c7bebfSDarren Reed 
748f3a320aSAndrey A. Chernov #if IPFILTER > 0
75e9c7bebfSDarren Reed #ifdef PFIL_HOOKS
76e9c7bebfSDarren Reed #undef PFIL_HOOKS
77e9c7bebfSDarren Reed #endif
78e9c7bebfSDarren Reed #define PFIL_HOOKS
798f3a320aSAndrey A. Chernov #endif /* IPFILTER */
80e9c7bebfSDarren Reed 
81e9c7bebfSDarren Reed #endif /* _NET_PFIL_H_ */
82