1 /* uipc_proto.c 4.2 81/11/08 */ 2 3 #include "../h/param.h" 4 #include "../h/socket.h" 5 #include "../h/protocol.h" 6 #include "../h/protosw.h" 7 #include "../h/mbuf.h" 8 #include "../net/inet.h" 9 10 /* should include a header file giving desired protocols */ 11 #define NTCP 1 12 13 /* 14 * Protocol configuration table and routines to search it. 15 */ 16 17 /* 18 * Generic (local or not yet specified) protocol. 19 */ 20 int gen_usrreq(); 21 22 #if NTCP > 0 23 /* 24 * TCP/IP protocol family: IP, ICMP, UDP, TCP. 25 */ 26 int ip_init(),ip_input(),ip_output(),ip_advise(),ip_slowtimo(),ip_drain(); 27 int icmp_input(),icmp_drain(); 28 int udp_input(),udp_advise(),udp_usrreq(),udp_sense(); 29 int tcp_init(),tcp_input(),tcp_advise(),tcp_fasttimo(),tcp_slowtimo(), 30 tcp_usrreq(),tcp_drain(),tcp_sense(); 31 int ri_input(),ri_advise(),ri_usrreq(),ri_sense(); 32 #endif 33 34 #if NPUP > 0 35 /* 36 * Pup protocols: PUP, BSP. 37 */ 38 int pup1_input(),pup1_output(),pup1_advise(),pup1_slowtimo(), 39 pup1_drain(),pup1_usrreq(),pup1_sense(); 40 int bsp_input(),bsp_advise(),bsp_fasttimo(),bsp_slowtimo(), 41 bsp_drain(),bsp_usrreq(),bsp_sense(); 42 int rawpup_input(),rawpup_usrreq(),rawpup_sense(); 43 #endif 44 45 #if NCHAOS > 0 46 /* 47 * Chaosnet protocols. 48 */ 49 /* ... */ 50 #endif 51 52 #if NOISCP > 0 53 /* 54 * Office information system communcation protocols. 55 */ 56 /* ... */ 57 #endif 58 59 #if NNBS > 0 60 /* 61 * NBS protocols. 62 */ 63 /* ... */ 64 #endif 65 66 #if NECMA > 0 67 /* 68 * ECMA protocols. 69 */ 70 /* ... */ 71 #endif 72 73 #if NDATAKIT > 0 74 /* 75 * Datakit protocols. 76 */ 77 /* ... */ 78 #endif 79 80 struct protosw protosw[] = { 81 { SOCK_STREAM, PF_GENERIC, 0, 0, 82 0, 0, 0, 0, 83 0, 0, 0, gen_usrreq, 0, 84 0 }, 85 { SOCK_DGRAM, PF_GENERIC, 0, PR_ATOMIC|PR_ADDR, 86 0, 0, 0, 0, 87 0, 0, 0, gen_usrreq, 0, 88 0 }, 89 { SOCK_RDM, PF_GENERIC, 0, PR_ATOMIC|PR_ADDR, 90 0, 0, 0, 0, 91 0, 0, 0, gen_usrreq, 0, 92 0 }, 93 { SOCK_RAW, PF_GENERIC, 0, PR_ATOMIC|PR_ADDR, 94 0, 0, 0, 0, 95 0, 0, 0, gen_usrreq, 0, 96 0 }, 97 #if NTCP > 0 98 { 0, 0, 0, 0, 99 ip_init, ip_input, ip_output, 0, 100 0, ip_slowtimo, ip_drain, 0, 0, 101 0 }, 102 { 0, 0, IPPROTO_ICMP, 0, 103 0, icmp_input, 0, 0, 104 0, 0, icmp_drain, 0, 0, 105 0 }, 106 { SOCK_DGRAM, PF_INET, IPPROTO_UDP, PR_ATOMIC|PR_ADDR, 107 0, udp_input, 0, udp_advise, 108 0, 0, 0, udp_usrreq, udp_sense, 109 MLEN }, 110 { SOCK_STREAM, PF_INET, IPPROTO_TCP, 0, 111 tcp_init, tcp_input, 0, tcp_advise, 112 tcp_fasttimo, tcp_slowtimo, tcp_drain, tcp_usrreq, tcp_sense, 113 MLEN }, 114 { SOCK_RAW, PF_INET, IPPROTO_RAW, PR_ATOMIC|PR_ADDR, 115 0, ri_input, 0, ri_advise, 116 0, 0, 0, ri_usrreq, ri_sense, 117 MLEN }, 118 #endif 119 #if NPUP > 0 120 { SOCK_DGRAM, PF_PUP, 0, PR_ATOMIC|PR_ADDR, 121 pup_init, pup_input, pup_output, pup_advise, 122 0, pup_slowtimo, pup_drain, pup_usrreq, pup_sense, 123 MLEN }, 124 { SOCK_STREAM, PF_PUP1, PUPPROTO_BSP, 0, 125 bsp_init, bsp_input, 0, bsp_advise, 126 bsp_fasttimo, bsp_slowtimo, bsp_drain, bsp_usrreq, bsp_sense, 127 MLEN }, 128 { SOCK_RAW, PF_PUP1, PUPPROTO_RAW, PR_ATOMIC|PR_ADDR, 129 rp_init, rp_input, 0, rp_advise, 130 rp_fasttimo, rp_slowtimo, rp_drain, rp_usrreq, rp_sense, 131 MLEN }, 132 #endif 133 #if NCHAOS > 0 134 /* ... */ 135 #endif 136 #if NOISCP > 0 137 /* ... */ 138 #endif 139 #if NNBS > 0 140 /* ... */ 141 #endif 142 #if NECMA > 0 143 /* ... */ 144 #endif 145 #if NDATAKIT > 0 146 /* ... */ 147 #endif 148 }; 149 #define protoswEND &protosw[sizeof (protosw)/sizeof (protosw[0])] 150 151 /* 152 * Operations on protocol table and protocol families. 153 */ 154 155 /* 156 * Find a standard protocol in a protocol family 157 * of a specific type. 158 */ 159 struct protosw * 160 pf_findtype(family, type) 161 int family, type; 162 { 163 register struct protosw *pr; 164 165 if (family == 0) 166 return (0); 167 for (pr = protosw; pr < protoswEND; pr++) 168 if (pr->pr_family == family && pr->pr_type == type) 169 return (pr); 170 return (0); 171 } 172 173 /* 174 * Find a specified protocol in a specified protocol family. 175 */ 176 struct protosw * 177 pf_findproto(family, protocol) 178 int family, protocol; 179 { 180 register struct protosw *pr; 181 182 if (family == 0) 183 return (0); 184 for (pr = protosw; pr < protoswEND; pr++) 185 if (pr->pr_family == family && pr->pr_protocol == protocol) 186 return (pr); 187 return (0); 188 } 189 190 prinit() 191 { 192 193 } 194