in6_proto.c
来自「eCos操作系统源码」· C语言 代码 · 共 770 行 · 第 1/2 页
C
770 行
//==========================================================================//// src/sys/netinet6/in6_proto.c////==========================================================================//####BSDCOPYRIGHTBEGIN####//// -------------------------------------------//// Portions of this software may have been derived from OpenBSD, // FreeBSD or other sources, and are covered by the appropriate// copyright disclaimers included herein.//// Portions created by Red Hat are// Copyright (C) 2002 Red Hat, Inc. All Rights Reserved.//// -------------------------------------------////####BSDCOPYRIGHTEND####//==========================================================================/* $KAME: in6_proto.c,v 1.111 2001/12/21 03:32:34 itojun Exp $ *//* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *//* * Copyright (c) 1982, 1986, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * @(#)in_proto.c 8.1 (Berkeley) 6/10/93 */#include <sys/param.h>#include <sys/socket.h>#include <sys/socketvar.h>#include <sys/protosw.h>#include <sys/domain.h>#include <sys/mbuf.h>#include <sys/sysctl.h>#include <net/if.h>#include <net/radix.h>#ifdef RADIX_ART#include <net/radix_art.h>#elif defined(RADIX_MPATH)#include <net/radix_mpath.h>#endif#include <net/route.h>#include <netinet/in.h>#include <netinet/in_systm.h>#include <netinet/in_var.h>#include <netinet/ip_encap.h>#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || (defined(__NetBSD__) && !defined(TCP6)) || defined(__OpenBSD__) || (defined(__bsdi__) && _BSDI_VERSION >= 199802)#include <netinet/ip.h>#include <netinet/ip_var.h>#endif#if (defined(__NetBSD__) && !defined(TCP6)) || defined(__OpenBSD__) || (defined(__bsdi__) && _BSDI_VERSION >= 199802)#include <netinet/in_pcb.h>#endif#include <netinet/ip6.h>#include <netinet6/ip6_var.h>#include <netinet/icmp6.h>#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(__OpenBSD__) && !(defined(__bsdi__) && _BSDI_VERSION >= 199802)#include <netinet6/in6_pcb.h>#endif#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(__OpenBSD__) || (defined(__bsdi__) && _BSDI_VERSION >= 199802)#include <netinet/tcp.h>#include <netinet/tcp_timer.h>#include <netinet/tcp_var.h>#include <netinet/udp.h>#include <netinet/udp_var.h>#if (defined(__FreeBSD__) && __FreeBSD__ >= 4)#include <netinet6/tcp6_var.h>#endif#else#if defined(__NetBSD__) && !defined(TCP6)#include <netinet/tcp.h>#include <netinet/tcp_fsm.h>#include <netinet/tcp_seq.h>#include <netinet/tcp_timer.h>#include <netinet/tcp_var.h>#include <netinet/tcpip.h>#include <netinet/tcp_debug.h>#else#include <netinet6/tcp6.h>#include <netinet6/tcp6_fsm.h>#include <netinet6/tcp6_seq.h>#include <netinet6/tcp6_timer.h>#include <netinet6/tcp6_var.h>#endif#endif#ifdef __FreeBSD__#include <netinet6/raw_ip6.h>#endif#if !defined(__OpenBSD__) && !(defined(__bsdi__) && _BSDI_VERSION >= 199802)#if !(defined(__FreeBSD__) && __FreeBSD__ >= 4)#include <netinet6/udp6.h>#endif#include <netinet6/udp6_var.h>#endif#include <netinet6/pim6_var.h>#include <netinet6/nd6.h>#ifdef IPSEC#ifdef __OpenBSD__#include <netinet/ip_ipsp.h>#include <netinet/ip_ah.h>#include <netinet/ip_esp.h>#include <netinet/ip_ipip.h>#else#include <netinet6/ipsec.h>#include <netinet6/ah.h>#ifdef IPSEC_ESP#include <netinet6/esp.h>#endif#include <netinet6/ipcomp.h>#endif#endif /* IPSEC */#include <netinet6/ip6protosw.h>#ifdef MIP6#include <netinet6/mip6.h>#endif /* MIP6 */#ifndef offsetof#define offsetof(type, member) ((size_t)(&((type *)0)->member))#endif/* * TCP/IP protocol family: IP6, ICMP6, UDP, TCP. */extern struct domain inet6domain;#if defined(__FreeBSD__) && __FreeBSD__ >= 3static struct pr_usrreqs nousrreqs;#endif#ifndef __NetBSD__#define PR_LISTEN 0#endif#if !defined(__NetBSD__) && !defined(__OpenBSD__)#define PR_ABRTACPTDIS 0#endif#ifdef __OpenBSD__#define PR_LASTHDR 0#endifstruct ip6protosw inet6sw[] = {{ 0, &inet6domain, IPPROTO_IPV6, 0, 0, 0, 0, 0, 0, ip6_init, 0, frag6_slowtimo, frag6_drain,#ifndef __FreeBSD__ ip6_sysctl,#else# if __FreeBSD__ >= 3 &nousrreqs,# endif#endif},{ SOCK_DGRAM, &inet6domain, IPPROTO_UDP, PR_ATOMIC|PR_ADDR, udp6_input, 0, udp6_ctlinput, ip6_ctloutput,#if defined(__FreeBSD__) && __FreeBSD__ >= 3 0, 0,#elif defined(HAVE_NRL_INPCB) udp6_usrreq, 0,#else udp6_usrreq, udp6_init,#endif 0, 0, 0,#ifndef __FreeBSD__#ifdef HAVE_NRL_INPCB udp_sysctl,#else udp6_sysctl,#endif#else# if __FreeBSD__ >= 3 &udp6_usrreqs,# endif#endif},#ifdef TCP6{ SOCK_STREAM, &inet6domain, IPPROTO_TCP, PR_CONNREQUIRED|PR_WANTRCVD|PR_LISTEN|PR_ABRTACPTDIS, tcp6_input, 0, tcp6_ctlinput, tcp6_ctloutput, tcp6_usrreq, tcp6_init, tcp6_fasttimo, tcp6_slowtimo, tcp6_drain,#ifndef __FreeBSD__ tcp6_sysctl,#else# if __FreeBSD__ >= 3 &tcp6_usrreqs,# endif#endif},#else{ SOCK_STREAM, &inet6domain, IPPROTO_TCP, PR_CONNREQUIRED|PR_WANTRCVD|PR_LISTEN, tcp6_input, 0, tcp6_ctlinput, tcp_ctloutput,#if defined(__FreeBSD__) && __FreeBSD__ >= 3 0,#elif defined(HAVE_NRL_INPCB) tcp6_usrreq,#else tcp_usrreq,#endif#ifdef INET /* don't call initialization and timeout routines twice */ 0, 0, 0, tcp_drain,#else tcp_init, tcp_fasttimo, tcp_slowtimo, tcp_drain,#endif#ifndef __FreeBSD__ tcp_sysctl,#else# if __FreeBSD__ >= 3 &tcp6_usrreqs,# endif#endif},#endif /* TCP6 */{ SOCK_RAW, &inet6domain, IPPROTO_RAW, PR_ATOMIC|PR_ADDR, rip6_input, rip6_output, rip6_ctlinput, rip6_ctloutput,#if defined(__FreeBSD__) && __FreeBSD__ >= 3 0,#else rip6_usrreq,#endif 0, 0, 0, 0,#if defined(__FreeBSD__) && __FreeBSD__ >= 3 &rip6_usrreqs#endif},{ SOCK_RAW, &inet6domain, IPPROTO_ICMPV6, PR_ATOMIC|PR_ADDR|PR_LASTHDR, icmp6_input, rip6_output, rip6_ctlinput, rip6_ctloutput,#if defined(__FreeBSD__) && __FreeBSD__ >= 3 0,#else rip6_usrreq,#endif icmp6_init, icmp6_fasttimo, 0, 0,#ifndef __FreeBSD__ icmp6_sysctl,#else# if __FreeBSD__ >= 3 &rip6_usrreqs# endif#endif},{ SOCK_RAW, &inet6domain, IPPROTO_DSTOPTS,PR_ATOMIC|PR_ADDR, dest6_input, 0, 0, 0, 0, 0, 0, 0, 0,#if defined(__FreeBSD__) && __FreeBSD__ >= 3 &nousrreqs#endif},{ SOCK_RAW, &inet6domain, IPPROTO_ROUTING,PR_ATOMIC|PR_ADDR, route6_input, 0, 0, 0, 0, 0, 0, 0, 0,#if defined(__FreeBSD__) && __FreeBSD__ >= 3 &nousrreqs#endif},{ SOCK_RAW, &inet6domain, IPPROTO_FRAGMENT,PR_ATOMIC|PR_ADDR, frag6_input, 0, 0, 0, 0, 0, 0, 0, 0,#if defined(__FreeBSD__) && __FreeBSD__ >= 3 &nousrreqs#endif},#ifdef IPSEC{ SOCK_RAW, &inet6domain, IPPROTO_AH, PR_ATOMIC|PR_ADDR, ah6_input, 0,#ifdef __NetBSD__ ah6_ctlinput,#else 0,#endif 0, 0, 0, 0, 0, 0,#ifdef __OpenBSD__ ah_sysctl,#elif !defined(__FreeBSD__) ipsec6_sysctl,#else# if __FreeBSD__ >= 3 &nousrreqs,# endif#endif},#ifdef IPSEC_ESP{ SOCK_RAW, &inet6domain, IPPROTO_ESP, PR_ATOMIC|PR_ADDR, esp6_input, 0, esp6_ctlinput, 0, 0, 0, 0, 0, 0,#ifdef __OpenBSD__ esp_sysctl,#elif !defined(__FreeBSD__) ipsec6_sysctl,#else# if __FreeBSD__ >= 3 &nousrreqs,# endif#endif},#endif#ifndef __OpenBSD__{ SOCK_RAW, &inet6domain, IPPROTO_IPCOMP, PR_ATOMIC|PR_ADDR, ipcomp6_input, 0, 0, 0, 0, 0, 0, 0, 0,#ifndef __FreeBSD__ ipsec6_sysctl,#else# if __FreeBSD__ >= 3 &nousrreqs,# endif#endif},
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?