mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-09-20 19:34:46 +00:00
[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 <acme@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
bff9b61ce3
commit
cfe1fc7759
|
@ -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
|
* l4os is the distance between the start of the
|
||||||
* l3 hdr and the l4 hdr */
|
* l3 hdr and the l4 hdr */
|
||||||
fcb->l3os = (u16)(skb_network_offset(skb) - GMAC_FCB_LEN);
|
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;
|
fcb->flags = flags;
|
||||||
}
|
}
|
||||||
|
|
|
@ -734,12 +734,12 @@ static int pasemi_mac_start_tx(struct sk_buff *skb, struct net_device *dev)
|
||||||
switch (ip_hdr(skb)->protocol) {
|
switch (ip_hdr(skb)->protocol) {
|
||||||
case IPPROTO_TCP:
|
case IPPROTO_TCP:
|
||||||
dflags |= XCT_MACTX_CSUM_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);
|
dflags |= XCT_MACTX_IPO(nh - skb->data);
|
||||||
break;
|
break;
|
||||||
case IPPROTO_UDP:
|
case IPPROTO_UDP:
|
||||||
dflags |= XCT_MACTX_CSUM_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);
|
dflags |= XCT_MACTX_IPO(nh - skb->data);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -992,6 +992,11 @@ static inline int skb_network_offset(const struct sk_buff *skb)
|
||||||
return skb->nh.raw - skb->data;
|
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)
|
static inline unsigned char *skb_mac_header(const struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
return skb->mac.raw;
|
return skb->mac.raw;
|
||||||
|
|
|
@ -1906,7 +1906,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features)
|
||||||
skb_reserve(nskb, headroom);
|
skb_reserve(nskb, headroom);
|
||||||
skb_reset_mac_header(nskb);
|
skb_reset_mac_header(nskb);
|
||||||
skb_set_network_header(nskb, skb->mac_len);
|
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);
|
memcpy(skb_put(nskb, doffset), skb->data, doffset);
|
||||||
|
|
||||||
if (!sg) {
|
if (!sg) {
|
||||||
|
|
|
@ -1187,7 +1187,7 @@ int ip_push_pending_frames(struct sock *sk)
|
||||||
if (skb->data < skb_network_header(skb))
|
if (skb->data < skb_network_header(skb))
|
||||||
__skb_pull(skb, skb_network_offset(skb));
|
__skb_pull(skb, skb_network_offset(skb));
|
||||||
while ((tmp_skb = __skb_dequeue(&sk->sk_write_queue)) != NULL) {
|
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;
|
||||||
tail_skb = &(tmp_skb->next);
|
tail_skb = &(tmp_skb->next);
|
||||||
skb->len += tmp_skb->len;
|
skb->len += tmp_skb->len;
|
||||||
|
|
|
@ -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 blksize = ALIGN(crypto_blkcipher_blocksize(tfm), 4);
|
||||||
int alen = esp->auth.icv_trunc_len;
|
int alen = esp->auth.icv_trunc_len;
|
||||||
int elen = skb->len - sizeof(struct ipv6_esp_hdr) - esp->conf.ivlen - alen;
|
int elen = skb->len - sizeof(struct ipv6_esp_hdr) - esp->conf.ivlen - alen;
|
||||||
|
int hdr_len = skb_network_header_len(skb);
|
||||||
int hdr_len = skb->h.raw - skb->nh.raw;
|
|
||||||
int nfrags;
|
int nfrags;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
|
|
@ -143,7 +143,7 @@ static int ip6_parse_tlv(struct tlvtype_proc *procs, struct sk_buff **skbp)
|
||||||
struct sk_buff *skb = *skbp;
|
struct sk_buff *skb = *skbp;
|
||||||
struct tlvtype_proc *curr;
|
struct tlvtype_proc *curr;
|
||||||
const unsigned char *nh = skb_network_header(skb);
|
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;
|
int len = (skb_transport_header(skb)[1] + 1) << 3;
|
||||||
|
|
||||||
if (skb_transport_offset(skb) + len > skb_headlen(skb))
|
if (skb_transport_offset(skb) + len > skb_headlen(skb))
|
||||||
|
@ -297,7 +297,7 @@ static int ipv6_destopt_rcv(struct sk_buff **skbp)
|
||||||
return -1;
|
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
|
#ifdef CONFIG_IPV6_MIP6
|
||||||
dstbuf = opt->dst1;
|
dstbuf = opt->dst1;
|
||||||
#endif
|
#endif
|
||||||
|
@ -443,7 +443,7 @@ looped_back:
|
||||||
break;
|
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;
|
skb->h.raw += (hdr->hdrlen + 1) << 3;
|
||||||
opt->dst0 = opt->dst1;
|
opt->dst0 = opt->dst1;
|
||||||
opt->dst1 = 0;
|
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_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
|
* sizeof(struct ipv6hdr) by definition of
|
||||||
* hop-by-hop options.
|
* hop-by-hop options.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -182,7 +182,7 @@ resubmit:
|
||||||
nf_reset(skb);
|
nf_reset(skb);
|
||||||
|
|
||||||
skb_postpull_rcsum(skb, skb_network_header(skb),
|
skb_postpull_rcsum(skb, skb_network_header(skb),
|
||||||
skb->h.raw - skb->nh.raw);
|
skb_network_header_len(skb));
|
||||||
hdr = ipv6_hdr(skb);
|
hdr = ipv6_hdr(skb);
|
||||||
if (ipv6_addr_is_multicast(&hdr->daddr) &&
|
if (ipv6_addr_is_multicast(&hdr->daddr) &&
|
||||||
!ipv6_chk_mcast_addr(skb->dev, &hdr->daddr,
|
!ipv6_chk_mcast_addr(skb->dev, &hdr->daddr,
|
||||||
|
|
|
@ -1325,7 +1325,7 @@ int ip6_push_pending_frames(struct sock *sk)
|
||||||
if (skb->data < skb_network_header(skb))
|
if (skb->data < skb_network_header(skb))
|
||||||
__skb_pull(skb, skb_network_offset(skb));
|
__skb_pull(skb, skb_network_offset(skb));
|
||||||
while ((tmp_skb = __skb_dequeue(&sk->sk_write_queue)) != NULL) {
|
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;
|
||||||
tail_skb = &(tmp_skb->next);
|
tail_skb = &(tmp_skb->next);
|
||||||
skb->len += tmp_skb->len;
|
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);
|
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)
|
if (opt && opt->opt_flen)
|
||||||
ipv6_push_frag_opts(skb, opt, &proto);
|
ipv6_push_frag_opts(skb, opt, &proto);
|
||||||
if (opt && opt->opt_nflen)
|
if (opt && opt->opt_nflen)
|
||||||
|
|
|
@ -1168,7 +1168,7 @@ int igmp6_event_query(struct sk_buff *skb)
|
||||||
|
|
||||||
/* compute payload length excluding extension headers */
|
/* compute payload length excluding extension headers */
|
||||||
len = ntohs(ipv6_hdr(skb)->payload_len) + sizeof(struct ipv6hdr);
|
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 */
|
/* Drop queries with not link local source */
|
||||||
if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL))
|
if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL))
|
||||||
|
|
|
@ -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) */
|
/* Yes, and fold redundant checksum back. 8) */
|
||||||
if (head->ip_summed == CHECKSUM_COMPLETE)
|
if (head->ip_summed == CHECKSUM_COMPLETE)
|
||||||
head->csum = csum_partial(skb_network_header(head),
|
head->csum = csum_partial(skb_network_header(head),
|
||||||
head->h.raw - head->nh.raw,
|
skb_network_header_len(head),
|
||||||
head->csum);
|
head->csum);
|
||||||
|
|
||||||
fq->fragments = NULL;
|
fq->fragments = NULL;
|
||||||
|
|
|
@ -362,7 +362,7 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
|
||||||
|
|
||||||
if (skb->ip_summed == CHECKSUM_COMPLETE) {
|
if (skb->ip_summed == CHECKSUM_COMPLETE) {
|
||||||
skb_postpull_rcsum(skb, skb_network_header(skb),
|
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,
|
if (!csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
|
||||||
&ipv6_hdr(skb)->daddr,
|
&ipv6_hdr(skb)->daddr,
|
||||||
skb->len, inet->num, skb->csum))
|
skb->len, inet->num, skb->csum))
|
||||||
|
|
|
@ -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) */
|
/* Yes, and fold redundant checksum back. 8) */
|
||||||
if (head->ip_summed == CHECKSUM_COMPLETE)
|
if (head->ip_summed == CHECKSUM_COMPLETE)
|
||||||
head->csum = csum_partial(skb_network_header(head),
|
head->csum = csum_partial(skb_network_header(head),
|
||||||
head->h.raw - head->nh.raw,
|
skb_network_header_len(head),
|
||||||
head->csum);
|
head->csum);
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
|
@ -715,13 +715,15 @@ static int ipv6_frag_rcv(struct sk_buff **skbp)
|
||||||
/* Jumbo payload inhibits frag. header */
|
/* Jumbo payload inhibits frag. header */
|
||||||
if (hdr->payload_len==0) {
|
if (hdr->payload_len==0) {
|
||||||
IP6_INC_STATS(ip6_dst_idev(skb->dst), IPSTATS_MIB_INHDRERRORS);
|
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;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!pskb_may_pull(skb, (skb_transport_offset(skb) +
|
if (!pskb_may_pull(skb, (skb_transport_offset(skb) +
|
||||||
sizeof(struct frag_hdr)))) {
|
sizeof(struct frag_hdr)))) {
|
||||||
IP6_INC_STATS(ip6_dst_idev(skb->dst), IPSTATS_MIB_INHDRERRORS);
|
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;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -270,7 +270,7 @@ error:
|
||||||
static inline void
|
static inline void
|
||||||
_decode_session6(struct sk_buff *skb, struct flowi *fl)
|
_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 ipv6hdr *hdr = ipv6_hdr(skb);
|
||||||
struct ipv6_opt_hdr *exthdr;
|
struct ipv6_opt_hdr *exthdr;
|
||||||
const unsigned char *nh = skb_network_header(skb);
|
const unsigned char *nh = skb_network_header(skb);
|
||||||
|
|
Loading…
Reference in a new issue