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