Date: Fri, 23 Jul 1999 10:22:54 -0700 From: Mike Smith <mike@smith.net.au> To: Kenjiro Cho <kjc@csl.sony.co.jp> Cc: Poul-Henning Kamp <phk@critter.freebsd.dk>, 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: <199907231722.KAA03340@dingo.cdrom.com> In-Reply-To: Your message of "Fri, 23 Jul 1999 19:50:05 %2B0900." <199907231050.TAA00721@hotaka.csl.sony.co.jp>
next in thread | previous in thread | raw e-mail | index | archive | help
> 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 I don't like this one very much; it's one place where we would lose a great amount of efficiency. > 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); > } This is more or less what I had in mind. > 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); > } This last fragment is unacceptable though; it's one of the massive inefficiencies in the Linux architecture and I don't think you'll ever sell a proposal that requires CPU intervention between each and every packet. By all means implement a per-interface flag that limits the number of datagrams that can be in the interface's private send queue at once (I think we already have one of those, actually) so that you can adjust the latency involved. -- \\ The mind's the standard \\ Mike Smith \\ of the man. \\ msmith@freebsd.org \\ -- Joseph Merrick \\ msmith@cdrom.com 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?199907231722.KAA03340>