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>
