macvtap: Add support of packet capture on macvtap device.
authorVlad Yasevich <vyasevic@redhat.com>
Wed, 11 Dec 2013 18:27:10 +0000 (13:27 -0500)
committerDavid S. Miller <davem@davemloft.net>
Thu, 12 Dec 2013 18:38:39 +0000 (13:38 -0500)
commit6acf54f1cf0a6747bac9fea26f34cfc5a9029523
tree8d115f3bc8e058587e848b1e8150032d10e20a0c
parent70f5613271744c8375d5d20a6685a58a9fdcaf8a
macvtap: Add support of packet capture on macvtap device.

Macvtap device currently doesn not allow a user to capture
traffic on due to the fact that it steals the packets
from the network stack before the skb->dev is set correctly
on the receive side, and that use uses macvlan transmit
path directly on the send side.  As a result, we never
get a change to give traffic to the taps while the correct
device is set in the skb.

This patch makes macvtap device behave almost exaclty like
macvlan.  On the send side, we switch to using dev_queue_xmit().
On the receive side, to deliver packets to macvtap, we now
use netif_rx and dev_forward_skb just like macvlan.  The only
differnce now is that macvtap has its own rx_handler which is
attached to the macvtap netdev.  It is here that we now steal
the packet and provide it to the socket.

As a result, we can now capture traffic on the macvtap device:
   tcpdump -i macvtap0

It also gives us the abilit to add tc actions to the macvtap
device and actually utilize different bandwidth management
queues on output.

Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/macvtap.c