diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2007-03-13 12:06:52 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-04-26 01:25:15 -0400 |
commit | badff6d01a8589a1c828b0bf118903ca38627f4e (patch) | |
tree | 89611d7058c612085c58dfb9913ee30ddf04b604 /net/ipv4 | |
parent | 0660e03f6b18f19b6bbafe7583265a51b90daf36 (diff) |
[SK_BUFF]: Introduce skb_reset_transport_header(skb)
For the common, open coded 'skb->h.raw = skb->data' operation, so that we can
later turn skb->h.raw into a offset, reducing the size of struct sk_buff in
64bit land while possibly keeping it as a pointer on 32bit.
This one touches just the most simple cases:
skb->h.raw = skb->data;
skb->h.raw = {skb_push|[__]skb_pull}()
The next ones will handle the slightly more "complex" cases.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/af_inet.c | 6 | ||||
-rw-r--r-- | net/ipv4/ah4.c | 3 | ||||
-rw-r--r-- | net/ipv4/ip_input.c | 2 | ||||
-rw-r--r-- | net/ipv4/ip_output.c | 2 | ||||
-rw-r--r-- | net/ipv4/ipmr.c | 2 | ||||
-rw-r--r-- | net/ipv4/udp.c | 3 | ||||
-rw-r--r-- | net/ipv4/xfrm4_mode_transport.c | 2 |
7 files changed, 12 insertions, 8 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index e7720c72a6e2..f011390f19c9 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c | |||
@@ -1120,7 +1120,8 @@ static int inet_gso_send_check(struct sk_buff *skb) | |||
1120 | if (unlikely(!pskb_may_pull(skb, ihl))) | 1120 | if (unlikely(!pskb_may_pull(skb, ihl))) |
1121 | goto out; | 1121 | goto out; |
1122 | 1122 | ||
1123 | skb->h.raw = __skb_pull(skb, ihl); | 1123 | __skb_pull(skb, ihl); |
1124 | skb_reset_transport_header(skb); | ||
1124 | iph = ip_hdr(skb); | 1125 | iph = ip_hdr(skb); |
1125 | proto = iph->protocol & (MAX_INET_PROTOS - 1); | 1126 | proto = iph->protocol & (MAX_INET_PROTOS - 1); |
1126 | err = -EPROTONOSUPPORT; | 1127 | err = -EPROTONOSUPPORT; |
@@ -1163,7 +1164,8 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb, int features) | |||
1163 | if (unlikely(!pskb_may_pull(skb, ihl))) | 1164 | if (unlikely(!pskb_may_pull(skb, ihl))) |
1164 | goto out; | 1165 | goto out; |
1165 | 1166 | ||
1166 | skb->h.raw = __skb_pull(skb, ihl); | 1167 | __skb_pull(skb, ihl); |
1168 | skb_reset_transport_header(skb); | ||
1167 | iph = ip_hdr(skb); | 1169 | iph = ip_hdr(skb); |
1168 | id = ntohs(iph->id); | 1170 | id = ntohs(iph->id); |
1169 | proto = iph->protocol & (MAX_INET_PROTOS - 1); | 1171 | proto = iph->protocol & (MAX_INET_PROTOS - 1); |
diff --git a/net/ipv4/ah4.c b/net/ipv4/ah4.c index 00fd31da252e..ebcc797e1c13 100644 --- a/net/ipv4/ah4.c +++ b/net/ipv4/ah4.c | |||
@@ -182,7 +182,8 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb) | |||
182 | } | 182 | } |
183 | ((struct iphdr*)work_buf)->protocol = ah->nexthdr; | 183 | ((struct iphdr*)work_buf)->protocol = ah->nexthdr; |
184 | skb->nh.raw += ah_hlen; | 184 | skb->nh.raw += ah_hlen; |
185 | skb->h.raw = memcpy(skb_network_header(skb), work_buf, ihl); | 185 | memcpy(skb_network_header(skb), work_buf, ihl); |
186 | skb->h.raw = skb->nh.raw; | ||
186 | __skb_pull(skb, ah_hlen + ihl); | 187 | __skb_pull(skb, ah_hlen + ihl); |
187 | 188 | ||
188 | return 0; | 189 | return 0; |
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c index 237880a80432..324e7e0fdb2a 100644 --- a/net/ipv4/ip_input.c +++ b/net/ipv4/ip_input.c | |||
@@ -201,7 +201,7 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb) | |||
201 | __skb_pull(skb, ip_hdrlen(skb)); | 201 | __skb_pull(skb, ip_hdrlen(skb)); |
202 | 202 | ||
203 | /* Point into the IP datagram, just past the header. */ | 203 | /* Point into the IP datagram, just past the header. */ |
204 | skb->h.raw = skb->data; | 204 | skb_reset_transport_header(skb); |
205 | 205 | ||
206 | rcu_read_lock(); | 206 | rcu_read_lock(); |
207 | { | 207 | { |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 1abc48899f2d..63c05be0764d 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -500,7 +500,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*)) | |||
500 | * before previous one went down. */ | 500 | * before previous one went down. */ |
501 | if (frag) { | 501 | if (frag) { |
502 | frag->ip_summed = CHECKSUM_NONE; | 502 | frag->ip_summed = CHECKSUM_NONE; |
503 | frag->h.raw = frag->data; | 503 | skb_reset_transport_header(frag); |
504 | __skb_push(frag, hlen); | 504 | __skb_push(frag, hlen); |
505 | skb_reset_network_header(frag); | 505 | skb_reset_network_header(frag); |
506 | memcpy(skb_network_header(frag), iph, hlen); | 506 | memcpy(skb_network_header(frag), iph, hlen); |
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index e0021499093f..03869d91f6f0 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c | |||
@@ -563,7 +563,7 @@ static int ipmr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert) | |||
563 | */ | 563 | */ |
564 | skb_push(skb, sizeof(struct iphdr)); | 564 | skb_push(skb, sizeof(struct iphdr)); |
565 | skb_reset_network_header(skb); | 565 | skb_reset_network_header(skb); |
566 | skb->h.raw = skb->data; | 566 | skb_reset_transport_header(skb); |
567 | msg = (struct igmpmsg *)skb_network_header(skb); | 567 | msg = (struct igmpmsg *)skb_network_header(skb); |
568 | memcpy(msg, skb_network_header(pkt), sizeof(struct iphdr)); | 568 | memcpy(msg, skb_network_header(pkt), sizeof(struct iphdr)); |
569 | msg->im_msgtype = IGMPMSG_WHOLEPKT; | 569 | msg->im_msgtype = IGMPMSG_WHOLEPKT; |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index b4cad50c18e9..13739cd8206f 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -1002,7 +1002,8 @@ static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb) | |||
1002 | * transport header to point to ESP. Keep UDP on the stack | 1002 | * transport header to point to ESP. Keep UDP on the stack |
1003 | * for later. | 1003 | * for later. |
1004 | */ | 1004 | */ |
1005 | skb->h.raw = __skb_pull(skb, len); | 1005 | __skb_pull(skb, len); |
1006 | skb_reset_transport_header(skb); | ||
1006 | 1007 | ||
1007 | /* modify the protocol (it's ESP!) */ | 1008 | /* modify the protocol (it's ESP!) */ |
1008 | iph->protocol = IPPROTO_ESP; | 1009 | iph->protocol = IPPROTO_ESP; |
diff --git a/net/ipv4/xfrm4_mode_transport.c b/net/ipv4/xfrm4_mode_transport.c index 124f24bc4dbc..2c46cbb3bbb5 100644 --- a/net/ipv4/xfrm4_mode_transport.c +++ b/net/ipv4/xfrm4_mode_transport.c | |||
@@ -52,7 +52,7 @@ static int xfrm4_transport_input(struct xfrm_state *x, struct sk_buff *skb) | |||
52 | skb->nh.raw = skb->h.raw; | 52 | skb->nh.raw = skb->h.raw; |
53 | } | 53 | } |
54 | ip_hdr(skb)->tot_len = htons(skb->len + ihl); | 54 | ip_hdr(skb)->tot_len = htons(skb->len + ihl); |
55 | skb->h.raw = skb->data; | 55 | skb_reset_transport_header(skb); |
56 | return 0; | 56 | return 0; |
57 | } | 57 | } |
58 | 58 | ||