|
|
1.1 ! root 1: /* rarp_in.c - rarp_in */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <proc.h> ! 6: #include <network.h> ! 7: ! 8: /*------------------------------------------------------------------------ ! 9: * rarp_in - handle RARP packet coming in from Ethernet network ! 10: *------------------------------------------------------------------------ ! 11: */ ! 12: rarp_in(packet, device) ! 13: struct epacket *packet; ! 14: int device; ! 15: { ! 16: PStype ps; ! 17: int pid; ! 18: int ret; ! 19: struct arppak *apacptr; ! 20: struct etblk *etptr; ! 21: ! 22: apacptr = (struct arppak *) packet->ep_data; ! 23: if ((net2hs(apacptr->ar_op)&LOW16) == AR_RRLY) { ! 24: etptr = (struct etblk *)devtab[device].dvioblk; ! 25: if ( blkequ(apacptr->ar_tha,etptr->etpaddr,EPADLEN) ) { ! 26: blkcopy(Net.myaddr, apacptr->ar_tpa, IPLEN); ! 27: netnum(Net.mynet, Net.myaddr); ! 28: disable(ps); ! 29: Net.mavalid = TRUE; ! 30: pid = Arp.rarppid; ! 31: if (!isbadpid(pid)) { ! 32: Arp.rarppid = BADPID; ! 33: send(pid, OK); ! 34: } ! 35: restore(ps); ! 36: } ! 37: ret = OK; ! 38: } else ! 39: ret = SYSERR; ! 40: freebuf(packet); ! 41: return(ret); ! 42: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.