On Wed, 2009-08-12 at 21:40 -0700, Darren Reed wrote: > Ah, I see what you're driving at. > > So I suppose the task then is to implement both DLT_NULL and > DLT_IPNET for lo0 as opposed to just DLT_IPNET. > > I hadn't considered that...
Or DLT_RAW for /dev/lo0 (I think this implies that packets begin with an IP header). /dev/lo0 is simply there for compatibility with OSs that have a similar device, and those OSs certainly don't use the ipnet header on /dev/lo0. Perhaps that would be acceptable. The BPF functionality that switches the device used based on DLT value has its drawbacks, and one of them is clear here. For one, selecting the "ipnet" lo0 (/dev/ipnet/lo0) with DLT_IPNET also implies that the packets received will have an ipnet header. Using DLT_RAW (or DLT_NULL) to select the /dev/lo0 semantics also implies that there isn't an ipnet header, which is unfortunate. Perhaps another way to handle this would be to have a Solaris "loopback" DLT type that both implies /dev/lo0 _and_ ipnet headers, but I'm not sure that's really necessary given the nature of /dev/lo0. Do others have alternate suggestions? -Seb