Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=cfe1fc7759fdacb0c650b575daed1692bf3eaece
Commit:     cfe1fc7759fdacb0c650b575daed1692bf3eaece
Parent:     bff9b61ce330df04c6830d823c30c04203543f01
Author:     Arnaldo Carvalho de Melo <[EMAIL PROTECTED]>
AuthorDate: Fri Mar 16 17:26:39 2007 -0300
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Apr 25 22:26:19 2007 -0700

    [SK_BUFF]: Introduce skb_network_header_len
    
    For the common sequence "skb->h.raw - skb->nh.raw", similar to skb->mac_len,
    that is precalculated tho, don't think we need to bloat skb with one more
    member, so just use this new helper, reducing the number of non-skbuff.h
    references to the layer headers even more.
    
    Signed-off-by: Arnaldo Carvalho de Melo <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 drivers/net/gianfar.c                   |    2 +-
 drivers/net/pasemi_mac.c                |    4 ++--
 include/linux/skbuff.h                  |    5 +++++
 net/core/skbuff.c                       |    2 +-
 net/ipv4/ip_output.c                    |    2 +-
 net/ipv6/esp6.c                         |    3 +--
 net/ipv6/exthdrs.c                      |    8 ++++----
 net/ipv6/ip6_input.c                    |    2 +-
 net/ipv6/ip6_output.c                   |    4 ++--
 net/ipv6/mcast.c                        |    2 +-
 net/ipv6/netfilter/nf_conntrack_reasm.c |    2 +-
 net/ipv6/raw.c                          |    2 +-
 net/ipv6/reassembly.c                   |    8 +++++---
 net/ipv6/xfrm6_policy.c                 |    2 +-
 14 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
index b9f4460..b666a0c 100644
--- a/drivers/net/gianfar.c
+++ b/drivers/net/gianfar.c
@@ -953,7 +953,7 @@ static inline void gfar_tx_checksum(struct sk_buff *skb, 
struct txfcb *fcb)
         * l4os is the distance between the start of the
         * l3 hdr and the l4 hdr */
        fcb->l3os = (u16)(skb_network_offset(skb) - GMAC_FCB_LEN);
-       fcb->l4os = (u16)(skb->h.raw - skb->nh.raw);
+       fcb->l4os = skb_network_header_len(skb);
 
        fcb->flags = flags;
 }
diff --git a/drivers/net/pasemi_mac.c b/drivers/net/pasemi_mac.c
index 1d81299..76fe9dd 100644
--- a/drivers/net/pasemi_mac.c
+++ b/drivers/net/pasemi_mac.c
@@ -734,12 +734,12 @@ static int pasemi_mac_start_tx(struct sk_buff *skb, 
struct net_device *dev)
                switch (ip_hdr(skb)->protocol) {
                case IPPROTO_TCP:
                        dflags |= XCT_MACTX_CSUM_TCP;
-                       dflags |= XCT_MACTX_IPH((skb->h.raw - skb->nh.raw) >> 
2);
+                       dflags |= XCT_MACTX_IPH(skb_network_header_len(skb) >> 
2);
                        dflags |= XCT_MACTX_IPO(nh - skb->data);
                        break;
                case IPPROTO_UDP:
                        dflags |= XCT_MACTX_CSUM_UDP;
-                       dflags |= XCT_MACTX_IPH((skb->h.raw - skb->nh.raw) >> 
2);
+                       dflags |= XCT_MACTX_IPH(skb_network_header_len(skb) >> 
2);
                        dflags |= XCT_MACTX_IPO(nh - skb->data);
                        break;
                }
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 47c57be..230dd43 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -992,6 +992,11 @@ static inline int skb_network_offset(const struct sk_buff 
*skb)
        return skb->nh.raw - skb->data;
 }
 
+static inline u32 skb_network_header_len(const struct sk_buff *skb)
+{
+       return skb->h.raw - skb->nh.raw;
+}
+
 static inline unsigned char *skb_mac_header(const struct sk_buff *skb)
 {
        return skb->mac.raw;
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 87e0006..f38af6c 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -1906,7 +1906,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int 
features)
                skb_reserve(nskb, headroom);
                skb_reset_mac_header(nskb);
                skb_set_network_header(nskb, skb->mac_len);
-               nskb->h.raw = nskb->nh.raw + (skb->h.raw - skb->nh.raw);
+               nskb->h.raw = nskb->nh.raw + skb_network_header_len(skb);
                memcpy(skb_put(nskb, doffset), skb->data, doffset);
 
                if (!sg) {
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index 11a6ac7..02988fb 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -1187,7 +1187,7 @@ int ip_push_pending_frames(struct sock *sk)
        if (skb->data < skb_network_header(skb))
                __skb_pull(skb, skb_network_offset(skb));
        while ((tmp_skb = __skb_dequeue(&sk->sk_write_queue)) != NULL) {
-               __skb_pull(tmp_skb, skb->h.raw - skb->nh.raw);
+               __skb_pull(tmp_skb, skb_network_header_len(skb));
                *tail_skb = tmp_skb;
                tail_skb = &(tmp_skb->next);
                skb->len += tmp_skb->len;
diff --git a/net/ipv6/esp6.c b/net/ipv6/esp6.c
index 436eb9e..7fdf84d 100644
--- a/net/ipv6/esp6.c
+++ b/net/ipv6/esp6.c
@@ -147,8 +147,7 @@ static int esp6_input(struct xfrm_state *x, struct sk_buff 
*skb)
        int blksize = ALIGN(crypto_blkcipher_blocksize(tfm), 4);
        int alen = esp->auth.icv_trunc_len;
        int elen = skb->len - sizeof(struct ipv6_esp_hdr) - esp->conf.ivlen - 
alen;
-
-       int hdr_len = skb->h.raw - skb->nh.raw;
+       int hdr_len = skb_network_header_len(skb);
        int nfrags;
        int ret = 0;
 
diff --git a/net/ipv6/exthdrs.c b/net/ipv6/exthdrs.c
index f763409..f34cc2b 100644
--- a/net/ipv6/exthdrs.c
+++ b/net/ipv6/exthdrs.c
@@ -143,7 +143,7 @@ static int ip6_parse_tlv(struct tlvtype_proc *procs, struct 
sk_buff **skbp)
        struct sk_buff *skb = *skbp;
        struct tlvtype_proc *curr;
        const unsigned char *nh = skb_network_header(skb);
-       int off = skb->h.raw - skb->nh.raw;
+       int off = skb_network_header_len(skb);
        int len = (skb_transport_header(skb)[1] + 1) << 3;
 
        if (skb_transport_offset(skb) + len > skb_headlen(skb))
@@ -297,7 +297,7 @@ static int ipv6_destopt_rcv(struct sk_buff **skbp)
                return -1;
        }
 
-       opt->lastopt = opt->dst1 = skb->h.raw - skb->nh.raw;
+       opt->lastopt = opt->dst1 = skb_network_header_len(skb);
 #ifdef CONFIG_IPV6_MIP6
        dstbuf = opt->dst1;
 #endif
@@ -443,7 +443,7 @@ looped_back:
                        break;
                }
 
-               opt->lastopt = opt->srcrt = skb->h.raw - skb->nh.raw;
+               opt->lastopt = opt->srcrt = skb_network_header_len(skb);
                skb->h.raw += (hdr->hdrlen + 1) << 3;
                opt->dst0 = opt->dst1;
                opt->dst1 = 0;
@@ -738,7 +738,7 @@ int ipv6_parse_hopopts(struct sk_buff **skbp)
 
        /*
         * skb_network_header(skb) is equal to skb->data, and
-        * skb->h.raw - skb->nh.raw is always equal to
+        * skb_network_header_len(skb) is always equal to
         * sizeof(struct ipv6hdr) by definition of
         * hop-by-hop options.
         */
diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
index 4427541..cf0c440 100644
--- a/net/ipv6/ip6_input.c
+++ b/net/ipv6/ip6_input.c
@@ -182,7 +182,7 @@ resubmit:
                        nf_reset(skb);
 
                        skb_postpull_rcsum(skb, skb_network_header(skb),
-                                          skb->h.raw - skb->nh.raw);
+                                          skb_network_header_len(skb));
                        hdr = ipv6_hdr(skb);
                        if (ipv6_addr_is_multicast(&hdr->daddr) &&
                            !ipv6_chk_mcast_addr(skb->dev, &hdr->daddr,
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 32e8c3f..57a3260 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1325,7 +1325,7 @@ int ip6_push_pending_frames(struct sock *sk)
        if (skb->data < skb_network_header(skb))
                __skb_pull(skb, skb_network_offset(skb));
        while ((tmp_skb = __skb_dequeue(&sk->sk_write_queue)) != NULL) {
-               __skb_pull(tmp_skb, skb->h.raw - skb->nh.raw);
+               __skb_pull(tmp_skb, skb_network_header_len(skb));
                *tail_skb = tmp_skb;
                tail_skb = &(tmp_skb->next);
                skb->len += tmp_skb->len;
@@ -1337,7 +1337,7 @@ int ip6_push_pending_frames(struct sock *sk)
        }
 
        ipv6_addr_copy(final_dst, &fl->fl6_dst);
-       __skb_pull(skb, skb->h.raw - skb->nh.raw);
+       __skb_pull(skb, skb_network_header_len(skb));
        if (opt && opt->opt_flen)
                ipv6_push_frag_opts(skb, opt, &proto);
        if (opt && opt->opt_nflen)
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
index 07e86eb..4c45bcc 100644
--- a/net/ipv6/mcast.c
+++ b/net/ipv6/mcast.c
@@ -1168,7 +1168,7 @@ int igmp6_event_query(struct sk_buff *skb)
 
        /* compute payload length excluding extension headers */
        len = ntohs(ipv6_hdr(skb)->payload_len) + sizeof(struct ipv6hdr);
-       len -= skb->h.raw - skb->nh.raw;
+       len -= skb_network_header_len(skb);
 
        /* Drop queries with not link local source */
        if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL))
diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c 
b/net/ipv6/netfilter/nf_conntrack_reasm.c
index 84ce5b3..490e7e1 100644
--- a/net/ipv6/netfilter/nf_conntrack_reasm.c
+++ b/net/ipv6/netfilter/nf_conntrack_reasm.c
@@ -657,7 +657,7 @@ nf_ct_frag6_reasm(struct nf_ct_frag6_queue *fq, struct 
net_device *dev)
        /* Yes, and fold redundant checksum back. 8) */
        if (head->ip_summed == CHECKSUM_COMPLETE)
                head->csum = csum_partial(skb_network_header(head),
-                                         head->h.raw - head->nh.raw,
+                                         skb_network_header_len(head),
                                          head->csum);
 
        fq->fragments = NULL;
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
index 116257d..f925ca7 100644
--- a/net/ipv6/raw.c
+++ b/net/ipv6/raw.c
@@ -362,7 +362,7 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
 
        if (skb->ip_summed == CHECKSUM_COMPLETE) {
                skb_postpull_rcsum(skb, skb_network_header(skb),
-                                  skb->h.raw - skb->nh.raw);
+                                  skb_network_header_len(skb));
                if (!csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
                                     &ipv6_hdr(skb)->daddr,
                                     skb->len, inet->num, skb->csum))
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
index 31d4271..6dfacfa 100644
--- a/net/ipv6/reassembly.c
+++ b/net/ipv6/reassembly.c
@@ -679,7 +679,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct 
sk_buff **skb_in,
        /* Yes, and fold redundant checksum back. 8) */
        if (head->ip_summed == CHECKSUM_COMPLETE)
                head->csum = csum_partial(skb_network_header(head),
-                                         head->h.raw - head->nh.raw,
+                                         skb_network_header_len(head),
                                          head->csum);
 
        rcu_read_lock();
@@ -715,13 +715,15 @@ static int ipv6_frag_rcv(struct sk_buff **skbp)
        /* Jumbo payload inhibits frag. header */
        if (hdr->payload_len==0) {
                IP6_INC_STATS(ip6_dst_idev(skb->dst), IPSTATS_MIB_INHDRERRORS);
-               icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, 
skb->h.raw-skb->nh.raw);
+               icmpv6_param_prob(skb, ICMPV6_HDR_FIELD,
+                                 skb_network_header_len(skb));
                return -1;
        }
        if (!pskb_may_pull(skb, (skb_transport_offset(skb) +
                                 sizeof(struct frag_hdr)))) {
                IP6_INC_STATS(ip6_dst_idev(skb->dst), IPSTATS_MIB_INHDRERRORS);
-               icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, 
skb->h.raw-skb->nh.raw);
+               icmpv6_param_prob(skb, ICMPV6_HDR_FIELD,
+                                 skb_network_header_len(skb));
                return -1;
        }
 
diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c
index b93bfb8..ef746d4 100644
--- a/net/ipv6/xfrm6_policy.c
+++ b/net/ipv6/xfrm6_policy.c
@@ -270,7 +270,7 @@ error:
 static inline void
 _decode_session6(struct sk_buff *skb, struct flowi *fl)
 {
-       u16 offset = skb->h.raw - skb->nh.raw;
+       u16 offset = skb_network_header_len(skb);
        struct ipv6hdr *hdr = ipv6_hdr(skb);
        struct ipv6_opt_hdr *exthdr;
        const unsigned char *nh = skb_network_header(skb);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to