コード例 #1
0
ファイル: rarp_in.c プロジェクト: dancrossnyc/xinu68k
//------------------------------------------------------------------------
//  rarp_in  -  handle RARP packet coming in from Ethernet network
//------------------------------------------------------------------------
int
rarp_in(struct epacket *packet, int dev)
{
	int ps;
	int pid;
	int ret;
	struct arppak *apacptr;
	struct etblk *etptr;

	apacptr = (struct arppak *)packet->ep_data;
	ret = SYSERR;
	if (net2hs(apacptr->ar_op) == AR_RRLY) {
		etptr = (struct etblk *)devtab[dev].iobuf;
		if (memcmp(apacptr->ar_tha, etptr->etpaddr, EPADLEN) == 0) {
			memmove(Net.myaddr, apacptr->ar_tpa, IPLEN);
			netnum(Net.mynet, Net.myaddr);
			ps = disable();
			Net.mavalid = TRUE;
			pid = Arp.rarppid;
			if (!isbadpid(pid)) {
				Arp.rarppid = BADPID;
				send(pid, OK);
			}
			restore(ps);
		}
		ret = OK;
	}
	freebuf(packet);

	return ret;
}
コード例 #2
0
ファイル: netmask.c プロジェクト: m3y54m/32bitmicro
/*------------------------------------------------------------------------
 *  netmask  -  set the default mask for the given net
 *------------------------------------------------------------------------
 */
IPaddr
netmask(IPaddr net)
{
	IPaddr	netpart;
	int	i;

	if (net == 0)
		return net;
	/* check for net match (for subnets) */

	netpart = netnum(net);
	for (i=0; i<Net.nif; ++i)
		if (nif[i].ni_svalid && nif[i].ni_ivalid &&
		    nif[i].ni_net == netpart)
			return nif[i].ni_mask;
	if (IP_CLASSA(net)) return hl2net(0xff000000);
	if (IP_CLASSB(net)) return hl2net(0xffff0000);
	if (IP_CLASSC(net)) return hl2net(0xffffff00);
	return ~0;
}