* [PATCHv2 0/2] Resolve packet capturing on macvlan lowerdev @ 2011-04-29 0:22 David Ward 2011-04-29 0:22 ` [PATCHv2 1/2] net: Export dev_queue_xmit_nit for use by macvlan driver David Ward 2011-04-29 0:22 ` [PATCHv2 2/2] macvlan: Send frames to AF_PACKET sockets attached to lowerdev David Ward 0 siblings, 2 replies; 5+ messages in thread From: David Ward @ 2011-04-29 0:22 UTC (permalink / raw) To: netdev; +Cc: David Ward, Patrick McHardy Change in v2: Declare variables in basic block before other code appears The following two patches address situations where macvlan interfaces on the same lowerdev are created inside separate containers/namespaces, and traffic between these interfaces needs to be captured by monitoring the lowerdev outside the containers/namespaces using tcpdump or Wireshark. The only case where this doesn't work now is for unicast frames when the macvlan interfaces are operating in bridge mode; this fixes that case. Should the dev_queue_xmit_nit function be renamed to something more meaningful, which would indicate its role in sending outgoing frames to AF_PACKET sockets? It is currently a misnomer: this function used to be invoked by dev_queue_xmit, but that is no longer the case. Thanks, David David Ward (2): net: Export dev_queue_xmit_nit for use by macvlan driver macvlan: Send frames to AF_PACKET sockets attached to lowerdev drivers/net/macvlan.c | 5 ++++- include/linux/netdevice.h | 2 ++ net/core/dev.c | 14 +++++++++----- 3 files changed, 15 insertions(+), 6 deletions(-) -- 1.7.4.4 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCHv2 1/2] net: Export dev_queue_xmit_nit for use by macvlan driver 2011-04-29 0:22 [PATCHv2 0/2] Resolve packet capturing on macvlan lowerdev David Ward @ 2011-04-29 0:22 ` David Ward 2011-05-05 17:50 ` David Miller 2011-04-29 0:22 ` [PATCHv2 2/2] macvlan: Send frames to AF_PACKET sockets attached to lowerdev David Ward 1 sibling, 1 reply; 5+ messages in thread From: David Ward @ 2011-04-29 0:22 UTC (permalink / raw) To: netdev; +Cc: David Ward, Patrick McHardy Export dev_queue_xmit_nit for use by the macvlan virtual network device driver. Also, use 'dev' instead of 'skb->dev' in this function. Signed-off-by: David Ward <david.ward@ll.mit.edu> --- include/linux/netdevice.h | 2 ++ net/core/dev.c | 14 +++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index cb8178a..b63e517 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -2099,6 +2099,8 @@ extern int dev_hard_start_xmit(struct sk_buff *skb, struct netdev_queue *txq); extern int dev_forward_skb(struct net_device *dev, struct sk_buff *skb); +extern void dev_queue_xmit_nit(struct sk_buff *skb, + struct net_device *dev); extern int netdev_budget; diff --git a/net/core/dev.c b/net/core/dev.c index 3bbb4c2..b15622e 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1521,11 +1521,13 @@ static inline int deliver_skb(struct sk_buff *skb, } /* - * Support routine. Sends outgoing frames to any network - * taps currently in use. + * dev_queue_xmit_nit - send outgoing frame to AF_PACKET sockets + * + * @skb: buffer to send + * @dev: network device that AF_PACKET sockets are attached to (if any) */ -static void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev) +void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev) { struct packet_type *ptype; struct sk_buff *skb2 = NULL; @@ -1540,7 +1542,8 @@ static void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev) (ptype->af_packet_priv == NULL || (struct sock *)ptype->af_packet_priv != skb->sk)) { if (pt_prev) { - deliver_skb(skb2, pt_prev, skb->dev); + atomic_inc(&skb2->users); + pt_prev->func(skb2, dev, pt_prev, dev); pt_prev = ptype; continue; } @@ -1573,9 +1576,10 @@ static void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev) } } if (pt_prev) - pt_prev->func(skb2, skb->dev, pt_prev, skb->dev); + pt_prev->func(skb2, dev, pt_prev, dev); rcu_read_unlock(); } +EXPORT_SYMBOL(dev_queue_xmit_nit); /* netif_setup_tc - Handle tc mappings on real_num_tx_queues change * @dev: Network device -- 1.7.4.4 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCHv2 1/2] net: Export dev_queue_xmit_nit for use by macvlan driver 2011-04-29 0:22 ` [PATCHv2 1/2] net: Export dev_queue_xmit_nit for use by macvlan driver David Ward @ 2011-05-05 17:50 ` David Miller 2011-05-07 16:47 ` Ward, David - 0663 - MITLL 0 siblings, 1 reply; 5+ messages in thread From: David Miller @ 2011-05-05 17:50 UTC (permalink / raw) To: david.ward; +Cc: netdev, kaber From: David Ward <david.ward@ll.mit.edu> Date: Thu, 28 Apr 2011 20:22:31 -0400 > @@ -1521,11 +1521,13 @@ static inline int deliver_skb(struct sk_buff *skb, > } > > /* > - * Support routine. Sends outgoing frames to any network > - * taps currently in use. > + * dev_queue_xmit_nit - send outgoing frame to AF_PACKET sockets > + * > + * @skb: buffer to send > + * @dev: network device that AF_PACKET sockets are attached to (if any) > */ Your change to this comment is inaccurate. AF_PACKET is only one of several types of entities that register these kinds of taps. Also, I really don't like exposing these kinds of internals for what is largely a macvlan internal issue. Please find a less intrustive way to solve this problem. Thanks. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCHv2 1/2] net: Export dev_queue_xmit_nit for use by macvlan driver 2011-05-05 17:50 ` David Miller @ 2011-05-07 16:47 ` Ward, David - 0663 - MITLL 0 siblings, 0 replies; 5+ messages in thread From: Ward, David - 0663 - MITLL @ 2011-05-07 16:47 UTC (permalink / raw) To: David Miller; +Cc: netdev@vger.kernel.org, kaber@trash.net [-- Attachment #1: Type: text/plain, Size: 1188 bytes --] On 05/05/2011 01:50 PM, David Miller wrote: > From: David Ward<david.ward@ll.mit.edu> > Date: Thu, 28 Apr 2011 20:22:31 -0400 > >> @@ -1521,11 +1521,13 @@ static inline int deliver_skb(struct sk_buff *skb, >> } >> >> /* >> - * Support routine. Sends outgoing frames to any network >> - * taps currently in use. >> + * dev_queue_xmit_nit - send outgoing frame to AF_PACKET sockets >> + * >> + * @skb: buffer to send >> + * @dev: network device that AF_PACKET sockets are attached to (if any) >> */ > I really don't like exposing these kinds of internals for what is > largely a macvlan internal issue. Please find a less intrustive way > to solve this problem. > > Thanks. What do you think about creating __dev_forward_skb, which takes as an additional parameter a device (or maybe a list of devices) whose taps should see this packet as it is forwarded, such as a macvlan lowerdev? This function would be able to call dev_queue_xmit_nit for (each of) these devices. Since the list of current network taps (ptype_all) is static inside net/core/dev.c, some type of change has to be made to net/core/dev.c to fix this. Thanks, David [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 5650 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCHv2 2/2] macvlan: Send frames to AF_PACKET sockets attached to lowerdev 2011-04-29 0:22 [PATCHv2 0/2] Resolve packet capturing on macvlan lowerdev David Ward 2011-04-29 0:22 ` [PATCHv2 1/2] net: Export dev_queue_xmit_nit for use by macvlan driver David Ward @ 2011-04-29 0:22 ` David Ward 1 sibling, 0 replies; 5+ messages in thread From: David Ward @ 2011-04-29 0:22 UTC (permalink / raw) To: netdev; +Cc: David Ward, Patrick McHardy In bridge mode, unicast frames can be forwarded directly between macvlan interfaces attached to the same lowerdev without calling dev_queue_xmit. These frames should still be sent to any AF_PACKET sockets (network taps) attached to the lowerdev. Signed-off-by: David Ward <david.ward@ll.mit.edu> --- drivers/net/macvlan.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 3ad5425..25c7632 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -238,7 +238,10 @@ static int macvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev) dest = macvlan_hash_lookup(port, eth->h_dest); if (dest && dest->mode == MACVLAN_MODE_BRIDGE) { unsigned int length = skb->len + ETH_HLEN; - int ret = dest->forward(dest->dev, skb); + int ret = NET_RX_DROP; + + dev_queue_xmit_nit(skb, vlan->lowerdev); + ret = dest->forward(dest->dev, skb); macvlan_count_rx(dest, length, ret == NET_RX_SUCCESS, 0); -- 1.7.4.4 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-05-07 17:19 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-04-29 0:22 [PATCHv2 0/2] Resolve packet capturing on macvlan lowerdev David Ward 2011-04-29 0:22 ` [PATCHv2 1/2] net: Export dev_queue_xmit_nit for use by macvlan driver David Ward 2011-05-05 17:50 ` David Miller 2011-05-07 16:47 ` Ward, David - 0663 - MITLL 2011-04-29 0:22 ` [PATCHv2 2/2] macvlan: Send frames to AF_PACKET sockets attached to lowerdev David Ward
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).