|
|
1.1 root 1: /* netin.c */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <proc.h>
6: #include <network.h>
7:
8: /*------------------------------------------------------------------------
9: * netin - initialize net, start output side, and become input daemon
10: *------------------------------------------------------------------------
11: */
12: PROCESS netin(userpid)
13: int userpid; /* user process to resume */
14: {
15: register struct epacket *packet;
16: struct epacket *getbuf();
17: int icmpp;
18:
19: arpinit();
20: netinit();
21: icmpp = pcreate(NETFQ);
22: resume(create(NETOUT, NETOSTK, NETIPRI-1, NETONAM,
23: 2, userpid,icmpp));
24:
25: for (packet = getbuf(Net.netpool) ; TRUE ;) {
26: Net.npacket++;
27: if ( read(ETHER,packet,sizeof(*packet)) == SYSERR ) {
28: Net.ndrop++;
29: continue;
30: }
31: switch (net2hs(packet->ep_hdr.e_ptype)&LOW16) {
32:
33: case EP_ARP:
34: arp_in(packet, ETHER);
35: packet = getbuf(Net.netpool);
36: break;
37:
38: case EP_RARP:
39: rarp_in(packet, ETHER);
40: packet = getbuf(Net.netpool);
41: break;
42:
43: case EP_IP:
44: ip_in(packet, icmpp, NETFQ);
45: packet = getbuf(Net.netpool);
46: break;
47:
48: default: /* just drop packet */
49: Net.ndrop++;
50: }
51: }
52: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.