RE: [PATCH v12 10/17] Add a hook to intercept external buffers from NIC driver.

2010-10-11 Thread Xin, Xiaohui
-Original Message-
From: Eric Dumazet [mailto:eric.duma...@gmail.com]
Sent: Thursday, September 30, 2010 10:22 PM
To: Xin, Xiaohui
Cc: net...@vger.kernel.org; kvm@vger.kernel.org; linux-ker...@vger.kernel.org;
m...@redhat.com; mi...@elte.hu; da...@davemloft.net; 
herb...@gondor.apana.org.au;
jd...@linux.intel.com
Subject: Re: [PATCH v12 10/17] Add a hook to intercept external buffers from 
NIC driver.

Le jeudi 30 septembre 2010 à 22:04 +0800, xiaohui@intel.com a
écrit :
 From: Xin Xiaohui xiaohui@intel.com

 The hook is called in netif_receive_skb().
 Signed-off-by: Xin Xiaohui xiaohui@intel.com
 Signed-off-by: Zhao Yu yzhao81...@gmail.com
 Reviewed-by: Jeff Dike jd...@linux.intel.com
 ---
  net/core/dev.c |   35 +++
  1 files changed, 35 insertions(+), 0 deletions(-)

 diff --git a/net/core/dev.c b/net/core/dev.c
 index c11e32c..83172b8 100644
 --- a/net/core/dev.c
 +++ b/net/core/dev.c
 @@ -2517,6 +2517,37 @@ err:
  EXPORT_SYMBOL(netdev_mp_port_prep);
  #endif

 +#if defined(CONFIG_MEDIATE_PASSTHRU) ||
defined(CONFIG_MEDIATE_PASSTHRU_MODULE)
 +/* Add a hook to intercept mediate passthru(zero-copy) packets,
 + * and insert it to the socket queue owned by mp_port specially.
 + */
 +static inline struct sk_buff *handle_mpassthru(struct sk_buff *skb,
 +   struct packet_type **pt_prev,
 +   int *ret,
 +   struct net_device *orig_dev)
 +{
 +struct mp_port *mp_port = NULL;
 +struct sock *sk = NULL;
 +
 +if (!dev_is_mpassthru(skb-dev))
 +return skb;
 +mp_port = skb-dev-mp_port;
 +
 +if (*pt_prev) {
 +*ret = deliver_skb(skb, *pt_prev, orig_dev);
 +*pt_prev = NULL;
 +}
 +
 +sk = mp_port-sock-sk;
 +skb_queue_tail(sk-sk_receive_queue, skb);
 +sk-sk_state_change(sk);
 +
 +return NULL;
 +}
 +#else
 +#define handle_mpassthru(skb, pt_prev, ret, orig_dev) (skb)
 +#endif
 +
  /**
   *  netif_receive_skb - process receive buffer from network
   *  @skb: buffer to process
 @@ -2598,6 +2629,10 @@ int netif_receive_skb(struct sk_buff *skb)
  ncls:
  #endif

 +/* To intercept mediate passthru(zero-copy) packets here */
 +skb = handle_mpassthru(skb, pt_prev, ret, orig_dev);
 +if (!skb)
 +goto out;
  skb = handle_bridge(skb, pt_prev, ret, orig_dev);
  if (!skb)
  goto out;

This does not apply to current net-next-2.6

We now have dev-rx_handler (currently for bridge or macvlan)


Ok. Thanks, will rebase to fix that.

Thanks
Xiaohui

commit ab95bfe01f9872459c8678572ccadbf646badad0
Author: Jiri Pirko jpi...@redhat.com
Date:   Tue Jun 1 21:52:08 2010 +

net: replace hooks in __netif_receive_skb V5

What this patch does is it removes two receive frame hooks (for bridge and 
 for
macvlan) from __netif_receive_skb. These are replaced them with a single
hook for both. It only supports one hook per device because it makes no
sense to do bridging and macvlan on the same device.

Then a network driver (of virtual netdev like macvlan or bridge) can 
 register
an rx_handler for needed net device.

Signed-off-by: Jiri Pirko jpi...@redhat.com
Signed-off-by: Stephen Hemminger shemmin...@vyatta.com
Signed-off-by: David S. Miller da...@davemloft.net



--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v12 10/17] Add a hook to intercept external buffers from NIC driver.

2010-09-30 Thread Eric Dumazet
Le jeudi 30 septembre 2010 à 22:04 +0800, xiaohui@intel.com a
écrit :
 From: Xin Xiaohui xiaohui@intel.com
 
 The hook is called in netif_receive_skb().
 Signed-off-by: Xin Xiaohui xiaohui@intel.com
 Signed-off-by: Zhao Yu yzhao81...@gmail.com
 Reviewed-by: Jeff Dike jd...@linux.intel.com
 ---
  net/core/dev.c |   35 +++
  1 files changed, 35 insertions(+), 0 deletions(-)
 
 diff --git a/net/core/dev.c b/net/core/dev.c
 index c11e32c..83172b8 100644
 --- a/net/core/dev.c
 +++ b/net/core/dev.c
 @@ -2517,6 +2517,37 @@ err:
  EXPORT_SYMBOL(netdev_mp_port_prep);
  #endif
  
 +#if defined(CONFIG_MEDIATE_PASSTHRU) || 
 defined(CONFIG_MEDIATE_PASSTHRU_MODULE)
 +/* Add a hook to intercept mediate passthru(zero-copy) packets,
 + * and insert it to the socket queue owned by mp_port specially.
 + */
 +static inline struct sk_buff *handle_mpassthru(struct sk_buff *skb,
 +struct packet_type **pt_prev,
 +int *ret,
 +struct net_device *orig_dev)
 +{
 + struct mp_port *mp_port = NULL;
 + struct sock *sk = NULL;
 +
 + if (!dev_is_mpassthru(skb-dev))
 + return skb;
 + mp_port = skb-dev-mp_port;
 +
 + if (*pt_prev) {
 + *ret = deliver_skb(skb, *pt_prev, orig_dev);
 + *pt_prev = NULL;
 + }
 +
 + sk = mp_port-sock-sk;
 + skb_queue_tail(sk-sk_receive_queue, skb);
 + sk-sk_state_change(sk);
 +
 + return NULL;
 +}
 +#else
 +#define handle_mpassthru(skb, pt_prev, ret, orig_dev) (skb)
 +#endif
 +
  /**
   *   netif_receive_skb - process receive buffer from network
   *   @skb: buffer to process
 @@ -2598,6 +2629,10 @@ int netif_receive_skb(struct sk_buff *skb)
  ncls:
  #endif
  
 + /* To intercept mediate passthru(zero-copy) packets here */
 + skb = handle_mpassthru(skb, pt_prev, ret, orig_dev);
 + if (!skb)
 + goto out;
   skb = handle_bridge(skb, pt_prev, ret, orig_dev);
   if (!skb)
   goto out;

This does not apply to current net-next-2.6

We now have dev-rx_handler (currently for bridge or macvlan)


commit ab95bfe01f9872459c8678572ccadbf646badad0
Author: Jiri Pirko jpi...@redhat.com
Date:   Tue Jun 1 21:52:08 2010 +

net: replace hooks in __netif_receive_skb V5

What this patch does is it removes two receive frame hooks (for bridge and 
for
macvlan) from __netif_receive_skb. These are replaced them with a single
hook for both. It only supports one hook per device because it makes no
sense to do bridging and macvlan on the same device.

Then a network driver (of virtual netdev like macvlan or bridge) can 
register
an rx_handler for needed net device.

Signed-off-by: Jiri Pirko jpi...@redhat.com
Signed-off-by: Stephen Hemminger shemmin...@vyatta.com
Signed-off-by: David S. Miller da...@davemloft.net



--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html