]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
vmxnet3: cleanup tso headers manipulation
authorEric Dumazet <eric.dumazet@gmail.com>
Tue, 24 Jan 2012 19:47:21 +0000 (19:47 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 25 Jan 2012 21:53:10 +0000 (16:53 -0500)
Use existing helpers to clarify skb headers manipulation.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Shreyas Bhatewara <sbhatewara@vmware.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/vmxnet3/vmxnet3_drv.c

index de7fc345148a889a772c9b208dd56137519fe7e1..be6aa353f6a1f8c525f0bc673fe79eb03a1a1e10 100644 (file)
@@ -816,27 +816,24 @@ vmxnet3_parse_and_copy_hdr(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
 
        if (ctx->mss) { /* TSO */
                ctx->eth_ip_hdr_size = skb_transport_offset(skb);
-               ctx->l4_hdr_size = ((struct tcphdr *)
-                                  skb_transport_header(skb))->doff * 4;
+               ctx->l4_hdr_size = tcp_hdrlen(skb);
                ctx->copy_size = ctx->eth_ip_hdr_size + ctx->l4_hdr_size;
        } else {
                if (skb->ip_summed == CHECKSUM_PARTIAL) {
                        ctx->eth_ip_hdr_size = skb_checksum_start_offset(skb);
 
                        if (ctx->ipv4) {
-                               struct iphdr *iph = (struct iphdr *)
-                                                   skb_network_header(skb);
+                               const struct iphdr *iph = ip_hdr(skb);
+
                                if (iph->protocol == IPPROTO_TCP)
-                                       ctx->l4_hdr_size = ((struct tcphdr *)
-                                          skb_transport_header(skb))->doff * 4;
+                                       ctx->l4_hdr_size = tcp_hdrlen(skb);
                                else if (iph->protocol == IPPROTO_UDP)
                                        /*
                                         * Use tcp header size so that bytes to
                                         * be copied are more than required by
                                         * the device.
                                         */
-                                       ctx->l4_hdr_size =
-                                                       sizeof(struct tcphdr);
+                                       ctx->l4_hdr_size = sizeof(struct tcphdr);
                                else
                                        ctx->l4_hdr_size = 0;
                        } else {
@@ -881,14 +878,17 @@ static void
 vmxnet3_prepare_tso(struct sk_buff *skb,
                    struct vmxnet3_tx_ctx *ctx)
 {
-       struct tcphdr *tcph = (struct tcphdr *)skb_transport_header(skb);
+       struct tcphdr *tcph = tcp_hdr(skb);
+
        if (ctx->ipv4) {
-               struct iphdr *iph = (struct iphdr *)skb_network_header(skb);
+               struct iphdr *iph = ip_hdr(skb);
+
                iph->check = 0;
                tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, 0,
                                                 IPPROTO_TCP, 0);
        } else {
-               struct ipv6hdr *iph = (struct ipv6hdr *)skb_network_header(skb);
+               struct ipv6hdr *iph = ipv6_hdr(skb);
+
                tcph->check = ~csum_ipv6_magic(&iph->saddr, &iph->daddr, 0,
                                               IPPROTO_TCP, 0);
        }