1 /* $FreeBSD$ */ 2 /* $KAME: ip_encap.h,v 1.7 2000/03/25 07:23:37 sumikawa Exp $ */ 3 4 /*- 5 * SPDX-License-Identifier: BSD-3-Clause 6 * 7 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 8 * Copyright (c) 2018 Andrey V. Elsukov <ae@FreeBSD.org> 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. Neither the name of the project nor the names of its contributors 20 * may be used to endorse or promote products derived from this software 21 * without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 */ 35 36 #ifndef _NETINET_IP_ENCAP_H_ 37 #define _NETINET_IP_ENCAP_H_ 38 39 #ifdef _KERNEL 40 41 int encap4_input(struct mbuf **, int *, int); 42 int encap6_input(struct mbuf **, int *, int); 43 44 typedef int (*encap_lookup_t)(const struct mbuf *, int, int, void **); 45 typedef int (*encap_check_t)(const struct mbuf *, int, int, void *); 46 typedef int (*encap_input_t)(struct mbuf *, int, int, void *); 47 typedef void (*encap_srcaddr_t)(void *, const struct sockaddr *, int); 48 49 struct encap_config { 50 int proto; /* protocol */ 51 int min_length; /* minimum packet length */ 52 int max_hdrsize; /* maximum header size */ 53 int exact_match; /* a packet is exactly matched */ 54 #define ENCAP_DRV_LOOKUP 0x7fffffff 55 56 encap_lookup_t lookup; 57 encap_check_t check; 58 encap_input_t input; 59 60 void *pad[3]; 61 }; 62 63 struct encaptab; 64 struct srcaddrtab; 65 66 const struct encaptab *ip_encap_attach(const struct encap_config *, 67 void *arg, int mflags); 68 const struct encaptab *ip6_encap_attach(const struct encap_config *, 69 void *arg, int mflags); 70 71 const struct srcaddrtab *ip_encap_register_srcaddr(encap_srcaddr_t, 72 void *arg, int mflags); 73 const struct srcaddrtab *ip6_encap_register_srcaddr(encap_srcaddr_t, 74 void *arg, int mflags); 75 76 int ip_encap_unregister_srcaddr(const struct srcaddrtab *); 77 int ip6_encap_unregister_srcaddr(const struct srcaddrtab *); 78 int ip_encap_detach(const struct encaptab *); 79 int ip6_encap_detach(const struct encaptab *); 80 #endif 81 82 #endif /*_NETINET_IP_ENCAP_H_*/ 83