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>