Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[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>

authored by

Arnaldo Carvalho de Melo and committed by
David S. Miller
9c70220b a27ef749

+129 -102
+5 -2
drivers/net/appletalk/ltpc.c
··· 917 917 918 918 int i; 919 919 struct lt_sendlap cbuf; 920 + unsigned char *hdr; 920 921 921 922 cbuf.command = LT_SENDLAP; 922 923 cbuf.dnode = skb->data[0]; ··· 933 932 printk("\n"); 934 933 } 935 934 936 - do_write(dev,&cbuf,sizeof(cbuf),skb->h.raw,skb->len); 935 + hdr = skb_transport_header(skb); 936 + do_write(dev, &cbuf, sizeof(cbuf), hdr, skb->len); 937 937 938 938 if(debug & DEBUG_UPPER) { 939 939 printk("sent %d ddp bytes\n",skb->len); 940 - for(i=0;i<skb->len;i++) printk("%02x ",skb->h.raw[i]); 940 + for (i = 0; i < skb->len; i++) 941 + printk("%02x ", hdr[i]); 941 942 printk("\n"); 942 943 } 943 944
+5 -3
drivers/net/cxgb3/sge.c
··· 1324 1324 1325 1325 flits = skb_transport_offset(skb) / 8; 1326 1326 sgp = ndesc == 1 ? (struct sg_ent *)&d->flit[flits] : sgl; 1327 - sgl_flits = make_sgl(skb, sgp, skb->h.raw, skb->tail - skb->h.raw, 1327 + sgl_flits = make_sgl(skb, sgp, skb_transport_header(skb), 1328 + skb->tail - skb_transport_header(skb), 1328 1329 adap->pdev); 1329 1330 if (need_skb_unmap()) { 1330 1331 setup_deferred_unmapping(skb, adap->pdev, sgp, sgl_flits); 1331 1332 skb->destructor = deferred_unmap_destructor; 1332 - ((struct unmap_info *)skb->cb)->len = skb->tail - skb->h.raw; 1333 + ((struct unmap_info *)skb->cb)->len = (skb->tail - 1334 + skb_transport_header(skb)); 1333 1335 } 1334 1336 1335 1337 write_wr_hdr_sgl(ndesc, skb, d, pidx, q, sgl, flits, sgl_flits, ··· 1353 1351 return 1; /* packet fits as immediate data */ 1354 1352 1355 1353 flits = skb_transport_offset(skb) / 8; /* headers */ 1356 - if (skb->tail != skb->h.raw) 1354 + if (skb->tail != skb_transport_header(skb)) 1357 1355 cnt++; 1358 1356 return flits_to_desc(flits + sgl_len(cnt)); 1359 1357 }
+2 -2
drivers/s390/net/qeth_eddp.c
··· 476 476 eddp = qeth_eddp_create_eddp_data(qhdr, 477 477 skb_network_header(skb), 478 478 ip_hdrlen(skb), 479 - skb->h.raw, 479 + skb_transport_header(skb), 480 480 tcp_hdrlen(skb)); 481 481 else 482 482 eddp = qeth_eddp_create_eddp_data(qhdr, 483 483 skb_network_header(skb), 484 484 sizeof(struct ipv6hdr), 485 - skb->h.raw, 485 + skb_transport_header(skb), 486 486 tcp_hdrlen(skb)); 487 487 488 488 if (eddp == NULL) {
+2 -2
include/linux/atalk.h
··· 101 101 102 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 107 /* AppleTalk AARP headers */ ··· 129 129 130 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 135 /* Not specified - how long till we drop a resolved entry */
+12 -7
include/linux/dccp.h
··· 260 260 261 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 266 static inline struct dccp_hdr *dccp_zeroed_hdr(struct sk_buff *skb, int headlen) 267 267 { 268 268 skb_push(skb, headlen); 269 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 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 279 static inline unsigned int __dccp_basic_hdr_len(const struct dccp_hdr *dh) ··· 302 301 303 302 static inline struct dccp_hdr_request *dccp_hdr_request(struct sk_buff *skb) 304 303 { 305 - return (struct dccp_hdr_request *)(skb->h.raw + dccp_basic_hdr_len(skb)); 304 + return (struct dccp_hdr_request *)(skb_transport_header(skb) + 305 + dccp_basic_hdr_len(skb)); 306 306 } 307 307 308 308 static inline struct dccp_hdr_ack_bits *dccp_hdr_ack_bits(const struct sk_buff *skb) 309 309 { 310 - return (struct dccp_hdr_ack_bits *)(skb->h.raw + dccp_basic_hdr_len(skb)); 310 + return (struct dccp_hdr_ack_bits *)(skb_transport_header(skb) + 311 + dccp_basic_hdr_len(skb)); 311 312 } 312 313 313 314 static inline u64 dccp_hdr_ack_seq(const struct sk_buff *skb) ··· 320 317 321 318 static inline struct dccp_hdr_response *dccp_hdr_response(struct sk_buff *skb) 322 319 { 323 - return (struct dccp_hdr_response *)(skb->h.raw + dccp_basic_hdr_len(skb)); 320 + return (struct dccp_hdr_response *)(skb_transport_header(skb) + 321 + dccp_basic_hdr_len(skb)); 324 322 } 325 323 326 324 static inline struct dccp_hdr_reset *dccp_hdr_reset(struct sk_buff *skb) 327 325 { 328 - return (struct dccp_hdr_reset *)(skb->h.raw + dccp_basic_hdr_len(skb)); 326 + return (struct dccp_hdr_reset *)(skb_transport_header(skb) + 327 + dccp_basic_hdr_len(skb)); 329 328 } 330 329 331 330 static inline unsigned int __dccp_hdr_len(const struct dccp_hdr *dh)
+1 -1
include/linux/icmp.h
··· 87 87 88 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 92 #endif 93 93
+1 -1
include/linux/icmpv6.h
··· 80 80 81 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 85 #endif 86 86
+3 -3
include/linux/igmp.h
··· 85 85 86 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 91 static inline struct igmpv3_report * 92 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 97 static inline struct igmpv3_query * 98 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 102 #endif 103 103
+1 -1
include/linux/ip.h
··· 114 114 115 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 119 #endif 120 120
+1 -1
include/linux/ipv6.h
··· 230 230 231 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 /*
+1 -1
include/linux/sctp.h
··· 68 68 69 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 73 #endif 74 74
+5
include/linux/skbuff.h
··· 951 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 959 static inline void skb_reset_transport_header(struct sk_buff *skb) 955 960 { 956 961 skb->h.raw = skb->data;
+1 -1
include/linux/tcp.h
··· 180 180 181 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 186 static inline unsigned int tcp_hdrlen(const struct sk_buff *skb)
+1 -1
include/linux/udp.h
··· 31 31 32 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 36 #endif 37 37
+1 -1
include/net/ipx.h
··· 43 43 44 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 49 struct ipx_interface {
+1 -1
include/net/pkt_cls.h
··· 328 328 case TCF_LAYER_NETWORK: 329 329 return skb_network_header(skb); 330 330 case TCF_LAYER_TRANSPORT: 331 - return skb->h.raw; 331 + return skb_transport_header(skb); 332 332 } 333 333 334 334 return NULL;
+2 -2
include/net/udp.h
··· 89 89 */ 90 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); 93 - 92 + __wsum csum = csum_partial(skb_transport_header(skb), 93 + sizeof(struct udphdr), 0); 94 94 skb_queue_walk(&sk->sk_write_queue, skb) { 95 95 csum = csum_add(csum, skb->csum); 96 96 }
+1 -1
net/802/psnap.c
··· 56 56 }; 57 57 58 58 rcu_read_lock(); 59 - proto = find_snap_client(skb->h.raw); 59 + proto = find_snap_client(skb_transport_header(skb)); 60 60 if (proto) { 61 61 /* Pass the frame on. */ 62 62 skb->h.raw += 5;
+3 -2
net/ax25/af_ax25.c
··· 1585 1585 1586 1586 skb_set_transport_header(skb, lv); 1587 1587 1588 - SOCK_DEBUG(sk, "base=%p pos=%p\n", skb->data, skb->h.raw); 1588 + SOCK_DEBUG(sk, "base=%p pos=%p\n", 1589 + skb->data, skb_transport_header(skb)); 1589 1590 1590 - *skb->h.raw = AX25_UI; 1591 + *skb_transport_header(skb) = AX25_UI; 1591 1592 1592 1593 /* Datagram frames go straight out of the door as UI */ 1593 1594 ax25_queue_xmit(skb, ax25->ax25_dev->dev);
+2 -2
net/bluetooth/hci_core.c
··· 1076 1076 1077 1077 skb_push(skb, HCI_ACL_HDR_SIZE); 1078 1078 skb_reset_transport_header(skb); 1079 - hdr = (struct hci_acl_hdr *)skb->h.raw; 1079 + hdr = (struct hci_acl_hdr *)skb_transport_header(skb); 1080 1080 hdr->handle = cpu_to_le16(hci_handle_pack(handle, flags)); 1081 1081 hdr->dlen = cpu_to_le16(len); 1082 1082 } ··· 1145 1145 1146 1146 skb_push(skb, HCI_SCO_HDR_SIZE); 1147 1147 skb_reset_transport_header(skb); 1148 - memcpy(skb->h.raw, &hdr, HCI_SCO_HDR_SIZE); 1148 + memcpy(skb_transport_header(skb), &hdr, HCI_SCO_HDR_SIZE); 1149 1149 1150 1150 skb->dev = (void *) hdev; 1151 1151 bt_cb(skb)->pkt_type = HCI_SCODATA_PKT;
+3 -3
net/core/dev.c
··· 1175 1175 BUG_ON(offset > (int)skb->len); 1176 1176 csum = skb_checksum(skb, offset, skb->len-offset, 0); 1177 1177 1178 - offset = skb->tail - skb->h.raw; 1178 + offset = skb->tail - skb_transport_header(skb); 1179 1179 BUG_ON(offset <= 0); 1180 1180 BUG_ON(skb->csum_offset + 2 > offset); 1181 1181 1182 - *(__sum16*)(skb->h.raw + skb->csum_offset) = csum_fold(csum); 1183 - 1182 + *(__sum16 *)(skb_transport_header(skb) + 1183 + skb->csum_offset) = csum_fold(csum); 1184 1184 out_set_summed: 1185 1185 skb->ip_summed = CHECKSUM_NONE; 1186 1186 out:
+1 -1
net/econet/af_econet.c
··· 943 943 printk(KERN_DEBUG "AUN: recvfrom() error %d\n", -err); 944 944 } 945 945 946 - data = skb->h.raw + sizeof(struct udphdr); 946 + data = skb_transport_header(skb) + sizeof(struct udphdr); 947 947 ah = (struct aunhdr *)data; 948 948 len = skb->len - sizeof(struct udphdr); 949 949 ip = ip_hdr(skb);
+1 -1
net/ipv4/igmp.c
··· 348 348 struct iphdr *pip = ip_hdr(skb); 349 349 struct igmphdr *pig = igmp_hdr(skb); 350 350 const int iplen = skb->tail - skb->nh.raw; 351 - const int igmplen = skb->tail - skb->h.raw; 351 + const int igmplen = skb->tail - skb_transport_header(skb); 352 352 353 353 pip->tot_len = htons(iplen); 354 354 ip_send_check(pip);
+1 -1
net/ipv4/ip_gre.c
··· 619 619 skb_reset_mac_header(skb); 620 620 __pskb_pull(skb, offset); 621 621 skb_reset_network_header(skb); 622 - skb_postpull_rcsum(skb, skb->h.raw, offset); 622 + skb_postpull_rcsum(skb, skb_transport_header(skb), offset); 623 623 skb->pkt_type = PACKET_HOST; 624 624 #ifdef CONFIG_NET_IPGRE_BROADCAST 625 625 if (MULTICAST(iph->daddr)) {
+4 -2
net/ipv4/ip_output.c
··· 1128 1128 if (fraggap) { 1129 1129 skb->csum = skb_copy_and_csum_bits(skb_prev, 1130 1130 maxfraglen, 1131 - skb->h.raw, 1131 + skb_transport_header(skb), 1132 1132 fraggap, 0); 1133 1133 skb_prev->csum = csum_sub(skb_prev->csum, 1134 1134 skb->csum); ··· 1374 1374 &ipc, rt, MSG_DONTWAIT); 1375 1375 if ((skb = skb_peek(&sk->sk_write_queue)) != NULL) { 1376 1376 if (arg->csumoffset >= 0) 1377 - *((__sum16 *)skb->h.raw + arg->csumoffset) = csum_fold(csum_add(skb->csum, arg->csum)); 1377 + *((__sum16 *)skb_transport_header(skb) + 1378 + arg->csumoffset) = csum_fold(csum_add(skb->csum, 1379 + arg->csum)); 1378 1380 skb->ip_summed = CHECKSUM_NONE; 1379 1381 ip_push_pending_frames(sk); 1380 1382 }
+2 -2
net/ipv4/ipconfig.c
··· 432 432 goto drop; 433 433 434 434 /* Basic sanity checks can be done without the lock. */ 435 - rarp = (struct arphdr *)skb->h.raw; 435 + rarp = (struct arphdr *)skb_transport_header(skb); 436 436 437 437 /* If this test doesn't pass, it's not IP, or we should 438 438 * ignore it anyway. ··· 455 455 goto drop; 456 456 457 457 /* OK, it is all there and looks valid, process... */ 458 - rarp = (struct arphdr *)skb->h.raw; 458 + rarp = (struct arphdr *)skb_transport_header(skb); 459 459 rarp_ptr = (unsigned char *) (rarp + 1); 460 460 461 461 /* One reply at a time, please. */
+5 -3
net/ipv4/ipmr.c
··· 1437 1437 pim->group != PIM_V1_VERSION || pim->code != PIM_V1_REGISTER) 1438 1438 goto drop; 1439 1439 1440 - encap = (struct iphdr*)(skb->h.raw + sizeof(struct igmphdr)); 1440 + encap = (struct iphdr *)(skb_transport_header(skb) + 1441 + sizeof(struct igmphdr)); 1441 1442 /* 1442 1443 Check that: 1443 1444 a. packet is really destinted to a multicast group ··· 1491 1490 if (!pskb_may_pull(skb, sizeof(*pim) + sizeof(*encap))) 1492 1491 goto drop; 1493 1492 1494 - pim = (struct pimreghdr*)skb->h.raw; 1493 + pim = (struct pimreghdr *)skb_transport_header(skb); 1495 1494 if (pim->type != ((PIM_VERSION<<4)|(PIM_REGISTER)) || 1496 1495 (pim->flags&PIM_NULL_REGISTER) || 1497 1496 (ip_compute_csum((void *)pim, sizeof(*pim)) != 0 && ··· 1499 1498 goto drop; 1500 1499 1501 1500 /* check if the inner packet is destined to mcast group */ 1502 - encap = (struct iphdr*)(skb->h.raw + sizeof(struct pimreghdr)); 1501 + encap = (struct iphdr *)(skb_transport_header(skb) + 1502 + sizeof(struct pimreghdr)); 1503 1503 if (!MULTICAST(encap->daddr) || 1504 1504 encap->tot_len == 0 || 1505 1505 ntohs(encap->tot_len) + sizeof(*pim) > skb->len)
+7 -5
net/ipv4/tcp.c
··· 2219 2219 th->check = ~csum_fold((__force __wsum)((__force u32)th->check + 2220 2220 (__force u32)delta)); 2221 2221 if (skb->ip_summed != CHECKSUM_PARTIAL) 2222 - th->check = csum_fold(csum_partial(skb->h.raw, thlen, 2223 - skb->csum)); 2222 + th->check = 2223 + csum_fold(csum_partial(skb_transport_header(skb), 2224 + thlen, skb->csum)); 2224 2225 2225 2226 seq += len; 2226 2227 skb = skb->next; ··· 2231 2230 th->cwr = 0; 2232 2231 } while (skb->next); 2233 2232 2234 - delta = htonl(oldlen + (skb->tail - skb->h.raw) + skb->data_len); 2233 + delta = htonl(oldlen + (skb->tail - skb_transport_header(skb)) + 2234 + skb->data_len); 2235 2235 th->check = ~csum_fold((__force __wsum)((__force u32)th->check + 2236 2236 (__force u32)delta)); 2237 2237 if (skb->ip_summed != CHECKSUM_PARTIAL) 2238 - th->check = csum_fold(csum_partial(skb->h.raw, thlen, 2239 - skb->csum)); 2238 + th->check = csum_fold(csum_partial(skb_transport_header(skb), 2239 + thlen, skb->csum)); 2240 2240 2241 2241 out: 2242 2242 return segs;
+7 -6
net/ipv4/tcp_input.c
··· 140 140 * 141 141 * "len" is invariant segment length, including TCP header. 142 142 */ 143 - len += skb->data - skb->h.raw; 143 + len += skb->data - skb_transport_header(skb); 144 144 if (len >= TCP_MIN_RCVMSS + sizeof(struct tcphdr) || 145 145 /* If PSH is not set, packet should be 146 146 * full sized, provided peer TCP is not badly broken. ··· 940 940 { 941 941 const struct inet_connection_sock *icsk = inet_csk(sk); 942 942 struct tcp_sock *tp = tcp_sk(sk); 943 - unsigned char *ptr = ack_skb->h.raw + TCP_SKB_CB(ack_skb)->sacked; 943 + unsigned char *ptr = (skb_transport_header(ack_skb) + 944 + TCP_SKB_CB(ack_skb)->sacked); 944 945 struct tcp_sack_block_wire *sp = (struct tcp_sack_block_wire *)(ptr+2); 945 946 struct sk_buff *cached_skb; 946 947 int num_sacks = (ptr[1] - TCPOLEN_SACK_BASE)>>3; ··· 3635 3634 return; 3636 3635 3637 3636 skb_set_mac_header(nskb, skb_mac_header(skb) - skb->head); 3638 - skb_set_network_header(nskb, 3639 - skb_network_header(skb) - skb->head); 3640 - skb_set_transport_header(nskb, skb->h.raw - skb->head); 3641 - 3637 + skb_set_network_header(nskb, (skb_network_header(skb) - 3638 + skb->head)); 3639 + skb_set_transport_header(nskb, (skb_transport_header(skb) - 3640 + skb->head)); 3642 3641 skb_reserve(nskb, header); 3643 3642 memcpy(nskb->head, skb->head, header); 3644 3643 memcpy(nskb->cb, skb->cb, sizeof(skb->cb));
+1 -1
net/ipv4/xfrm4_mode_beet.c
··· 51 51 52 52 BUG_ON(optlen < 0); 53 53 54 - ph = (struct ip_beet_phdr *)skb->h.raw; 54 + ph = (struct ip_beet_phdr *)skb_transport_header(skb); 55 55 ph->padlen = 4 - (optlen & 4); 56 56 ph->hdrlen = optlen / 8; 57 57 ph->nexthdr = top_iph->protocol;
+3 -2
net/ipv4/xfrm4_mode_transport.c
··· 45 45 */ 46 46 static int xfrm4_transport_input(struct xfrm_state *x, struct sk_buff *skb) 47 47 { 48 - int ihl = skb->data - skb->h.raw; 48 + int ihl = skb->data - skb_transport_header(skb); 49 49 50 50 if (skb->h.raw != skb->nh.raw) { 51 - memmove(skb->h.raw, skb_network_header(skb), ihl); 51 + memmove(skb_transport_header(skb), 52 + skb_network_header(skb), ihl); 52 53 skb->nh.raw = skb->h.raw; 53 54 } 54 55 ip_hdr(skb)->tot_len = htons(skb->len + ihl);
+1 -1
net/ipv6/ah6.c
··· 268 268 goto error_free_iph; 269 269 } 270 270 271 - ah = (struct ip_auth_hdr *)skb->h.raw; 271 + ah = (struct ip_auth_hdr *)skb_transport_header(skb); 272 272 ah->nexthdr = nexthdr; 273 273 274 274 top_iph->priority = 0;
+1 -1
net/ipv6/esp6.c
··· 87 87 pskb_put(skb, trailer, clen - skb->len); 88 88 89 89 top_iph = (struct ipv6hdr *)__skb_push(skb, hdr_len); 90 - esph = (struct ipv6_esp_hdr *)skb->h.raw; 90 + esph = (struct ipv6_esp_hdr *)skb_transport_header(skb); 91 91 top_iph->payload_len = htons(skb->len + alen - sizeof(*top_iph)); 92 92 *(u8 *)(trailer->tail - 1) = *skb_network_header(skb); 93 93 *skb_network_header(skb) = IPPROTO_ESP;
+10 -11
net/ipv6/exthdrs.c
··· 144 144 struct tlvtype_proc *curr; 145 145 const unsigned char *nh = skb_network_header(skb); 146 146 int off = skb->h.raw - skb->nh.raw; 147 - int len = ((skb->h.raw[1]+1)<<3); 147 + int len = (skb_transport_header(skb)[1] + 1) << 3; 148 148 149 149 if (skb_transport_offset(skb) + len > skb_headlen(skb)) 150 150 goto bad; ··· 290 290 291 291 if (!pskb_may_pull(skb, skb_transport_offset(skb) + 8) || 292 292 !pskb_may_pull(skb, (skb_transport_offset(skb) + 293 - ((skb->h.raw[1] + 1) << 3)))) { 293 + ((skb_transport_header(skb)[1] + 1) << 3)))) { 294 294 IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), 295 295 IPSTATS_MIB_INHDRERRORS); 296 296 kfree_skb(skb); 297 297 return -1; 298 298 } 299 299 300 - opt->lastopt = skb->h.raw - skb->nh.raw; 301 - opt->dst1 = skb->h.raw - skb->nh.raw; 300 + opt->lastopt = opt->dst1 = skb->h.raw - skb->nh.raw; 302 301 #ifdef CONFIG_IPV6_MIP6 303 302 dstbuf = opt->dst1; 304 303 #endif ··· 306 307 if (ip6_parse_tlv(tlvprocdestopt_lst, skbp)) { 307 308 dst_release(dst); 308 309 skb = *skbp; 309 - skb->h.raw += ((skb->h.raw[1]+1)<<3); 310 + skb->h.raw += (skb_transport_header(skb)[1] + 1) << 3; 310 311 opt = IP6CB(skb); 311 312 #ifdef CONFIG_IPV6_MIP6 312 313 opt->nhoff = dstbuf; ··· 389 390 390 391 if (!pskb_may_pull(skb, skb_transport_offset(skb) + 8) || 391 392 !pskb_may_pull(skb, (skb_transport_offset(skb) + 392 - ((skb->h.raw[1] + 1) << 3)))) { 393 + ((skb_transport_header(skb)[1] + 1) << 3)))) { 393 394 IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), 394 395 IPSTATS_MIB_INHDRERRORS); 395 396 kfree_skb(skb); 396 397 return -1; 397 398 } 398 399 399 - hdr = (struct ipv6_rt_hdr *) skb->h.raw; 400 + hdr = (struct ipv6_rt_hdr *)skb_transport_header(skb); 400 401 401 402 switch (hdr->type) { 402 403 #ifdef CONFIG_IPV6_MIP6 ··· 443 444 break; 444 445 } 445 446 446 - opt->lastopt = skb->h.raw - skb->nh.raw; 447 - opt->srcrt = skb->h.raw - skb->nh.raw; 447 + opt->lastopt = opt->srcrt = skb->h.raw - skb->nh.raw; 448 448 skb->h.raw += (hdr->hdrlen + 1) << 3; 449 449 opt->dst0 = opt->dst1; 450 450 opt->dst1 = 0; ··· 743 745 * hop-by-hop options. 744 746 */ 745 747 if (!pskb_may_pull(skb, sizeof(struct ipv6hdr) + 8) || 746 - !pskb_may_pull(skb, sizeof(struct ipv6hdr) + ((skb->h.raw[1] + 1) << 3))) { 748 + !pskb_may_pull(skb, (sizeof(struct ipv6hdr) + 749 + ((skb_transport_header(skb)[1] + 1) << 3)))) { 747 750 kfree_skb(skb); 748 751 return -1; 749 752 } ··· 752 753 opt->hop = sizeof(struct ipv6hdr); 753 754 if (ip6_parse_tlv(tlvprochopopt_lst, skbp)) { 754 755 skb = *skbp; 755 - skb->h.raw += (skb->h.raw[1]+1)<<3; 756 + skb->h.raw += (skb_transport_header(skb)[1] + 1) << 3; 756 757 opt = IP6CB(skb); 757 758 opt->nhoff = sizeof(struct ipv6hdr); 758 759 return 1;
+1 -1
net/ipv6/ipcomp6.c
··· 143 143 /* compression */ 144 144 plen = skb->len - hdr_len; 145 145 dlen = IPCOMP_SCRATCH_SIZE; 146 - start = skb->h.raw; 146 + start = skb_transport_header(skb); 147 147 148 148 cpu = get_cpu(); 149 149 scratch = *per_cpu_ptr(ipcomp6_scratches, cpu);
+9 -7
net/ipv6/mcast.c
··· 1212 1212 in6_dev_put(idev); 1213 1213 return -EINVAL; 1214 1214 } 1215 - mlh2 = (struct mld2_query *) skb->h.raw; 1215 + mlh2 = (struct mld2_query *)skb_transport_header(skb); 1216 1216 max_delay = (MLDV2_MRC(ntohs(mlh2->mrc))*HZ)/1000; 1217 1217 if (!max_delay) 1218 1218 max_delay = 1; ··· 1235 1235 in6_dev_put(idev); 1236 1236 return -EINVAL; 1237 1237 } 1238 - mlh2 = (struct mld2_query *) skb->h.raw; 1238 + mlh2 = (struct mld2_query *)skb_transport_header(skb); 1239 1239 mark = 1; 1240 1240 } 1241 1241 } else { ··· 1460 1460 static void mld_sendpack(struct sk_buff *skb) 1461 1461 { 1462 1462 struct ipv6hdr *pip6 = ipv6_hdr(skb); 1463 - struct mld2_report *pmr = (struct mld2_report *)skb->h.raw; 1463 + struct mld2_report *pmr = 1464 + (struct mld2_report *)skb_transport_header(skb); 1464 1465 int payload_len, mldlen; 1465 1466 struct inet6_dev *idev = in6_dev_get(skb->dev); 1466 1467 int err; 1467 1468 1468 1469 IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); 1469 1470 payload_len = skb->tail - skb_network_header(skb) - sizeof(*pip6); 1470 - mldlen = skb->tail - skb->h.raw; 1471 + mldlen = skb->tail - skb_transport_header(skb); 1471 1472 pip6->payload_len = htons(payload_len); 1472 1473 1473 1474 pmr->csum = csum_ipv6_magic(&pip6->saddr, &pip6->daddr, mldlen, 1474 - IPPROTO_ICMPV6, csum_partial(skb->h.raw, mldlen, 0)); 1475 + IPPROTO_ICMPV6, csum_partial(skb_transport_header(skb), 1476 + mldlen, 0)); 1475 1477 err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, skb->dev, 1476 1478 mld_dev_queue_xmit); 1477 1479 if (!err) { ··· 1507 1505 pgr->grec_auxwords = 0; 1508 1506 pgr->grec_nsrcs = 0; 1509 1507 pgr->grec_mca = pmc->mca_addr; /* structure copy */ 1510 - pmr = (struct mld2_report *)skb->h.raw; 1508 + pmr = (struct mld2_report *)skb_transport_header(skb); 1511 1509 pmr->ngrec = htons(ntohs(pmr->ngrec)+1); 1512 1510 *ppgr = pgr; 1513 1511 return skb; ··· 1540 1538 if (!*psf_list) 1541 1539 goto empty_source; 1542 1540 1543 - pmr = skb ? (struct mld2_report *)skb->h.raw : NULL; 1541 + pmr = skb ? (struct mld2_report *)skb_transport_header(skb) : NULL; 1544 1542 1545 1543 /* EX and TO_EX get a fresh packet, if needed */ 1546 1544 if (truncate) {
+4 -4
net/ipv6/mip6.c
··· 92 92 93 93 if (!pskb_may_pull(skb, (skb_transport_offset(skb)) + 8) || 94 94 !pskb_may_pull(skb, (skb_transport_offset(skb) + 95 - ((skb->h.raw[1] + 1) << 3)))) 95 + ((skb_transport_header(skb)[1] + 1) << 3)))) 96 96 return -1; 97 97 98 - mh = (struct ip6_mh *)skb->h.raw; 98 + mh = (struct ip6_mh *)skb_transport_header(skb); 99 99 100 100 if (mh->ip6mh_hdrlen < mip6_mh_len(mh->ip6mh_type)) { 101 101 LIMIT_NETDEBUG(KERN_DEBUG "mip6: MH message too short: %d vs >=%d\n", ··· 158 158 nexthdr = *skb_network_header(skb); 159 159 *skb_network_header(skb) = IPPROTO_DSTOPTS; 160 160 161 - dstopt = (struct ipv6_destopt_hdr *)skb->h.raw; 161 + dstopt = (struct ipv6_destopt_hdr *)skb_transport_header(skb); 162 162 dstopt->nexthdr = nexthdr; 163 163 164 164 hao = mip6_padn((char *)(dstopt + 1), ··· 370 370 nexthdr = *skb_network_header(skb); 371 371 *skb_network_header(skb) = IPPROTO_ROUTING; 372 372 373 - rt2 = (struct rt2_hdr *)skb->h.raw; 373 + rt2 = (struct rt2_hdr *)skb_transport_header(skb); 374 374 rt2->rt_hdr.nexthdr = nexthdr; 375 375 rt2->rt_hdr.hdrlen = (x->props.header_len >> 3) - 1; 376 376 rt2->rt_hdr.type = IPV6_SRCRT_TYPE_2;
+9 -8
net/ipv6/ndisc.c
··· 760 760 761 761 static void ndisc_recv_ns(struct sk_buff *skb) 762 762 { 763 - struct nd_msg *msg = (struct nd_msg *)skb->h.raw; 763 + struct nd_msg *msg = (struct nd_msg *)skb_transport_header(skb); 764 764 struct in6_addr *saddr = &ipv6_hdr(skb)->saddr; 765 765 struct in6_addr *daddr = &ipv6_hdr(skb)->daddr; 766 766 u8 *lladdr = NULL; ··· 938 938 939 939 static void ndisc_recv_na(struct sk_buff *skb) 940 940 { 941 - struct nd_msg *msg = (struct nd_msg *)skb->h.raw; 941 + struct nd_msg *msg = (struct nd_msg *)skb_transport_header(skb); 942 942 struct in6_addr *saddr = &ipv6_hdr(skb)->saddr; 943 943 struct in6_addr *daddr = &ipv6_hdr(skb)->daddr; 944 944 u8 *lladdr = NULL; ··· 1040 1040 1041 1041 static void ndisc_recv_rs(struct sk_buff *skb) 1042 1042 { 1043 - struct rs_msg *rs_msg = (struct rs_msg *) skb->h.raw; 1043 + struct rs_msg *rs_msg = (struct rs_msg *)skb_transport_header(skb); 1044 1044 unsigned long ndoptlen = skb->len - sizeof(*rs_msg); 1045 1045 struct neighbour *neigh; 1046 1046 struct inet6_dev *idev; ··· 1097 1097 1098 1098 static void ndisc_router_discovery(struct sk_buff *skb) 1099 1099 { 1100 - struct ra_msg *ra_msg = (struct ra_msg *) skb->h.raw; 1100 + struct ra_msg *ra_msg = (struct ra_msg *)skb_transport_header(skb); 1101 1101 struct neighbour *neigh = NULL; 1102 1102 struct inet6_dev *in6_dev; 1103 1103 struct rt6_info *rt = NULL; ··· 1108 1108 1109 1109 __u8 * opt = (__u8 *)(ra_msg + 1); 1110 1110 1111 - optlen = (skb->tail - skb->h.raw) - sizeof(struct ra_msg); 1111 + optlen = (skb->tail - skb_transport_header(skb)) - 1112 + sizeof(struct ra_msg); 1112 1113 1113 1114 if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL)) { 1114 1115 ND_PRINTK2(KERN_WARNING ··· 1358 1357 return; 1359 1358 } 1360 1359 1361 - optlen = skb->tail - skb->h.raw; 1360 + optlen = skb->tail - skb_transport_header(skb); 1362 1361 optlen -= sizeof(struct icmp6hdr) + 2 * sizeof(struct in6_addr); 1363 1362 1364 1363 if (optlen < 0) { ··· 1585 1584 if (!pskb_may_pull(skb, skb->len)) 1586 1585 return 0; 1587 1586 1588 - msg = (struct nd_msg *) skb->h.raw; 1587 + msg = (struct nd_msg *)skb_transport_header(skb); 1589 1588 1590 - __skb_push(skb, skb->data-skb->h.raw); 1589 + __skb_push(skb, skb->data - skb_transport_header(skb)); 1591 1590 1592 1591 if (ipv6_hdr(skb)->hop_limit != 255) { 1593 1592 ND_PRINTK2(KERN_WARNING
+1 -1
net/ipv6/raw.c
··· 1077 1077 spin_lock_bh(&sk->sk_receive_queue.lock); 1078 1078 skb = skb_peek(&sk->sk_receive_queue); 1079 1079 if (skb != NULL) 1080 - amount = skb->tail - skb->h.raw; 1080 + amount = skb->tail - skb_transport_header(skb); 1081 1081 spin_unlock_bh(&sk->sk_receive_queue.lock); 1082 1082 return put_user(amount, (int __user *)arg); 1083 1083 }
+1 -1
net/ipv6/reassembly.c
··· 726 726 } 727 727 728 728 hdr = ipv6_hdr(skb); 729 - fhdr = (struct frag_hdr *)skb->h.raw; 729 + fhdr = (struct frag_hdr *)skb_transport_header(skb); 730 730 731 731 if (!(fhdr->frag_off & htons(0xFFF9))) { 732 732 /* It is not a fragmented frame */
+3 -2
net/ipv6/xfrm6_mode_transport.c
··· 51 51 */ 52 52 static int xfrm6_transport_input(struct xfrm_state *x, struct sk_buff *skb) 53 53 { 54 - int ihl = skb->data - skb->h.raw; 54 + int ihl = skb->data - skb_transport_header(skb); 55 55 56 56 if (skb->h.raw != skb->nh.raw) { 57 - memmove(skb->h.raw, skb_network_header(skb), ihl); 57 + memmove(skb_transport_header(skb), 58 + skb_network_header(skb), ihl); 58 59 skb->nh.raw = skb->h.raw; 59 60 } 60 61 ipv6_hdr(skb)->payload_len = htons(skb->len + ihl -
+3 -3
net/xfrm/xfrm_input.c
··· 62 62 case IPPROTO_COMP: 63 63 if (!pskb_may_pull(skb, sizeof(struct ip_comp_hdr))) 64 64 return -EINVAL; 65 - *spi = htonl(ntohs(*(__be16*)(skb->h.raw + 2))); 65 + *spi = htonl(ntohs(*(__be16*)(skb_transport_header(skb) + 2))); 66 66 *seq = 0; 67 67 return 0; 68 68 default: ··· 72 72 if (!pskb_may_pull(skb, 16)) 73 73 return -EINVAL; 74 74 75 - *spi = *(__be32*)(skb->h.raw + offset); 76 - *seq = *(__be32*)(skb->h.raw + offset_seq); 75 + *spi = *(__be32*)(skb_transport_header(skb) + offset); 76 + *seq = *(__be32*)(skb_transport_header(skb) + offset_seq); 77 77 return 0; 78 78 } 79 79 EXPORT_SYMBOL(xfrm_parse_spi);