123179Smckusick /* 223179Smckusick * Copyright (c) 1982 Regents of the University of California. 323179Smckusick * All rights reserved. The Berkeley software License Agreement 423179Smckusick * specifies the terms and conditions for redistribution. 523179Smckusick * 6*24809Skarels * @(#)in_proto.c 6.11 (Berkeley) 09/16/85 723179Smckusick */ 87618Sroot 917059Sbloom #include "param.h" 1017059Sbloom #include "socket.h" 1117059Sbloom #include "protosw.h" 1217059Sbloom #include "domain.h" 1317059Sbloom #include "mbuf.h" 147618Sroot 1517059Sbloom #include "in.h" 1617059Sbloom #include "in_systm.h" 179030Sroot 187618Sroot /* 197618Sroot * TCP/IP protocol family: IP, ICMP, UDP, TCP. 207618Sroot */ 21*24809Skarels int ip_output(),ip_ctloutput(); 227618Sroot int ip_init(),ip_slowtimo(),ip_drain(); 237618Sroot int icmp_input(); 247618Sroot int udp_input(),udp_ctlinput(); 257618Sroot int udp_usrreq(); 267618Sroot int udp_init(); 277618Sroot int tcp_input(),tcp_ctlinput(); 28*24809Skarels int tcp_usrreq(),tcp_ctloutput(); 297618Sroot int tcp_init(),tcp_fasttimo(),tcp_slowtimo(),tcp_drain(); 307618Sroot int rip_input(),rip_output(); 317620Sroot extern int raw_usrreq(); 327618Sroot /* 337618Sroot * IMP protocol family: raw interface. 347618Sroot * Using the raw interface entry to get the timer routine 357618Sroot * in is a kludge. 367618Sroot */ 377618Sroot #include "imp.h" 387618Sroot #if NIMP > 0 397618Sroot int rimp_output(), hostslowtimo(); 407618Sroot #endif 417618Sroot 4221771Skarels #ifdef NSIP 4321771Skarels int idpip_input(); 4421771Skarels #endif 4521771Skarels 4616990Skarels extern struct domain inetdomain; 4716990Skarels 487618Sroot struct protosw inetsw[] = { 4916990Skarels { 0, &inetdomain, 0, 0, 507618Sroot 0, ip_output, 0, 0, 517618Sroot 0, 527618Sroot ip_init, 0, ip_slowtimo, ip_drain, 537618Sroot }, 5416990Skarels { SOCK_DGRAM, &inetdomain, IPPROTO_UDP, PR_ATOMIC|PR_ADDR, 55*24809Skarels udp_input, 0, udp_ctlinput, ip_ctloutput, 567618Sroot udp_usrreq, 577618Sroot udp_init, 0, 0, 0, 587618Sroot }, 5916990Skarels { SOCK_STREAM, &inetdomain, IPPROTO_TCP, PR_CONNREQUIRED|PR_WANTRCVD, 60*24809Skarels tcp_input, 0, tcp_ctlinput, tcp_ctloutput, 617618Sroot tcp_usrreq, 627618Sroot tcp_init, tcp_fasttimo, tcp_slowtimo, tcp_drain, 637618Sroot }, 6416990Skarels { SOCK_RAW, &inetdomain, IPPROTO_RAW, PR_ATOMIC|PR_ADDR, 65*24809Skarels rip_input, rip_output, 0, 0, 667618Sroot raw_usrreq, 677618Sroot 0, 0, 0, 0, 687618Sroot }, 6921771Skarels { SOCK_RAW, &inetdomain, IPPROTO_ICMP, PR_ATOMIC|PR_ADDR, 7021771Skarels icmp_input, rip_output, 0, 0, 7116797Skarels raw_usrreq, 7216797Skarels 0, 0, 0, 0, 7316797Skarels }, 7421771Skarels #ifdef NSIP 7524231Skarels { SOCK_RAW, &inetdomain, IPPROTO_IDP, PR_ATOMIC|PR_ADDR, 7621771Skarels idpip_input, rip_output, 0, 0, 7716052Skarels raw_usrreq, 7816052Skarels 0, 0, 0, 0, 7916052Skarels }, 8021771Skarels #endif 8121771Skarels /* raw wildcard */ 8221771Skarels { SOCK_RAW, &inetdomain, 0, PR_ATOMIC|PR_ADDR, 83*24809Skarels rip_input, rip_output, 0, 0, 8421771Skarels raw_usrreq, 8521771Skarels 0, 0, 0, 0, 8621771Skarels }, 877620Sroot }; 887620Sroot 897620Sroot struct domain inetdomain = 9016990Skarels { AF_INET, "internet", 0, 0, 0, 9116990Skarels inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])] }; 927620Sroot 937618Sroot #if NIMP > 0 9416990Skarels extern struct domain impdomain; 9516990Skarels 967620Sroot struct protosw impsw[] = { 9716990Skarels { SOCK_RAW, &impdomain, 0, PR_ATOMIC|PR_ADDR, 987618Sroot 0, rimp_output, 0, 0, 997618Sroot raw_usrreq, 1007618Sroot 0, 0, hostslowtimo, 0, 1017620Sroot }, 1027618Sroot }; 1037618Sroot 1047620Sroot struct domain impdomain = 10516990Skarels { AF_IMPLINK, "imp", 0, 0, 0, 10616990Skarels impsw, &impsw[sizeof (impsw)/sizeof(impsw[0])] }; 1077620Sroot #endif 10823744Skarels 10923744Skarels #include "hy.h" 11023744Skarels #if NHY > 0 11123744Skarels /* 11223744Skarels * HYPERchannel protocol family: raw interface. 11323744Skarels */ 11423744Skarels int rhy_output(); 115*24809Skarels extern struct domain hydomain; 11623744Skarels 11723744Skarels struct protosw hysw[] = { 118*24809Skarels { SOCK_RAW, &hydomain, 0, PR_ATOMIC|PR_ADDR, 11923744Skarels 0, rhy_output, 0, 0, 12023744Skarels raw_usrreq, 12123744Skarels 0, 0, 0, 0, 12223744Skarels }, 12323744Skarels }; 12423744Skarels 12523744Skarels struct domain hydomain = 12623744Skarels { AF_HYLINK, "hy", hysw, &hysw[sizeof (hysw)/sizeof(hysw[0])] }; 12723744Skarels #endif 128