Subject: Re: dhcp client packet sniffing...

From: Patrick McHardy <[email-masked]>
Date: Thu, 08 Apr 2010 14:49:49 +0200

Herbert Xu wrote:
> On Thu, Apr 08, 2010 at 05:11:44AM -0700, David Miller wrote:
>> We have the socket pointer etc. already in dev_queue_xmit_nit(), so we
>> can easily do it.
> 
> It doesn't look trivial to me since AF_PACKET fiddles with packet
> headers before running the filter...

Yes, that looks difficult. What might work is to pass the skb->data
offsets resulting from those modifications to sk_run_filter to
adjust the postition when loading data from the packet. That would
allow to run the filter on the original packet before cloning it.

Regarding your idea of only receiving incoming packets, userspace could
use the SKF_AD_PKTTYPE filter with PACKET_HOST. During filter attachment
and checks, we could mark the socket as only interested in incoming or
outgoing packets.

This would require userspace changes of course, but we should be able
to avoid passing outgoing packets to af_packet with very low overhead.