At present the delivery of packets, on the transmit side, to promiscuous receivers is handled by GLD before the packet is handed to the driver.
In some cases the driver makes few, if any, changes to the packet (such as ethernet) but in others (such as IP tunneling), substantial changes are made. The problem is most easily seen when using a tool such as snoop on a network interface that is doing hardware checksum offload: checksum validation of the IP or TCP headers by programs such as snoop fails. For network devices where the updates to header fields in the packet are made by hardware, there is little that we can do to improve the situation. But this does not apply to network devices such as the IP tunnel device. One option to handle this would be to have a function that could be called by mac to "fill in" the header details before the packet is delivered to the promiscuous callback. Another option is to not deliver the packet to the promiscuous callback from GLD, but from the driver itself, after the driver has finished filling in the header - a delayed promiscuous callback. My prefernce is for the latter approach as the changes do not appear to be as frought as the former. Thoughts? Darren
