diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2007-04-25 21:04:18 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-04-26 01:25:31 -0400 |
commit | 9c70220b73908f64792422a2c39c593c4792f2c5 (patch) | |
tree | 2090ea10aaa2714a5e095bae8cc02e743c378a3a /include | |
parent | a27ef749e7be3b06fb58df53d94eb97a21f18707 (diff) |
[SK_BUFF]: Introduce skb_transport_header(skb)
For the places where we need a pointer to the transport header, it is
still legal to touch skb->h.raw directly if just adding to,
subtracting from or setting it to another layer header.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/atalk.h | 4 | ||||
-rw-r--r-- | include/linux/dccp.h | 19 | ||||
-rw-r--r-- | include/linux/icmp.h | 2 | ||||
-rw-r--r-- | include/linux/icmpv6.h | 2 | ||||
-rw-r--r-- | include/linux/igmp.h | 6 | ||||
-rw-r--r-- | include/linux/ip.h | 2 | ||||
-rw-r--r-- | include/linux/ipv6.h | 2 | ||||
-rw-r--r-- | include/linux/sctp.h | 2 | ||||
-rw-r--r-- | include/linux/skbuff.h | 5 | ||||
-rw-r--r-- | include/linux/tcp.h | 2 | ||||
-rw-r--r-- | include/linux/udp.h | 2 | ||||
-rw-r--r-- | include/net/ipx.h | 2 | ||||
-rw-r--r-- | include/net/pkt_cls.h | 2 | ||||
-rw-r--r-- | include/net/udp.h | 4 |
14 files changed, 33 insertions, 23 deletions
diff --git a/include/linux/atalk.h b/include/linux/atalk.h index d12984ddaa9f..ced8a1ed080c 100644 --- a/include/linux/atalk.h +++ b/include/linux/atalk.h | |||
@@ -101,7 +101,7 @@ struct ddpehdr { | |||
101 | 101 | ||
102 | static __inline__ struct ddpehdr *ddp_hdr(struct sk_buff *skb) | 102 | static __inline__ struct ddpehdr *ddp_hdr(struct sk_buff *skb) |
103 | { | 103 | { |
104 | return (struct ddpehdr *)skb->h.raw; | 104 | return (struct ddpehdr *)skb_transport_header(skb); |
105 | } | 105 | } |
106 | 106 | ||
107 | /* AppleTalk AARP headers */ | 107 | /* AppleTalk AARP headers */ |
@@ -129,7 +129,7 @@ struct elapaarp { | |||
129 | 129 | ||
130 | static __inline__ struct elapaarp *aarp_hdr(struct sk_buff *skb) | 130 | static __inline__ struct elapaarp *aarp_hdr(struct sk_buff *skb) |
131 | { | 131 | { |
132 | return (struct elapaarp *)skb->h.raw; | 132 | return (struct elapaarp *)skb_transport_header(skb); |
133 | } | 133 | } |
134 | 134 | ||
135 | /* Not specified - how long till we drop a resolved entry */ | 135 | /* Not specified - how long till we drop a resolved entry */ |
diff --git a/include/linux/dccp.h b/include/linux/dccp.h index 1f4df61735f7..fdd4217f1047 100644 --- a/include/linux/dccp.h +++ b/include/linux/dccp.h | |||
@@ -260,19 +260,20 @@ enum { | |||
260 | 260 | ||
261 | static inline struct dccp_hdr *dccp_hdr(const struct sk_buff *skb) | 261 | static inline struct dccp_hdr *dccp_hdr(const struct sk_buff *skb) |
262 | { | 262 | { |
263 | return (struct dccp_hdr *)skb->h.raw; | 263 | return (struct dccp_hdr *)skb_transport_header(skb); |
264 | } | 264 | } |
265 | 265 | ||
266 | static inline struct dccp_hdr *dccp_zeroed_hdr(struct sk_buff *skb, int headlen) | 266 | static inline struct dccp_hdr *dccp_zeroed_hdr(struct sk_buff *skb, int headlen) |
267 | { | 267 | { |
268 | skb_push(skb, headlen); | 268 | skb_push(skb, headlen); |
269 | skb_reset_transport_header(skb); | 269 | skb_reset_transport_header(skb); |
270 | return memset(skb->h.raw, 0, headlen); | 270 | return memset(skb_transport_header(skb), 0, headlen); |
271 | } | 271 | } |
272 | 272 | ||
273 | static inline struct dccp_hdr_ext *dccp_hdrx(const struct sk_buff *skb) | 273 | static inline struct dccp_hdr_ext *dccp_hdrx(const struct sk_buff *skb) |
274 | { | 274 | { |
275 | return (struct dccp_hdr_ext *)(skb->h.raw + sizeof(struct dccp_hdr)); | 275 | return (struct dccp_hdr_ext *)(skb_transport_header(skb) + |
276 | sizeof(struct dccp_hdr)); | ||
276 | } | 277 | } |
277 | 278 | ||
278 | static inline unsigned int __dccp_basic_hdr_len(const struct dccp_hdr *dh) | 279 | static inline unsigned int __dccp_basic_hdr_len(const struct dccp_hdr *dh) |
@@ -301,12 +302,14 @@ static inline __u64 dccp_hdr_seq(const struct sk_buff *skb) | |||
301 | 302 | ||
302 | static inline struct dccp_hdr_request *dccp_hdr_request(struct sk_buff *skb) | 303 | static inline struct dccp_hdr_request *dccp_hdr_request(struct sk_buff *skb) |
303 | { | 304 | { |
304 | return (struct dccp_hdr_request *)(skb->h.raw + dccp_basic_hdr_len(skb)); | 305 | return (struct dccp_hdr_request *)(skb_transport_header(skb) + |
306 | dccp_basic_hdr_len(skb)); | ||
305 | } | 307 | } |
306 | 308 | ||
307 | static inline struct dccp_hdr_ack_bits *dccp_hdr_ack_bits(const struct sk_buff *skb) | 309 | static inline struct dccp_hdr_ack_bits *dccp_hdr_ack_bits(const struct sk_buff *skb) |
308 | { | 310 | { |
309 | return (struct dccp_hdr_ack_bits *)(skb->h.raw + dccp_basic_hdr_len(skb)); | 311 | return (struct dccp_hdr_ack_bits *)(skb_transport_header(skb) + |
312 | dccp_basic_hdr_len(skb)); | ||
310 | } | 313 | } |
311 | 314 | ||
312 | static inline u64 dccp_hdr_ack_seq(const struct sk_buff *skb) | 315 | static inline u64 dccp_hdr_ack_seq(const struct sk_buff *skb) |
@@ -317,12 +320,14 @@ static inline u64 dccp_hdr_ack_seq(const struct sk_buff *skb) | |||
317 | 320 | ||
318 | static inline struct dccp_hdr_response *dccp_hdr_response(struct sk_buff *skb) | 321 | static inline struct dccp_hdr_response *dccp_hdr_response(struct sk_buff *skb) |
319 | { | 322 | { |
320 | return (struct dccp_hdr_response *)(skb->h.raw + dccp_basic_hdr_len(skb)); | 323 | return (struct dccp_hdr_response *)(skb_transport_header(skb) + |
324 | dccp_basic_hdr_len(skb)); | ||
321 | } | 325 | } |
322 | 326 | ||
323 | static inline struct dccp_hdr_reset *dccp_hdr_reset(struct sk_buff *skb) | 327 | static inline struct dccp_hdr_reset *dccp_hdr_reset(struct sk_buff *skb) |
324 | { | 328 | { |
325 | return (struct dccp_hdr_reset *)(skb->h.raw + dccp_basic_hdr_len(skb)); | 329 | return (struct dccp_hdr_reset *)(skb_transport_header(skb) + |
330 | dccp_basic_hdr_len(skb)); | ||
326 | } | 331 | } |
327 | 332 | ||
328 | static inline unsigned int __dccp_hdr_len(const struct dccp_hdr *dh) | 333 | static inline unsigned int __dccp_hdr_len(const struct dccp_hdr *dh) |
diff --git a/include/linux/icmp.h b/include/linux/icmp.h index cd3017a15789..474f2a51cf0a 100644 --- a/include/linux/icmp.h +++ b/include/linux/icmp.h | |||
@@ -87,7 +87,7 @@ struct icmphdr { | |||
87 | 87 | ||
88 | static inline struct icmphdr *icmp_hdr(const struct sk_buff *skb) | 88 | static inline struct icmphdr *icmp_hdr(const struct sk_buff *skb) |
89 | { | 89 | { |
90 | return (struct icmphdr *)skb->h.raw; | 90 | return (struct icmphdr *)skb_transport_header(skb); |
91 | } | 91 | } |
92 | #endif | 92 | #endif |
93 | 93 | ||
diff --git a/include/linux/icmpv6.h b/include/linux/icmpv6.h index 0b5ba5eb7ed2..7c5e9817e998 100644 --- a/include/linux/icmpv6.h +++ b/include/linux/icmpv6.h | |||
@@ -80,7 +80,7 @@ struct icmp6hdr { | |||
80 | 80 | ||
81 | static inline struct icmp6hdr *icmp6_hdr(const struct sk_buff *skb) | 81 | static inline struct icmp6hdr *icmp6_hdr(const struct sk_buff *skb) |
82 | { | 82 | { |
83 | return (struct icmp6hdr *)skb->h.raw; | 83 | return (struct icmp6hdr *)skb_transport_header(skb); |
84 | } | 84 | } |
85 | #endif | 85 | #endif |
86 | 86 | ||
diff --git a/include/linux/igmp.h b/include/linux/igmp.h index ca285527b879..f510e7e382a8 100644 --- a/include/linux/igmp.h +++ b/include/linux/igmp.h | |||
@@ -85,19 +85,19 @@ struct igmpv3_query { | |||
85 | 85 | ||
86 | static inline struct igmphdr *igmp_hdr(const struct sk_buff *skb) | 86 | static inline struct igmphdr *igmp_hdr(const struct sk_buff *skb) |
87 | { | 87 | { |
88 | return (struct igmphdr *)skb->h.raw; | 88 | return (struct igmphdr *)skb_transport_header(skb); |
89 | } | 89 | } |
90 | 90 | ||
91 | static inline struct igmpv3_report * | 91 | static inline struct igmpv3_report * |
92 | igmpv3_report_hdr(const struct sk_buff *skb) | 92 | igmpv3_report_hdr(const struct sk_buff *skb) |
93 | { | 93 | { |
94 | return (struct igmpv3_report *)skb->h.raw; | 94 | return (struct igmpv3_report *)skb_transport_header(skb); |
95 | } | 95 | } |
96 | 96 | ||
97 | static inline struct igmpv3_query * | 97 | static inline struct igmpv3_query * |
98 | igmpv3_query_hdr(const struct sk_buff *skb) | 98 | igmpv3_query_hdr(const struct sk_buff *skb) |
99 | { | 99 | { |
100 | return (struct igmpv3_query *)skb->h.raw; | 100 | return (struct igmpv3_query *)skb_transport_header(skb); |
101 | } | 101 | } |
102 | #endif | 102 | #endif |
103 | 103 | ||
diff --git a/include/linux/ip.h b/include/linux/ip.h index 19578440b5fc..bd0a2a8631c6 100644 --- a/include/linux/ip.h +++ b/include/linux/ip.h | |||
@@ -114,7 +114,7 @@ static inline struct iphdr *ip_hdr(const struct sk_buff *skb) | |||
114 | 114 | ||
115 | static inline struct iphdr *ipip_hdr(const struct sk_buff *skb) | 115 | static inline struct iphdr *ipip_hdr(const struct sk_buff *skb) |
116 | { | 116 | { |
117 | return (struct iphdr *)skb->h.raw; | 117 | return (struct iphdr *)skb_transport_header(skb); |
118 | } | 118 | } |
119 | #endif | 119 | #endif |
120 | 120 | ||
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index b768fcc0a4c4..09ea01a8a99c 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
@@ -230,7 +230,7 @@ static inline struct ipv6hdr *ipv6_hdr(const struct sk_buff *skb) | |||
230 | 230 | ||
231 | static inline struct ipv6hdr *ipipv6_hdr(const struct sk_buff *skb) | 231 | static inline struct ipv6hdr *ipipv6_hdr(const struct sk_buff *skb) |
232 | { | 232 | { |
233 | return (struct ipv6hdr *)skb->h.raw; | 233 | return (struct ipv6hdr *)skb_transport_header(skb); |
234 | } | 234 | } |
235 | 235 | ||
236 | /* | 236 | /* |
diff --git a/include/linux/sctp.h b/include/linux/sctp.h index d76767dfe59e..d70df61a029f 100644 --- a/include/linux/sctp.h +++ b/include/linux/sctp.h | |||
@@ -68,7 +68,7 @@ typedef struct sctphdr { | |||
68 | 68 | ||
69 | static inline struct sctphdr *sctp_hdr(const struct sk_buff *skb) | 69 | static inline struct sctphdr *sctp_hdr(const struct sk_buff *skb) |
70 | { | 70 | { |
71 | return (struct sctphdr *)skb->h.raw; | 71 | return (struct sctphdr *)skb_transport_header(skb); |
72 | } | 72 | } |
73 | #endif | 73 | #endif |
74 | 74 | ||
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index d3f186230ee2..39a6da243b24 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -951,6 +951,11 @@ static inline void skb_reserve(struct sk_buff *skb, int len) | |||
951 | skb->tail += len; | 951 | skb->tail += len; |
952 | } | 952 | } |
953 | 953 | ||
954 | static inline unsigned char *skb_transport_header(const struct sk_buff *skb) | ||
955 | { | ||
956 | return skb->h.raw; | ||
957 | } | ||
958 | |||
954 | static inline void skb_reset_transport_header(struct sk_buff *skb) | 959 | static inline void skb_reset_transport_header(struct sk_buff *skb) |
955 | { | 960 | { |
956 | skb->h.raw = skb->data; | 961 | skb->h.raw = skb->data; |
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 911d937fb4c1..c6b9f92e8289 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
@@ -180,7 +180,7 @@ struct tcp_md5sig { | |||
180 | 180 | ||
181 | static inline struct tcphdr *tcp_hdr(const struct sk_buff *skb) | 181 | static inline struct tcphdr *tcp_hdr(const struct sk_buff *skb) |
182 | { | 182 | { |
183 | return (struct tcphdr *)skb->h.raw; | 183 | return (struct tcphdr *)skb_transport_header(skb); |
184 | } | 184 | } |
185 | 185 | ||
186 | static inline unsigned int tcp_hdrlen(const struct sk_buff *skb) | 186 | static inline unsigned int tcp_hdrlen(const struct sk_buff *skb) |
diff --git a/include/linux/udp.h b/include/linux/udp.h index 1f58503af9a6..6de445c31a64 100644 --- a/include/linux/udp.h +++ b/include/linux/udp.h | |||
@@ -31,7 +31,7 @@ struct udphdr { | |||
31 | 31 | ||
32 | static inline struct udphdr *udp_hdr(const struct sk_buff *skb) | 32 | static inline struct udphdr *udp_hdr(const struct sk_buff *skb) |
33 | { | 33 | { |
34 | return (struct udphdr *)skb->h.raw; | 34 | return (struct udphdr *)skb_transport_header(skb); |
35 | } | 35 | } |
36 | #endif | 36 | #endif |
37 | 37 | ||
diff --git a/include/net/ipx.h b/include/net/ipx.h index c6b2ee610866..4cc0b4eca948 100644 --- a/include/net/ipx.h +++ b/include/net/ipx.h | |||
@@ -43,7 +43,7 @@ struct ipxhdr { | |||
43 | 43 | ||
44 | static __inline__ struct ipxhdr *ipx_hdr(struct sk_buff *skb) | 44 | static __inline__ struct ipxhdr *ipx_hdr(struct sk_buff *skb) |
45 | { | 45 | { |
46 | return (struct ipxhdr *)skb->h.raw; | 46 | return (struct ipxhdr *)skb_transport_header(skb); |
47 | } | 47 | } |
48 | 48 | ||
49 | struct ipx_interface { | 49 | struct ipx_interface { |
diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index 880eb7b54164..dcb3a91f1364 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h | |||
@@ -328,7 +328,7 @@ static inline unsigned char * tcf_get_base_ptr(struct sk_buff *skb, int layer) | |||
328 | case TCF_LAYER_NETWORK: | 328 | case TCF_LAYER_NETWORK: |
329 | return skb_network_header(skb); | 329 | return skb_network_header(skb); |
330 | case TCF_LAYER_TRANSPORT: | 330 | case TCF_LAYER_TRANSPORT: |
331 | return skb->h.raw; | 331 | return skb_transport_header(skb); |
332 | } | 332 | } |
333 | 333 | ||
334 | return NULL; | 334 | return NULL; |
diff --git a/include/net/udp.h b/include/net/udp.h index 4a9699f79281..4906ed7113e7 100644 --- a/include/net/udp.h +++ b/include/net/udp.h | |||
@@ -89,8 +89,8 @@ static inline int udp_lib_checksum_complete(struct sk_buff *skb) | |||
89 | */ | 89 | */ |
90 | static inline __wsum udp_csum_outgoing(struct sock *sk, struct sk_buff *skb) | 90 | static inline __wsum udp_csum_outgoing(struct sock *sk, struct sk_buff *skb) |
91 | { | 91 | { |
92 | __wsum csum = csum_partial(skb->h.raw, sizeof(struct udphdr), 0); | 92 | __wsum csum = csum_partial(skb_transport_header(skb), |
93 | 93 | sizeof(struct udphdr), 0); | |
94 | skb_queue_walk(&sk->sk_write_queue, skb) { | 94 | skb_queue_walk(&sk->sk_write_queue, skb) { |
95 | csum = csum_add(csum, skb->csum); | 95 | csum = csum_add(csum, skb->csum); |
96 | } | 96 | } |