* 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
* 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
* @(#)in_proto.c 8.1 (Berkeley) 6/10/93
#include <netinet/in_systm.h>
#include <netinet/ip_var.h>
#include <netinet/ip_icmp.h>
#include <netinet/in_pcb.h>
#include <netinet/igmp_var.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>
#include <netinet/udp_var.h>
* TCP/IP protocol family: IP, ICMP, UDP, TCP.
void idpip_input(), nsip_ctlinput();
void tpip_input(), tpip_ctlinput(), tp_ctloutput();
int tp_init(), tp_slowtimo(), tp_drain(), tp_usrreq();
void eoninput(), eonctlinput(), eonprotoinit();
extern struct domain inetdomain
;
struct protosw inetsw
[] = {
ip_init
, 0, ip_slowtimo
, ip_drain
, ip_sysctl
{ SOCK_DGRAM
, &inetdomain
, IPPROTO_UDP
, PR_ATOMIC
|PR_ADDR
,
udp_input
, 0, udp_ctlinput
, ip_ctloutput
,
udp_init
, 0, 0, 0, udp_sysctl
{ SOCK_STREAM
, &inetdomain
, IPPROTO_TCP
, PR_CONNREQUIRED
|PR_WANTRCVD
,
tcp_input
, 0, tcp_ctlinput
, tcp_ctloutput
,
tcp_init
, tcp_fasttimo
, tcp_slowtimo
, tcp_drain
,
{ SOCK_RAW
, &inetdomain
, IPPROTO_RAW
, PR_ATOMIC
|PR_ADDR
,
rip_input
, rip_output
, 0, rip_ctloutput
,
{ SOCK_RAW
, &inetdomain
, IPPROTO_ICMP
, PR_ATOMIC
|PR_ADDR
,
icmp_input
, rip_output
, 0, rip_ctloutput
,
{ SOCK_RAW
, &inetdomain
, IPPROTO_IGMP
, PR_ATOMIC
|PR_ADDR
,
igmp_input
, rip_output
, 0, rip_ctloutput
,
igmp_init
, igmp_fasttimo
, 0, 0,
{ SOCK_SEQPACKET
,&inetdomain
, IPPROTO_TP
, PR_CONNREQUIRED
|PR_WANTRCVD
,
tpip_input
, 0, tpip_ctlinput
, tp_ctloutput
,
tp_init
, 0, tp_slowtimo
, tp_drain
,
/* EON (ISO CLNL over IP) */
{ SOCK_RAW
, &inetdomain
, IPPROTO_EON
, 0,
eoninput
, 0, eonctlinput
, 0,
{ SOCK_RAW
, &inetdomain
, IPPROTO_IDP
, PR_ATOMIC
|PR_ADDR
,
idpip_input
, rip_output
, nsip_ctlinput
, 0,
{ SOCK_RAW
, &inetdomain
, 0, PR_ATOMIC
|PR_ADDR
,
rip_input
, rip_output
, 0, rip_ctloutput
,
struct domain inetdomain
=
{ AF_INET
, "internet", 0, 0, 0,
inetsw
, &inetsw
[sizeof(inetsw
)/sizeof(inetsw
[0])], 0,
rn_inithead
, 32, sizeof(struct sockaddr_in
) };
extern struct domain impdomain
;
int rimp_output(), hostslowtimo();
struct protosw impsw
[] = {
{ SOCK_RAW
, &impdomain
, 0, PR_ATOMIC
|PR_ADDR
,
struct domain impdomain
=
{ AF_IMPLINK
, "imp", 0, 0, 0,
impsw
, &impsw
[sizeof (impsw
)/sizeof(impsw
[0])] };
* HYPERchannel protocol family: raw interface.
extern struct domain hydomain
;
struct protosw hysw
[] = {
{ SOCK_RAW
, &hydomain
, 0, PR_ATOMIC
|PR_ADDR
,
{ AF_HYLINK
, "hy", 0, 0, 0, hysw
, &hysw
[sizeof (hysw
)/sizeof(hysw
[0])] };