Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Jul 1999 19:50:05 +0900
From:      Kenjiro Cho <kjc@csl.sony.co.jp>
To:        Poul-Henning Kamp <phk@critter.freebsd.dk>
Cc:        Mike Smith <mike@smith.net.au>, Peter Jeremy <jeremyp@gsmx07.alcatel.com.au>, cvs-all@FreeBSD.org, cvs-committers@FreeBSD.org, jkh@FreeBSD.org
Subject:   Re: cvs commit: src/release/sysinstall tcpip.c 
Message-ID:  <199907231050.TAA00721@hotaka.csl.sony.co.jp>
In-Reply-To: Your message of "Fri, 23 Jul 1999 10:10:58 %2B0200." <33651.932717458@critter.freebsd.dk> 

next in thread | previous in thread | raw e-mail | index | archive | help

Poul-Henning Kamp <phk@critter.freebsd.dk> said:
>> I would advocate the ether_input API.  I have never heard of a 3rd
>> party ethernet driver, and considering the number of changes we
>> introduce between 3.x and 4.x anyway, driver compatibility is
>> already pretty much shot anyway,  so I think we should fix the
>> API to do it "right" rather than fight for a compatibility which
>> is at best of only marginal advantage to anybody.

If we are going to change the network driver API, I want to push it
further.  (I briefly touched this point at USENIX.)
 - queueing should be taken out of drivers
 - redefine ifioctl handling
 - reorganize link-type/proocol specific handling

Also, it would be nice to have a common interface layer (or it can be
called "abstracted network device layer") that handles the following
items:
 - bpf, bridging
 - fastforwarding
 - queueing, (multiprotocol) firewall
   (possible integration of ALTQ, dummynet, ipfw)
 - layered interfaces
   (subinterfaces (vlan or atm), multi-link, tunneling)
This common interface layer will make future evolution easier.

In this model, a driver simply passes a raw packet to
if_input(), something like:

if_input(ifp, m)
{
	bpf_processing;

	/* link type specific processing */
	(*ifp->if_input)(ifp, &m, &inq);
	if (m == NULL)
		return;

	IF_ENQUEUE(inq, m);
	schednetisr(inq);
}

On the sending side, 

if_output(ifp, m, dst, rt)
{
	/* link type specific processing */
	(*ifp->if_output)(ifp, m, dst, rt);

	IF_ENQUEUE(&ifp->if_snd, m);
}

if_start(ifp)
{
	IF_DEQUEUE(&ifp->if_snd, m);
	if (m == NULL)
		return;
	process_bpf;

	/* call driver's start routine that sends out one packet */
	(*ifp->if_start)(ifp, m);
}

Comments?

-Kenjiro


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199907231050.TAA00721>