plan 9 kernel history: overview | file list | diff list

2002/0403/pc/ethersink.c (diff list | history)

pc/ethersink.c on 2002/0217
2002/0217    
/* 
 * An ethernet /dev/null. 
 * Useful as a bridging target with ethernet-based VPN. 
 */ 
#include "u.h" 
#include "../port/lib.h" 
#include "mem.h" 
#include "dat.h" 
#include "fns.h" 
#include "io.h" 
#include "../port/error.h" 
#include "../port/netif.h" 
#include "etherif.h" 
 
static long 
ctl(Ether *ether, void *buf, long n) 
{ 
	uchar ea[Eaddrlen]; 
	Cmdbuf *cb; 
 
	cb = parsecmd(buf, n); 
	if(cb->nf >= 2 
	&& strcmp(cb->f[0], "ea")==0 
	&& parseether(ea, cb->f[1]) == 0){ 
		free(cb); 
		memmove(ether->ea, ea, Eaddrlen); 
		memmove(ether->addr, ether->ea, Eaddrlen); 
		return 0; 
	} 
	free(cb); 
	error(Ebadctl); 
	return -1;	/* not reached */ 
} 
 
static void 
nop(Ether*) 
{ 
} 
 
static int 
reset(Ether* ether) 
{ 
	uchar ea[Eaddrlen]; 
 
2002/0403    
	if(ether->type==nil) 
		return -1; 
2002/0217    
	memset(ea, 0, sizeof ea); 
	ether->mbps = 1000; 
	ether->attach = nop; 
	ether->transmit = nop; 
	ether->irq = 0; 
	ether->interrupt = nil; 
	ether->ifstat = nil; 
	ether->ctl = ctl; 
	ether->promiscuous = nil; 
	ether->multicast = nil; 
	ether->arg = ether; 
	return 0; 
} 
 
void 
ethersinklink(void) 
{ 
	addethercard("sink", reset); 
} 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)