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 + -
显示快捷键?