1686cdd19SJun-ichiro itojun Hagino /* $KAME: ip_encap.h,v 1.7 2000/03/25 07:23:37 sumikawa Exp $ */ 2686cdd19SJun-ichiro itojun Hagino 3c398230bSWarner Losh /*- 451369649SPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 551369649SPedro F. Giffuni * 6686cdd19SJun-ichiro itojun Hagino * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 76d8fdfa9SAndrey V. Elsukov * Copyright (c) 2018 Andrey V. Elsukov <ae@FreeBSD.org> 8686cdd19SJun-ichiro itojun Hagino * All rights reserved. 9686cdd19SJun-ichiro itojun Hagino * 10686cdd19SJun-ichiro itojun Hagino * Redistribution and use in source and binary forms, with or without 11686cdd19SJun-ichiro itojun Hagino * modification, are permitted provided that the following conditions 12686cdd19SJun-ichiro itojun Hagino * are met: 13686cdd19SJun-ichiro itojun Hagino * 1. Redistributions of source code must retain the above copyright 14686cdd19SJun-ichiro itojun Hagino * notice, this list of conditions and the following disclaimer. 15686cdd19SJun-ichiro itojun Hagino * 2. Redistributions in binary form must reproduce the above copyright 16686cdd19SJun-ichiro itojun Hagino * notice, this list of conditions and the following disclaimer in the 17686cdd19SJun-ichiro itojun Hagino * documentation and/or other materials provided with the distribution. 18686cdd19SJun-ichiro itojun Hagino * 3. Neither the name of the project nor the names of its contributors 19686cdd19SJun-ichiro itojun Hagino * may be used to endorse or promote products derived from this software 20686cdd19SJun-ichiro itojun Hagino * without specific prior written permission. 21686cdd19SJun-ichiro itojun Hagino * 22686cdd19SJun-ichiro itojun Hagino * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 23686cdd19SJun-ichiro itojun Hagino * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24686cdd19SJun-ichiro itojun Hagino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25686cdd19SJun-ichiro itojun Hagino * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 26686cdd19SJun-ichiro itojun Hagino * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27686cdd19SJun-ichiro itojun Hagino * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28686cdd19SJun-ichiro itojun Hagino * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29686cdd19SJun-ichiro itojun Hagino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30686cdd19SJun-ichiro itojun Hagino * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31686cdd19SJun-ichiro itojun Hagino * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32686cdd19SJun-ichiro itojun Hagino * SUCH DAMAGE. 33686cdd19SJun-ichiro itojun Hagino */ 34686cdd19SJun-ichiro itojun Hagino 35686cdd19SJun-ichiro itojun Hagino #ifndef _NETINET_IP_ENCAP_H_ 36686cdd19SJun-ichiro itojun Hagino #define _NETINET_IP_ENCAP_H_ 37686cdd19SJun-ichiro itojun Hagino 38686cdd19SJun-ichiro itojun Hagino #ifdef _KERNEL 39686cdd19SJun-ichiro itojun Hagino 408f5a8818SKevin Lo int encap4_input(struct mbuf **, int *, int); 414d77a549SAlfred Perlstein int encap6_input(struct mbuf **, int *, int); 426d8fdfa9SAndrey V. Elsukov 436d8fdfa9SAndrey V. Elsukov typedef int (*encap_lookup_t)(const struct mbuf *, int, int, void **); 446d8fdfa9SAndrey V. Elsukov typedef int (*encap_check_t)(const struct mbuf *, int, int, void *); 456d8fdfa9SAndrey V. Elsukov typedef int (*encap_input_t)(struct mbuf *, int, int, void *); 46*8251c68dSAndrey V. Elsukov typedef void (*encap_srcaddr_t)(void *, const struct sockaddr *, int); 476d8fdfa9SAndrey V. Elsukov 486d8fdfa9SAndrey V. Elsukov struct encap_config { 496d8fdfa9SAndrey V. Elsukov int proto; /* protocol */ 506d8fdfa9SAndrey V. Elsukov int min_length; /* minimum packet length */ 5176b09d18SAndrey V. Elsukov int max_hdrsize; /* maximum header size */ 526d8fdfa9SAndrey V. Elsukov int exact_match; /* a packet is exactly matched */ 536d8fdfa9SAndrey V. Elsukov #define ENCAP_DRV_LOOKUP 0x7fffffff 546d8fdfa9SAndrey V. Elsukov 556d8fdfa9SAndrey V. Elsukov encap_lookup_t lookup; 566d8fdfa9SAndrey V. Elsukov encap_check_t check; 576d8fdfa9SAndrey V. Elsukov encap_input_t input; 5876b09d18SAndrey V. Elsukov 5976b09d18SAndrey V. Elsukov void *pad[3]; 606d8fdfa9SAndrey V. Elsukov }; 616d8fdfa9SAndrey V. Elsukov 626d8fdfa9SAndrey V. Elsukov struct encaptab; 63*8251c68dSAndrey V. Elsukov struct srcaddrtab; 646d8fdfa9SAndrey V. Elsukov 656d8fdfa9SAndrey V. Elsukov const struct encaptab *ip_encap_attach(const struct encap_config *, 666d8fdfa9SAndrey V. Elsukov void *arg, int mflags); 676d8fdfa9SAndrey V. Elsukov const struct encaptab *ip6_encap_attach(const struct encap_config *, 686d8fdfa9SAndrey V. Elsukov void *arg, int mflags); 696d8fdfa9SAndrey V. Elsukov 70*8251c68dSAndrey V. Elsukov const struct srcaddrtab *ip_encap_register_srcaddr(encap_srcaddr_t, 71*8251c68dSAndrey V. Elsukov void *arg, int mflags); 72*8251c68dSAndrey V. Elsukov const struct srcaddrtab *ip6_encap_register_srcaddr(encap_srcaddr_t, 73*8251c68dSAndrey V. Elsukov void *arg, int mflags); 74*8251c68dSAndrey V. Elsukov 75*8251c68dSAndrey V. Elsukov int ip_encap_unregister_srcaddr(const struct srcaddrtab *); 76*8251c68dSAndrey V. Elsukov int ip6_encap_unregister_srcaddr(const struct srcaddrtab *); 776d8fdfa9SAndrey V. Elsukov int ip_encap_detach(const struct encaptab *); 786d8fdfa9SAndrey V. Elsukov int ip6_encap_detach(const struct encaptab *); 79686cdd19SJun-ichiro itojun Hagino #endif 80686cdd19SJun-ichiro itojun Hagino 81686cdd19SJun-ichiro itojun Hagino #endif /*_NETINET_IP_ENCAP_H_*/ 82