Hello.

On 02/28/2015 10:58 PM, Shrikrishna Khare wrote:

Allows for packet parsing to be done by the fast path. This performance
optimization already exists for IPv4. Add similar logic for IPv6.

Signed-off-by: Amitabha Banerjee <banerj...@vmware.com>
Signed-off-by: Shrikrishna Khare <skh...@vmware.com>
---
  drivers/net/vmxnet3/vmxnet3_drv.c | 26 ++++++++++++++++----------
  drivers/net/vmxnet3/vmxnet3_int.h |  5 +++--
  2 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c 
b/drivers/net/vmxnet3/vmxnet3_drv.c
index 294214c..9216e6a 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
[...]
@@ -831,16 +832,20 @@ vmxnet3_parse_and_copy_hdr(struct sk_buff *skb, struct 
vmxnet3_tx_queue *tq,
                        if (ctx->ipv4) {
                                const struct iphdr *iph = ip_hdr(skb);

-                               if (iph->protocol == IPPROTO_TCP)
-                                       ctx->l4_hdr_size = tcp_hdrlen(skb);
-                               else if (iph->protocol == IPPROTO_UDP)
-                                       ctx->l4_hdr_size = sizeof(struct 
udphdr);
-                               else
-                                       ctx->l4_hdr_size = 0;
-                       } else {
-                               /* for simplicity, don't copy L4 headers */
-                               ctx->l4_hdr_size = 0;
+                               protocol = iph->protocol;
+                       } else if (ctx->ipv6) {
+                               const struct ipv6hdr *ipv6h = ipv6_hdr(skb);
+
+                               protocol = ipv6h->nexthdr;
                        }
+
+                       if (protocol == IPPROTO_TCP)
+                               ctx->l4_hdr_size = tcp_hdrlen(skb);
+                       else if (protocol == IPPROTO_UDP)
+                               ctx->l4_hdr_size = sizeof(struct udphdr);
+                       else
+                               ctx->l4_hdr_size = 0;
+

   I think the above is asking to be a 'switch (protocol)' instead.

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to