diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2007-04-21 01:47:35 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-04-26 01:25:10 -0400 |
commit | eddc9ec53be2ecdbf4efe0efd4a83052594f0ac0 (patch) | |
tree | 4a38ab4dbd9d61fdf5a5ea6ed61463e0b9e33ba7 | |
parent | e023dd643798c4f06c16466af90b4d250e4b8bd7 (diff) |
[SK_BUFF]: Introduce ip_hdr(), remove skb->nh.iph
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
132 files changed, 565 insertions, 564 deletions
diff --git a/drivers/ieee1394/eth1394.c b/drivers/ieee1394/eth1394.c index db2346f4d207..a364003ba47f 100644 --- a/drivers/ieee1394/eth1394.c +++ b/drivers/ieee1394/eth1394.c | |||
@@ -1668,7 +1668,7 @@ static int ether1394_tx (struct sk_buff *skb, struct net_device *dev) | |||
1668 | if (memcmp(eth->h_dest, dev->broadcast, ETH1394_ALEN) == 0 || | 1668 | if (memcmp(eth->h_dest, dev->broadcast, ETH1394_ALEN) == 0 || |
1669 | proto == htons(ETH_P_ARP) || | 1669 | proto == htons(ETH_P_ARP) || |
1670 | (proto == htons(ETH_P_IP) && | 1670 | (proto == htons(ETH_P_IP) && |
1671 | IN_MULTICAST(ntohl(skb->nh.iph->daddr)))) { | 1671 | IN_MULTICAST(ntohl(ip_hdr(skb)->daddr)))) { |
1672 | tx_type = ETH1394_GASP; | 1672 | tx_type = ETH1394_GASP; |
1673 | dest_node = LOCAL_BUS | ALL_NODES; | 1673 | dest_node = LOCAL_BUS | ALL_NODES; |
1674 | max_payload = priv->bc_maxpayload - ETHER1394_GASP_OVERHEAD; | 1674 | max_payload = priv->bc_maxpayload - ETHER1394_GASP_OVERHEAD; |
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c index 2f704cb06e7b..e8c9f27817b0 100644 --- a/drivers/net/8139cp.c +++ b/drivers/net/8139cp.c | |||
@@ -806,7 +806,7 @@ static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev) | |||
806 | if (mss) | 806 | if (mss) |
807 | flags |= LargeSend | ((mss & MSSMask) << MSSShift); | 807 | flags |= LargeSend | ((mss & MSSMask) << MSSShift); |
808 | else if (skb->ip_summed == CHECKSUM_PARTIAL) { | 808 | else if (skb->ip_summed == CHECKSUM_PARTIAL) { |
809 | const struct iphdr *ip = skb->nh.iph; | 809 | const struct iphdr *ip = ip_hdr(skb); |
810 | if (ip->protocol == IPPROTO_TCP) | 810 | if (ip->protocol == IPPROTO_TCP) |
811 | flags |= IPCS | TCPCS; | 811 | flags |= IPCS | TCPCS; |
812 | else if (ip->protocol == IPPROTO_UDP) | 812 | else if (ip->protocol == IPPROTO_UDP) |
@@ -825,7 +825,7 @@ static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev) | |||
825 | u32 first_len, first_eor; | 825 | u32 first_len, first_eor; |
826 | dma_addr_t first_mapping; | 826 | dma_addr_t first_mapping; |
827 | int frag, first_entry = entry; | 827 | int frag, first_entry = entry; |
828 | const struct iphdr *ip = skb->nh.iph; | 828 | const struct iphdr *ip = ip_hdr(skb); |
829 | 829 | ||
830 | /* We must give this initial chunk to the device last. | 830 | /* We must give this initial chunk to the device last. |
831 | * Otherwise we could race with the device. | 831 | * Otherwise we could race with the device. |
diff --git a/drivers/net/atl1/atl1_main.c b/drivers/net/atl1/atl1_main.c index 793a61b2140f..d2be79a30f8a 100644 --- a/drivers/net/atl1/atl1_main.c +++ b/drivers/net/atl1/atl1_main.c | |||
@@ -1294,17 +1294,18 @@ static int atl1_tso(struct atl1_adapter *adapter, struct sk_buff *skb, | |||
1294 | } | 1294 | } |
1295 | 1295 | ||
1296 | if (skb->protocol == ntohs(ETH_P_IP)) { | 1296 | if (skb->protocol == ntohs(ETH_P_IP)) { |
1297 | skb->nh.iph->tot_len = 0; | 1297 | struct iphdr *iph = ip_hdr(skb); |
1298 | skb->nh.iph->check = 0; | 1298 | |
1299 | skb->h.th->check = | 1299 | iph->tot_len = 0; |
1300 | ~csum_tcpudp_magic(skb->nh.iph->saddr, | 1300 | iph->check = 0; |
1301 | skb->nh.iph->daddr, 0, | 1301 | skb->h.th->check = ~csum_tcpudp_magic(iph->saddr, |
1302 | IPPROTO_TCP, 0); | 1302 | iph->daddr, 0, |
1303 | IPPROTO_TCP, 0); | ||
1303 | ipofst = skb_network_offset(skb); | 1304 | ipofst = skb_network_offset(skb); |
1304 | if (ipofst != ENET_HEADER_SIZE) /* 802.3 frame */ | 1305 | if (ipofst != ENET_HEADER_SIZE) /* 802.3 frame */ |
1305 | tso->tsopl |= 1 << TSO_PARAM_ETHTYPE_SHIFT; | 1306 | tso->tsopl |= 1 << TSO_PARAM_ETHTYPE_SHIFT; |
1306 | 1307 | ||
1307 | tso->tsopl |= (skb->nh.iph->ihl & | 1308 | tso->tsopl |= (iph->ihl & |
1308 | CSUM_PARAM_IPHL_MASK) << CSUM_PARAM_IPHL_SHIFT; | 1309 | CSUM_PARAM_IPHL_MASK) << CSUM_PARAM_IPHL_SHIFT; |
1309 | tso->tsopl |= ((skb->h.th->doff << 2) & | 1310 | tso->tsopl |= ((skb->h.th->doff << 2) & |
1310 | TSO_PARAM_TCPHDRLEN_MASK) << TSO_PARAM_TCPHDRLEN_SHIFT; | 1311 | TSO_PARAM_TCPHDRLEN_MASK) << TSO_PARAM_TCPHDRLEN_SHIFT; |
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index b8091c55d441..eb0c4f1d4483 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c | |||
@@ -4513,6 +4513,7 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
4513 | if ((mss = skb_shinfo(skb)->gso_size) && | 4513 | if ((mss = skb_shinfo(skb)->gso_size) && |
4514 | (skb->len > (bp->dev->mtu + ETH_HLEN))) { | 4514 | (skb->len > (bp->dev->mtu + ETH_HLEN))) { |
4515 | u32 tcp_opt_len, ip_tcp_len; | 4515 | u32 tcp_opt_len, ip_tcp_len; |
4516 | struct iphdr *iph; | ||
4516 | 4517 | ||
4517 | if (skb_header_cloned(skb) && | 4518 | if (skb_header_cloned(skb) && |
4518 | pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) { | 4519 | pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) { |
@@ -4529,16 +4530,15 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
4529 | } | 4530 | } |
4530 | ip_tcp_len = ip_hdrlen(skb) + sizeof(struct tcphdr); | 4531 | ip_tcp_len = ip_hdrlen(skb) + sizeof(struct tcphdr); |
4531 | 4532 | ||
4532 | skb->nh.iph->check = 0; | 4533 | iph = ip_hdr(skb); |
4533 | skb->nh.iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len); | 4534 | iph->check = 0; |
4534 | skb->h.th->check = | 4535 | iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len); |
4535 | ~csum_tcpudp_magic(skb->nh.iph->saddr, | 4536 | skb->h.th->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, |
4536 | skb->nh.iph->daddr, | 4537 | 0, IPPROTO_TCP, 0); |
4537 | 0, IPPROTO_TCP, 0); | ||
4538 | 4538 | ||
4539 | if (tcp_opt_len || (skb->nh.iph->ihl > 5)) { | 4539 | if (tcp_opt_len || (iph->ihl > 5)) { |
4540 | vlan_tag_flags |= ((skb->nh.iph->ihl - 5) + | 4540 | vlan_tag_flags |= ((iph->ihl - 5) + |
4541 | (tcp_opt_len >> 2)) << 8; | 4541 | (tcp_opt_len >> 2)) << 8; |
4542 | } | 4542 | } |
4543 | } | 4543 | } |
4544 | else | 4544 | else |
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c index 86cfcb3f8131..8555afa574a4 100644 --- a/drivers/net/bonding/bond_alb.c +++ b/drivers/net/bonding/bond_alb.c | |||
@@ -112,7 +112,7 @@ static inline struct arp_pkt *arp_pkt(const struct sk_buff *skb) | |||
112 | /* Forward declaration */ | 112 | /* Forward declaration */ |
113 | static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[]); | 113 | static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[]); |
114 | 114 | ||
115 | static inline u8 _simple_hash(u8 *hash_start, int hash_size) | 115 | static inline u8 _simple_hash(const u8 *hash_start, int hash_size) |
116 | { | 116 | { |
117 | int i; | 117 | int i; |
118 | u8 hash = 0; | 118 | u8 hash = 0; |
@@ -1268,7 +1268,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev) | |||
1268 | int hash_size = 0; | 1268 | int hash_size = 0; |
1269 | int do_tx_balance = 1; | 1269 | int do_tx_balance = 1; |
1270 | u32 hash_index = 0; | 1270 | u32 hash_index = 0; |
1271 | u8 *hash_start = NULL; | 1271 | const u8 *hash_start = NULL; |
1272 | int res = 1; | 1272 | int res = 1; |
1273 | 1273 | ||
1274 | skb_reset_mac_header(skb); | 1274 | skb_reset_mac_header(skb); |
@@ -1285,15 +1285,18 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev) | |||
1285 | } | 1285 | } |
1286 | 1286 | ||
1287 | switch (ntohs(skb->protocol)) { | 1287 | switch (ntohs(skb->protocol)) { |
1288 | case ETH_P_IP: | 1288 | case ETH_P_IP: { |
1289 | const struct iphdr *iph = ip_hdr(skb); | ||
1290 | |||
1289 | if ((memcmp(eth_data->h_dest, mac_bcast, ETH_ALEN) == 0) || | 1291 | if ((memcmp(eth_data->h_dest, mac_bcast, ETH_ALEN) == 0) || |
1290 | (skb->nh.iph->daddr == ip_bcast) || | 1292 | (iph->daddr == ip_bcast) || |
1291 | (skb->nh.iph->protocol == IPPROTO_IGMP)) { | 1293 | (iph->protocol == IPPROTO_IGMP)) { |
1292 | do_tx_balance = 0; | 1294 | do_tx_balance = 0; |
1293 | break; | 1295 | break; |
1294 | } | 1296 | } |
1295 | hash_start = (char*)&(skb->nh.iph->daddr); | 1297 | hash_start = (char *)&(iph->daddr); |
1296 | hash_size = sizeof(skb->nh.iph->daddr); | 1298 | hash_size = sizeof(iph->daddr); |
1299 | } | ||
1297 | break; | 1300 | break; |
1298 | case ETH_P_IPV6: | 1301 | case ETH_P_IPV6: |
1299 | if (memcmp(eth_data->h_dest, mac_bcast, ETH_ALEN) == 0) { | 1302 | if (memcmp(eth_data->h_dest, mac_bcast, ETH_ALEN) == 0) { |
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index e4724d874e7c..7f11388893fc 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -3476,7 +3476,7 @@ static int bond_xmit_hash_policy_l34(struct sk_buff *skb, | |||
3476 | struct net_device *bond_dev, int count) | 3476 | struct net_device *bond_dev, int count) |
3477 | { | 3477 | { |
3478 | struct ethhdr *data = (struct ethhdr *)skb->data; | 3478 | struct ethhdr *data = (struct ethhdr *)skb->data; |
3479 | struct iphdr *iph = skb->nh.iph; | 3479 | struct iphdr *iph = ip_hdr(skb); |
3480 | u16 *layer4hdr = (u16 *)((u32 *)iph + iph->ihl); | 3480 | u16 *layer4hdr = (u16 *)((u32 *)iph + iph->ihl); |
3481 | int layer4_xor = 0; | 3481 | int layer4_xor = 0; |
3482 | 3482 | ||
diff --git a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c index 8cdee67d582f..c357f45a16c3 100644 --- a/drivers/net/chelsio/sge.c +++ b/drivers/net/chelsio/sge.c | |||
@@ -1871,7 +1871,7 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1871 | hdr = (struct cpl_tx_pkt_lso *)skb_push(skb, sizeof(*hdr)); | 1871 | hdr = (struct cpl_tx_pkt_lso *)skb_push(skb, sizeof(*hdr)); |
1872 | hdr->opcode = CPL_TX_PKT_LSO; | 1872 | hdr->opcode = CPL_TX_PKT_LSO; |
1873 | hdr->ip_csum_dis = hdr->l4_csum_dis = 0; | 1873 | hdr->ip_csum_dis = hdr->l4_csum_dis = 0; |
1874 | hdr->ip_hdr_words = skb->nh.iph->ihl; | 1874 | hdr->ip_hdr_words = ip_hdr(skb)->ihl; |
1875 | hdr->tcp_hdr_words = skb->h.th->doff; | 1875 | hdr->tcp_hdr_words = skb->h.th->doff; |
1876 | hdr->eth_type_mss = htons(MK_ETH_TYPE_MSS(eth_type, | 1876 | hdr->eth_type_mss = htons(MK_ETH_TYPE_MSS(eth_type, |
1877 | skb_shinfo(skb)->gso_size)); | 1877 | skb_shinfo(skb)->gso_size)); |
@@ -1912,7 +1912,7 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1912 | 1912 | ||
1913 | if (!(adapter->flags & UDP_CSUM_CAPABLE) && | 1913 | if (!(adapter->flags & UDP_CSUM_CAPABLE) && |
1914 | skb->ip_summed == CHECKSUM_PARTIAL && | 1914 | skb->ip_summed == CHECKSUM_PARTIAL && |
1915 | skb->nh.iph->protocol == IPPROTO_UDP) { | 1915 | ip_hdr(skb)->protocol == IPPROTO_UDP) { |
1916 | if (unlikely(skb_checksum_help(skb))) { | 1916 | if (unlikely(skb_checksum_help(skb))) { |
1917 | pr_debug("%s: unable to do udp checksum\n", dev->name); | 1917 | pr_debug("%s: unable to do udp checksum\n", dev->name); |
1918 | dev_kfree_skb_any(skb); | 1918 | dev_kfree_skb_any(skb); |
diff --git a/drivers/net/cxgb3/sge.c b/drivers/net/cxgb3/sge.c index 7e9e9db4fb97..892e5dcafa04 100644 --- a/drivers/net/cxgb3/sge.c +++ b/drivers/net/cxgb3/sge.c | |||
@@ -900,7 +900,7 @@ static void write_tx_pkt_wr(struct adapter *adap, struct sk_buff *skb, | |||
900 | eth_type = skb_network_offset(skb) == ETH_HLEN ? | 900 | eth_type = skb_network_offset(skb) == ETH_HLEN ? |
901 | CPL_ETH_II : CPL_ETH_II_VLAN; | 901 | CPL_ETH_II : CPL_ETH_II_VLAN; |
902 | tso_info |= V_LSO_ETH_TYPE(eth_type) | | 902 | tso_info |= V_LSO_ETH_TYPE(eth_type) | |
903 | V_LSO_IPHDR_WORDS(skb->nh.iph->ihl) | | 903 | V_LSO_IPHDR_WORDS(ip_hdr(skb)->ihl) | |
904 | V_LSO_TCPHDR_WORDS(skb->h.th->doff); | 904 | V_LSO_TCPHDR_WORDS(skb->h.th->doff); |
905 | hdr->lso_info = htonl(tso_info); | 905 | hdr->lso_info = htonl(tso_info); |
906 | flits = 3; | 906 | flits = 3; |
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 86161011b539..c324866c9789 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
@@ -2890,14 +2890,12 @@ e1000_tso(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring, | |||
2890 | hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); | 2890 | hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); |
2891 | mss = skb_shinfo(skb)->gso_size; | 2891 | mss = skb_shinfo(skb)->gso_size; |
2892 | if (skb->protocol == htons(ETH_P_IP)) { | 2892 | if (skb->protocol == htons(ETH_P_IP)) { |
2893 | skb->nh.iph->tot_len = 0; | 2893 | struct iphdr *iph = ip_hdr(skb); |
2894 | skb->nh.iph->check = 0; | 2894 | iph->tot_len = 0; |
2895 | skb->h.th->check = | 2895 | iph->check = 0; |
2896 | ~csum_tcpudp_magic(skb->nh.iph->saddr, | 2896 | skb->h.th->check = ~csum_tcpudp_magic(iph->saddr, |
2897 | skb->nh.iph->daddr, | 2897 | iph->daddr, 0, |
2898 | 0, | 2898 | IPPROTO_TCP, 0); |
2899 | IPPROTO_TCP, | ||
2900 | 0); | ||
2901 | cmd_length = E1000_TXD_CMD_IP; | 2899 | cmd_length = E1000_TXD_CMD_IP; |
2902 | ipcse = skb->h.raw - skb->data - 1; | 2900 | ipcse = skb->h.raw - skb->data - 1; |
2903 | } else if (skb->protocol == htons(ETH_P_IPV6)) { | 2901 | } else if (skb->protocol == htons(ETH_P_IPV6)) { |
@@ -2911,7 +2909,7 @@ e1000_tso(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring, | |||
2911 | ipcse = 0; | 2909 | ipcse = 0; |
2912 | } | 2910 | } |
2913 | ipcss = skb_network_offset(skb); | 2911 | ipcss = skb_network_offset(skb); |
2914 | ipcso = (void *)&(skb->nh.iph->check) - (void *)skb->data; | 2912 | ipcso = (void *)&(ip_hdr(skb)->check) - (void *)skb->data; |
2915 | tucss = skb->h.raw - skb->data; | 2913 | tucss = skb->h.raw - skb->data; |
2916 | tucso = (void *)&(skb->h.th->check) - (void *)skb->data; | 2914 | tucso = (void *)&(skb->h.th->check) - (void *)skb->data; |
2917 | tucse = 0; | 2915 | tucse = 0; |
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index b1c90a4fe31e..0dc701e611e5 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c | |||
@@ -1262,7 +1262,7 @@ static int ehea_clean_portres(struct ehea_port *port, struct ehea_port_res *pr) | |||
1262 | static inline void write_ip_start_end(struct ehea_swqe *swqe, | 1262 | static inline void write_ip_start_end(struct ehea_swqe *swqe, |
1263 | const struct sk_buff *skb) | 1263 | const struct sk_buff *skb) |
1264 | { | 1264 | { |
1265 | swqe->ip_start = (u8)(((u64)skb->nh.iph) - ((u64)skb->data)); | 1265 | swqe->ip_start = skb_network_offset(skb); |
1266 | swqe->ip_end = (u8)(swqe->ip_start + ip_hdrlen(skb) - 1); | 1266 | swqe->ip_end = (u8)(swqe->ip_start + ip_hdrlen(skb) - 1); |
1267 | } | 1267 | } |
1268 | 1268 | ||
@@ -1688,6 +1688,7 @@ static void ehea_xmit2(struct sk_buff *skb, struct net_device *dev, | |||
1688 | struct ehea_swqe *swqe, u32 lkey) | 1688 | struct ehea_swqe *swqe, u32 lkey) |
1689 | { | 1689 | { |
1690 | if (skb->protocol == htons(ETH_P_IP)) { | 1690 | if (skb->protocol == htons(ETH_P_IP)) { |
1691 | const struct iphdr *iph = ip_hdr(skb); | ||
1691 | /* IPv4 */ | 1692 | /* IPv4 */ |
1692 | swqe->tx_control |= EHEA_SWQE_CRC | 1693 | swqe->tx_control |= EHEA_SWQE_CRC |
1693 | | EHEA_SWQE_IP_CHECKSUM | 1694 | | EHEA_SWQE_IP_CHECKSUM |
@@ -1697,15 +1698,15 @@ static void ehea_xmit2(struct sk_buff *skb, struct net_device *dev, | |||
1697 | 1698 | ||
1698 | write_ip_start_end(swqe, skb); | 1699 | write_ip_start_end(swqe, skb); |
1699 | 1700 | ||
1700 | if (skb->nh.iph->protocol == IPPROTO_UDP) { | 1701 | if (iph->protocol == IPPROTO_UDP) { |
1701 | if ((skb->nh.iph->frag_off & IP_MF) || | 1702 | if ((iph->frag_off & IP_MF) || |
1702 | (skb->nh.iph->frag_off & IP_OFFSET)) | 1703 | (iph->frag_off & IP_OFFSET)) |
1703 | /* IP fragment, so don't change cs */ | 1704 | /* IP fragment, so don't change cs */ |
1704 | swqe->tx_control &= ~EHEA_SWQE_TCP_CHECKSUM; | 1705 | swqe->tx_control &= ~EHEA_SWQE_TCP_CHECKSUM; |
1705 | else | 1706 | else |
1706 | write_udp_offset_end(swqe, skb); | 1707 | write_udp_offset_end(swqe, skb); |
1707 | 1708 | ||
1708 | } else if (skb->nh.iph->protocol == IPPROTO_TCP) { | 1709 | } else if (iph->protocol == IPPROTO_TCP) { |
1709 | write_tcp_offset_end(swqe, skb); | 1710 | write_tcp_offset_end(swqe, skb); |
1710 | } | 1711 | } |
1711 | 1712 | ||
@@ -1731,10 +1732,11 @@ static void ehea_xmit3(struct sk_buff *skb, struct net_device *dev, | |||
1731 | int i; | 1732 | int i; |
1732 | 1733 | ||
1733 | if (skb->protocol == htons(ETH_P_IP)) { | 1734 | if (skb->protocol == htons(ETH_P_IP)) { |
1735 | const struct iphdr *iph = ip_hdr(skb); | ||
1734 | /* IPv4 */ | 1736 | /* IPv4 */ |
1735 | write_ip_start_end(swqe, skb); | 1737 | write_ip_start_end(swqe, skb); |
1736 | 1738 | ||
1737 | if (skb->nh.iph->protocol == IPPROTO_TCP) { | 1739 | if (iph->protocol == IPPROTO_TCP) { |
1738 | swqe->tx_control |= EHEA_SWQE_CRC | 1740 | swqe->tx_control |= EHEA_SWQE_CRC |
1739 | | EHEA_SWQE_IP_CHECKSUM | 1741 | | EHEA_SWQE_IP_CHECKSUM |
1740 | | EHEA_SWQE_TCP_CHECKSUM | 1742 | | EHEA_SWQE_TCP_CHECKSUM |
@@ -1742,9 +1744,9 @@ static void ehea_xmit3(struct sk_buff *skb, struct net_device *dev, | |||
1742 | 1744 | ||
1743 | write_tcp_offset_end(swqe, skb); | 1745 | write_tcp_offset_end(swqe, skb); |
1744 | 1746 | ||
1745 | } else if (skb->nh.iph->protocol == IPPROTO_UDP) { | 1747 | } else if (iph->protocol == IPPROTO_UDP) { |
1746 | if ((skb->nh.iph->frag_off & IP_MF) || | 1748 | if ((iph->frag_off & IP_MF) || |
1747 | (skb->nh.iph->frag_off & IP_OFFSET)) | 1749 | (iph->frag_off & IP_OFFSET)) |
1748 | /* IP fragment, so don't change cs */ | 1750 | /* IP fragment, so don't change cs */ |
1749 | swqe->tx_control |= EHEA_SWQE_CRC | 1751 | swqe->tx_control |= EHEA_SWQE_CRC |
1750 | | EHEA_SWQE_IMM_DATA_PRESENT; | 1752 | | EHEA_SWQE_IMM_DATA_PRESENT; |
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index c7a70933c759..c9abc96a0919 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c | |||
@@ -942,7 +942,7 @@ static inline void gfar_tx_checksum(struct sk_buff *skb, struct txfcb *fcb) | |||
942 | 942 | ||
943 | /* Tell the controller what the protocol is */ | 943 | /* Tell the controller what the protocol is */ |
944 | /* And provide the already calculated phcs */ | 944 | /* And provide the already calculated phcs */ |
945 | if (skb->nh.iph->protocol == IPPROTO_UDP) { | 945 | if (ip_hdr(skb)->protocol == IPPROTO_UDP) { |
946 | flags |= TXFCB_UDP; | 946 | flags |= TXFCB_UDP; |
947 | fcb->phcs = skb->h.uh->check; | 947 | fcb->phcs = skb->h.uh->check; |
948 | } else | 948 | } else |
diff --git a/drivers/net/ioc3-eth.c b/drivers/net/ioc3-eth.c index ea07aa5ba51b..d375e786b4b3 100644 --- a/drivers/net/ioc3-eth.c +++ b/drivers/net/ioc3-eth.c | |||
@@ -1393,9 +1393,9 @@ static int ioc3_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1393 | * manually. | 1393 | * manually. |
1394 | */ | 1394 | */ |
1395 | if (skb->ip_summed == CHECKSUM_PARTIAL) { | 1395 | if (skb->ip_summed == CHECKSUM_PARTIAL) { |
1396 | int proto = ntohs(skb->nh.iph->protocol); | 1396 | const struct iphdr *ih = ip_hdr(skb); |
1397 | const int proto = ntohs(ih->protocol); | ||
1397 | unsigned int csoff; | 1398 | unsigned int csoff; |
1398 | struct iphdr *ih = skb->nh.iph; | ||
1399 | uint32_t csum, ehsum; | 1399 | uint32_t csum, ehsum; |
1400 | uint16_t *eh; | 1400 | uint16_t *eh; |
1401 | 1401 | ||
diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c index cfb791bb45e2..bba4dcaf92e9 100644 --- a/drivers/net/ixgb/ixgb_main.c +++ b/drivers/net/ixgb/ixgb_main.c | |||
@@ -1182,6 +1182,8 @@ ixgb_tso(struct ixgb_adapter *adapter, struct sk_buff *skb) | |||
1182 | 1182 | ||
1183 | if (likely(skb_is_gso(skb))) { | 1183 | if (likely(skb_is_gso(skb))) { |
1184 | struct ixgb_buffer *buffer_info; | 1184 | struct ixgb_buffer *buffer_info; |
1185 | struct iphdr *iph; | ||
1186 | |||
1185 | if (skb_header_cloned(skb)) { | 1187 | if (skb_header_cloned(skb)) { |
1186 | err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); | 1188 | err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); |
1187 | if (err) | 1189 | if (err) |
@@ -1190,13 +1192,13 @@ ixgb_tso(struct ixgb_adapter *adapter, struct sk_buff *skb) | |||
1190 | 1192 | ||
1191 | hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); | 1193 | hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); |
1192 | mss = skb_shinfo(skb)->gso_size; | 1194 | mss = skb_shinfo(skb)->gso_size; |
1193 | skb->nh.iph->tot_len = 0; | 1195 | iph = ip_hdr(skb); |
1194 | skb->nh.iph->check = 0; | 1196 | iph->tot_len = 0; |
1195 | skb->h.th->check = ~csum_tcpudp_magic(skb->nh.iph->saddr, | 1197 | iph->check = 0; |
1196 | skb->nh.iph->daddr, | 1198 | skb->h.th->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, |
1197 | 0, IPPROTO_TCP, 0); | 1199 | 0, IPPROTO_TCP, 0); |
1198 | ipcss = skb_network_offset(skb); | 1200 | ipcss = skb_network_offset(skb); |
1199 | ipcso = (void *)&(skb->nh.iph->check) - (void *)skb->data; | 1201 | ipcso = (void *)&(iph->check) - (void *)skb->data; |
1200 | ipcse = skb->h.raw - skb->data - 1; | 1202 | ipcse = skb->h.raw - skb->data - 1; |
1201 | tucss = skb->h.raw - skb->data; | 1203 | tucss = skb->h.raw - skb->data; |
1202 | tucso = (void *)&(skb->h.th->check) - (void *)skb->data; | 1204 | tucso = (void *)&(skb->h.th->check) - (void *)skb->data; |
diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c index 9265c27b13b2..20b5cb101368 100644 --- a/drivers/net/loopback.c +++ b/drivers/net/loopback.c | |||
@@ -75,7 +75,7 @@ static DEFINE_PER_CPU(struct pcpu_lstats, pcpu_lstats); | |||
75 | #ifdef LOOPBACK_TSO | 75 | #ifdef LOOPBACK_TSO |
76 | static void emulate_large_send_offload(struct sk_buff *skb) | 76 | static void emulate_large_send_offload(struct sk_buff *skb) |
77 | { | 77 | { |
78 | struct iphdr *iph = skb->nh.iph; | 78 | struct iphdr *iph = ip_hdr(skb); |
79 | struct tcphdr *th = (struct tcphdr *)(skb_network_header(skb) + | 79 | struct tcphdr *th = (struct tcphdr *)(skb_network_header(skb) + |
80 | (iph->ihl * 4)); | 80 | (iph->ihl * 4)); |
81 | unsigned int doffset = (iph->ihl + th->doff) * 4; | 81 | unsigned int doffset = (iph->ihl + th->doff) * 4; |
@@ -93,7 +93,7 @@ static void emulate_large_send_offload(struct sk_buff *skb) | |||
93 | skb_reserve(nskb, 32); | 93 | skb_reserve(nskb, 32); |
94 | skb_set_mac_header(nskb, -ETH_HLEN); | 94 | skb_set_mac_header(nskb, -ETH_HLEN); |
95 | skb_reset_network_header(nskb); | 95 | skb_reset_network_header(nskb); |
96 | iph = nskb->nh.iph; | 96 | iph = ip_hdr(nskb); |
97 | memcpy(nskb->data, skb_network_header(skb), doffset); | 97 | memcpy(nskb->data, skb_network_header(skb), doffset); |
98 | if (skb_copy_bits(skb, | 98 | if (skb_copy_bits(skb, |
99 | doffset + offset, | 99 | doffset + offset, |
@@ -145,7 +145,7 @@ static int loopback_xmit(struct sk_buff *skb, struct net_device *dev) | |||
145 | #ifdef LOOPBACK_TSO | 145 | #ifdef LOOPBACK_TSO |
146 | if (skb_is_gso(skb)) { | 146 | if (skb_is_gso(skb)) { |
147 | BUG_ON(skb->protocol != htons(ETH_P_IP)); | 147 | BUG_ON(skb->protocol != htons(ETH_P_IP)); |
148 | BUG_ON(skb->nh.iph->protocol != IPPROTO_TCP); | 148 | BUG_ON(ip_hdr(skb)->protocol != IPPROTO_TCP); |
149 | 149 | ||
150 | emulate_large_send_offload(skb); | 150 | emulate_large_send_offload(skb); |
151 | return 0; | 151 | return 0; |
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c index cd9369a285e2..6b39a268ec29 100644 --- a/drivers/net/mv643xx_eth.c +++ b/drivers/net/mv643xx_eth.c | |||
@@ -1161,9 +1161,9 @@ static void eth_tx_submit_descs_for_skb(struct mv643xx_private *mp, | |||
1161 | 1161 | ||
1162 | cmd_sts |= ETH_GEN_TCP_UDP_CHECKSUM | | 1162 | cmd_sts |= ETH_GEN_TCP_UDP_CHECKSUM | |
1163 | ETH_GEN_IP_V_4_CHECKSUM | | 1163 | ETH_GEN_IP_V_4_CHECKSUM | |
1164 | skb->nh.iph->ihl << ETH_TX_IHL_SHIFT; | 1164 | ip_hdr(skb)->ihl << ETH_TX_IHL_SHIFT; |
1165 | 1165 | ||
1166 | switch (skb->nh.iph->protocol) { | 1166 | switch (ip_hdr(skb)->protocol) { |
1167 | case IPPROTO_UDP: | 1167 | case IPPROTO_UDP: |
1168 | cmd_sts |= ETH_UDP_FRAME; | 1168 | cmd_sts |= ETH_UDP_FRAME; |
1169 | desc->l4i_chk = skb->h.uh->check; | 1169 | desc->l4i_chk = skb->h.uh->check; |
diff --git a/drivers/net/netxen/netxen_nic_hw.c b/drivers/net/netxen/netxen_nic_hw.c index b2f5032937e3..28d68c3550ef 100644 --- a/drivers/net/netxen/netxen_nic_hw.c +++ b/drivers/net/netxen/netxen_nic_hw.c | |||
@@ -378,9 +378,9 @@ void netxen_tso_check(struct netxen_adapter *adapter, | |||
378 | skb->h.th->doff * 4); | 378 | skb->h.th->doff * 4); |
379 | netxen_set_cmd_desc_opcode(desc, TX_TCP_LSO); | 379 | netxen_set_cmd_desc_opcode(desc, TX_TCP_LSO); |
380 | } else if (skb->ip_summed == CHECKSUM_PARTIAL) { | 380 | } else if (skb->ip_summed == CHECKSUM_PARTIAL) { |
381 | if (skb->nh.iph->protocol == IPPROTO_TCP) { | 381 | if (ip_hdr(skb)->protocol == IPPROTO_TCP) { |
382 | netxen_set_cmd_desc_opcode(desc, TX_TCP_PKT); | 382 | netxen_set_cmd_desc_opcode(desc, TX_TCP_PKT); |
383 | } else if (skb->nh.iph->protocol == IPPROTO_UDP) { | 383 | } else if (ip_hdr(skb)->protocol == IPPROTO_UDP) { |
384 | netxen_set_cmd_desc_opcode(desc, TX_UDP_PKT); | 384 | netxen_set_cmd_desc_opcode(desc, TX_UDP_PKT); |
385 | } else { | 385 | } else { |
386 | return; | 386 | return; |
diff --git a/drivers/net/ns83820.c b/drivers/net/ns83820.c index 747988b12ecd..6a32338623f1 100644 --- a/drivers/net/ns83820.c +++ b/drivers/net/ns83820.c | |||
@@ -1156,9 +1156,9 @@ again: | |||
1156 | extsts = 0; | 1156 | extsts = 0; |
1157 | if (skb->ip_summed == CHECKSUM_PARTIAL) { | 1157 | if (skb->ip_summed == CHECKSUM_PARTIAL) { |
1158 | extsts |= EXTSTS_IPPKT; | 1158 | extsts |= EXTSTS_IPPKT; |
1159 | if (IPPROTO_TCP == skb->nh.iph->protocol) | 1159 | if (IPPROTO_TCP == ip_hdr(skb)->protocol) |
1160 | extsts |= EXTSTS_TCPPKT; | 1160 | extsts |= EXTSTS_TCPPKT; |
1161 | else if (IPPROTO_UDP == skb->nh.iph->protocol) | 1161 | else if (IPPROTO_UDP == ip_hdr(skb)->protocol) |
1162 | extsts |= EXTSTS_UDPPKT; | 1162 | extsts |= EXTSTS_UDPPKT; |
1163 | } | 1163 | } |
1164 | 1164 | ||
diff --git a/drivers/net/pasemi_mac.c b/drivers/net/pasemi_mac.c index 82218720bc3e..1d8129986cc5 100644 --- a/drivers/net/pasemi_mac.c +++ b/drivers/net/pasemi_mac.c | |||
@@ -731,7 +731,7 @@ static int pasemi_mac_start_tx(struct sk_buff *skb, struct net_device *dev) | |||
731 | if (skb->ip_summed == CHECKSUM_PARTIAL) { | 731 | if (skb->ip_summed == CHECKSUM_PARTIAL) { |
732 | const unsigned char *nh = skb_network_header(skb); | 732 | const unsigned char *nh = skb_network_header(skb); |
733 | 733 | ||
734 | switch (skb->nh.iph->protocol) { | 734 | switch (ip_hdr(skb)->protocol) { |
735 | case IPPROTO_TCP: | 735 | case IPPROTO_TCP: |
736 | dflags |= XCT_MACTX_CSUM_TCP; | 736 | dflags |= XCT_MACTX_CSUM_TCP; |
737 | dflags |= XCT_MACTX_IPH((skb->h.raw - skb->nh.raw) >> 2); | 737 | dflags |= XCT_MACTX_IPH((skb->h.raw - skb->nh.raw) >> 2); |
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index 34280f94e9ff..45876a854f00 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c | |||
@@ -2284,7 +2284,7 @@ static inline u32 rtl8169_tso_csum(struct sk_buff *skb, struct net_device *dev) | |||
2284 | return LargeSend | ((mss & MSSMask) << MSSShift); | 2284 | return LargeSend | ((mss & MSSMask) << MSSShift); |
2285 | } | 2285 | } |
2286 | if (skb->ip_summed == CHECKSUM_PARTIAL) { | 2286 | if (skb->ip_summed == CHECKSUM_PARTIAL) { |
2287 | const struct iphdr *ip = skb->nh.iph; | 2287 | const struct iphdr *ip = ip_hdr(skb); |
2288 | 2288 | ||
2289 | if (ip->protocol == IPPROTO_TCP) | 2289 | if (ip->protocol == IPPROTO_TCP) |
2290 | return IPCS | TCPCS; | 2290 | return IPCS | TCPCS; |
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 51e994f26a84..a37bb205f3d3 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
@@ -1428,7 +1428,7 @@ static int sky2_xmit_frame(struct sk_buff *skb, struct net_device *dev) | |||
1428 | tcpsum |= offset + skb->csum_offset; /* sum write */ | 1428 | tcpsum |= offset + skb->csum_offset; /* sum write */ |
1429 | 1429 | ||
1430 | ctrl = CALSUM | WR_SUM | INIT_SUM | LOCK_SUM; | 1430 | ctrl = CALSUM | WR_SUM | INIT_SUM | LOCK_SUM; |
1431 | if (skb->nh.iph->protocol == IPPROTO_UDP) | 1431 | if (ip_hdr(skb)->protocol == IPPROTO_UDP) |
1432 | ctrl |= UDPTCP; | 1432 | ctrl |= UDPTCP; |
1433 | 1433 | ||
1434 | if (tcpsum != sky2->tx_tcpsum) { | 1434 | if (tcpsum != sky2->tx_tcpsum) { |
diff --git a/drivers/net/spider_net.c b/drivers/net/spider_net.c index f7e0ac7f789a..230da14b1b68 100644 --- a/drivers/net/spider_net.c +++ b/drivers/net/spider_net.c | |||
@@ -720,7 +720,7 @@ spider_net_prepare_tx_descr(struct spider_net_card *card, | |||
720 | spin_unlock_irqrestore(&chain->lock, flags); | 720 | spin_unlock_irqrestore(&chain->lock, flags); |
721 | 721 | ||
722 | if (skb->protocol == htons(ETH_P_IP) && skb->ip_summed == CHECKSUM_PARTIAL) | 722 | if (skb->protocol == htons(ETH_P_IP) && skb->ip_summed == CHECKSUM_PARTIAL) |
723 | switch (skb->nh.iph->protocol) { | 723 | switch (ip_hdr(skb)->protocol) { |
724 | case IPPROTO_TCP: | 724 | case IPPROTO_TCP: |
725 | hwdescr->dmac_cmd_status |= SPIDER_NET_DMAC_TCP; | 725 | hwdescr->dmac_cmd_status |= SPIDER_NET_DMAC_TCP; |
726 | break; | 726 | break; |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 62a3bba0097d..76a31afe20de 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -3909,12 +3909,13 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3909 | if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6) | 3909 | if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6) |
3910 | mss |= (skb_headlen(skb) - ETH_HLEN) << 9; | 3910 | mss |= (skb_headlen(skb) - ETH_HLEN) << 9; |
3911 | else { | 3911 | else { |
3912 | struct iphdr *iph = ip_hdr(skb); | ||
3913 | |||
3912 | tcp_opt_len = ((skb->h.th->doff - 5) * 4); | 3914 | tcp_opt_len = ((skb->h.th->doff - 5) * 4); |
3913 | ip_tcp_len = ip_hdrlen(skb) + sizeof(struct tcphdr); | 3915 | ip_tcp_len = ip_hdrlen(skb) + sizeof(struct tcphdr); |
3914 | 3916 | ||
3915 | skb->nh.iph->check = 0; | 3917 | iph->check = 0; |
3916 | skb->nh.iph->tot_len = htons(mss + ip_tcp_len + | 3918 | iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len); |
3917 | tcp_opt_len); | ||
3918 | mss |= (ip_tcp_len + tcp_opt_len) << 9; | 3919 | mss |= (ip_tcp_len + tcp_opt_len) << 9; |
3919 | } | 3920 | } |
3920 | 3921 | ||
@@ -4055,6 +4056,7 @@ static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev) | |||
4055 | mss = 0; | 4056 | mss = 0; |
4056 | if (skb->len > (tp->dev->mtu + ETH_HLEN) && | 4057 | if (skb->len > (tp->dev->mtu + ETH_HLEN) && |
4057 | (mss = skb_shinfo(skb)->gso_size) != 0) { | 4058 | (mss = skb_shinfo(skb)->gso_size) != 0) { |
4059 | struct iphdr *iph; | ||
4058 | int tcp_opt_len, ip_tcp_len, hdr_len; | 4060 | int tcp_opt_len, ip_tcp_len, hdr_len; |
4059 | 4061 | ||
4060 | if (skb_header_cloned(skb) && | 4062 | if (skb_header_cloned(skb) && |
@@ -4074,34 +4076,32 @@ static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev) | |||
4074 | base_flags |= (TXD_FLAG_CPU_PRE_DMA | | 4076 | base_flags |= (TXD_FLAG_CPU_PRE_DMA | |
4075 | TXD_FLAG_CPU_POST_DMA); | 4077 | TXD_FLAG_CPU_POST_DMA); |
4076 | 4078 | ||
4077 | skb->nh.iph->check = 0; | 4079 | iph = ip_hdr(skb); |
4078 | skb->nh.iph->tot_len = htons(mss + hdr_len); | 4080 | iph->check = 0; |
4081 | iph->tot_len = htons(mss + hdr_len); | ||
4079 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) { | 4082 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) { |
4080 | skb->h.th->check = 0; | 4083 | skb->h.th->check = 0; |
4081 | base_flags &= ~TXD_FLAG_TCPUDP_CSUM; | 4084 | base_flags &= ~TXD_FLAG_TCPUDP_CSUM; |
4082 | } | 4085 | } |
4083 | else { | 4086 | else { |
4084 | skb->h.th->check = | 4087 | skb->h.th->check = ~csum_tcpudp_magic(iph->saddr, |
4085 | ~csum_tcpudp_magic(skb->nh.iph->saddr, | 4088 | iph->daddr, 0, |
4086 | skb->nh.iph->daddr, | 4089 | IPPROTO_TCP, 0); |
4087 | 0, IPPROTO_TCP, 0); | ||
4088 | } | 4090 | } |
4089 | 4091 | ||
4090 | if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO) || | 4092 | if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO) || |
4091 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)) { | 4093 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)) { |
4092 | if (tcp_opt_len || skb->nh.iph->ihl > 5) { | 4094 | if (tcp_opt_len || iph->ihl > 5) { |
4093 | int tsflags; | 4095 | int tsflags; |
4094 | 4096 | ||
4095 | tsflags = ((skb->nh.iph->ihl - 5) + | 4097 | tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); |
4096 | (tcp_opt_len >> 2)); | ||
4097 | mss |= (tsflags << 11); | 4098 | mss |= (tsflags << 11); |
4098 | } | 4099 | } |
4099 | } else { | 4100 | } else { |
4100 | if (tcp_opt_len || skb->nh.iph->ihl > 5) { | 4101 | if (tcp_opt_len || iph->ihl > 5) { |
4101 | int tsflags; | 4102 | int tsflags; |
4102 | 4103 | ||
4103 | tsflags = ((skb->nh.iph->ihl - 5) + | 4104 | tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); |
4104 | (tcp_opt_len >> 2)); | ||
4105 | base_flags |= tsflags << 12; | 4105 | base_flags |= tsflags << 12; |
4106 | } | 4106 | } |
4107 | } | 4107 | } |
diff --git a/drivers/net/via-velocity.c b/drivers/net/via-velocity.c index 9f6cc1569b3e..422eaf8ea12d 100644 --- a/drivers/net/via-velocity.c +++ b/drivers/net/via-velocity.c | |||
@@ -2006,7 +2006,7 @@ static int velocity_xmit(struct sk_buff *skb, struct net_device *dev) | |||
2006 | */ | 2006 | */ |
2007 | if ((vptr->flags & VELOCITY_FLAGS_TX_CSUM) | 2007 | if ((vptr->flags & VELOCITY_FLAGS_TX_CSUM) |
2008 | && (skb->ip_summed == CHECKSUM_PARTIAL)) { | 2008 | && (skb->ip_summed == CHECKSUM_PARTIAL)) { |
2009 | struct iphdr *ip = skb->nh.iph; | 2009 | const struct iphdr *ip = ip_hdr(skb); |
2010 | if (ip->protocol == IPPROTO_TCP) | 2010 | if (ip->protocol == IPPROTO_TCP) |
2011 | td_ptr->tdesc1.TCR |= TCR0_TCPCK; | 2011 | td_ptr->tdesc1.TCR |= TCR0_TCPCK; |
2012 | else if (ip->protocol == IPPROTO_UDP) | 2012 | else if (ip->protocol == IPPROTO_UDP) |
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c index 0ff29e0628b5..8a07d548a05a 100644 --- a/drivers/s390/net/qeth_main.c +++ b/drivers/s390/net/qeth_main.c | |||
@@ -3820,18 +3820,20 @@ qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb, | |||
3820 | return card->info.is_multicast_different & | 3820 | return card->info.is_multicast_different & |
3821 | (card->qdio.no_out_queues - 1); | 3821 | (card->qdio.no_out_queues - 1); |
3822 | if (card->qdio.do_prio_queueing && (ipv == 4)) { | 3822 | if (card->qdio.do_prio_queueing && (ipv == 4)) { |
3823 | const u8 tos = ip_hdr(skb)->tos; | ||
3824 | |||
3823 | if (card->qdio.do_prio_queueing==QETH_PRIO_Q_ING_TOS){ | 3825 | if (card->qdio.do_prio_queueing==QETH_PRIO_Q_ING_TOS){ |
3824 | if (skb->nh.iph->tos & IP_TOS_NOTIMPORTANT) | 3826 | if (tos & IP_TOS_NOTIMPORTANT) |
3825 | return 3; | 3827 | return 3; |
3826 | if (skb->nh.iph->tos & IP_TOS_HIGHRELIABILITY) | 3828 | if (tos & IP_TOS_HIGHRELIABILITY) |
3827 | return 2; | 3829 | return 2; |
3828 | if (skb->nh.iph->tos & IP_TOS_HIGHTHROUGHPUT) | 3830 | if (tos & IP_TOS_HIGHTHROUGHPUT) |
3829 | return 1; | 3831 | return 1; |
3830 | if (skb->nh.iph->tos & IP_TOS_LOWDELAY) | 3832 | if (tos & IP_TOS_LOWDELAY) |
3831 | return 0; | 3833 | return 0; |
3832 | } | 3834 | } |
3833 | if (card->qdio.do_prio_queueing==QETH_PRIO_Q_ING_PREC) | 3835 | if (card->qdio.do_prio_queueing==QETH_PRIO_Q_ING_PREC) |
3834 | return 3 - (skb->nh.iph->tos >> 6); | 3836 | return 3 - (tos >> 6); |
3835 | } else if (card->qdio.do_prio_queueing && (ipv == 6)) { | 3837 | } else if (card->qdio.do_prio_queueing && (ipv == 6)) { |
3836 | /* TODO: IPv6!!! */ | 3838 | /* TODO: IPv6!!! */ |
3837 | } | 3839 | } |
@@ -4041,7 +4043,8 @@ qeth_fill_header(struct qeth_card *card, struct qeth_hdr *hdr, | |||
4041 | *((u32 *) skb->dst->neighbour->primary_key); | 4043 | *((u32 *) skb->dst->neighbour->primary_key); |
4042 | } else { | 4044 | } else { |
4043 | /* fill in destination address used in ip header */ | 4045 | /* fill in destination address used in ip header */ |
4044 | *((u32 *) (&hdr->hdr.l3.dest_addr[12])) = skb->nh.iph->daddr; | 4046 | *((u32 *)(&hdr->hdr.l3.dest_addr[12])) = |
4047 | ip_hdr(skb)->daddr; | ||
4045 | } | 4048 | } |
4046 | } else if (ipv == 6) { /* IPv6 or passthru */ | 4049 | } else if (ipv == 6) { /* IPv6 or passthru */ |
4047 | hdr->hdr.l3.flags = qeth_get_qeth_hdr_flags6(cast_type); | 4050 | hdr->hdr.l3.flags = qeth_get_qeth_hdr_flags6(cast_type); |
diff --git a/drivers/s390/net/qeth_tso.h b/drivers/s390/net/qeth_tso.h index 14504afb044e..255cb2e9c796 100644 --- a/drivers/s390/net/qeth_tso.h +++ b/drivers/s390/net/qeth_tso.h | |||
@@ -40,7 +40,7 @@ qeth_tso_fill_header(struct qeth_card *card, struct sk_buff *skb) | |||
40 | QETH_DBF_TEXT(trace, 5, "tsofhdr"); | 40 | QETH_DBF_TEXT(trace, 5, "tsofhdr"); |
41 | 41 | ||
42 | hdr = (struct qeth_hdr_tso *) skb->data; | 42 | hdr = (struct qeth_hdr_tso *) skb->data; |
43 | iph = skb->nh.iph; | 43 | iph = ip_hdr(skb); |
44 | tcph = skb->h.th; | 44 | tcph = skb->h.th; |
45 | /*fix header to TSO values ...*/ | 45 | /*fix header to TSO values ...*/ |
46 | hdr->hdr.hdr.l3.id = QETH_HEADER_TYPE_TSO; | 46 | hdr->hdr.hdr.l3.id = QETH_HEADER_TYPE_TSO; |
@@ -63,13 +63,9 @@ qeth_tso_fill_header(struct qeth_card *card, struct sk_buff *skb) | |||
63 | static inline void | 63 | static inline void |
64 | qeth_tso_set_tcpip_header(struct qeth_card *card, struct sk_buff *skb) | 64 | qeth_tso_set_tcpip_header(struct qeth_card *card, struct sk_buff *skb) |
65 | { | 65 | { |
66 | struct iphdr *iph; | 66 | struct iphdr *iph = ip_hdr(skb); |
67 | struct ipv6hdr *ip6h; | 67 | struct ipv6hdr *ip6h = skb->nh.ipv6h; |
68 | struct tcphdr *tcph; | 68 | struct tcphdr *tcph = skb->h.th; |
69 | |||
70 | iph = skb->nh.iph; | ||
71 | ip6h = skb->nh.ipv6h; | ||
72 | tcph = skb->h.th; | ||
73 | 69 | ||
74 | tcph->check = 0; | 70 | tcph->check = 0; |
75 | if (skb->protocol == ETH_P_IPV6) { | 71 | if (skb->protocol == ETH_P_IPV6) { |
diff --git a/include/linux/ip.h b/include/linux/ip.h index 1d36b971a8b5..f2f26db16f57 100644 --- a/include/linux/ip.h +++ b/include/linux/ip.h | |||
@@ -104,6 +104,15 @@ struct iphdr { | |||
104 | /*The options start here. */ | 104 | /*The options start here. */ |
105 | }; | 105 | }; |
106 | 106 | ||
107 | #ifdef __KERNEL__ | ||
108 | #include <linux/skbuff.h> | ||
109 | |||
110 | static inline struct iphdr *ip_hdr(const struct sk_buff *skb) | ||
111 | { | ||
112 | return (struct iphdr *)skb_network_header(skb); | ||
113 | } | ||
114 | #endif | ||
115 | |||
107 | struct ip_auth_hdr { | 116 | struct ip_auth_hdr { |
108 | __u8 nexthdr; | 117 | __u8 nexthdr; |
109 | __u8 hdrlen; /* This one is measured in 32 bit units! */ | 118 | __u8 hdrlen; /* This one is measured in 32 bit units! */ |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 870438fba93f..62f841b5b700 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -247,7 +247,6 @@ struct sk_buff { | |||
247 | } h; | 247 | } h; |
248 | 248 | ||
249 | union { | 249 | union { |
250 | struct iphdr *iph; | ||
251 | struct ipv6hdr *ipv6h; | 250 | struct ipv6hdr *ipv6h; |
252 | struct arphdr *arph; | 251 | struct arphdr *arph; |
253 | unsigned char *raw; | 252 | unsigned char *raw; |
diff --git a/include/net/inet_ecn.h b/include/net/inet_ecn.h index b9ed3898e368..6fd4452c15d9 100644 --- a/include/net/inet_ecn.h +++ b/include/net/inet_ecn.h | |||
@@ -116,7 +116,7 @@ static inline int INET_ECN_set_ce(struct sk_buff *skb) | |||
116 | case __constant_htons(ETH_P_IP): | 116 | case __constant_htons(ETH_P_IP): |
117 | if (skb_network_header(skb) + sizeof(struct iphdr) <= | 117 | if (skb_network_header(skb) + sizeof(struct iphdr) <= |
118 | skb->tail) | 118 | skb->tail) |
119 | return IP_ECN_set_ce(skb->nh.iph); | 119 | return IP_ECN_set_ce(ip_hdr(skb)); |
120 | break; | 120 | break; |
121 | 121 | ||
122 | case __constant_htons(ETH_P_IPV6): | 122 | case __constant_htons(ETH_P_IPV6): |
diff --git a/include/net/ip.h b/include/net/ip.h index 6f7ba32b199d..75f226d26e0d 100644 --- a/include/net/ip.h +++ b/include/net/ip.h | |||
@@ -46,7 +46,7 @@ struct inet_skb_parm | |||
46 | 46 | ||
47 | static inline unsigned int ip_hdrlen(const struct sk_buff *skb) | 47 | static inline unsigned int ip_hdrlen(const struct sk_buff *skb) |
48 | { | 48 | { |
49 | return skb->nh.iph->ihl * 4; | 49 | return ip_hdr(skb)->ihl * 4; |
50 | } | 50 | } |
51 | 51 | ||
52 | struct ipcm_cookie | 52 | struct ipcm_cookie |
diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index 8a6b0e7bded5..880eb7b54164 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h | |||
@@ -334,8 +334,8 @@ static inline unsigned char * tcf_get_base_ptr(struct sk_buff *skb, int layer) | |||
334 | return NULL; | 334 | return NULL; |
335 | } | 335 | } |
336 | 336 | ||
337 | static inline int tcf_valid_offset(struct sk_buff *skb, unsigned char *ptr, | 337 | static inline int tcf_valid_offset(const struct sk_buff *skb, |
338 | int len) | 338 | const unsigned char *ptr, const int len) |
339 | { | 339 | { |
340 | return unlikely((ptr + len) < skb->tail && ptr > skb->head); | 340 | return unlikely((ptr + len) < skb->tail && ptr > skb->head); |
341 | } | 341 | } |
diff --git a/net/atm/mpc.c b/net/atm/mpc.c index bc15728fd847..4d2592c14090 100644 --- a/net/atm/mpc.c +++ b/net/atm/mpc.c | |||
@@ -715,7 +715,7 @@ static void mpc_push(struct atm_vcc *vcc, struct sk_buff *skb) | |||
715 | new_skb->protocol = eth_type_trans(new_skb, dev); | 715 | new_skb->protocol = eth_type_trans(new_skb, dev); |
716 | skb_reset_network_header(new_skb); | 716 | skb_reset_network_header(new_skb); |
717 | 717 | ||
718 | eg->latest_ip_addr = new_skb->nh.iph->saddr; | 718 | eg->latest_ip_addr = ip_hdr(new_skb)->saddr; |
719 | eg->packets_rcvd++; | 719 | eg->packets_rcvd++; |
720 | mpc->eg_ops->put(eg); | 720 | mpc->eg_ops->put(eg); |
721 | 721 | ||
diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c index 8a56d8963025..ebe740f6b902 100644 --- a/net/bridge/br_netfilter.c +++ b/net/bridge/br_netfilter.c | |||
@@ -48,8 +48,8 @@ | |||
48 | 48 | ||
49 | #define skb_origaddr(skb) (((struct bridge_skb_cb *) \ | 49 | #define skb_origaddr(skb) (((struct bridge_skb_cb *) \ |
50 | (skb->nf_bridge->data))->daddr.ipv4) | 50 | (skb->nf_bridge->data))->daddr.ipv4) |
51 | #define store_orig_dstaddr(skb) (skb_origaddr(skb) = (skb)->nh.iph->daddr) | 51 | #define store_orig_dstaddr(skb) (skb_origaddr(skb) = ip_hdr(skb)->daddr) |
52 | #define dnat_took_place(skb) (skb_origaddr(skb) != (skb)->nh.iph->daddr) | 52 | #define dnat_took_place(skb) (skb_origaddr(skb) != ip_hdr(skb)->daddr) |
53 | 53 | ||
54 | #ifdef CONFIG_SYSCTL | 54 | #ifdef CONFIG_SYSCTL |
55 | static struct ctl_table_header *brnf_sysctl_header; | 55 | static struct ctl_table_header *brnf_sysctl_header; |
@@ -265,7 +265,7 @@ static int br_nf_pre_routing_finish_bridge(struct sk_buff *skb) | |||
265 | static int br_nf_pre_routing_finish(struct sk_buff *skb) | 265 | static int br_nf_pre_routing_finish(struct sk_buff *skb) |
266 | { | 266 | { |
267 | struct net_device *dev = skb->dev; | 267 | struct net_device *dev = skb->dev; |
268 | struct iphdr *iph = skb->nh.iph; | 268 | struct iphdr *iph = ip_hdr(skb); |
269 | struct nf_bridge_info *nf_bridge = skb->nf_bridge; | 269 | struct nf_bridge_info *nf_bridge = skb->nf_bridge; |
270 | int err; | 270 | int err; |
271 | 271 | ||
@@ -520,14 +520,14 @@ static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb, | |||
520 | if (!pskb_may_pull(skb, sizeof(struct iphdr))) | 520 | if (!pskb_may_pull(skb, sizeof(struct iphdr))) |
521 | goto inhdr_error; | 521 | goto inhdr_error; |
522 | 522 | ||
523 | iph = skb->nh.iph; | 523 | iph = ip_hdr(skb); |
524 | if (iph->ihl < 5 || iph->version != 4) | 524 | if (iph->ihl < 5 || iph->version != 4) |
525 | goto inhdr_error; | 525 | goto inhdr_error; |
526 | 526 | ||
527 | if (!pskb_may_pull(skb, 4 * iph->ihl)) | 527 | if (!pskb_may_pull(skb, 4 * iph->ihl)) |
528 | goto inhdr_error; | 528 | goto inhdr_error; |
529 | 529 | ||
530 | iph = skb->nh.iph; | 530 | iph = ip_hdr(skb); |
531 | if (ip_fast_csum((__u8 *) iph, iph->ihl) != 0) | 531 | if (ip_fast_csum((__u8 *) iph, iph->ihl) != 0) |
532 | goto inhdr_error; | 532 | goto inhdr_error; |
533 | 533 | ||
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 44e030eb6e75..c4cec17be334 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c | |||
@@ -310,7 +310,7 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len) | |||
310 | 310 | ||
311 | skb_push(skb, sizeof(*iph)); | 311 | skb_push(skb, sizeof(*iph)); |
312 | skb_reset_network_header(skb); | 312 | skb_reset_network_header(skb); |
313 | iph = skb->nh.iph; | 313 | iph = ip_hdr(skb); |
314 | 314 | ||
315 | /* iph->version = 4; iph->ihl = 5; */ | 315 | /* iph->version = 4; iph->ihl = 5; */ |
316 | put_unaligned(0x45, (unsigned char *)iph); | 316 | put_unaligned(0x45, (unsigned char *)iph); |
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 10d33fc233b3..e0faff8eb652 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -2391,7 +2391,7 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev, | |||
2391 | VLAN_TAG_SIZE(pkt_dev) - SVLAN_TAG_SIZE(pkt_dev); | 2391 | VLAN_TAG_SIZE(pkt_dev) - SVLAN_TAG_SIZE(pkt_dev); |
2392 | skb->dev = odev; | 2392 | skb->dev = odev; |
2393 | skb->pkt_type = PACKET_HOST; | 2393 | skb->pkt_type = PACKET_HOST; |
2394 | skb->nh.iph = iph; | 2394 | skb->nh.raw = (unsigned char *)iph; |
2395 | skb->h.uh = udph; | 2395 | skb->h.uh = udph; |
2396 | 2396 | ||
2397 | if (pkt_dev->nfrags <= 0) | 2397 | if (pkt_dev->nfrags <= 0) |
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index 4a83978aa660..b85437dae0e7 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c | |||
@@ -363,8 +363,8 @@ EXPORT_SYMBOL_GPL(dccp_v4_send_check); | |||
363 | 363 | ||
364 | static inline u64 dccp_v4_init_sequence(const struct sk_buff *skb) | 364 | static inline u64 dccp_v4_init_sequence(const struct sk_buff *skb) |
365 | { | 365 | { |
366 | return secure_dccp_sequence_number(skb->nh.iph->daddr, | 366 | return secure_dccp_sequence_number(ip_hdr(skb)->daddr, |
367 | skb->nh.iph->saddr, | 367 | ip_hdr(skb)->saddr, |
368 | dccp_hdr(skb)->dccph_dport, | 368 | dccp_hdr(skb)->dccph_dport, |
369 | dccp_hdr(skb)->dccph_sport); | 369 | dccp_hdr(skb)->dccph_sport); |
370 | } | 370 | } |
@@ -405,7 +405,7 @@ struct sock *dccp_v4_request_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
405 | newinet->opt = ireq->opt; | 405 | newinet->opt = ireq->opt; |
406 | ireq->opt = NULL; | 406 | ireq->opt = NULL; |
407 | newinet->mc_index = inet_iif(skb); | 407 | newinet->mc_index = inet_iif(skb); |
408 | newinet->mc_ttl = skb->nh.iph->ttl; | 408 | newinet->mc_ttl = ip_hdr(skb)->ttl; |
409 | newinet->id = jiffies; | 409 | newinet->id = jiffies; |
410 | 410 | ||
411 | dccp_sync_mss(newsk, dst_mtu(dst)); | 411 | dccp_sync_mss(newsk, dst_mtu(dst)); |
@@ -428,7 +428,7 @@ EXPORT_SYMBOL_GPL(dccp_v4_request_recv_sock); | |||
428 | static struct sock *dccp_v4_hnd_req(struct sock *sk, struct sk_buff *skb) | 428 | static struct sock *dccp_v4_hnd_req(struct sock *sk, struct sk_buff *skb) |
429 | { | 429 | { |
430 | const struct dccp_hdr *dh = dccp_hdr(skb); | 430 | const struct dccp_hdr *dh = dccp_hdr(skb); |
431 | const struct iphdr *iph = skb->nh.iph; | 431 | const struct iphdr *iph = ip_hdr(skb); |
432 | struct sock *nsk; | 432 | struct sock *nsk; |
433 | struct request_sock **prev; | 433 | struct request_sock **prev; |
434 | /* Find possible connection requests. */ | 434 | /* Find possible connection requests. */ |
@@ -460,8 +460,8 @@ static struct dst_entry* dccp_v4_route_skb(struct sock *sk, | |||
460 | struct rtable *rt; | 460 | struct rtable *rt; |
461 | struct flowi fl = { .oif = ((struct rtable *)skb->dst)->rt_iif, | 461 | struct flowi fl = { .oif = ((struct rtable *)skb->dst)->rt_iif, |
462 | .nl_u = { .ip4_u = | 462 | .nl_u = { .ip4_u = |
463 | { .daddr = skb->nh.iph->saddr, | 463 | { .daddr = ip_hdr(skb)->saddr, |
464 | .saddr = skb->nh.iph->daddr, | 464 | .saddr = ip_hdr(skb)->daddr, |
465 | .tos = RT_CONN_FLAGS(sk) } }, | 465 | .tos = RT_CONN_FLAGS(sk) } }, |
466 | .proto = sk->sk_protocol, | 466 | .proto = sk->sk_protocol, |
467 | .uli_u = { .ports = | 467 | .uli_u = { .ports = |
@@ -513,6 +513,7 @@ static void dccp_v4_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb) | |||
513 | { | 513 | { |
514 | int err; | 514 | int err; |
515 | struct dccp_hdr *rxdh = dccp_hdr(rxskb), *dh; | 515 | struct dccp_hdr *rxdh = dccp_hdr(rxskb), *dh; |
516 | const struct iphdr *rxiph; | ||
516 | const int dccp_hdr_reset_len = sizeof(struct dccp_hdr) + | 517 | const int dccp_hdr_reset_len = sizeof(struct dccp_hdr) + |
517 | sizeof(struct dccp_hdr_ext) + | 518 | sizeof(struct dccp_hdr_ext) + |
518 | sizeof(struct dccp_hdr_reset); | 519 | sizeof(struct dccp_hdr_reset); |
@@ -559,13 +560,13 @@ static void dccp_v4_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb) | |||
559 | dccp_hdr_set_ack(dccp_hdr_ack_bits(skb), DCCP_SKB_CB(rxskb)->dccpd_seq); | 560 | dccp_hdr_set_ack(dccp_hdr_ack_bits(skb), DCCP_SKB_CB(rxskb)->dccpd_seq); |
560 | 561 | ||
561 | dccp_csum_outgoing(skb); | 562 | dccp_csum_outgoing(skb); |
562 | dh->dccph_checksum = dccp_v4_csum_finish(skb, rxskb->nh.iph->saddr, | 563 | rxiph = ip_hdr(rxskb); |
563 | rxskb->nh.iph->daddr); | 564 | dh->dccph_checksum = dccp_v4_csum_finish(skb, rxiph->saddr, |
565 | rxiph->daddr); | ||
564 | 566 | ||
565 | bh_lock_sock(dccp_v4_ctl_socket->sk); | 567 | bh_lock_sock(dccp_v4_ctl_socket->sk); |
566 | err = ip_build_and_send_pkt(skb, dccp_v4_ctl_socket->sk, | 568 | err = ip_build_and_send_pkt(skb, dccp_v4_ctl_socket->sk, |
567 | rxskb->nh.iph->daddr, | 569 | rxiph->daddr, rxiph->saddr, NULL); |
568 | rxskb->nh.iph->saddr, NULL); | ||
569 | bh_unlock_sock(dccp_v4_ctl_socket->sk); | 570 | bh_unlock_sock(dccp_v4_ctl_socket->sk); |
570 | 571 | ||
571 | if (net_xmit_eval(err) == 0) { | 572 | if (net_xmit_eval(err) == 0) { |
@@ -640,8 +641,8 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) | |||
640 | goto drop_and_free; | 641 | goto drop_and_free; |
641 | 642 | ||
642 | ireq = inet_rsk(req); | 643 | ireq = inet_rsk(req); |
643 | ireq->loc_addr = skb->nh.iph->daddr; | 644 | ireq->loc_addr = ip_hdr(skb)->daddr; |
644 | ireq->rmt_addr = skb->nh.iph->saddr; | 645 | ireq->rmt_addr = ip_hdr(skb)->saddr; |
645 | ireq->opt = NULL; | 646 | ireq->opt = NULL; |
646 | 647 | ||
647 | /* | 648 | /* |
@@ -809,6 +810,7 @@ EXPORT_SYMBOL_GPL(dccp_invalid_packet); | |||
809 | static int dccp_v4_rcv(struct sk_buff *skb) | 810 | static int dccp_v4_rcv(struct sk_buff *skb) |
810 | { | 811 | { |
811 | const struct dccp_hdr *dh; | 812 | const struct dccp_hdr *dh; |
813 | const struct iphdr *iph; | ||
812 | struct sock *sk; | 814 | struct sock *sk; |
813 | int min_cov; | 815 | int min_cov; |
814 | 816 | ||
@@ -817,8 +819,9 @@ static int dccp_v4_rcv(struct sk_buff *skb) | |||
817 | if (dccp_invalid_packet(skb)) | 819 | if (dccp_invalid_packet(skb)) |
818 | goto discard_it; | 820 | goto discard_it; |
819 | 821 | ||
822 | iph = ip_hdr(skb); | ||
820 | /* Step 1: If header checksum is incorrect, drop packet and return */ | 823 | /* Step 1: If header checksum is incorrect, drop packet and return */ |
821 | if (dccp_v4_csum_finish(skb, skb->nh.iph->saddr, skb->nh.iph->daddr)) { | 824 | if (dccp_v4_csum_finish(skb, iph->saddr, iph->daddr)) { |
822 | DCCP_WARN("dropped packet with invalid checksum\n"); | 825 | DCCP_WARN("dropped packet with invalid checksum\n"); |
823 | goto discard_it; | 826 | goto discard_it; |
824 | } | 827 | } |
@@ -832,8 +835,8 @@ static int dccp_v4_rcv(struct sk_buff *skb) | |||
832 | "src=%u.%u.%u.%u@%-5d " | 835 | "src=%u.%u.%u.%u@%-5d " |
833 | "dst=%u.%u.%u.%u@%-5d seq=%llu", | 836 | "dst=%u.%u.%u.%u@%-5d seq=%llu", |
834 | dccp_packet_name(dh->dccph_type), | 837 | dccp_packet_name(dh->dccph_type), |
835 | NIPQUAD(skb->nh.iph->saddr), ntohs(dh->dccph_sport), | 838 | NIPQUAD(iph->saddr), ntohs(dh->dccph_sport), |
836 | NIPQUAD(skb->nh.iph->daddr), ntohs(dh->dccph_dport), | 839 | NIPQUAD(iph->daddr), ntohs(dh->dccph_dport), |
837 | (unsigned long long) DCCP_SKB_CB(skb)->dccpd_seq); | 840 | (unsigned long long) DCCP_SKB_CB(skb)->dccpd_seq); |
838 | 841 | ||
839 | if (dccp_packet_without_ack(skb)) { | 842 | if (dccp_packet_without_ack(skb)) { |
@@ -848,10 +851,8 @@ static int dccp_v4_rcv(struct sk_buff *skb) | |||
848 | /* Step 2: | 851 | /* Step 2: |
849 | * Look up flow ID in table and get corresponding socket */ | 852 | * Look up flow ID in table and get corresponding socket */ |
850 | sk = __inet_lookup(&dccp_hashinfo, | 853 | sk = __inet_lookup(&dccp_hashinfo, |
851 | skb->nh.iph->saddr, dh->dccph_sport, | 854 | iph->saddr, dh->dccph_sport, |
852 | skb->nh.iph->daddr, dh->dccph_dport, | 855 | iph->daddr, dh->dccph_dport, inet_iif(skb)); |
853 | inet_iif(skb)); | ||
854 | |||
855 | /* | 856 | /* |
856 | * Step 2: | 857 | * Step 2: |
857 | * If no socket ... | 858 | * If no socket ... |
diff --git a/net/econet/af_econet.c b/net/econet/af_econet.c index 099543f5401f..dcc2e4b6b2fe 100644 --- a/net/econet/af_econet.c +++ b/net/econet/af_econet.c | |||
@@ -848,7 +848,7 @@ static void aun_send_response(__u32 addr, unsigned long seq, int code, int cb) | |||
848 | 848 | ||
849 | static void aun_incoming(struct sk_buff *skb, struct aunhdr *ah, size_t len) | 849 | static void aun_incoming(struct sk_buff *skb, struct aunhdr *ah, size_t len) |
850 | { | 850 | { |
851 | struct iphdr *ip = skb->nh.iph; | 851 | struct iphdr *ip = ip_hdr(skb); |
852 | unsigned char stn = ntohl(ip->saddr) & 0xff; | 852 | unsigned char stn = ntohl(ip->saddr) & 0xff; |
853 | struct sock *sk; | 853 | struct sock *sk; |
854 | struct sk_buff *newskb; | 854 | struct sk_buff *newskb; |
@@ -946,7 +946,7 @@ static void aun_data_available(struct sock *sk, int slen) | |||
946 | data = skb->h.raw + sizeof(struct udphdr); | 946 | data = skb->h.raw + sizeof(struct udphdr); |
947 | ah = (struct aunhdr *)data; | 947 | ah = (struct aunhdr *)data; |
948 | len = skb->len - sizeof(struct udphdr); | 948 | len = skb->len - sizeof(struct udphdr); |
949 | ip = skb->nh.iph; | 949 | ip = ip_hdr(skb); |
950 | 950 | ||
951 | switch (ah->code) | 951 | switch (ah->code) |
952 | { | 952 | { |
diff --git a/net/ieee80211/ieee80211_tx.c b/net/ieee80211/ieee80211_tx.c index 3fca4345ebe5..62a8a2b76539 100644 --- a/net/ieee80211/ieee80211_tx.c +++ b/net/ieee80211/ieee80211_tx.c | |||
@@ -228,7 +228,7 @@ static int ieee80211_classify(struct sk_buff *skb) | |||
228 | if (eth->h_proto != htons(ETH_P_IP)) | 228 | if (eth->h_proto != htons(ETH_P_IP)) |
229 | return 0; | 229 | return 0; |
230 | 230 | ||
231 | ip = skb->nh.iph; | 231 | ip = ip_hdr(skb); |
232 | switch (ip->tos & 0xfc) { | 232 | switch (ip->tos & 0xfc) { |
233 | case 0x20: | 233 | case 0x20: |
234 | return 2; | 234 | return 2; |
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index ab552a6098f9..e7720c72a6e2 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c | |||
@@ -1112,7 +1112,7 @@ static int inet_gso_send_check(struct sk_buff *skb) | |||
1112 | if (unlikely(!pskb_may_pull(skb, sizeof(*iph)))) | 1112 | if (unlikely(!pskb_may_pull(skb, sizeof(*iph)))) |
1113 | goto out; | 1113 | goto out; |
1114 | 1114 | ||
1115 | iph = skb->nh.iph; | 1115 | iph = ip_hdr(skb); |
1116 | ihl = iph->ihl * 4; | 1116 | ihl = iph->ihl * 4; |
1117 | if (ihl < sizeof(*iph)) | 1117 | if (ihl < sizeof(*iph)) |
1118 | goto out; | 1118 | goto out; |
@@ -1121,7 +1121,7 @@ static int inet_gso_send_check(struct sk_buff *skb) | |||
1121 | goto out; | 1121 | goto out; |
1122 | 1122 | ||
1123 | skb->h.raw = __skb_pull(skb, ihl); | 1123 | skb->h.raw = __skb_pull(skb, ihl); |
1124 | iph = skb->nh.iph; | 1124 | iph = ip_hdr(skb); |
1125 | proto = iph->protocol & (MAX_INET_PROTOS - 1); | 1125 | proto = iph->protocol & (MAX_INET_PROTOS - 1); |
1126 | err = -EPROTONOSUPPORT; | 1126 | err = -EPROTONOSUPPORT; |
1127 | 1127 | ||
@@ -1155,7 +1155,7 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb, int features) | |||
1155 | if (unlikely(!pskb_may_pull(skb, sizeof(*iph)))) | 1155 | if (unlikely(!pskb_may_pull(skb, sizeof(*iph)))) |
1156 | goto out; | 1156 | goto out; |
1157 | 1157 | ||
1158 | iph = skb->nh.iph; | 1158 | iph = ip_hdr(skb); |
1159 | ihl = iph->ihl * 4; | 1159 | ihl = iph->ihl * 4; |
1160 | if (ihl < sizeof(*iph)) | 1160 | if (ihl < sizeof(*iph)) |
1161 | goto out; | 1161 | goto out; |
@@ -1164,7 +1164,7 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb, int features) | |||
1164 | goto out; | 1164 | goto out; |
1165 | 1165 | ||
1166 | skb->h.raw = __skb_pull(skb, ihl); | 1166 | skb->h.raw = __skb_pull(skb, ihl); |
1167 | iph = skb->nh.iph; | 1167 | iph = ip_hdr(skb); |
1168 | id = ntohs(iph->id); | 1168 | id = ntohs(iph->id); |
1169 | proto = iph->protocol & (MAX_INET_PROTOS - 1); | 1169 | proto = iph->protocol & (MAX_INET_PROTOS - 1); |
1170 | segs = ERR_PTR(-EPROTONOSUPPORT); | 1170 | segs = ERR_PTR(-EPROTONOSUPPORT); |
@@ -1180,7 +1180,7 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb, int features) | |||
1180 | 1180 | ||
1181 | skb = segs; | 1181 | skb = segs; |
1182 | do { | 1182 | do { |
1183 | iph = skb->nh.iph; | 1183 | iph = ip_hdr(skb); |
1184 | iph->id = htons(id++); | 1184 | iph->id = htons(id++); |
1185 | iph->tot_len = htons(skb->len - skb->mac_len); | 1185 | iph->tot_len = htons(skb->len - skb->mac_len); |
1186 | iph->check = 0; | 1186 | iph->check = 0; |
diff --git a/net/ipv4/ah4.c b/net/ipv4/ah4.c index 95ddbbd1552a..00fd31da252e 100644 --- a/net/ipv4/ah4.c +++ b/net/ipv4/ah4.c | |||
@@ -65,7 +65,7 @@ static int ah_output(struct xfrm_state *x, struct sk_buff *skb) | |||
65 | char buf[60]; | 65 | char buf[60]; |
66 | } tmp_iph; | 66 | } tmp_iph; |
67 | 67 | ||
68 | top_iph = skb->nh.iph; | 68 | top_iph = ip_hdr(skb); |
69 | iph = &tmp_iph.iph; | 69 | iph = &tmp_iph.iph; |
70 | 70 | ||
71 | iph->tos = top_iph->tos; | 71 | iph->tos = top_iph->tos; |
@@ -152,7 +152,7 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb) | |||
152 | skb->ip_summed = CHECKSUM_NONE; | 152 | skb->ip_summed = CHECKSUM_NONE; |
153 | 153 | ||
154 | ah = (struct ip_auth_hdr*)skb->data; | 154 | ah = (struct ip_auth_hdr*)skb->data; |
155 | iph = skb->nh.iph; | 155 | iph = ip_hdr(skb); |
156 | 156 | ||
157 | ihl = skb->data - skb_network_header(skb); | 157 | ihl = skb->data - skb_network_header(skb); |
158 | memcpy(work_buf, iph, ihl); | 158 | memcpy(work_buf, iph, ihl); |
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c index fd36eebbd90a..01d0e8dd17d8 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c | |||
@@ -342,13 +342,13 @@ static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb) | |||
342 | switch (IN_DEV_ARP_ANNOUNCE(in_dev)) { | 342 | switch (IN_DEV_ARP_ANNOUNCE(in_dev)) { |
343 | default: | 343 | default: |
344 | case 0: /* By default announce any local IP */ | 344 | case 0: /* By default announce any local IP */ |
345 | if (skb && inet_addr_type(skb->nh.iph->saddr) == RTN_LOCAL) | 345 | if (skb && inet_addr_type(ip_hdr(skb)->saddr) == RTN_LOCAL) |
346 | saddr = skb->nh.iph->saddr; | 346 | saddr = ip_hdr(skb)->saddr; |
347 | break; | 347 | break; |
348 | case 1: /* Restrict announcements of saddr in same subnet */ | 348 | case 1: /* Restrict announcements of saddr in same subnet */ |
349 | if (!skb) | 349 | if (!skb) |
350 | break; | 350 | break; |
351 | saddr = skb->nh.iph->saddr; | 351 | saddr = ip_hdr(skb)->saddr; |
352 | if (inet_addr_type(saddr) == RTN_LOCAL) { | 352 | if (inet_addr_type(saddr) == RTN_LOCAL) { |
353 | /* saddr should be known to target */ | 353 | /* saddr should be known to target */ |
354 | if (inet_addr_onlink(in_dev, target, saddr)) | 354 | if (inet_addr_onlink(in_dev, target, saddr)) |
diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c index b0182aa2c81a..11a3404d65af 100644 --- a/net/ipv4/cipso_ipv4.c +++ b/net/ipv4/cipso_ipv4.c | |||
@@ -1676,7 +1676,7 @@ validate_return: | |||
1676 | */ | 1676 | */ |
1677 | void cipso_v4_error(struct sk_buff *skb, int error, u32 gateway) | 1677 | void cipso_v4_error(struct sk_buff *skb, int error, u32 gateway) |
1678 | { | 1678 | { |
1679 | if (skb->nh.iph->protocol == IPPROTO_ICMP || error != -EACCES) | 1679 | if (ip_hdr(skb)->protocol == IPPROTO_ICMP || error != -EACCES) |
1680 | return; | 1680 | return; |
1681 | 1681 | ||
1682 | if (gateway) | 1682 | if (gateway) |
diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c index 222d21e5bbeb..ed3deed66445 100644 --- a/net/ipv4/esp4.c +++ b/net/ipv4/esp4.c | |||
@@ -58,7 +58,7 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb) | |||
58 | pskb_put(skb, trailer, clen - skb->len); | 58 | pskb_put(skb, trailer, clen - skb->len); |
59 | 59 | ||
60 | __skb_push(skb, skb->data - skb_network_header(skb)); | 60 | __skb_push(skb, skb->data - skb_network_header(skb)); |
61 | top_iph = skb->nh.iph; | 61 | top_iph = ip_hdr(skb); |
62 | esph = (struct ip_esp_hdr *)(skb_network_header(skb) + | 62 | esph = (struct ip_esp_hdr *)(skb_network_header(skb) + |
63 | top_iph->ihl * 4); | 63 | top_iph->ihl * 4); |
64 | top_iph->tot_len = htons(skb->len + alen); | 64 | top_iph->tot_len = htons(skb->len + alen); |
@@ -218,7 +218,7 @@ static int esp_input(struct xfrm_state *x, struct sk_buff *skb) | |||
218 | 218 | ||
219 | /* ... check padding bits here. Silly. :-) */ | 219 | /* ... check padding bits here. Silly. :-) */ |
220 | 220 | ||
221 | iph = skb->nh.iph; | 221 | iph = ip_hdr(skb); |
222 | ihl = iph->ihl * 4; | 222 | ihl = iph->ihl * 4; |
223 | 223 | ||
224 | if (x->encap) { | 224 | if (x->encap) { |
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index ff124d40c585..4d70c21c50aa 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c | |||
@@ -392,7 +392,7 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb) | |||
392 | icmp_param->data.icmph.checksum = 0; | 392 | icmp_param->data.icmph.checksum = 0; |
393 | icmp_out_count(icmp_param->data.icmph.type); | 393 | icmp_out_count(icmp_param->data.icmph.type); |
394 | 394 | ||
395 | inet->tos = skb->nh.iph->tos; | 395 | inet->tos = ip_hdr(skb)->tos; |
396 | daddr = ipc.addr = rt->rt_src; | 396 | daddr = ipc.addr = rt->rt_src; |
397 | ipc.opt = NULL; | 397 | ipc.opt = NULL; |
398 | if (icmp_param->replyopts.optlen) { | 398 | if (icmp_param->replyopts.optlen) { |
@@ -404,7 +404,7 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb) | |||
404 | struct flowi fl = { .nl_u = { .ip4_u = | 404 | struct flowi fl = { .nl_u = { .ip4_u = |
405 | { .daddr = daddr, | 405 | { .daddr = daddr, |
406 | .saddr = rt->rt_spec_dst, | 406 | .saddr = rt->rt_spec_dst, |
407 | .tos = RT_TOS(skb->nh.iph->tos) } }, | 407 | .tos = RT_TOS(ip_hdr(skb)->tos) } }, |
408 | .proto = IPPROTO_ICMP }; | 408 | .proto = IPPROTO_ICMP }; |
409 | security_skb_classify_flow(skb, &fl); | 409 | security_skb_classify_flow(skb, &fl); |
410 | if (ip_route_output_key(&rt, &fl)) | 410 | if (ip_route_output_key(&rt, &fl)) |
@@ -448,7 +448,7 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info) | |||
448 | * Check this, icmp_send is called from the most obscure devices | 448 | * Check this, icmp_send is called from the most obscure devices |
449 | * sometimes. | 449 | * sometimes. |
450 | */ | 450 | */ |
451 | iph = skb_in->nh.iph; | 451 | iph = ip_hdr(skb_in); |
452 | 452 | ||
453 | if ((u8 *)iph < skb_in->head || (u8 *)(iph + 1) > skb_in->tail) | 453 | if ((u8 *)iph < skb_in->head || (u8 *)(iph + 1) > skb_in->tail) |
454 | goto out; | 454 | goto out; |
@@ -676,7 +676,7 @@ static void icmp_unreach(struct sk_buff *skb) | |||
676 | printk(KERN_WARNING "%u.%u.%u.%u sent an invalid ICMP " | 676 | printk(KERN_WARNING "%u.%u.%u.%u sent an invalid ICMP " |
677 | "type %u, code %u " | 677 | "type %u, code %u " |
678 | "error to a broadcast: %u.%u.%u.%u on %s\n", | 678 | "error to a broadcast: %u.%u.%u.%u on %s\n", |
679 | NIPQUAD(skb->nh.iph->saddr), | 679 | NIPQUAD(ip_hdr(skb)->saddr), |
680 | icmph->type, icmph->code, | 680 | icmph->type, icmph->code, |
681 | NIPQUAD(iph->daddr), | 681 | NIPQUAD(iph->daddr), |
682 | skb->dev->name); | 682 | skb->dev->name); |
@@ -751,7 +751,7 @@ static void icmp_redirect(struct sk_buff *skb) | |||
751 | */ | 751 | */ |
752 | case ICMP_REDIR_HOST: | 752 | case ICMP_REDIR_HOST: |
753 | case ICMP_REDIR_HOSTTOS: | 753 | case ICMP_REDIR_HOSTTOS: |
754 | ip_rt_redirect(skb->nh.iph->saddr, iph->daddr, | 754 | ip_rt_redirect(ip_hdr(skb)->saddr, iph->daddr, |
755 | skb->h.icmph->un.gateway, | 755 | skb->h.icmph->un.gateway, |
756 | iph->saddr, skb->dev); | 756 | iph->saddr, skb->dev); |
757 | break; | 757 | break; |
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index 0687a7235a6c..f511d03e2439 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c | |||
@@ -315,7 +315,7 @@ static struct sk_buff *igmpv3_newpack(struct net_device *dev, int size) | |||
315 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); | 315 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); |
316 | 316 | ||
317 | skb_reset_network_header(skb); | 317 | skb_reset_network_header(skb); |
318 | pip = skb->nh.iph; | 318 | pip = ip_hdr(skb); |
319 | skb_put(skb, sizeof(struct iphdr) + 4); | 319 | skb_put(skb, sizeof(struct iphdr) + 4); |
320 | 320 | ||
321 | pip->version = 4; | 321 | pip->version = 4; |
@@ -345,16 +345,14 @@ static struct sk_buff *igmpv3_newpack(struct net_device *dev, int size) | |||
345 | 345 | ||
346 | static int igmpv3_sendpack(struct sk_buff *skb) | 346 | static int igmpv3_sendpack(struct sk_buff *skb) |
347 | { | 347 | { |
348 | struct iphdr *pip = skb->nh.iph; | 348 | struct iphdr *pip = ip_hdr(skb); |
349 | struct igmphdr *pig = skb->h.igmph; | 349 | struct igmphdr *pig = skb->h.igmph; |
350 | int iplen, igmplen; | 350 | const int iplen = skb->tail - skb->nh.raw; |
351 | const int igmplen = skb->tail - skb->h.raw; | ||
351 | 352 | ||
352 | iplen = skb->tail - (unsigned char *)skb->nh.iph; | ||
353 | pip->tot_len = htons(iplen); | 353 | pip->tot_len = htons(iplen); |
354 | ip_send_check(pip); | 354 | ip_send_check(pip); |
355 | 355 | pig->csum = ip_compute_csum(skb->h.igmph, igmplen); | |
356 | igmplen = skb->tail - (unsigned char *)skb->h.igmph; | ||
357 | pig->csum = ip_compute_csum((void *)skb->h.igmph, igmplen); | ||
358 | 356 | ||
359 | return NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, skb->dev, | 357 | return NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, skb->dev, |
360 | dst_output); | 358 | dst_output); |
@@ -667,7 +665,7 @@ static int igmp_send_report(struct in_device *in_dev, struct ip_mc_list *pmc, | |||
667 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); | 665 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); |
668 | 666 | ||
669 | skb_reset_network_header(skb); | 667 | skb_reset_network_header(skb); |
670 | iph = skb->nh.iph; | 668 | iph = ip_hdr(skb); |
671 | skb_put(skb, sizeof(struct iphdr) + 4); | 669 | skb_put(skb, sizeof(struct iphdr) + 4); |
672 | 670 | ||
673 | iph->version = 4; | 671 | iph->version = 4; |
diff --git a/net/ipv4/ip_forward.c b/net/ipv4/ip_forward.c index 369e721c4bab..467ebedb99ba 100644 --- a/net/ipv4/ip_forward.c +++ b/net/ipv4/ip_forward.c | |||
@@ -74,7 +74,7 @@ int ip_forward(struct sk_buff *skb) | |||
74 | * that reaches zero, we must reply an ICMP control message telling | 74 | * that reaches zero, we must reply an ICMP control message telling |
75 | * that the packet's lifetime expired. | 75 | * that the packet's lifetime expired. |
76 | */ | 76 | */ |
77 | if (skb->nh.iph->ttl <= 1) | 77 | if (ip_hdr(skb)->ttl <= 1) |
78 | goto too_many_hops; | 78 | goto too_many_hops; |
79 | 79 | ||
80 | if (!xfrm4_route_forward(skb)) | 80 | if (!xfrm4_route_forward(skb)) |
@@ -88,7 +88,7 @@ int ip_forward(struct sk_buff *skb) | |||
88 | /* We are about to mangle packet. Copy it! */ | 88 | /* We are about to mangle packet. Copy it! */ |
89 | if (skb_cow(skb, LL_RESERVED_SPACE(rt->u.dst.dev)+rt->u.dst.header_len)) | 89 | if (skb_cow(skb, LL_RESERVED_SPACE(rt->u.dst.dev)+rt->u.dst.header_len)) |
90 | goto drop; | 90 | goto drop; |
91 | iph = skb->nh.iph; | 91 | iph = ip_hdr(skb); |
92 | 92 | ||
93 | /* Decrease ttl after skb cow done */ | 93 | /* Decrease ttl after skb cow done */ |
94 | ip_decrease_ttl(iph); | 94 | ip_decrease_ttl(iph); |
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c index af120b2d5331..0231bdcb2ab7 100644 --- a/net/ipv4/ip_fragment.c +++ b/net/ipv4/ip_fragment.c | |||
@@ -479,7 +479,7 @@ static void ip_frag_queue(struct ipq *qp, struct sk_buff *skb) | |||
479 | goto err; | 479 | goto err; |
480 | } | 480 | } |
481 | 481 | ||
482 | offset = ntohs(skb->nh.iph->frag_off); | 482 | offset = ntohs(ip_hdr(skb)->frag_off); |
483 | flags = offset & ~IP_OFFSET; | 483 | flags = offset & ~IP_OFFSET; |
484 | offset &= IP_OFFSET; | 484 | offset &= IP_OFFSET; |
485 | offset <<= 3; /* offset is in 8-byte chunks */ | 485 | offset <<= 3; /* offset is in 8-byte chunks */ |
@@ -676,7 +676,7 @@ static struct sk_buff *ip_frag_reasm(struct ipq *qp, struct net_device *dev) | |||
676 | head->dev = dev; | 676 | head->dev = dev; |
677 | head->tstamp = qp->stamp; | 677 | head->tstamp = qp->stamp; |
678 | 678 | ||
679 | iph = head->nh.iph; | 679 | iph = ip_hdr(head); |
680 | iph->frag_off = 0; | 680 | iph->frag_off = 0; |
681 | iph->tot_len = htons(len); | 681 | iph->tot_len = htons(len); |
682 | IP_INC_STATS_BH(IPSTATS_MIB_REASMOKS); | 682 | IP_INC_STATS_BH(IPSTATS_MIB_REASMOKS); |
@@ -700,7 +700,6 @@ out_fail: | |||
700 | /* Process an incoming IP datagram fragment. */ | 700 | /* Process an incoming IP datagram fragment. */ |
701 | struct sk_buff *ip_defrag(struct sk_buff *skb, u32 user) | 701 | struct sk_buff *ip_defrag(struct sk_buff *skb, u32 user) |
702 | { | 702 | { |
703 | struct iphdr *iph = skb->nh.iph; | ||
704 | struct ipq *qp; | 703 | struct ipq *qp; |
705 | struct net_device *dev; | 704 | struct net_device *dev; |
706 | 705 | ||
@@ -713,7 +712,7 @@ struct sk_buff *ip_defrag(struct sk_buff *skb, u32 user) | |||
713 | dev = skb->dev; | 712 | dev = skb->dev; |
714 | 713 | ||
715 | /* Lookup (or create) queue header */ | 714 | /* Lookup (or create) queue header */ |
716 | if ((qp = ip_find(iph, user)) != NULL) { | 715 | if ((qp = ip_find(ip_hdr(skb), user)) != NULL) { |
717 | struct sk_buff *ret = NULL; | 716 | struct sk_buff *ret = NULL; |
718 | 717 | ||
719 | spin_lock(&qp->lock); | 718 | spin_lock(&qp->lock); |
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index 7c6fda6fe846..851f46b910f2 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c | |||
@@ -533,7 +533,7 @@ static inline void ipgre_ecn_decapsulate(struct iphdr *iph, struct sk_buff *skb) | |||
533 | { | 533 | { |
534 | if (INET_ECN_is_ce(iph->tos)) { | 534 | if (INET_ECN_is_ce(iph->tos)) { |
535 | if (skb->protocol == htons(ETH_P_IP)) { | 535 | if (skb->protocol == htons(ETH_P_IP)) { |
536 | IP_ECN_set_ce(skb->nh.iph); | 536 | IP_ECN_set_ce(ip_hdr(skb)); |
537 | } else if (skb->protocol == htons(ETH_P_IPV6)) { | 537 | } else if (skb->protocol == htons(ETH_P_IPV6)) { |
538 | IP6_ECN_set_ce(skb->nh.ipv6h); | 538 | IP6_ECN_set_ce(skb->nh.ipv6h); |
539 | } | 539 | } |
@@ -565,7 +565,7 @@ static int ipgre_rcv(struct sk_buff *skb) | |||
565 | if (!pskb_may_pull(skb, 16)) | 565 | if (!pskb_may_pull(skb, 16)) |
566 | goto drop_nolock; | 566 | goto drop_nolock; |
567 | 567 | ||
568 | iph = skb->nh.iph; | 568 | iph = ip_hdr(skb); |
569 | h = skb->data; | 569 | h = skb->data; |
570 | flags = *(__be16*)h; | 570 | flags = *(__be16*)h; |
571 | 571 | ||
@@ -670,7 +670,7 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
670 | { | 670 | { |
671 | struct ip_tunnel *tunnel = netdev_priv(dev); | 671 | struct ip_tunnel *tunnel = netdev_priv(dev); |
672 | struct net_device_stats *stats = &tunnel->stat; | 672 | struct net_device_stats *stats = &tunnel->stat; |
673 | struct iphdr *old_iph = skb->nh.iph; | 673 | struct iphdr *old_iph = ip_hdr(skb); |
674 | struct iphdr *tiph; | 674 | struct iphdr *tiph; |
675 | u8 tos; | 675 | u8 tos; |
676 | __be16 df; | 676 | __be16 df; |
@@ -825,7 +825,7 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
825 | skb_set_owner_w(new_skb, skb->sk); | 825 | skb_set_owner_w(new_skb, skb->sk); |
826 | dev_kfree_skb(skb); | 826 | dev_kfree_skb(skb); |
827 | skb = new_skb; | 827 | skb = new_skb; |
828 | old_iph = skb->nh.iph; | 828 | old_iph = ip_hdr(skb); |
829 | } | 829 | } |
830 | 830 | ||
831 | skb->h.raw = skb->nh.raw; | 831 | skb->h.raw = skb->nh.raw; |
@@ -841,7 +841,7 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
841 | * Push down and install the IPIP header. | 841 | * Push down and install the IPIP header. |
842 | */ | 842 | */ |
843 | 843 | ||
844 | iph = skb->nh.iph; | 844 | iph = ip_hdr(skb); |
845 | iph->version = 4; | 845 | iph->version = 4; |
846 | iph->ihl = sizeof(struct iphdr) >> 2; | 846 | iph->ihl = sizeof(struct iphdr) >> 2; |
847 | iph->frag_off = df; | 847 | iph->frag_off = df; |
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c index 2ee132b330fd..237880a80432 100644 --- a/net/ipv4/ip_input.c +++ b/net/ipv4/ip_input.c | |||
@@ -158,7 +158,7 @@ DEFINE_SNMP_STAT(struct ipstats_mib, ip_statistics) __read_mostly; | |||
158 | int ip_call_ra_chain(struct sk_buff *skb) | 158 | int ip_call_ra_chain(struct sk_buff *skb) |
159 | { | 159 | { |
160 | struct ip_ra_chain *ra; | 160 | struct ip_ra_chain *ra; |
161 | u8 protocol = skb->nh.iph->protocol; | 161 | u8 protocol = ip_hdr(skb)->protocol; |
162 | struct sock *last = NULL; | 162 | struct sock *last = NULL; |
163 | 163 | ||
164 | read_lock(&ip_ra_lock); | 164 | read_lock(&ip_ra_lock); |
@@ -171,7 +171,7 @@ int ip_call_ra_chain(struct sk_buff *skb) | |||
171 | if (sk && inet_sk(sk)->num == protocol && | 171 | if (sk && inet_sk(sk)->num == protocol && |
172 | (!sk->sk_bound_dev_if || | 172 | (!sk->sk_bound_dev_if || |
173 | sk->sk_bound_dev_if == skb->dev->ifindex)) { | 173 | sk->sk_bound_dev_if == skb->dev->ifindex)) { |
174 | if (skb->nh.iph->frag_off & htons(IP_MF|IP_OFFSET)) { | 174 | if (ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) { |
175 | skb = ip_defrag(skb, IP_DEFRAG_CALL_RA_CHAIN); | 175 | skb = ip_defrag(skb, IP_DEFRAG_CALL_RA_CHAIN); |
176 | if (skb == NULL) { | 176 | if (skb == NULL) { |
177 | read_unlock(&ip_ra_lock); | 177 | read_unlock(&ip_ra_lock); |
@@ -206,7 +206,7 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb) | |||
206 | rcu_read_lock(); | 206 | rcu_read_lock(); |
207 | { | 207 | { |
208 | /* Note: See raw.c and net/raw.h, RAWV4_HTABLE_SIZE==MAX_INET_PROTOS */ | 208 | /* Note: See raw.c and net/raw.h, RAWV4_HTABLE_SIZE==MAX_INET_PROTOS */ |
209 | int protocol = skb->nh.iph->protocol; | 209 | int protocol = ip_hdr(skb)->protocol; |
210 | int hash; | 210 | int hash; |
211 | struct sock *raw_sk; | 211 | struct sock *raw_sk; |
212 | struct net_protocol *ipprot; | 212 | struct net_protocol *ipprot; |
@@ -218,7 +218,7 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb) | |||
218 | /* If there maybe a raw socket we must check - if not we | 218 | /* If there maybe a raw socket we must check - if not we |
219 | * don't care less | 219 | * don't care less |
220 | */ | 220 | */ |
221 | if (raw_sk && !raw_v4_input(skb, skb->nh.iph, hash)) | 221 | if (raw_sk && !raw_v4_input(skb, ip_hdr(skb), hash)) |
222 | raw_sk = NULL; | 222 | raw_sk = NULL; |
223 | 223 | ||
224 | if ((ipprot = rcu_dereference(inet_protos[hash])) != NULL) { | 224 | if ((ipprot = rcu_dereference(inet_protos[hash])) != NULL) { |
@@ -264,7 +264,7 @@ int ip_local_deliver(struct sk_buff *skb) | |||
264 | * Reassemble IP fragments. | 264 | * Reassemble IP fragments. |
265 | */ | 265 | */ |
266 | 266 | ||
267 | if (skb->nh.iph->frag_off & htons(IP_MF|IP_OFFSET)) { | 267 | if (ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) { |
268 | skb = ip_defrag(skb, IP_DEFRAG_LOCAL_DELIVER); | 268 | skb = ip_defrag(skb, IP_DEFRAG_LOCAL_DELIVER); |
269 | if (!skb) | 269 | if (!skb) |
270 | return 0; | 270 | return 0; |
@@ -292,7 +292,7 @@ static inline int ip_rcv_options(struct sk_buff *skb) | |||
292 | goto drop; | 292 | goto drop; |
293 | } | 293 | } |
294 | 294 | ||
295 | iph = skb->nh.iph; | 295 | iph = ip_hdr(skb); |
296 | 296 | ||
297 | if (ip_options_compile(NULL, skb)) { | 297 | if (ip_options_compile(NULL, skb)) { |
298 | IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); | 298 | IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); |
@@ -328,7 +328,7 @@ drop: | |||
328 | 328 | ||
329 | static inline int ip_rcv_finish(struct sk_buff *skb) | 329 | static inline int ip_rcv_finish(struct sk_buff *skb) |
330 | { | 330 | { |
331 | struct iphdr *iph = skb->nh.iph; | 331 | const struct iphdr *iph = ip_hdr(skb); |
332 | 332 | ||
333 | /* | 333 | /* |
334 | * Initialise the virtual path cache for the packet. It describes | 334 | * Initialise the virtual path cache for the packet. It describes |
@@ -389,7 +389,7 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, | |||
389 | if (!pskb_may_pull(skb, sizeof(struct iphdr))) | 389 | if (!pskb_may_pull(skb, sizeof(struct iphdr))) |
390 | goto inhdr_error; | 390 | goto inhdr_error; |
391 | 391 | ||
392 | iph = skb->nh.iph; | 392 | iph = ip_hdr(skb); |
393 | 393 | ||
394 | /* | 394 | /* |
395 | * RFC1122: 3.1.2.2 MUST silently discard any IP frame that fails the checksum. | 395 | * RFC1122: 3.1.2.2 MUST silently discard any IP frame that fails the checksum. |
@@ -408,7 +408,7 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, | |||
408 | if (!pskb_may_pull(skb, iph->ihl*4)) | 408 | if (!pskb_may_pull(skb, iph->ihl*4)) |
409 | goto inhdr_error; | 409 | goto inhdr_error; |
410 | 410 | ||
411 | iph = skb->nh.iph; | 411 | iph = ip_hdr(skb); |
412 | 412 | ||
413 | if (unlikely(ip_fast_csum((u8 *)iph, iph->ihl))) | 413 | if (unlikely(ip_fast_csum((u8 *)iph, iph->ihl))) |
414 | goto inhdr_error; | 414 | goto inhdr_error; |
diff --git a/net/ipv4/ip_options.c b/net/ipv4/ip_options.c index f7e9db612565..251346828cb4 100644 --- a/net/ipv4/ip_options.c +++ b/net/ipv4/ip_options.c | |||
@@ -110,7 +110,7 @@ int ip_options_echo(struct ip_options * dopt, struct sk_buff * skb) | |||
110 | if (skb->dst) | 110 | if (skb->dst) |
111 | daddr = ((struct rtable*)skb->dst)->rt_spec_dst; | 111 | daddr = ((struct rtable*)skb->dst)->rt_spec_dst; |
112 | else | 112 | else |
113 | daddr = skb->nh.iph->daddr; | 113 | daddr = ip_hdr(skb)->daddr; |
114 | 114 | ||
115 | if (sopt->rr) { | 115 | if (sopt->rr) { |
116 | optlen = sptr[sopt->rr+1]; | 116 | optlen = sptr[sopt->rr+1]; |
@@ -180,7 +180,8 @@ int ip_options_echo(struct ip_options * dopt, struct sk_buff * skb) | |||
180 | /* | 180 | /* |
181 | * RFC1812 requires to fix illegal source routes. | 181 | * RFC1812 requires to fix illegal source routes. |
182 | */ | 182 | */ |
183 | if (memcmp(&skb->nh.iph->saddr, &start[soffset+3], 4) == 0) | 183 | if (memcmp(&ip_hdr(skb)->saddr, |
184 | &start[soffset + 3], 4) == 0) | ||
184 | doffset -= 4; | 185 | doffset -= 4; |
185 | } | 186 | } |
186 | if (doffset > 3) { | 187 | if (doffset > 3) { |
@@ -269,7 +270,8 @@ int ip_options_compile(struct ip_options * opt, struct sk_buff * skb) | |||
269 | optptr = iph + sizeof(struct iphdr); | 270 | optptr = iph + sizeof(struct iphdr); |
270 | opt->is_data = 0; | 271 | opt->is_data = 0; |
271 | } else { | 272 | } else { |
272 | optptr = opt->is_data ? opt->__data : (unsigned char*)&(skb->nh.iph[1]); | 273 | optptr = opt->is_data ? opt->__data : |
274 | (unsigned char *)&(ip_hdr(skb)[1]); | ||
273 | iph = optptr - sizeof(struct iphdr); | 275 | iph = optptr - sizeof(struct iphdr); |
274 | } | 276 | } |
275 | 277 | ||
@@ -587,7 +589,7 @@ void ip_forward_options(struct sk_buff *skb) | |||
587 | if (srrptr + 3 <= srrspace) { | 589 | if (srrptr + 3 <= srrspace) { |
588 | opt->is_changed = 1; | 590 | opt->is_changed = 1; |
589 | ip_rt_get_source(&optptr[srrptr-1], rt); | 591 | ip_rt_get_source(&optptr[srrptr-1], rt); |
590 | skb->nh.iph->daddr = rt->rt_dst; | 592 | ip_hdr(skb)->daddr = rt->rt_dst; |
591 | optptr[2] = srrptr+4; | 593 | optptr[2] = srrptr+4; |
592 | } else if (net_ratelimit()) | 594 | } else if (net_ratelimit()) |
593 | printk(KERN_CRIT "ip_forward(): Argh! Destination lost!\n"); | 595 | printk(KERN_CRIT "ip_forward(): Argh! Destination lost!\n"); |
@@ -599,7 +601,7 @@ void ip_forward_options(struct sk_buff *skb) | |||
599 | } | 601 | } |
600 | if (opt->is_changed) { | 602 | if (opt->is_changed) { |
601 | opt->is_changed = 0; | 603 | opt->is_changed = 0; |
602 | ip_send_check(skb->nh.iph); | 604 | ip_send_check(ip_hdr(skb)); |
603 | } | 605 | } |
604 | } | 606 | } |
605 | 607 | ||
@@ -608,7 +610,7 @@ int ip_options_rcv_srr(struct sk_buff *skb) | |||
608 | struct ip_options *opt = &(IPCB(skb)->opt); | 610 | struct ip_options *opt = &(IPCB(skb)->opt); |
609 | int srrspace, srrptr; | 611 | int srrspace, srrptr; |
610 | __be32 nexthop; | 612 | __be32 nexthop; |
611 | struct iphdr *iph = skb->nh.iph; | 613 | struct iphdr *iph = ip_hdr(skb); |
612 | unsigned char *optptr = skb_network_header(skb) + opt->srr; | 614 | unsigned char *optptr = skb_network_header(skb) + opt->srr; |
613 | struct rtable *rt = (struct rtable*)skb->dst; | 615 | struct rtable *rt = (struct rtable*)skb->dst; |
614 | struct rtable *rt2; | 616 | struct rtable *rt2; |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 15de9d43950e..1abc48899f2d 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -127,7 +127,7 @@ int ip_build_and_send_pkt(struct sk_buff *skb, struct sock *sk, | |||
127 | /* Build the IP header. */ | 127 | /* Build the IP header. */ |
128 | skb_push(skb, sizeof(struct iphdr) + (opt ? opt->optlen : 0)); | 128 | skb_push(skb, sizeof(struct iphdr) + (opt ? opt->optlen : 0)); |
129 | skb_reset_network_header(skb); | 129 | skb_reset_network_header(skb); |
130 | iph = skb->nh.iph; | 130 | iph = ip_hdr(skb); |
131 | iph->version = 4; | 131 | iph->version = 4; |
132 | iph->ihl = 5; | 132 | iph->ihl = 5; |
133 | iph->tos = inet->tos; | 133 | iph->tos = inet->tos; |
@@ -245,7 +245,7 @@ int ip_mc_output(struct sk_buff *skb) | |||
245 | 245 | ||
246 | /* Multicasts with ttl 0 must not go beyond the host */ | 246 | /* Multicasts with ttl 0 must not go beyond the host */ |
247 | 247 | ||
248 | if (skb->nh.iph->ttl == 0) { | 248 | if (ip_hdr(skb)->ttl == 0) { |
249 | kfree_skb(skb); | 249 | kfree_skb(skb); |
250 | return 0; | 250 | return 0; |
251 | } | 251 | } |
@@ -332,7 +332,7 @@ packet_routed: | |||
332 | /* OK, we know where to send it, allocate and build IP header. */ | 332 | /* OK, we know where to send it, allocate and build IP header. */ |
333 | skb_push(skb, sizeof(struct iphdr) + (opt ? opt->optlen : 0)); | 333 | skb_push(skb, sizeof(struct iphdr) + (opt ? opt->optlen : 0)); |
334 | skb_reset_network_header(skb); | 334 | skb_reset_network_header(skb); |
335 | iph = skb->nh.iph; | 335 | iph = ip_hdr(skb); |
336 | *((__be16 *)iph) = htons((4 << 12) | (5 << 8) | (inet->tos & 0xff)); | 336 | *((__be16 *)iph) = htons((4 << 12) | (5 << 8) | (inet->tos & 0xff)); |
337 | iph->tot_len = htons(skb->len); | 337 | iph->tot_len = htons(skb->len); |
338 | if (ip_dont_fragment(sk, &rt->u.dst) && !ipfragok) | 338 | if (ip_dont_fragment(sk, &rt->u.dst) && !ipfragok) |
@@ -428,7 +428,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*)) | |||
428 | * Point into the IP datagram header. | 428 | * Point into the IP datagram header. |
429 | */ | 429 | */ |
430 | 430 | ||
431 | iph = skb->nh.iph; | 431 | iph = ip_hdr(skb); |
432 | 432 | ||
433 | if (unlikely((iph->frag_off & htons(IP_DF)) && !skb->local_df)) { | 433 | if (unlikely((iph->frag_off & htons(IP_DF)) && !skb->local_df)) { |
434 | IP_INC_STATS(IPSTATS_MIB_FRAGFAILS); | 434 | IP_INC_STATS(IPSTATS_MIB_FRAGFAILS); |
@@ -504,7 +504,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*)) | |||
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); |
507 | iph = frag->nh.iph; | 507 | iph = ip_hdr(frag); |
508 | iph->tot_len = htons(frag->len); | 508 | iph->tot_len = htons(frag->len); |
509 | ip_copy_metadata(frag, skb); | 509 | ip_copy_metadata(frag, skb); |
510 | if (offset == 0) | 510 | if (offset == 0) |
@@ -619,7 +619,7 @@ slow_path: | |||
619 | /* | 619 | /* |
620 | * Fill in the new header fields. | 620 | * Fill in the new header fields. |
621 | */ | 621 | */ |
622 | iph = skb2->nh.iph; | 622 | iph = ip_hdr(skb2); |
623 | iph->frag_off = htons((offset >> 3)); | 623 | iph->frag_off = htons((offset >> 3)); |
624 | 624 | ||
625 | /* ANK: dirty, but effective trick. Upgrade options only if | 625 | /* ANK: dirty, but effective trick. Upgrade options only if |
@@ -1125,7 +1125,7 @@ ssize_t ip_append_page(struct sock *sk, struct page *page, | |||
1125 | */ | 1125 | */ |
1126 | data = skb_put(skb, fragheaderlen + fraggap); | 1126 | data = skb_put(skb, fragheaderlen + fraggap); |
1127 | skb_reset_network_header(skb); | 1127 | skb_reset_network_header(skb); |
1128 | iph = skb->nh.iph; | 1128 | iph = ip_hdr(skb); |
1129 | data += fragheaderlen; | 1129 | data += fragheaderlen; |
1130 | skb->h.raw = data; | 1130 | skb->h.raw = data; |
1131 | 1131 | ||
@@ -1352,7 +1352,7 @@ void ip_send_reply(struct sock *sk, struct sk_buff *skb, struct ip_reply_arg *ar | |||
1352 | struct flowi fl = { .nl_u = { .ip4_u = | 1352 | struct flowi fl = { .nl_u = { .ip4_u = |
1353 | { .daddr = daddr, | 1353 | { .daddr = daddr, |
1354 | .saddr = rt->rt_spec_dst, | 1354 | .saddr = rt->rt_spec_dst, |
1355 | .tos = RT_TOS(skb->nh.iph->tos) } }, | 1355 | .tos = RT_TOS(ip_hdr(skb)->tos) } }, |
1356 | /* Not quite clean, but right. */ | 1356 | /* Not quite clean, but right. */ |
1357 | .uli_u = { .ports = | 1357 | .uli_u = { .ports = |
1358 | { .sport = skb->h.th->dest, | 1358 | { .sport = skb->h.th->dest, |
@@ -1370,9 +1370,9 @@ void ip_send_reply(struct sock *sk, struct sk_buff *skb, struct ip_reply_arg *ar | |||
1370 | with locally disabled BH and that sk cannot be already spinlocked. | 1370 | with locally disabled BH and that sk cannot be already spinlocked. |
1371 | */ | 1371 | */ |
1372 | bh_lock_sock(sk); | 1372 | bh_lock_sock(sk); |
1373 | inet->tos = skb->nh.iph->tos; | 1373 | inet->tos = ip_hdr(skb)->tos; |
1374 | sk->sk_priority = skb->priority; | 1374 | sk->sk_priority = skb->priority; |
1375 | sk->sk_protocol = skb->nh.iph->protocol; | 1375 | sk->sk_protocol = ip_hdr(skb)->protocol; |
1376 | ip_append_data(sk, ip_reply_glue_bits, arg->iov->iov_base, len, 0, | 1376 | ip_append_data(sk, ip_reply_glue_bits, arg->iov->iov_base, len, 0, |
1377 | &ipc, rt, MSG_DONTWAIT); | 1377 | &ipc, rt, MSG_DONTWAIT); |
1378 | if ((skb = skb_peek(&sk->sk_write_queue)) != NULL) { | 1378 | if ((skb = skb_peek(&sk->sk_write_queue)) != NULL) { |
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 70888e1ef6b7..fabc250e16dd 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c | |||
@@ -59,7 +59,7 @@ static void ip_cmsg_recv_pktinfo(struct msghdr *msg, struct sk_buff *skb) | |||
59 | struct in_pktinfo info; | 59 | struct in_pktinfo info; |
60 | struct rtable *rt = (struct rtable *)skb->dst; | 60 | struct rtable *rt = (struct rtable *)skb->dst; |
61 | 61 | ||
62 | info.ipi_addr.s_addr = skb->nh.iph->daddr; | 62 | info.ipi_addr.s_addr = ip_hdr(skb)->daddr; |
63 | if (rt) { | 63 | if (rt) { |
64 | info.ipi_ifindex = rt->rt_iif; | 64 | info.ipi_ifindex = rt->rt_iif; |
65 | info.ipi_spec_dst.s_addr = rt->rt_spec_dst; | 65 | info.ipi_spec_dst.s_addr = rt->rt_spec_dst; |
@@ -73,13 +73,13 @@ static void ip_cmsg_recv_pktinfo(struct msghdr *msg, struct sk_buff *skb) | |||
73 | 73 | ||
74 | static void ip_cmsg_recv_ttl(struct msghdr *msg, struct sk_buff *skb) | 74 | static void ip_cmsg_recv_ttl(struct msghdr *msg, struct sk_buff *skb) |
75 | { | 75 | { |
76 | int ttl = skb->nh.iph->ttl; | 76 | int ttl = ip_hdr(skb)->ttl; |
77 | put_cmsg(msg, SOL_IP, IP_TTL, sizeof(int), &ttl); | 77 | put_cmsg(msg, SOL_IP, IP_TTL, sizeof(int), &ttl); |
78 | } | 78 | } |
79 | 79 | ||
80 | static void ip_cmsg_recv_tos(struct msghdr *msg, struct sk_buff *skb) | 80 | static void ip_cmsg_recv_tos(struct msghdr *msg, struct sk_buff *skb) |
81 | { | 81 | { |
82 | put_cmsg(msg, SOL_IP, IP_TOS, 1, &skb->nh.iph->tos); | 82 | put_cmsg(msg, SOL_IP, IP_TOS, 1, &ip_hdr(skb)->tos); |
83 | } | 83 | } |
84 | 84 | ||
85 | static void ip_cmsg_recv_opts(struct msghdr *msg, struct sk_buff *skb) | 85 | static void ip_cmsg_recv_opts(struct msghdr *msg, struct sk_buff *skb) |
@@ -87,7 +87,8 @@ static void ip_cmsg_recv_opts(struct msghdr *msg, struct sk_buff *skb) | |||
87 | if (IPCB(skb)->opt.optlen == 0) | 87 | if (IPCB(skb)->opt.optlen == 0) |
88 | return; | 88 | return; |
89 | 89 | ||
90 | put_cmsg(msg, SOL_IP, IP_RECVOPTS, IPCB(skb)->opt.optlen, skb->nh.iph+1); | 90 | put_cmsg(msg, SOL_IP, IP_RECVOPTS, IPCB(skb)->opt.optlen, |
91 | ip_hdr(skb) + 1); | ||
91 | } | 92 | } |
92 | 93 | ||
93 | 94 | ||
@@ -299,7 +300,7 @@ void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 port, u32 inf | |||
299 | 300 | ||
300 | skb_put(skb, sizeof(struct iphdr)); | 301 | skb_put(skb, sizeof(struct iphdr)); |
301 | skb_reset_network_header(skb); | 302 | skb_reset_network_header(skb); |
302 | iph = skb->nh.iph; | 303 | iph = ip_hdr(skb); |
303 | iph->daddr = daddr; | 304 | iph->daddr = daddr; |
304 | 305 | ||
305 | serr = SKB_EXT_ERR(skb); | 306 | serr = SKB_EXT_ERR(skb); |
@@ -369,7 +370,7 @@ int ip_recv_error(struct sock *sk, struct msghdr *msg, int len) | |||
369 | struct inet_sock *inet = inet_sk(sk); | 370 | struct inet_sock *inet = inet_sk(sk); |
370 | 371 | ||
371 | sin->sin_family = AF_INET; | 372 | sin->sin_family = AF_INET; |
372 | sin->sin_addr.s_addr = skb->nh.iph->saddr; | 373 | sin->sin_addr.s_addr = ip_hdr(skb)->saddr; |
373 | sin->sin_port = 0; | 374 | sin->sin_port = 0; |
374 | memset(&sin->sin_zero, 0, sizeof(sin->sin_zero)); | 375 | memset(&sin->sin_zero, 0, sizeof(sin->sin_zero)); |
375 | if (inet->cmsg_flags) | 376 | if (inet->cmsg_flags) |
diff --git a/net/ipv4/ipcomp.c b/net/ipv4/ipcomp.c index aa704b88f014..8eb46064c525 100644 --- a/net/ipv4/ipcomp.c +++ b/net/ipv4/ipcomp.c | |||
@@ -43,21 +43,15 @@ static LIST_HEAD(ipcomp_tfms_list); | |||
43 | 43 | ||
44 | static int ipcomp_decompress(struct xfrm_state *x, struct sk_buff *skb) | 44 | static int ipcomp_decompress(struct xfrm_state *x, struct sk_buff *skb) |
45 | { | 45 | { |
46 | int err, plen, dlen; | ||
47 | struct ipcomp_data *ipcd = x->data; | 46 | struct ipcomp_data *ipcd = x->data; |
48 | u8 *start, *scratch; | 47 | const int plen = skb->len; |
49 | struct crypto_comp *tfm; | 48 | int dlen = IPCOMP_SCRATCH_SIZE; |
50 | int cpu; | 49 | const u8 *start = skb->data; |
51 | 50 | const int cpu = get_cpu(); | |
52 | plen = skb->len; | 51 | u8 *scratch = *per_cpu_ptr(ipcomp_scratches, cpu); |
53 | dlen = IPCOMP_SCRATCH_SIZE; | 52 | struct crypto_comp *tfm = *per_cpu_ptr(ipcd->tfms, cpu); |
54 | start = skb->data; | 53 | int err = crypto_comp_decompress(tfm, start, plen, scratch, &dlen); |
55 | 54 | ||
56 | cpu = get_cpu(); | ||
57 | scratch = *per_cpu_ptr(ipcomp_scratches, cpu); | ||
58 | tfm = *per_cpu_ptr(ipcd->tfms, cpu); | ||
59 | |||
60 | err = crypto_comp_decompress(tfm, start, plen, scratch, &dlen); | ||
61 | if (err) | 55 | if (err) |
62 | goto out; | 56 | goto out; |
63 | 57 | ||
@@ -90,7 +84,7 @@ static int ipcomp_input(struct xfrm_state *x, struct sk_buff *skb) | |||
90 | skb->ip_summed = CHECKSUM_NONE; | 84 | skb->ip_summed = CHECKSUM_NONE; |
91 | 85 | ||
92 | /* Remove ipcomp header and decompress original payload */ | 86 | /* Remove ipcomp header and decompress original payload */ |
93 | iph = skb->nh.iph; | 87 | iph = ip_hdr(skb); |
94 | ipch = (void *)skb->data; | 88 | ipch = (void *)skb->data; |
95 | iph->protocol = ipch->nexthdr; | 89 | iph->protocol = ipch->nexthdr; |
96 | skb->h.raw = skb->nh.raw + sizeof(*ipch); | 90 | skb->h.raw = skb->nh.raw + sizeof(*ipch); |
@@ -103,23 +97,16 @@ out: | |||
103 | 97 | ||
104 | static int ipcomp_compress(struct xfrm_state *x, struct sk_buff *skb) | 98 | static int ipcomp_compress(struct xfrm_state *x, struct sk_buff *skb) |
105 | { | 99 | { |
106 | int err, plen, dlen, ihlen; | ||
107 | struct iphdr *iph = skb->nh.iph; | ||
108 | struct ipcomp_data *ipcd = x->data; | 100 | struct ipcomp_data *ipcd = x->data; |
109 | u8 *start, *scratch; | 101 | const int ihlen = ip_hdrlen(skb); |
110 | struct crypto_comp *tfm; | 102 | const int plen = skb->len - ihlen; |
111 | int cpu; | 103 | int dlen = IPCOMP_SCRATCH_SIZE; |
104 | u8 *start = skb->data + ihlen; | ||
105 | const int cpu = get_cpu(); | ||
106 | u8 *scratch = *per_cpu_ptr(ipcomp_scratches, cpu); | ||
107 | struct crypto_comp *tfm = *per_cpu_ptr(ipcd->tfms, cpu); | ||
108 | int err = crypto_comp_compress(tfm, start, plen, scratch, &dlen); | ||
112 | 109 | ||
113 | ihlen = iph->ihl * 4; | ||
114 | plen = skb->len - ihlen; | ||
115 | dlen = IPCOMP_SCRATCH_SIZE; | ||
116 | start = skb->data + ihlen; | ||
117 | |||
118 | cpu = get_cpu(); | ||
119 | scratch = *per_cpu_ptr(ipcomp_scratches, cpu); | ||
120 | tfm = *per_cpu_ptr(ipcd->tfms, cpu); | ||
121 | |||
122 | err = crypto_comp_compress(tfm, start, plen, scratch, &dlen); | ||
123 | if (err) | 110 | if (err) |
124 | goto out; | 111 | goto out; |
125 | 112 | ||
@@ -142,12 +129,11 @@ out: | |||
142 | static int ipcomp_output(struct xfrm_state *x, struct sk_buff *skb) | 129 | static int ipcomp_output(struct xfrm_state *x, struct sk_buff *skb) |
143 | { | 130 | { |
144 | int err; | 131 | int err; |
145 | struct iphdr *iph; | ||
146 | struct ip_comp_hdr *ipch; | 132 | struct ip_comp_hdr *ipch; |
147 | struct ipcomp_data *ipcd = x->data; | 133 | struct ipcomp_data *ipcd = x->data; |
148 | int hdr_len = 0; | 134 | int hdr_len = 0; |
135 | struct iphdr *iph = ip_hdr(skb); | ||
149 | 136 | ||
150 | iph = skb->nh.iph; | ||
151 | iph->tot_len = htons(skb->len); | 137 | iph->tot_len = htons(skb->len); |
152 | hdr_len = iph->ihl * 4; | 138 | hdr_len = iph->ihl * 4; |
153 | if ((skb->len - hdr_len) < ipcd->threshold) { | 139 | if ((skb->len - hdr_len) < ipcd->threshold) { |
@@ -159,7 +145,7 @@ static int ipcomp_output(struct xfrm_state *x, struct sk_buff *skb) | |||
159 | goto out_ok; | 145 | goto out_ok; |
160 | 146 | ||
161 | err = ipcomp_compress(x, skb); | 147 | err = ipcomp_compress(x, skb); |
162 | iph = skb->nh.iph; | 148 | iph = ip_hdr(skb); |
163 | 149 | ||
164 | if (err) { | 150 | if (err) { |
165 | goto out_ok; | 151 | goto out_ok; |
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c index 6e8998409cbe..6b91c9f5d57a 100644 --- a/net/ipv4/ipconfig.c +++ b/net/ipv4/ipconfig.c | |||
@@ -703,7 +703,7 @@ static void __init ic_bootp_send_if(struct ic_device *d, unsigned long jiffies_d | |||
703 | 703 | ||
704 | /* Construct IP header */ | 704 | /* Construct IP header */ |
705 | skb_reset_network_header(skb); | 705 | skb_reset_network_header(skb); |
706 | h = skb->nh.iph; | 706 | h = ip_hdr(skb); |
707 | h->version = 4; | 707 | h->version = 4; |
708 | h->ihl = 5; | 708 | h->ihl = 5; |
709 | h->tot_len = htons(sizeof(struct bootp_pkt)); | 709 | h->tot_len = htons(sizeof(struct bootp_pkt)); |
@@ -846,7 +846,7 @@ static int __init ic_bootp_recv(struct sk_buff *skb, struct net_device *dev, str | |||
846 | sizeof(struct udphdr))) | 846 | sizeof(struct udphdr))) |
847 | goto drop; | 847 | goto drop; |
848 | 848 | ||
849 | b = (struct bootp_pkt *) skb->nh.iph; | 849 | b = (struct bootp_pkt *)skb_network_header(skb); |
850 | h = &b->iph; | 850 | h = &b->iph; |
851 | 851 | ||
852 | if (h->ihl != 5 || h->version != 4 || h->protocol != IPPROTO_UDP) | 852 | if (h->ihl != 5 || h->version != 4 || h->protocol != IPPROTO_UDP) |
@@ -884,7 +884,7 @@ static int __init ic_bootp_recv(struct sk_buff *skb, struct net_device *dev, str | |||
884 | if (!pskb_may_pull(skb, skb->len)) | 884 | if (!pskb_may_pull(skb, skb->len)) |
885 | goto drop; | 885 | goto drop; |
886 | 886 | ||
887 | b = (struct bootp_pkt *) skb->nh.iph; | 887 | b = (struct bootp_pkt *)skb_network_header(skb); |
888 | h = &b->iph; | 888 | h = &b->iph; |
889 | 889 | ||
890 | /* One reply at a time, please. */ | 890 | /* One reply at a time, please. */ |
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c index 843cc09f961f..b7f6ff4705b0 100644 --- a/net/ipv4/ipip.c +++ b/net/ipv4/ipip.c | |||
@@ -461,9 +461,10 @@ out: | |||
461 | #endif | 461 | #endif |
462 | } | 462 | } |
463 | 463 | ||
464 | static inline void ipip_ecn_decapsulate(struct iphdr *outer_iph, struct sk_buff *skb) | 464 | static inline void ipip_ecn_decapsulate(const struct iphdr *outer_iph, |
465 | struct sk_buff *skb) | ||
465 | { | 466 | { |
466 | struct iphdr *inner_iph = skb->nh.iph; | 467 | struct iphdr *inner_iph = ip_hdr(skb); |
467 | 468 | ||
468 | if (INET_ECN_is_ce(outer_iph->tos)) | 469 | if (INET_ECN_is_ce(outer_iph->tos)) |
469 | IP_ECN_set_ce(inner_iph); | 470 | IP_ECN_set_ce(inner_iph); |
@@ -471,10 +472,8 @@ static inline void ipip_ecn_decapsulate(struct iphdr *outer_iph, struct sk_buff | |||
471 | 472 | ||
472 | static int ipip_rcv(struct sk_buff *skb) | 473 | static int ipip_rcv(struct sk_buff *skb) |
473 | { | 474 | { |
474 | struct iphdr *iph; | ||
475 | struct ip_tunnel *tunnel; | 475 | struct ip_tunnel *tunnel; |
476 | 476 | const struct iphdr *iph = ip_hdr(skb); | |
477 | iph = skb->nh.iph; | ||
478 | 477 | ||
479 | read_lock(&ipip_lock); | 478 | read_lock(&ipip_lock); |
480 | if ((tunnel = ipip_tunnel_lookup(iph->saddr, iph->daddr)) != NULL) { | 479 | if ((tunnel = ipip_tunnel_lookup(iph->saddr, iph->daddr)) != NULL) { |
@@ -521,7 +520,7 @@ static int ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
521 | __be16 df = tiph->frag_off; | 520 | __be16 df = tiph->frag_off; |
522 | struct rtable *rt; /* Route to the other host */ | 521 | struct rtable *rt; /* Route to the other host */ |
523 | struct net_device *tdev; /* Device to other host */ | 522 | struct net_device *tdev; /* Device to other host */ |
524 | struct iphdr *old_iph = skb->nh.iph; | 523 | struct iphdr *old_iph = ip_hdr(skb); |
525 | struct iphdr *iph; /* Our new IP header */ | 524 | struct iphdr *iph; /* Our new IP header */ |
526 | int max_headroom; /* The extra header space needed */ | 525 | int max_headroom; /* The extra header space needed */ |
527 | __be32 dst = tiph->daddr; | 526 | __be32 dst = tiph->daddr; |
@@ -615,7 +614,7 @@ static int ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
615 | skb_set_owner_w(new_skb, skb->sk); | 614 | skb_set_owner_w(new_skb, skb->sk); |
616 | dev_kfree_skb(skb); | 615 | dev_kfree_skb(skb); |
617 | skb = new_skb; | 616 | skb = new_skb; |
618 | old_iph = skb->nh.iph; | 617 | old_iph = ip_hdr(skb); |
619 | } | 618 | } |
620 | 619 | ||
621 | skb->h.raw = skb->nh.raw; | 620 | skb->h.raw = skb->nh.raw; |
@@ -631,7 +630,7 @@ static int ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
631 | * Push down and install the IPIP header. | 630 | * Push down and install the IPIP header. |
632 | */ | 631 | */ |
633 | 632 | ||
634 | iph = skb->nh.iph; | 633 | iph = ip_hdr(skb); |
635 | iph->version = 4; | 634 | iph->version = 4; |
636 | iph->ihl = sizeof(struct iphdr)>>2; | 635 | iph->ihl = sizeof(struct iphdr)>>2; |
637 | iph->frag_off = df; | 636 | iph->frag_off = df; |
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index b24dffe3bd46..e0021499093f 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c | |||
@@ -303,7 +303,7 @@ static void ipmr_destroy_unres(struct mfc_cache *c) | |||
303 | atomic_dec(&cache_resolve_queue_len); | 303 | atomic_dec(&cache_resolve_queue_len); |
304 | 304 | ||
305 | while ((skb=skb_dequeue(&c->mfc_un.unres.unresolved))) { | 305 | while ((skb=skb_dequeue(&c->mfc_un.unres.unresolved))) { |
306 | if (skb->nh.iph->version == 0) { | 306 | if (ip_hdr(skb)->version == 0) { |
307 | struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct iphdr)); | 307 | struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct iphdr)); |
308 | nlh->nlmsg_type = NLMSG_ERROR; | 308 | nlh->nlmsg_type = NLMSG_ERROR; |
309 | nlh->nlmsg_len = NLMSG_LENGTH(sizeof(struct nlmsgerr)); | 309 | nlh->nlmsg_len = NLMSG_LENGTH(sizeof(struct nlmsgerr)); |
@@ -509,7 +509,7 @@ static void ipmr_cache_resolve(struct mfc_cache *uc, struct mfc_cache *c) | |||
509 | */ | 509 | */ |
510 | 510 | ||
511 | while ((skb=__skb_dequeue(&uc->mfc_un.unres.unresolved))) { | 511 | while ((skb=__skb_dequeue(&uc->mfc_un.unres.unresolved))) { |
512 | if (skb->nh.iph->version == 0) { | 512 | if (ip_hdr(skb)->version == 0) { |
513 | struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct iphdr)); | 513 | struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct iphdr)); |
514 | 514 | ||
515 | if (ipmr_fill_mroute(skb, c, NLMSG_DATA(nlh)) > 0) { | 515 | if (ipmr_fill_mroute(skb, c, NLMSG_DATA(nlh)) > 0) { |
@@ -569,8 +569,9 @@ static int ipmr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert) | |||
569 | msg->im_msgtype = IGMPMSG_WHOLEPKT; | 569 | msg->im_msgtype = IGMPMSG_WHOLEPKT; |
570 | msg->im_mbz = 0; | 570 | msg->im_mbz = 0; |
571 | msg->im_vif = reg_vif_num; | 571 | msg->im_vif = reg_vif_num; |
572 | skb->nh.iph->ihl = sizeof(struct iphdr) >> 2; | 572 | ip_hdr(skb)->ihl = sizeof(struct iphdr) >> 2; |
573 | skb->nh.iph->tot_len = htons(ntohs(pkt->nh.iph->tot_len) + sizeof(struct iphdr)); | 573 | ip_hdr(skb)->tot_len = htons(ntohs(ip_hdr(pkt)->tot_len) + |
574 | sizeof(struct iphdr)); | ||
574 | } else | 575 | } else |
575 | #endif | 576 | #endif |
576 | { | 577 | { |
@@ -579,10 +580,10 @@ static int ipmr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert) | |||
579 | * Copy the IP header | 580 | * Copy the IP header |
580 | */ | 581 | */ |
581 | 582 | ||
582 | skb->nh.iph = (struct iphdr *)skb_put(skb, ihl); | 583 | skb->nh.raw = skb_put(skb, ihl); |
583 | memcpy(skb->data,pkt->data,ihl); | 584 | memcpy(skb->data,pkt->data,ihl); |
584 | skb->nh.iph->protocol = 0; /* Flag to the kernel this is a route add */ | 585 | ip_hdr(skb)->protocol = 0; /* Flag to the kernel this is a route add */ |
585 | msg = (struct igmpmsg*)skb->nh.iph; | 586 | msg = (struct igmpmsg *)skb_network_header(skb); |
586 | msg->im_vif = vifi; | 587 | msg->im_vif = vifi; |
587 | skb->dst = dst_clone(pkt->dst); | 588 | skb->dst = dst_clone(pkt->dst); |
588 | 589 | ||
@@ -594,7 +595,7 @@ static int ipmr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert) | |||
594 | igmp->type = | 595 | igmp->type = |
595 | msg->im_msgtype = assert; | 596 | msg->im_msgtype = assert; |
596 | igmp->code = 0; | 597 | igmp->code = 0; |
597 | skb->nh.iph->tot_len=htons(skb->len); /* Fix the length */ | 598 | ip_hdr(skb)->tot_len = htons(skb->len); /* Fix the length */ |
598 | skb->h.raw = skb->nh.raw; | 599 | skb->h.raw = skb->nh.raw; |
599 | } | 600 | } |
600 | 601 | ||
@@ -624,11 +625,12 @@ ipmr_cache_unresolved(vifi_t vifi, struct sk_buff *skb) | |||
624 | { | 625 | { |
625 | int err; | 626 | int err; |
626 | struct mfc_cache *c; | 627 | struct mfc_cache *c; |
628 | const struct iphdr *iph = ip_hdr(skb); | ||
627 | 629 | ||
628 | spin_lock_bh(&mfc_unres_lock); | 630 | spin_lock_bh(&mfc_unres_lock); |
629 | for (c=mfc_unres_queue; c; c=c->next) { | 631 | for (c=mfc_unres_queue; c; c=c->next) { |
630 | if (c->mfc_mcastgrp == skb->nh.iph->daddr && | 632 | if (c->mfc_mcastgrp == iph->daddr && |
631 | c->mfc_origin == skb->nh.iph->saddr) | 633 | c->mfc_origin == iph->saddr) |
632 | break; | 634 | break; |
633 | } | 635 | } |
634 | 636 | ||
@@ -648,9 +650,9 @@ ipmr_cache_unresolved(vifi_t vifi, struct sk_buff *skb) | |||
648 | /* | 650 | /* |
649 | * Fill in the new cache entry | 651 | * Fill in the new cache entry |
650 | */ | 652 | */ |
651 | c->mfc_parent=-1; | 653 | c->mfc_parent = -1; |
652 | c->mfc_origin=skb->nh.iph->saddr; | 654 | c->mfc_origin = iph->saddr; |
653 | c->mfc_mcastgrp=skb->nh.iph->daddr; | 655 | c->mfc_mcastgrp = iph->daddr; |
654 | 656 | ||
655 | /* | 657 | /* |
656 | * Reflect first query at mrouted. | 658 | * Reflect first query at mrouted. |
@@ -1096,12 +1098,12 @@ static struct notifier_block ip_mr_notifier={ | |||
1096 | static void ip_encap(struct sk_buff *skb, __be32 saddr, __be32 daddr) | 1098 | static void ip_encap(struct sk_buff *skb, __be32 saddr, __be32 daddr) |
1097 | { | 1099 | { |
1098 | struct iphdr *iph; | 1100 | struct iphdr *iph; |
1099 | struct iphdr *old_iph = skb->nh.iph; | 1101 | struct iphdr *old_iph = ip_hdr(skb); |
1100 | 1102 | ||
1101 | skb_push(skb, sizeof(struct iphdr)); | 1103 | skb_push(skb, sizeof(struct iphdr)); |
1102 | skb->h.ipiph = skb->nh.iph; | 1104 | skb->h.raw = skb->nh.raw; |
1103 | skb_reset_network_header(skb); | 1105 | skb_reset_network_header(skb); |
1104 | iph = skb->nh.iph; | 1106 | iph = ip_hdr(skb); |
1105 | 1107 | ||
1106 | iph->version = 4; | 1108 | iph->version = 4; |
1107 | iph->tos = old_iph->tos; | 1109 | iph->tos = old_iph->tos; |
@@ -1137,7 +1139,7 @@ static inline int ipmr_forward_finish(struct sk_buff *skb) | |||
1137 | 1139 | ||
1138 | static void ipmr_queue_xmit(struct sk_buff *skb, struct mfc_cache *c, int vifi) | 1140 | static void ipmr_queue_xmit(struct sk_buff *skb, struct mfc_cache *c, int vifi) |
1139 | { | 1141 | { |
1140 | struct iphdr *iph = skb->nh.iph; | 1142 | const struct iphdr *iph = ip_hdr(skb); |
1141 | struct vif_device *vif = &vif_table[vifi]; | 1143 | struct vif_device *vif = &vif_table[vifi]; |
1142 | struct net_device *dev; | 1144 | struct net_device *dev; |
1143 | struct rtable *rt; | 1145 | struct rtable *rt; |
@@ -1203,8 +1205,7 @@ static void ipmr_queue_xmit(struct sk_buff *skb, struct mfc_cache *c, int vifi) | |||
1203 | 1205 | ||
1204 | dst_release(skb->dst); | 1206 | dst_release(skb->dst); |
1205 | skb->dst = &rt->u.dst; | 1207 | skb->dst = &rt->u.dst; |
1206 | iph = skb->nh.iph; | 1208 | ip_decrease_ttl(ip_hdr(skb)); |
1207 | ip_decrease_ttl(iph); | ||
1208 | 1209 | ||
1209 | /* FIXME: forward and output firewalls used to be called here. | 1210 | /* FIXME: forward and output firewalls used to be called here. |
1210 | * What do we do with netfilter? -- RR */ | 1211 | * What do we do with netfilter? -- RR */ |
@@ -1304,7 +1305,7 @@ static int ip_mr_forward(struct sk_buff *skb, struct mfc_cache *cache, int local | |||
1304 | * Forward the frame | 1305 | * Forward the frame |
1305 | */ | 1306 | */ |
1306 | for (ct = cache->mfc_un.res.maxvif-1; ct >= cache->mfc_un.res.minvif; ct--) { | 1307 | for (ct = cache->mfc_un.res.maxvif-1; ct >= cache->mfc_un.res.minvif; ct--) { |
1307 | if (skb->nh.iph->ttl > cache->mfc_un.res.ttls[ct]) { | 1308 | if (ip_hdr(skb)->ttl > cache->mfc_un.res.ttls[ct]) { |
1308 | if (psend != -1) { | 1309 | if (psend != -1) { |
1309 | struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); | 1310 | struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); |
1310 | if (skb2) | 1311 | if (skb2) |
@@ -1350,7 +1351,7 @@ int ip_mr_input(struct sk_buff *skb) | |||
1350 | if (IPCB(skb)->opt.router_alert) { | 1351 | if (IPCB(skb)->opt.router_alert) { |
1351 | if (ip_call_ra_chain(skb)) | 1352 | if (ip_call_ra_chain(skb)) |
1352 | return 0; | 1353 | return 0; |
1353 | } else if (skb->nh.iph->protocol == IPPROTO_IGMP){ | 1354 | } else if (ip_hdr(skb)->protocol == IPPROTO_IGMP){ |
1354 | /* IGMPv1 (and broken IGMPv2 implementations sort of | 1355 | /* IGMPv1 (and broken IGMPv2 implementations sort of |
1355 | Cisco IOS <= 11.2(8)) do not put router alert | 1356 | Cisco IOS <= 11.2(8)) do not put router alert |
1356 | option to IGMP packets destined to routable | 1357 | option to IGMP packets destined to routable |
@@ -1369,7 +1370,7 @@ int ip_mr_input(struct sk_buff *skb) | |||
1369 | } | 1370 | } |
1370 | 1371 | ||
1371 | read_lock(&mrt_lock); | 1372 | read_lock(&mrt_lock); |
1372 | cache = ipmr_cache_find(skb->nh.iph->saddr, skb->nh.iph->daddr); | 1373 | cache = ipmr_cache_find(ip_hdr(skb)->saddr, ip_hdr(skb)->daddr); |
1373 | 1374 | ||
1374 | /* | 1375 | /* |
1375 | * No usable cache entry | 1376 | * No usable cache entry |
@@ -1580,6 +1581,7 @@ int ipmr_get_route(struct sk_buff *skb, struct rtmsg *rtm, int nowait) | |||
1580 | 1581 | ||
1581 | if (cache==NULL) { | 1582 | if (cache==NULL) { |
1582 | struct sk_buff *skb2; | 1583 | struct sk_buff *skb2; |
1584 | struct iphdr *iph; | ||
1583 | struct net_device *dev; | 1585 | struct net_device *dev; |
1584 | int vif; | 1586 | int vif; |
1585 | 1587 | ||
@@ -1601,10 +1603,11 @@ int ipmr_get_route(struct sk_buff *skb, struct rtmsg *rtm, int nowait) | |||
1601 | 1603 | ||
1602 | skb_push(skb2, sizeof(struct iphdr)); | 1604 | skb_push(skb2, sizeof(struct iphdr)); |
1603 | skb_reset_network_header(skb2); | 1605 | skb_reset_network_header(skb2); |
1604 | skb2->nh.iph->ihl = sizeof(struct iphdr)>>2; | 1606 | iph = ip_hdr(skb2); |
1605 | skb2->nh.iph->saddr = rt->rt_src; | 1607 | iph->ihl = sizeof(struct iphdr) >> 2; |
1606 | skb2->nh.iph->daddr = rt->rt_dst; | 1608 | iph->saddr = rt->rt_src; |
1607 | skb2->nh.iph->version = 0; | 1609 | iph->daddr = rt->rt_dst; |
1610 | iph->version = 0; | ||
1608 | err = ipmr_cache_unresolved(vif, skb2); | 1611 | err = ipmr_cache_unresolved(vif, skb2); |
1609 | read_unlock(&mrt_lock); | 1612 | read_unlock(&mrt_lock); |
1610 | return err; | 1613 | return err; |
diff --git a/net/ipv4/ipvs/ip_vs_app.c b/net/ipv4/ipvs/ip_vs_app.c index e5beab28cd0f..c8a822c0aa75 100644 --- a/net/ipv4/ipvs/ip_vs_app.c +++ b/net/ipv4/ipvs/ip_vs_app.c | |||
@@ -577,7 +577,6 @@ static const struct file_operations ip_vs_app_fops = { | |||
577 | int ip_vs_skb_replace(struct sk_buff *skb, gfp_t pri, | 577 | int ip_vs_skb_replace(struct sk_buff *skb, gfp_t pri, |
578 | char *o_buf, int o_len, char *n_buf, int n_len) | 578 | char *o_buf, int o_len, char *n_buf, int n_len) |
579 | { | 579 | { |
580 | struct iphdr *iph; | ||
581 | int diff; | 580 | int diff; |
582 | int o_offset; | 581 | int o_offset; |
583 | int o_left; | 582 | int o_left; |
@@ -607,8 +606,7 @@ int ip_vs_skb_replace(struct sk_buff *skb, gfp_t pri, | |||
607 | } | 606 | } |
608 | 607 | ||
609 | /* must update the iph total length here */ | 608 | /* must update the iph total length here */ |
610 | iph = skb->nh.iph; | 609 | ip_hdr(skb)->tot_len = htons(skb->len); |
611 | iph->tot_len = htons(skb->len); | ||
612 | 610 | ||
613 | LeaveFunction(9); | 611 | LeaveFunction(9); |
614 | return 0; | 612 | return 0; |
diff --git a/net/ipv4/ipvs/ip_vs_core.c b/net/ipv4/ipvs/ip_vs_core.c index 7893c00a91fe..62cfbed317bf 100644 --- a/net/ipv4/ipvs/ip_vs_core.c +++ b/net/ipv4/ipvs/ip_vs_core.c | |||
@@ -212,7 +212,7 @@ ip_vs_sched_persist(struct ip_vs_service *svc, | |||
212 | __be16 ports[2]) | 212 | __be16 ports[2]) |
213 | { | 213 | { |
214 | struct ip_vs_conn *cp = NULL; | 214 | struct ip_vs_conn *cp = NULL; |
215 | struct iphdr *iph = skb->nh.iph; | 215 | struct iphdr *iph = ip_hdr(skb); |
216 | struct ip_vs_dest *dest; | 216 | struct ip_vs_dest *dest; |
217 | struct ip_vs_conn *ct; | 217 | struct ip_vs_conn *ct; |
218 | __be16 dport; /* destination port to forward */ | 218 | __be16 dport; /* destination port to forward */ |
@@ -381,7 +381,7 @@ struct ip_vs_conn * | |||
381 | ip_vs_schedule(struct ip_vs_service *svc, const struct sk_buff *skb) | 381 | ip_vs_schedule(struct ip_vs_service *svc, const struct sk_buff *skb) |
382 | { | 382 | { |
383 | struct ip_vs_conn *cp = NULL; | 383 | struct ip_vs_conn *cp = NULL; |
384 | struct iphdr *iph = skb->nh.iph; | 384 | struct iphdr *iph = ip_hdr(skb); |
385 | struct ip_vs_dest *dest; | 385 | struct ip_vs_dest *dest; |
386 | __be16 _ports[2], *pptr; | 386 | __be16 _ports[2], *pptr; |
387 | 387 | ||
@@ -447,7 +447,7 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb, | |||
447 | struct ip_vs_protocol *pp) | 447 | struct ip_vs_protocol *pp) |
448 | { | 448 | { |
449 | __be16 _ports[2], *pptr; | 449 | __be16 _ports[2], *pptr; |
450 | struct iphdr *iph = skb->nh.iph; | 450 | struct iphdr *iph = ip_hdr(skb); |
451 | 451 | ||
452 | pptr = skb_header_pointer(skb, iph->ihl*4, | 452 | pptr = skb_header_pointer(skb, iph->ihl*4, |
453 | sizeof(_ports), _ports); | 453 | sizeof(_ports), _ports); |
@@ -546,7 +546,7 @@ ip_vs_gather_frags(struct sk_buff *skb, u_int32_t user) | |||
546 | { | 546 | { |
547 | skb = ip_defrag(skb, user); | 547 | skb = ip_defrag(skb, user); |
548 | if (skb) | 548 | if (skb) |
549 | ip_send_check(skb->nh.iph); | 549 | ip_send_check(ip_hdr(skb)); |
550 | return skb; | 550 | return skb; |
551 | } | 551 | } |
552 | 552 | ||
@@ -557,7 +557,7 @@ ip_vs_gather_frags(struct sk_buff *skb, u_int32_t user) | |||
557 | void ip_vs_nat_icmp(struct sk_buff *skb, struct ip_vs_protocol *pp, | 557 | void ip_vs_nat_icmp(struct sk_buff *skb, struct ip_vs_protocol *pp, |
558 | struct ip_vs_conn *cp, int inout) | 558 | struct ip_vs_conn *cp, int inout) |
559 | { | 559 | { |
560 | struct iphdr *iph = skb->nh.iph; | 560 | struct iphdr *iph = ip_hdr(skb); |
561 | unsigned int icmp_offset = iph->ihl*4; | 561 | unsigned int icmp_offset = iph->ihl*4; |
562 | struct icmphdr *icmph = (struct icmphdr *)(skb_network_header(skb) + | 562 | struct icmphdr *icmph = (struct icmphdr *)(skb_network_header(skb) + |
563 | icmp_offset); | 563 | icmp_offset); |
@@ -618,14 +618,14 @@ static int ip_vs_out_icmp(struct sk_buff **pskb, int *related) | |||
618 | *related = 1; | 618 | *related = 1; |
619 | 619 | ||
620 | /* reassemble IP fragments */ | 620 | /* reassemble IP fragments */ |
621 | if (skb->nh.iph->frag_off & htons(IP_MF|IP_OFFSET)) { | 621 | if (ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) { |
622 | skb = ip_vs_gather_frags(skb, IP_DEFRAG_VS_OUT); | 622 | skb = ip_vs_gather_frags(skb, IP_DEFRAG_VS_OUT); |
623 | if (!skb) | 623 | if (!skb) |
624 | return NF_STOLEN; | 624 | return NF_STOLEN; |
625 | *pskb = skb; | 625 | *pskb = skb; |
626 | } | 626 | } |
627 | 627 | ||
628 | iph = skb->nh.iph; | 628 | iph = ip_hdr(skb); |
629 | offset = ihl = iph->ihl * 4; | 629 | offset = ihl = iph->ihl * 4; |
630 | ic = skb_header_pointer(skb, offset, sizeof(_icmph), &_icmph); | 630 | ic = skb_header_pointer(skb, offset, sizeof(_icmph), &_icmph); |
631 | if (ic == NULL) | 631 | if (ic == NULL) |
@@ -740,14 +740,14 @@ ip_vs_out(unsigned int hooknum, struct sk_buff **pskb, | |||
740 | if (skb->ipvs_property) | 740 | if (skb->ipvs_property) |
741 | return NF_ACCEPT; | 741 | return NF_ACCEPT; |
742 | 742 | ||
743 | iph = skb->nh.iph; | 743 | iph = ip_hdr(skb); |
744 | if (unlikely(iph->protocol == IPPROTO_ICMP)) { | 744 | if (unlikely(iph->protocol == IPPROTO_ICMP)) { |
745 | int related, verdict = ip_vs_out_icmp(pskb, &related); | 745 | int related, verdict = ip_vs_out_icmp(pskb, &related); |
746 | 746 | ||
747 | if (related) | 747 | if (related) |
748 | return verdict; | 748 | return verdict; |
749 | skb = *pskb; | 749 | skb = *pskb; |
750 | iph = skb->nh.iph; | 750 | iph = ip_hdr(skb); |
751 | } | 751 | } |
752 | 752 | ||
753 | pp = ip_vs_proto_get(iph->protocol); | 753 | pp = ip_vs_proto_get(iph->protocol); |
@@ -760,7 +760,7 @@ ip_vs_out(unsigned int hooknum, struct sk_buff **pskb, | |||
760 | skb = ip_vs_gather_frags(skb, IP_DEFRAG_VS_OUT); | 760 | skb = ip_vs_gather_frags(skb, IP_DEFRAG_VS_OUT); |
761 | if (!skb) | 761 | if (!skb) |
762 | return NF_STOLEN; | 762 | return NF_STOLEN; |
763 | iph = skb->nh.iph; | 763 | iph = ip_hdr(skb); |
764 | *pskb = skb; | 764 | *pskb = skb; |
765 | } | 765 | } |
766 | 766 | ||
@@ -810,8 +810,8 @@ ip_vs_out(unsigned int hooknum, struct sk_buff **pskb, | |||
810 | if (pp->snat_handler && !pp->snat_handler(pskb, pp, cp)) | 810 | if (pp->snat_handler && !pp->snat_handler(pskb, pp, cp)) |
811 | goto drop; | 811 | goto drop; |
812 | skb = *pskb; | 812 | skb = *pskb; |
813 | skb->nh.iph->saddr = cp->vaddr; | 813 | ip_hdr(skb)->saddr = cp->vaddr; |
814 | ip_send_check(skb->nh.iph); | 814 | ip_send_check(ip_hdr(skb)); |
815 | 815 | ||
816 | /* For policy routing, packets originating from this | 816 | /* For policy routing, packets originating from this |
817 | * machine itself may be routed differently to packets | 817 | * machine itself may be routed differently to packets |
@@ -861,7 +861,7 @@ ip_vs_in_icmp(struct sk_buff **pskb, int *related, unsigned int hooknum) | |||
861 | *related = 1; | 861 | *related = 1; |
862 | 862 | ||
863 | /* reassemble IP fragments */ | 863 | /* reassemble IP fragments */ |
864 | if (skb->nh.iph->frag_off & htons(IP_MF|IP_OFFSET)) { | 864 | if (ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) { |
865 | skb = ip_vs_gather_frags(skb, | 865 | skb = ip_vs_gather_frags(skb, |
866 | hooknum == NF_IP_LOCAL_IN ? | 866 | hooknum == NF_IP_LOCAL_IN ? |
867 | IP_DEFRAG_VS_IN : IP_DEFRAG_VS_FWD); | 867 | IP_DEFRAG_VS_IN : IP_DEFRAG_VS_FWD); |
@@ -870,7 +870,7 @@ ip_vs_in_icmp(struct sk_buff **pskb, int *related, unsigned int hooknum) | |||
870 | *pskb = skb; | 870 | *pskb = skb; |
871 | } | 871 | } |
872 | 872 | ||
873 | iph = skb->nh.iph; | 873 | iph = ip_hdr(skb); |
874 | offset = ihl = iph->ihl * 4; | 874 | offset = ihl = iph->ihl * 4; |
875 | ic = skb_header_pointer(skb, offset, sizeof(_icmph), &_icmph); | 875 | ic = skb_header_pointer(skb, offset, sizeof(_icmph), &_icmph); |
876 | if (ic == NULL) | 876 | if (ic == NULL) |
@@ -966,19 +966,19 @@ ip_vs_in(unsigned int hooknum, struct sk_buff **pskb, | |||
966 | || skb->dev == &loopback_dev || skb->sk)) { | 966 | || skb->dev == &loopback_dev || skb->sk)) { |
967 | IP_VS_DBG(12, "packet type=%d proto=%d daddr=%d.%d.%d.%d ignored\n", | 967 | IP_VS_DBG(12, "packet type=%d proto=%d daddr=%d.%d.%d.%d ignored\n", |
968 | skb->pkt_type, | 968 | skb->pkt_type, |
969 | skb->nh.iph->protocol, | 969 | ip_hdr(skb)->protocol, |
970 | NIPQUAD(skb->nh.iph->daddr)); | 970 | NIPQUAD(ip_hdr(skb)->daddr)); |
971 | return NF_ACCEPT; | 971 | return NF_ACCEPT; |
972 | } | 972 | } |
973 | 973 | ||
974 | iph = skb->nh.iph; | 974 | iph = ip_hdr(skb); |
975 | if (unlikely(iph->protocol == IPPROTO_ICMP)) { | 975 | if (unlikely(iph->protocol == IPPROTO_ICMP)) { |
976 | int related, verdict = ip_vs_in_icmp(pskb, &related, hooknum); | 976 | int related, verdict = ip_vs_in_icmp(pskb, &related, hooknum); |
977 | 977 | ||
978 | if (related) | 978 | if (related) |
979 | return verdict; | 979 | return verdict; |
980 | skb = *pskb; | 980 | skb = *pskb; |
981 | iph = skb->nh.iph; | 981 | iph = ip_hdr(skb); |
982 | } | 982 | } |
983 | 983 | ||
984 | /* Protocol supported? */ | 984 | /* Protocol supported? */ |
@@ -1064,7 +1064,7 @@ ip_vs_forward_icmp(unsigned int hooknum, struct sk_buff **pskb, | |||
1064 | { | 1064 | { |
1065 | int r; | 1065 | int r; |
1066 | 1066 | ||
1067 | if ((*pskb)->nh.iph->protocol != IPPROTO_ICMP) | 1067 | if (ip_hdr(*pskb)->protocol != IPPROTO_ICMP) |
1068 | return NF_ACCEPT; | 1068 | return NF_ACCEPT; |
1069 | 1069 | ||
1070 | return ip_vs_in_icmp(pskb, &r, hooknum); | 1070 | return ip_vs_in_icmp(pskb, &r, hooknum); |
diff --git a/net/ipv4/ipvs/ip_vs_dh.c b/net/ipv4/ipvs/ip_vs_dh.c index 502111fba872..dcf5d46aaa5e 100644 --- a/net/ipv4/ipvs/ip_vs_dh.c +++ b/net/ipv4/ipvs/ip_vs_dh.c | |||
@@ -204,7 +204,7 @@ ip_vs_dh_schedule(struct ip_vs_service *svc, const struct sk_buff *skb) | |||
204 | { | 204 | { |
205 | struct ip_vs_dest *dest; | 205 | struct ip_vs_dest *dest; |
206 | struct ip_vs_dh_bucket *tbl; | 206 | struct ip_vs_dh_bucket *tbl; |
207 | struct iphdr *iph = skb->nh.iph; | 207 | struct iphdr *iph = ip_hdr(skb); |
208 | 208 | ||
209 | IP_VS_DBG(6, "ip_vs_dh_schedule(): Scheduling...\n"); | 209 | IP_VS_DBG(6, "ip_vs_dh_schedule(): Scheduling...\n"); |
210 | 210 | ||
diff --git a/net/ipv4/ipvs/ip_vs_ftp.c b/net/ipv4/ipvs/ip_vs_ftp.c index 847c47af040c..25bd68967305 100644 --- a/net/ipv4/ipvs/ip_vs_ftp.c +++ b/net/ipv4/ipvs/ip_vs_ftp.c | |||
@@ -159,7 +159,7 @@ static int ip_vs_ftp_out(struct ip_vs_app *app, struct ip_vs_conn *cp, | |||
159 | return 0; | 159 | return 0; |
160 | 160 | ||
161 | if (cp->app_data == &ip_vs_ftp_pasv) { | 161 | if (cp->app_data == &ip_vs_ftp_pasv) { |
162 | iph = (*pskb)->nh.iph; | 162 | iph = ip_hdr(*pskb); |
163 | th = (struct tcphdr *)&(((char *)iph)[iph->ihl*4]); | 163 | th = (struct tcphdr *)&(((char *)iph)[iph->ihl*4]); |
164 | data = (char *)th + (th->doff << 2); | 164 | data = (char *)th + (th->doff << 2); |
165 | data_limit = (*pskb)->tail; | 165 | data_limit = (*pskb)->tail; |
@@ -262,7 +262,7 @@ static int ip_vs_ftp_in(struct ip_vs_app *app, struct ip_vs_conn *cp, | |||
262 | /* | 262 | /* |
263 | * Detecting whether it is passive | 263 | * Detecting whether it is passive |
264 | */ | 264 | */ |
265 | iph = (*pskb)->nh.iph; | 265 | iph = ip_hdr(*pskb); |
266 | th = (struct tcphdr *)&(((char *)iph)[iph->ihl*4]); | 266 | th = (struct tcphdr *)&(((char *)iph)[iph->ihl*4]); |
267 | 267 | ||
268 | /* Since there may be OPTIONS in the TCP packet and the HLEN is | 268 | /* Since there may be OPTIONS in the TCP packet and the HLEN is |
diff --git a/net/ipv4/ipvs/ip_vs_lblc.c b/net/ipv4/ipvs/ip_vs_lblc.c index c801273cb881..052f4ed59174 100644 --- a/net/ipv4/ipvs/ip_vs_lblc.c +++ b/net/ipv4/ipvs/ip_vs_lblc.c | |||
@@ -521,7 +521,7 @@ ip_vs_lblc_schedule(struct ip_vs_service *svc, const struct sk_buff *skb) | |||
521 | struct ip_vs_dest *dest; | 521 | struct ip_vs_dest *dest; |
522 | struct ip_vs_lblc_table *tbl; | 522 | struct ip_vs_lblc_table *tbl; |
523 | struct ip_vs_lblc_entry *en; | 523 | struct ip_vs_lblc_entry *en; |
524 | struct iphdr *iph = skb->nh.iph; | 524 | struct iphdr *iph = ip_hdr(skb); |
525 | 525 | ||
526 | IP_VS_DBG(6, "ip_vs_lblc_schedule(): Scheduling...\n"); | 526 | IP_VS_DBG(6, "ip_vs_lblc_schedule(): Scheduling...\n"); |
527 | 527 | ||
diff --git a/net/ipv4/ipvs/ip_vs_lblcr.c b/net/ipv4/ipvs/ip_vs_lblcr.c index 23f9b9e73c85..6225acac7a3b 100644 --- a/net/ipv4/ipvs/ip_vs_lblcr.c +++ b/net/ipv4/ipvs/ip_vs_lblcr.c | |||
@@ -775,7 +775,7 @@ ip_vs_lblcr_schedule(struct ip_vs_service *svc, const struct sk_buff *skb) | |||
775 | struct ip_vs_dest *dest; | 775 | struct ip_vs_dest *dest; |
776 | struct ip_vs_lblcr_table *tbl; | 776 | struct ip_vs_lblcr_table *tbl; |
777 | struct ip_vs_lblcr_entry *en; | 777 | struct ip_vs_lblcr_entry *en; |
778 | struct iphdr *iph = skb->nh.iph; | 778 | struct iphdr *iph = ip_hdr(skb); |
779 | 779 | ||
780 | IP_VS_DBG(6, "ip_vs_lblcr_schedule(): Scheduling...\n"); | 780 | IP_VS_DBG(6, "ip_vs_lblcr_schedule(): Scheduling...\n"); |
781 | 781 | ||
diff --git a/net/ipv4/ipvs/ip_vs_proto_tcp.c b/net/ipv4/ipvs/ip_vs_proto_tcp.c index e65382da713e..e65577a77006 100644 --- a/net/ipv4/ipvs/ip_vs_proto_tcp.c +++ b/net/ipv4/ipvs/ip_vs_proto_tcp.c | |||
@@ -83,8 +83,8 @@ tcp_conn_schedule(struct sk_buff *skb, | |||
83 | } | 83 | } |
84 | 84 | ||
85 | if (th->syn && | 85 | if (th->syn && |
86 | (svc = ip_vs_service_get(skb->mark, skb->nh.iph->protocol, | 86 | (svc = ip_vs_service_get(skb->mark, ip_hdr(skb)->protocol, |
87 | skb->nh.iph->daddr, th->dest))) { | 87 | ip_hdr(skb)->daddr, th->dest))) { |
88 | if (ip_vs_todrop()) { | 88 | if (ip_vs_todrop()) { |
89 | /* | 89 | /* |
90 | * It seems that we are very loaded. | 90 | * It seems that we are very loaded. |
@@ -142,7 +142,7 @@ tcp_snat_handler(struct sk_buff **pskb, | |||
142 | return 0; | 142 | return 0; |
143 | } | 143 | } |
144 | 144 | ||
145 | tcph = (void *)(*pskb)->nh.iph + tcphoff; | 145 | tcph = (void *)ip_hdr(*pskb) + tcphoff; |
146 | tcph->source = cp->vport; | 146 | tcph->source = cp->vport; |
147 | 147 | ||
148 | /* Adjust TCP checksums */ | 148 | /* Adjust TCP checksums */ |
@@ -193,7 +193,7 @@ tcp_dnat_handler(struct sk_buff **pskb, | |||
193 | return 0; | 193 | return 0; |
194 | } | 194 | } |
195 | 195 | ||
196 | tcph = (void *)(*pskb)->nh.iph + tcphoff; | 196 | tcph = (void *)ip_hdr(*pskb) + tcphoff; |
197 | tcph->dest = cp->dport; | 197 | tcph->dest = cp->dport; |
198 | 198 | ||
199 | /* | 199 | /* |
@@ -229,9 +229,9 @@ tcp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp) | |||
229 | case CHECKSUM_NONE: | 229 | case CHECKSUM_NONE: |
230 | skb->csum = skb_checksum(skb, tcphoff, skb->len - tcphoff, 0); | 230 | skb->csum = skb_checksum(skb, tcphoff, skb->len - tcphoff, 0); |
231 | case CHECKSUM_COMPLETE: | 231 | case CHECKSUM_COMPLETE: |
232 | if (csum_tcpudp_magic(skb->nh.iph->saddr, skb->nh.iph->daddr, | 232 | if (csum_tcpudp_magic(ip_hdr(skb)->saddr, ip_hdr(skb)->daddr, |
233 | skb->len - tcphoff, | 233 | skb->len - tcphoff, |
234 | skb->nh.iph->protocol, skb->csum)) { | 234 | ip_hdr(skb)->protocol, skb->csum)) { |
235 | IP_VS_DBG_RL_PKT(0, pp, skb, 0, | 235 | IP_VS_DBG_RL_PKT(0, pp, skb, 0, |
236 | "Failed checksum for"); | 236 | "Failed checksum for"); |
237 | return 0; | 237 | return 0; |
diff --git a/net/ipv4/ipvs/ip_vs_proto_udp.c b/net/ipv4/ipvs/ip_vs_proto_udp.c index 2cd950638923..8ee5fe6a101d 100644 --- a/net/ipv4/ipvs/ip_vs_proto_udp.c +++ b/net/ipv4/ipvs/ip_vs_proto_udp.c | |||
@@ -89,8 +89,8 @@ udp_conn_schedule(struct sk_buff *skb, struct ip_vs_protocol *pp, | |||
89 | return 0; | 89 | return 0; |
90 | } | 90 | } |
91 | 91 | ||
92 | if ((svc = ip_vs_service_get(skb->mark, skb->nh.iph->protocol, | 92 | if ((svc = ip_vs_service_get(skb->mark, ip_hdr(skb)->protocol, |
93 | skb->nh.iph->daddr, uh->dest))) { | 93 | ip_hdr(skb)->daddr, uh->dest))) { |
94 | if (ip_vs_todrop()) { | 94 | if (ip_vs_todrop()) { |
95 | /* | 95 | /* |
96 | * It seems that we are very loaded. | 96 | * It seems that we are very loaded. |
@@ -151,7 +151,7 @@ udp_snat_handler(struct sk_buff **pskb, | |||
151 | return 0; | 151 | return 0; |
152 | } | 152 | } |
153 | 153 | ||
154 | udph = (void *)(*pskb)->nh.iph + udphoff; | 154 | udph = (void *)ip_hdr(*pskb) + udphoff; |
155 | udph->source = cp->vport; | 155 | udph->source = cp->vport; |
156 | 156 | ||
157 | /* | 157 | /* |
@@ -206,7 +206,7 @@ udp_dnat_handler(struct sk_buff **pskb, | |||
206 | return 0; | 206 | return 0; |
207 | } | 207 | } |
208 | 208 | ||
209 | udph = (void *)(*pskb)->nh.iph + udphoff; | 209 | udph = (void *)ip_hdr(*pskb) + udphoff; |
210 | udph->dest = cp->dport; | 210 | udph->dest = cp->dport; |
211 | 211 | ||
212 | /* | 212 | /* |
@@ -251,10 +251,10 @@ udp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp) | |||
251 | skb->csum = skb_checksum(skb, udphoff, | 251 | skb->csum = skb_checksum(skb, udphoff, |
252 | skb->len - udphoff, 0); | 252 | skb->len - udphoff, 0); |
253 | case CHECKSUM_COMPLETE: | 253 | case CHECKSUM_COMPLETE: |
254 | if (csum_tcpudp_magic(skb->nh.iph->saddr, | 254 | if (csum_tcpudp_magic(ip_hdr(skb)->saddr, |
255 | skb->nh.iph->daddr, | 255 | ip_hdr(skb)->daddr, |
256 | skb->len - udphoff, | 256 | skb->len - udphoff, |
257 | skb->nh.iph->protocol, | 257 | ip_hdr(skb)->protocol, |
258 | skb->csum)) { | 258 | skb->csum)) { |
259 | IP_VS_DBG_RL_PKT(0, pp, skb, 0, | 259 | IP_VS_DBG_RL_PKT(0, pp, skb, 0, |
260 | "Failed checksum for"); | 260 | "Failed checksum for"); |
diff --git a/net/ipv4/ipvs/ip_vs_sh.c b/net/ipv4/ipvs/ip_vs_sh.c index 338668f88fe2..1b25b00ef1e1 100644 --- a/net/ipv4/ipvs/ip_vs_sh.c +++ b/net/ipv4/ipvs/ip_vs_sh.c | |||
@@ -201,7 +201,7 @@ ip_vs_sh_schedule(struct ip_vs_service *svc, const struct sk_buff *skb) | |||
201 | { | 201 | { |
202 | struct ip_vs_dest *dest; | 202 | struct ip_vs_dest *dest; |
203 | struct ip_vs_sh_bucket *tbl; | 203 | struct ip_vs_sh_bucket *tbl; |
204 | struct iphdr *iph = skb->nh.iph; | 204 | struct iphdr *iph = ip_hdr(skb); |
205 | 205 | ||
206 | IP_VS_DBG(6, "ip_vs_sh_schedule(): Scheduling...\n"); | 206 | IP_VS_DBG(6, "ip_vs_sh_schedule(): Scheduling...\n"); |
207 | 207 | ||
diff --git a/net/ipv4/ipvs/ip_vs_xmit.c b/net/ipv4/ipvs/ip_vs_xmit.c index d1403d0855ed..a7aee6822033 100644 --- a/net/ipv4/ipvs/ip_vs_xmit.c +++ b/net/ipv4/ipvs/ip_vs_xmit.c | |||
@@ -156,7 +156,7 @@ ip_vs_bypass_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, | |||
156 | struct ip_vs_protocol *pp) | 156 | struct ip_vs_protocol *pp) |
157 | { | 157 | { |
158 | struct rtable *rt; /* Route to the other host */ | 158 | struct rtable *rt; /* Route to the other host */ |
159 | struct iphdr *iph = skb->nh.iph; | 159 | struct iphdr *iph = ip_hdr(skb); |
160 | u8 tos = iph->tos; | 160 | u8 tos = iph->tos; |
161 | int mtu; | 161 | int mtu; |
162 | struct flowi fl = { | 162 | struct flowi fl = { |
@@ -193,7 +193,7 @@ ip_vs_bypass_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, | |||
193 | ip_rt_put(rt); | 193 | ip_rt_put(rt); |
194 | return NF_STOLEN; | 194 | return NF_STOLEN; |
195 | } | 195 | } |
196 | ip_send_check(skb->nh.iph); | 196 | ip_send_check(ip_hdr(skb)); |
197 | 197 | ||
198 | /* drop old route */ | 198 | /* drop old route */ |
199 | dst_release(skb->dst); | 199 | dst_release(skb->dst); |
@@ -226,7 +226,7 @@ ip_vs_nat_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, | |||
226 | { | 226 | { |
227 | struct rtable *rt; /* Route to the other host */ | 227 | struct rtable *rt; /* Route to the other host */ |
228 | int mtu; | 228 | int mtu; |
229 | struct iphdr *iph = skb->nh.iph; | 229 | struct iphdr *iph = ip_hdr(skb); |
230 | 230 | ||
231 | EnterFunction(10); | 231 | EnterFunction(10); |
232 | 232 | ||
@@ -266,8 +266,8 @@ ip_vs_nat_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, | |||
266 | /* mangle the packet */ | 266 | /* mangle the packet */ |
267 | if (pp->dnat_handler && !pp->dnat_handler(&skb, pp, cp)) | 267 | if (pp->dnat_handler && !pp->dnat_handler(&skb, pp, cp)) |
268 | goto tx_error; | 268 | goto tx_error; |
269 | skb->nh.iph->daddr = cp->daddr; | 269 | ip_hdr(skb)->daddr = cp->daddr; |
270 | ip_send_check(skb->nh.iph); | 270 | ip_send_check(ip_hdr(skb)); |
271 | 271 | ||
272 | IP_VS_DBG_PKT(10, pp, skb, 0, "After DNAT"); | 272 | IP_VS_DBG_PKT(10, pp, skb, 0, "After DNAT"); |
273 | 273 | ||
@@ -320,7 +320,7 @@ ip_vs_tunnel_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, | |||
320 | { | 320 | { |
321 | struct rtable *rt; /* Route to the other host */ | 321 | struct rtable *rt; /* Route to the other host */ |
322 | struct net_device *tdev; /* Device to other host */ | 322 | struct net_device *tdev; /* Device to other host */ |
323 | struct iphdr *old_iph = skb->nh.iph; | 323 | struct iphdr *old_iph = ip_hdr(skb); |
324 | u8 tos = old_iph->tos; | 324 | u8 tos = old_iph->tos; |
325 | __be16 df = old_iph->frag_off; | 325 | __be16 df = old_iph->frag_off; |
326 | struct iphdr *iph; /* Our new IP header */ | 326 | struct iphdr *iph; /* Our new IP header */ |
@@ -377,7 +377,7 @@ ip_vs_tunnel_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, | |||
377 | } | 377 | } |
378 | kfree_skb(skb); | 378 | kfree_skb(skb); |
379 | skb = new_skb; | 379 | skb = new_skb; |
380 | old_iph = skb->nh.iph; | 380 | old_iph = ip_hdr(skb); |
381 | } | 381 | } |
382 | 382 | ||
383 | skb->h.raw = (void *) old_iph; | 383 | skb->h.raw = (void *) old_iph; |
@@ -396,7 +396,7 @@ ip_vs_tunnel_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, | |||
396 | /* | 396 | /* |
397 | * Push down and install the IPIP header. | 397 | * Push down and install the IPIP header. |
398 | */ | 398 | */ |
399 | iph = skb->nh.iph; | 399 | iph = ip_hdr(skb); |
400 | iph->version = 4; | 400 | iph->version = 4; |
401 | iph->ihl = sizeof(struct iphdr)>>2; | 401 | iph->ihl = sizeof(struct iphdr)>>2; |
402 | iph->frag_off = df; | 402 | iph->frag_off = df; |
@@ -436,7 +436,7 @@ ip_vs_dr_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, | |||
436 | struct ip_vs_protocol *pp) | 436 | struct ip_vs_protocol *pp) |
437 | { | 437 | { |
438 | struct rtable *rt; /* Route to the other host */ | 438 | struct rtable *rt; /* Route to the other host */ |
439 | struct iphdr *iph = skb->nh.iph; | 439 | struct iphdr *iph = ip_hdr(skb); |
440 | int mtu; | 440 | int mtu; |
441 | 441 | ||
442 | EnterFunction(10); | 442 | EnterFunction(10); |
@@ -461,7 +461,7 @@ ip_vs_dr_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, | |||
461 | ip_rt_put(rt); | 461 | ip_rt_put(rt); |
462 | return NF_STOLEN; | 462 | return NF_STOLEN; |
463 | } | 463 | } |
464 | ip_send_check(skb->nh.iph); | 464 | ip_send_check(ip_hdr(skb)); |
465 | 465 | ||
466 | /* drop old route */ | 466 | /* drop old route */ |
467 | dst_release(skb->dst); | 467 | dst_release(skb->dst); |
@@ -515,12 +515,12 @@ ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, | |||
515 | * mangle and send the packet here (only for VS/NAT) | 515 | * mangle and send the packet here (only for VS/NAT) |
516 | */ | 516 | */ |
517 | 517 | ||
518 | if (!(rt = __ip_vs_get_out_rt(cp, RT_TOS(skb->nh.iph->tos)))) | 518 | if (!(rt = __ip_vs_get_out_rt(cp, RT_TOS(ip_hdr(skb)->tos)))) |
519 | goto tx_error_icmp; | 519 | goto tx_error_icmp; |
520 | 520 | ||
521 | /* MTU checking */ | 521 | /* MTU checking */ |
522 | mtu = dst_mtu(&rt->u.dst); | 522 | mtu = dst_mtu(&rt->u.dst); |
523 | if ((skb->len > mtu) && (skb->nh.iph->frag_off & htons(IP_DF))) { | 523 | if ((skb->len > mtu) && (ip_hdr(skb)->frag_off & htons(IP_DF))) { |
524 | ip_rt_put(rt); | 524 | ip_rt_put(rt); |
525 | icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, htonl(mtu)); | 525 | icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, htonl(mtu)); |
526 | IP_VS_DBG_RL("ip_vs_in_icmp(): frag needed\n"); | 526 | IP_VS_DBG_RL("ip_vs_in_icmp(): frag needed\n"); |
diff --git a/net/ipv4/netfilter.c b/net/ipv4/netfilter.c index 6069a11514f6..b44192924f95 100644 --- a/net/ipv4/netfilter.c +++ b/net/ipv4/netfilter.c | |||
@@ -10,7 +10,7 @@ | |||
10 | /* route_me_harder function, used by iptable_nat, iptable_mangle + ip_queue */ | 10 | /* route_me_harder function, used by iptable_nat, iptable_mangle + ip_queue */ |
11 | int ip_route_me_harder(struct sk_buff **pskb, unsigned addr_type) | 11 | int ip_route_me_harder(struct sk_buff **pskb, unsigned addr_type) |
12 | { | 12 | { |
13 | struct iphdr *iph = (*pskb)->nh.iph; | 13 | const struct iphdr *iph = ip_hdr(*pskb); |
14 | struct rtable *rt; | 14 | struct rtable *rt; |
15 | struct flowi fl = {}; | 15 | struct flowi fl = {}; |
16 | struct dst_entry *odst; | 16 | struct dst_entry *odst; |
@@ -142,7 +142,7 @@ static void nf_ip_saveroute(const struct sk_buff *skb, struct nf_info *info) | |||
142 | struct ip_rt_info *rt_info = nf_info_reroute(info); | 142 | struct ip_rt_info *rt_info = nf_info_reroute(info); |
143 | 143 | ||
144 | if (info->hook == NF_IP_LOCAL_OUT) { | 144 | if (info->hook == NF_IP_LOCAL_OUT) { |
145 | const struct iphdr *iph = skb->nh.iph; | 145 | const struct iphdr *iph = ip_hdr(skb); |
146 | 146 | ||
147 | rt_info->tos = iph->tos; | 147 | rt_info->tos = iph->tos; |
148 | rt_info->daddr = iph->daddr; | 148 | rt_info->daddr = iph->daddr; |
@@ -155,7 +155,7 @@ static int nf_ip_reroute(struct sk_buff **pskb, const struct nf_info *info) | |||
155 | const struct ip_rt_info *rt_info = nf_info_reroute(info); | 155 | const struct ip_rt_info *rt_info = nf_info_reroute(info); |
156 | 156 | ||
157 | if (info->hook == NF_IP_LOCAL_OUT) { | 157 | if (info->hook == NF_IP_LOCAL_OUT) { |
158 | struct iphdr *iph = (*pskb)->nh.iph; | 158 | const struct iphdr *iph = ip_hdr(*pskb); |
159 | 159 | ||
160 | if (!(iph->tos == rt_info->tos | 160 | if (!(iph->tos == rt_info->tos |
161 | && iph->daddr == rt_info->daddr | 161 | && iph->daddr == rt_info->daddr |
@@ -168,7 +168,7 @@ static int nf_ip_reroute(struct sk_buff **pskb, const struct nf_info *info) | |||
168 | __sum16 nf_ip_checksum(struct sk_buff *skb, unsigned int hook, | 168 | __sum16 nf_ip_checksum(struct sk_buff *skb, unsigned int hook, |
169 | unsigned int dataoff, u_int8_t protocol) | 169 | unsigned int dataoff, u_int8_t protocol) |
170 | { | 170 | { |
171 | struct iphdr *iph = skb->nh.iph; | 171 | const struct iphdr *iph = ip_hdr(skb); |
172 | __sum16 csum = 0; | 172 | __sum16 csum = 0; |
173 | 173 | ||
174 | switch (skb->ip_summed) { | 174 | switch (skb->ip_summed) { |
diff --git a/net/ipv4/netfilter/ip_conntrack_core.c b/net/ipv4/netfilter/ip_conntrack_core.c index 8c013d9f6907..986c0c81294f 100644 --- a/net/ipv4/netfilter/ip_conntrack_core.c +++ b/net/ipv4/netfilter/ip_conntrack_core.c | |||
@@ -748,9 +748,9 @@ resolve_normal_ct(struct sk_buff *skb, | |||
748 | struct ip_conntrack_tuple_hash *h; | 748 | struct ip_conntrack_tuple_hash *h; |
749 | struct ip_conntrack *ct; | 749 | struct ip_conntrack *ct; |
750 | 750 | ||
751 | IP_NF_ASSERT((skb->nh.iph->frag_off & htons(IP_OFFSET)) == 0); | 751 | IP_NF_ASSERT((ip_hdr(skb)->frag_off & htons(IP_OFFSET)) == 0); |
752 | 752 | ||
753 | if (!ip_ct_get_tuple(skb->nh.iph, skb, ip_hdrlen(skb), &tuple,proto)) | 753 | if (!ip_ct_get_tuple(ip_hdr(skb), skb, ip_hdrlen(skb), &tuple,proto)) |
754 | return NULL; | 754 | return NULL; |
755 | 755 | ||
756 | /* look for tuple match */ | 756 | /* look for tuple match */ |
@@ -811,10 +811,10 @@ unsigned int ip_conntrack_in(unsigned int hooknum, | |||
811 | } | 811 | } |
812 | 812 | ||
813 | /* Never happen */ | 813 | /* Never happen */ |
814 | if ((*pskb)->nh.iph->frag_off & htons(IP_OFFSET)) { | 814 | if (ip_hdr(*pskb)->frag_off & htons(IP_OFFSET)) { |
815 | if (net_ratelimit()) { | 815 | if (net_ratelimit()) { |
816 | printk(KERN_ERR "ip_conntrack_in: Frag of proto %u (hook=%u)\n", | 816 | printk(KERN_ERR "ip_conntrack_in: Frag of proto %u (hook=%u)\n", |
817 | (*pskb)->nh.iph->protocol, hooknum); | 817 | ip_hdr(*pskb)->protocol, hooknum); |
818 | } | 818 | } |
819 | return NF_DROP; | 819 | return NF_DROP; |
820 | } | 820 | } |
@@ -825,17 +825,17 @@ unsigned int ip_conntrack_in(unsigned int hooknum, | |||
825 | if ((*pskb)->pkt_type == PACKET_BROADCAST) { | 825 | if ((*pskb)->pkt_type == PACKET_BROADCAST) { |
826 | printk("Broadcast packet!\n"); | 826 | printk("Broadcast packet!\n"); |
827 | return NF_ACCEPT; | 827 | return NF_ACCEPT; |
828 | } else if (((*pskb)->nh.iph->daddr & htonl(0x000000FF)) | 828 | } else if ((ip_hdr(*pskb)->daddr & htonl(0x000000FF)) |
829 | == htonl(0x000000FF)) { | 829 | == htonl(0x000000FF)) { |
830 | printk("Should bcast: %u.%u.%u.%u->%u.%u.%u.%u (sk=%p, ptype=%u)\n", | 830 | printk("Should bcast: %u.%u.%u.%u->%u.%u.%u.%u (sk=%p, ptype=%u)\n", |
831 | NIPQUAD((*pskb)->nh.iph->saddr), | 831 | NIPQUAD(ip_hdr(*pskb)->saddr), |
832 | NIPQUAD((*pskb)->nh.iph->daddr), | 832 | NIPQUAD(ip_hdr(*pskb)->daddr), |
833 | (*pskb)->sk, (*pskb)->pkt_type); | 833 | (*pskb)->sk, (*pskb)->pkt_type); |
834 | } | 834 | } |
835 | #endif | 835 | #endif |
836 | 836 | ||
837 | /* rcu_read_lock()ed by nf_hook_slow */ | 837 | /* rcu_read_lock()ed by nf_hook_slow */ |
838 | proto = __ip_conntrack_proto_find((*pskb)->nh.iph->protocol); | 838 | proto = __ip_conntrack_proto_find(ip_hdr(*pskb)->protocol); |
839 | 839 | ||
840 | /* It may be an special packet, error, unclean... | 840 | /* It may be an special packet, error, unclean... |
841 | * inverse of the return code tells to the netfilter | 841 | * inverse of the return code tells to the netfilter |
@@ -1152,7 +1152,7 @@ void __ip_ct_refresh_acct(struct ip_conntrack *ct, | |||
1152 | if (do_acct) { | 1152 | if (do_acct) { |
1153 | ct->counters[CTINFO2DIR(ctinfo)].packets++; | 1153 | ct->counters[CTINFO2DIR(ctinfo)].packets++; |
1154 | ct->counters[CTINFO2DIR(ctinfo)].bytes += | 1154 | ct->counters[CTINFO2DIR(ctinfo)].bytes += |
1155 | ntohs(skb->nh.iph->tot_len); | 1155 | ntohs(ip_hdr(skb)->tot_len); |
1156 | if ((ct->counters[CTINFO2DIR(ctinfo)].packets & 0x80000000) | 1156 | if ((ct->counters[CTINFO2DIR(ctinfo)].packets & 0x80000000) |
1157 | || (ct->counters[CTINFO2DIR(ctinfo)].bytes & 0x80000000)) | 1157 | || (ct->counters[CTINFO2DIR(ctinfo)].bytes & 0x80000000)) |
1158 | event |= IPCT_COUNTER_FILLING; | 1158 | event |= IPCT_COUNTER_FILLING; |
@@ -1210,7 +1210,7 @@ ip_ct_gather_frags(struct sk_buff *skb, u_int32_t user) | |||
1210 | local_bh_enable(); | 1210 | local_bh_enable(); |
1211 | 1211 | ||
1212 | if (skb) | 1212 | if (skb) |
1213 | ip_send_check(skb->nh.iph); | 1213 | ip_send_check(ip_hdr(skb)); |
1214 | return skb; | 1214 | return skb; |
1215 | } | 1215 | } |
1216 | 1216 | ||
diff --git a/net/ipv4/netfilter/ip_conntrack_helper_h323.c b/net/ipv4/netfilter/ip_conntrack_helper_h323.c index 5d638149b0e0..cecb6e0c8ed0 100644 --- a/net/ipv4/netfilter/ip_conntrack_helper_h323.c +++ b/net/ipv4/netfilter/ip_conntrack_helper_h323.c | |||
@@ -576,8 +576,8 @@ static int h245_help(struct sk_buff **pskb, struct ip_conntrack *ct, | |||
576 | /* Process each TPKT */ | 576 | /* Process each TPKT */ |
577 | while (get_tpkt_data(pskb, ct, ctinfo, &data, &datalen, &dataoff)) { | 577 | while (get_tpkt_data(pskb, ct, ctinfo, &data, &datalen, &dataoff)) { |
578 | DEBUGP("ip_ct_h245: TPKT %u.%u.%u.%u->%u.%u.%u.%u, len=%d\n", | 578 | DEBUGP("ip_ct_h245: TPKT %u.%u.%u.%u->%u.%u.%u.%u, len=%d\n", |
579 | NIPQUAD((*pskb)->nh.iph->saddr), | 579 | NIPQUAD(ip_hdr(*pskb)->saddr), |
580 | NIPQUAD((*pskb)->nh.iph->daddr), datalen); | 580 | NIPQUAD(ip_hdr(*pskb)->daddr), datalen); |
581 | 581 | ||
582 | /* Decode H.245 signal */ | 582 | /* Decode H.245 signal */ |
583 | ret = DecodeMultimediaSystemControlMessage(data, datalen, | 583 | ret = DecodeMultimediaSystemControlMessage(data, datalen, |
@@ -1128,8 +1128,8 @@ static int q931_help(struct sk_buff **pskb, struct ip_conntrack *ct, | |||
1128 | /* Process each TPKT */ | 1128 | /* Process each TPKT */ |
1129 | while (get_tpkt_data(pskb, ct, ctinfo, &data, &datalen, &dataoff)) { | 1129 | while (get_tpkt_data(pskb, ct, ctinfo, &data, &datalen, &dataoff)) { |
1130 | DEBUGP("ip_ct_q931: TPKT %u.%u.%u.%u->%u.%u.%u.%u, len=%d\n", | 1130 | DEBUGP("ip_ct_q931: TPKT %u.%u.%u.%u->%u.%u.%u.%u, len=%d\n", |
1131 | NIPQUAD((*pskb)->nh.iph->saddr), | 1131 | NIPQUAD(ip_hdr(*pskb)->saddr), |
1132 | NIPQUAD((*pskb)->nh.iph->daddr), datalen); | 1132 | NIPQUAD(ip_hdr(*pskb)->daddr), datalen); |
1133 | 1133 | ||
1134 | /* Decode Q.931 signal */ | 1134 | /* Decode Q.931 signal */ |
1135 | ret = DecodeQ931(data, datalen, &q931); | 1135 | ret = DecodeQ931(data, datalen, &q931); |
@@ -1741,8 +1741,8 @@ static int ras_help(struct sk_buff **pskb, struct ip_conntrack *ct, | |||
1741 | if (data == NULL) | 1741 | if (data == NULL) |
1742 | goto accept; | 1742 | goto accept; |
1743 | DEBUGP("ip_ct_ras: RAS message %u.%u.%u.%u->%u.%u.%u.%u, len=%d\n", | 1743 | DEBUGP("ip_ct_ras: RAS message %u.%u.%u.%u->%u.%u.%u.%u, len=%d\n", |
1744 | NIPQUAD((*pskb)->nh.iph->saddr), | 1744 | NIPQUAD(ip_hdr(*pskb)->saddr), |
1745 | NIPQUAD((*pskb)->nh.iph->daddr), datalen); | 1745 | NIPQUAD(ip_hdr(*pskb)->daddr), datalen); |
1746 | 1746 | ||
1747 | /* Decode RAS message */ | 1747 | /* Decode RAS message */ |
1748 | ret = DecodeRasMessage(data, datalen, &ras); | 1748 | ret = DecodeRasMessage(data, datalen, &ras); |
diff --git a/net/ipv4/netfilter/ip_conntrack_netbios_ns.c b/net/ipv4/netfilter/ip_conntrack_netbios_ns.c index cc6dd49c9da0..df07c5f1d874 100644 --- a/net/ipv4/netfilter/ip_conntrack_netbios_ns.c +++ b/net/ipv4/netfilter/ip_conntrack_netbios_ns.c | |||
@@ -45,7 +45,7 @@ static int help(struct sk_buff **pskb, | |||
45 | struct ip_conntrack *ct, enum ip_conntrack_info ctinfo) | 45 | struct ip_conntrack *ct, enum ip_conntrack_info ctinfo) |
46 | { | 46 | { |
47 | struct ip_conntrack_expect *exp; | 47 | struct ip_conntrack_expect *exp; |
48 | struct iphdr *iph = (*pskb)->nh.iph; | 48 | struct iphdr *iph = ip_hdr(*pskb); |
49 | struct rtable *rt = (struct rtable *)(*pskb)->dst; | 49 | struct rtable *rt = (struct rtable *)(*pskb)->dst; |
50 | struct in_device *in_dev; | 50 | struct in_device *in_dev; |
51 | __be32 mask = 0; | 51 | __be32 mask = 0; |
diff --git a/net/ipv4/netfilter/ip_conntrack_proto_sctp.c b/net/ipv4/netfilter/ip_conntrack_proto_sctp.c index e29c436144b3..91d0c05c8e86 100644 --- a/net/ipv4/netfilter/ip_conntrack_proto_sctp.c +++ b/net/ipv4/netfilter/ip_conntrack_proto_sctp.c | |||
@@ -316,7 +316,7 @@ static int sctp_packet(struct ip_conntrack *conntrack, | |||
316 | enum ip_conntrack_info ctinfo) | 316 | enum ip_conntrack_info ctinfo) |
317 | { | 317 | { |
318 | enum sctp_conntrack newconntrack, oldsctpstate; | 318 | enum sctp_conntrack newconntrack, oldsctpstate; |
319 | struct iphdr *iph = skb->nh.iph; | 319 | struct iphdr *iph = ip_hdr(skb); |
320 | sctp_sctphdr_t _sctph, *sh; | 320 | sctp_sctphdr_t _sctph, *sh; |
321 | sctp_chunkhdr_t _sch, *sch; | 321 | sctp_chunkhdr_t _sch, *sch; |
322 | u_int32_t offset, count; | 322 | u_int32_t offset, count; |
@@ -430,7 +430,7 @@ static int sctp_new(struct ip_conntrack *conntrack, | |||
430 | const struct sk_buff *skb) | 430 | const struct sk_buff *skb) |
431 | { | 431 | { |
432 | enum sctp_conntrack newconntrack; | 432 | enum sctp_conntrack newconntrack; |
433 | struct iphdr *iph = skb->nh.iph; | 433 | struct iphdr *iph = ip_hdr(skb); |
434 | sctp_sctphdr_t _sctph, *sh; | 434 | sctp_sctphdr_t _sctph, *sh; |
435 | sctp_chunkhdr_t _sch, *sch; | 435 | sctp_chunkhdr_t _sch, *sch; |
436 | u_int32_t offset, count; | 436 | u_int32_t offset, count; |
diff --git a/net/ipv4/netfilter/ip_conntrack_proto_tcp.c b/net/ipv4/netfilter/ip_conntrack_proto_tcp.c index fce3a3c69815..d03436edfd93 100644 --- a/net/ipv4/netfilter/ip_conntrack_proto_tcp.c +++ b/net/ipv4/netfilter/ip_conntrack_proto_tcp.c | |||
@@ -770,8 +770,8 @@ void ip_conntrack_tcp_update(struct sk_buff *skb, | |||
770 | struct ip_conntrack *conntrack, | 770 | struct ip_conntrack *conntrack, |
771 | enum ip_conntrack_dir dir) | 771 | enum ip_conntrack_dir dir) |
772 | { | 772 | { |
773 | struct iphdr *iph = skb->nh.iph; | 773 | struct iphdr *iph = ip_hdr(skb); |
774 | struct tcphdr *tcph = (void *)skb->nh.iph + ip_hdrlen(skb); | 774 | struct tcphdr *tcph = (void *)iph + ip_hdrlen(skb); |
775 | __u32 end; | 775 | __u32 end; |
776 | #ifdef DEBUGP_VARS | 776 | #ifdef DEBUGP_VARS |
777 | struct ip_ct_tcp_state *sender = &conntrack->proto.tcp.seen[dir]; | 777 | struct ip_ct_tcp_state *sender = &conntrack->proto.tcp.seen[dir]; |
@@ -834,13 +834,13 @@ static int tcp_error(struct sk_buff *skb, | |||
834 | enum ip_conntrack_info *ctinfo, | 834 | enum ip_conntrack_info *ctinfo, |
835 | unsigned int hooknum) | 835 | unsigned int hooknum) |
836 | { | 836 | { |
837 | struct iphdr *iph = skb->nh.iph; | 837 | const unsigned int hdrlen = ip_hdrlen(skb); |
838 | struct tcphdr _tcph, *th; | 838 | struct tcphdr _tcph, *th; |
839 | unsigned int tcplen = skb->len - iph->ihl * 4; | 839 | unsigned int tcplen = skb->len - hdrlen; |
840 | u_int8_t tcpflags; | 840 | u_int8_t tcpflags; |
841 | 841 | ||
842 | /* Smaller that minimal TCP header? */ | 842 | /* Smaller that minimal TCP header? */ |
843 | th = skb_header_pointer(skb, iph->ihl * 4, | 843 | th = skb_header_pointer(skb, hdrlen, |
844 | sizeof(_tcph), &_tcph); | 844 | sizeof(_tcph), &_tcph); |
845 | if (th == NULL) { | 845 | if (th == NULL) { |
846 | if (LOG_INVALID(IPPROTO_TCP)) | 846 | if (LOG_INVALID(IPPROTO_TCP)) |
@@ -863,7 +863,7 @@ static int tcp_error(struct sk_buff *skb, | |||
863 | */ | 863 | */ |
864 | /* FIXME: Source route IP option packets --RR */ | 864 | /* FIXME: Source route IP option packets --RR */ |
865 | if (ip_conntrack_checksum && hooknum == NF_IP_PRE_ROUTING && | 865 | if (ip_conntrack_checksum && hooknum == NF_IP_PRE_ROUTING && |
866 | nf_ip_checksum(skb, hooknum, iph->ihl * 4, IPPROTO_TCP)) { | 866 | nf_ip_checksum(skb, hooknum, hdrlen, IPPROTO_TCP)) { |
867 | if (LOG_INVALID(IPPROTO_TCP)) | 867 | if (LOG_INVALID(IPPROTO_TCP)) |
868 | nf_log_packet(PF_INET, 0, skb, NULL, NULL, NULL, | 868 | nf_log_packet(PF_INET, 0, skb, NULL, NULL, NULL, |
869 | "ip_ct_tcp: bad TCP checksum "); | 869 | "ip_ct_tcp: bad TCP checksum "); |
@@ -889,7 +889,7 @@ static int tcp_packet(struct ip_conntrack *conntrack, | |||
889 | { | 889 | { |
890 | enum tcp_conntrack new_state, old_state; | 890 | enum tcp_conntrack new_state, old_state; |
891 | enum ip_conntrack_dir dir; | 891 | enum ip_conntrack_dir dir; |
892 | struct iphdr *iph = skb->nh.iph; | 892 | struct iphdr *iph = ip_hdr(skb); |
893 | struct tcphdr *th, _tcph; | 893 | struct tcphdr *th, _tcph; |
894 | unsigned long timeout; | 894 | unsigned long timeout; |
895 | unsigned int index; | 895 | unsigned int index; |
@@ -1062,7 +1062,7 @@ static int tcp_new(struct ip_conntrack *conntrack, | |||
1062 | const struct sk_buff *skb) | 1062 | const struct sk_buff *skb) |
1063 | { | 1063 | { |
1064 | enum tcp_conntrack new_state; | 1064 | enum tcp_conntrack new_state; |
1065 | struct iphdr *iph = skb->nh.iph; | 1065 | struct iphdr *iph = ip_hdr(skb); |
1066 | struct tcphdr *th, _tcph; | 1066 | struct tcphdr *th, _tcph; |
1067 | #ifdef DEBUGP_VARS | 1067 | #ifdef DEBUGP_VARS |
1068 | struct ip_ct_tcp_state *sender = &conntrack->proto.tcp.seen[0]; | 1068 | struct ip_ct_tcp_state *sender = &conntrack->proto.tcp.seen[0]; |
diff --git a/net/ipv4/netfilter/ip_conntrack_proto_udp.c b/net/ipv4/netfilter/ip_conntrack_proto_udp.c index 14c30c646c7f..3b47987bf1bb 100644 --- a/net/ipv4/netfilter/ip_conntrack_proto_udp.c +++ b/net/ipv4/netfilter/ip_conntrack_proto_udp.c | |||
@@ -89,12 +89,12 @@ static int udp_new(struct ip_conntrack *conntrack, const struct sk_buff *skb) | |||
89 | static int udp_error(struct sk_buff *skb, enum ip_conntrack_info *ctinfo, | 89 | static int udp_error(struct sk_buff *skb, enum ip_conntrack_info *ctinfo, |
90 | unsigned int hooknum) | 90 | unsigned int hooknum) |
91 | { | 91 | { |
92 | struct iphdr *iph = skb->nh.iph; | 92 | const unsigned int hdrlen = ip_hdrlen(skb); |
93 | unsigned int udplen = skb->len - iph->ihl * 4; | 93 | unsigned int udplen = skb->len - hdrlen; |
94 | struct udphdr _hdr, *hdr; | 94 | struct udphdr _hdr, *hdr; |
95 | 95 | ||
96 | /* Header is too small? */ | 96 | /* Header is too small? */ |
97 | hdr = skb_header_pointer(skb, iph->ihl*4, sizeof(_hdr), &_hdr); | 97 | hdr = skb_header_pointer(skb, hdrlen, sizeof(_hdr), &_hdr); |
98 | if (hdr == NULL) { | 98 | if (hdr == NULL) { |
99 | if (LOG_INVALID(IPPROTO_UDP)) | 99 | if (LOG_INVALID(IPPROTO_UDP)) |
100 | nf_log_packet(PF_INET, 0, skb, NULL, NULL, NULL, | 100 | nf_log_packet(PF_INET, 0, skb, NULL, NULL, NULL, |
@@ -119,7 +119,7 @@ static int udp_error(struct sk_buff *skb, enum ip_conntrack_info *ctinfo, | |||
119 | * because the checksum is assumed to be correct. | 119 | * because the checksum is assumed to be correct. |
120 | * FIXME: Source route IP option packets --RR */ | 120 | * FIXME: Source route IP option packets --RR */ |
121 | if (ip_conntrack_checksum && hooknum == NF_IP_PRE_ROUTING && | 121 | if (ip_conntrack_checksum && hooknum == NF_IP_PRE_ROUTING && |
122 | nf_ip_checksum(skb, hooknum, iph->ihl * 4, IPPROTO_UDP)) { | 122 | nf_ip_checksum(skb, hooknum, hdrlen, IPPROTO_UDP)) { |
123 | if (LOG_INVALID(IPPROTO_UDP)) | 123 | if (LOG_INVALID(IPPROTO_UDP)) |
124 | nf_log_packet(PF_INET, 0, skb, NULL, NULL, NULL, | 124 | nf_log_packet(PF_INET, 0, skb, NULL, NULL, NULL, |
125 | "ip_ct_udp: bad UDP checksum "); | 125 | "ip_ct_udp: bad UDP checksum "); |
diff --git a/net/ipv4/netfilter/ip_conntrack_standalone.c b/net/ipv4/netfilter/ip_conntrack_standalone.c index 92609a4dcd74..c32200153d62 100644 --- a/net/ipv4/netfilter/ip_conntrack_standalone.c +++ b/net/ipv4/netfilter/ip_conntrack_standalone.c | |||
@@ -439,7 +439,7 @@ static unsigned int ip_conntrack_defrag(unsigned int hooknum, | |||
439 | #endif | 439 | #endif |
440 | 440 | ||
441 | /* Gather fragments. */ | 441 | /* Gather fragments. */ |
442 | if ((*pskb)->nh.iph->frag_off & htons(IP_MF|IP_OFFSET)) { | 442 | if (ip_hdr(*pskb)->frag_off & htons(IP_MF | IP_OFFSET)) { |
443 | *pskb = ip_ct_gather_frags(*pskb, | 443 | *pskb = ip_ct_gather_frags(*pskb, |
444 | hooknum == NF_IP_PRE_ROUTING ? | 444 | hooknum == NF_IP_PRE_ROUTING ? |
445 | IP_DEFRAG_CONNTRACK_IN : | 445 | IP_DEFRAG_CONNTRACK_IN : |
diff --git a/net/ipv4/netfilter/ip_nat_helper.c b/net/ipv4/netfilter/ip_nat_helper.c index 25624e558562..4cddc2951744 100644 --- a/net/ipv4/netfilter/ip_nat_helper.c +++ b/net/ipv4/netfilter/ip_nat_helper.c | |||
@@ -94,7 +94,7 @@ static void mangle_contents(struct sk_buff *skb, | |||
94 | unsigned char *data; | 94 | unsigned char *data; |
95 | 95 | ||
96 | BUG_ON(skb_is_nonlinear(skb)); | 96 | BUG_ON(skb_is_nonlinear(skb)); |
97 | data = (unsigned char *)skb->nh.iph + dataoff; | 97 | data = skb_network_header(skb) + dataoff; |
98 | 98 | ||
99 | /* move post-replacement */ | 99 | /* move post-replacement */ |
100 | memmove(data + match_offset + rep_len, | 100 | memmove(data + match_offset + rep_len, |
@@ -118,8 +118,8 @@ static void mangle_contents(struct sk_buff *skb, | |||
118 | } | 118 | } |
119 | 119 | ||
120 | /* fix IP hdr checksum information */ | 120 | /* fix IP hdr checksum information */ |
121 | skb->nh.iph->tot_len = htons(skb->len); | 121 | ip_hdr(skb)->tot_len = htons(skb->len); |
122 | ip_send_check(skb->nh.iph); | 122 | ip_send_check(ip_hdr(skb)); |
123 | } | 123 | } |
124 | 124 | ||
125 | /* Unusual, but possible case. */ | 125 | /* Unusual, but possible case. */ |
@@ -173,7 +173,7 @@ ip_nat_mangle_tcp_packet(struct sk_buff **pskb, | |||
173 | 173 | ||
174 | SKB_LINEAR_ASSERT(*pskb); | 174 | SKB_LINEAR_ASSERT(*pskb); |
175 | 175 | ||
176 | iph = (*pskb)->nh.iph; | 176 | iph = ip_hdr(*pskb); |
177 | tcph = (void *)iph + iph->ihl*4; | 177 | tcph = (void *)iph + iph->ihl*4; |
178 | 178 | ||
179 | oldlen = (*pskb)->len - iph->ihl*4; | 179 | oldlen = (*pskb)->len - iph->ihl*4; |
@@ -227,7 +227,7 @@ ip_nat_mangle_udp_packet(struct sk_buff **pskb, | |||
227 | int datalen, oldlen; | 227 | int datalen, oldlen; |
228 | 228 | ||
229 | /* UDP helpers might accidentally mangle the wrong packet */ | 229 | /* UDP helpers might accidentally mangle the wrong packet */ |
230 | iph = (*pskb)->nh.iph; | 230 | iph = ip_hdr(*pskb); |
231 | if ((*pskb)->len < iph->ihl*4 + sizeof(*udph) + | 231 | if ((*pskb)->len < iph->ihl*4 + sizeof(*udph) + |
232 | match_offset + match_len) | 232 | match_offset + match_len) |
233 | return 0; | 233 | return 0; |
@@ -240,7 +240,7 @@ ip_nat_mangle_udp_packet(struct sk_buff **pskb, | |||
240 | && !enlarge_skb(pskb, rep_len - match_len)) | 240 | && !enlarge_skb(pskb, rep_len - match_len)) |
241 | return 0; | 241 | return 0; |
242 | 242 | ||
243 | iph = (*pskb)->nh.iph; | 243 | iph = ip_hdr(*pskb); |
244 | udph = (void *)iph + iph->ihl*4; | 244 | udph = (void *)iph + iph->ihl*4; |
245 | 245 | ||
246 | oldlen = (*pskb)->len - iph->ihl*4; | 246 | oldlen = (*pskb)->len - iph->ihl*4; |
diff --git a/net/ipv4/netfilter/ip_nat_helper_h323.c b/net/ipv4/netfilter/ip_nat_helper_h323.c index 8b1e3388bd08..0d9444f9236b 100644 --- a/net/ipv4/netfilter/ip_nat_helper_h323.c +++ b/net/ipv4/netfilter/ip_nat_helper_h323.c | |||
@@ -46,7 +46,7 @@ static int set_addr(struct sk_buff **pskb, | |||
46 | buf.port = htons(port); | 46 | buf.port = htons(port); |
47 | addroff += dataoff; | 47 | addroff += dataoff; |
48 | 48 | ||
49 | if ((*pskb)->nh.iph->protocol == IPPROTO_TCP) { | 49 | if (ip_hdr(*pskb)->protocol == IPPROTO_TCP) { |
50 | if (!ip_nat_mangle_tcp_packet(pskb, ct, ctinfo, | 50 | if (!ip_nat_mangle_tcp_packet(pskb, ct, ctinfo, |
51 | addroff, sizeof(buf), | 51 | addroff, sizeof(buf), |
52 | (char *) &buf, sizeof(buf))) { | 52 | (char *) &buf, sizeof(buf))) { |
diff --git a/net/ipv4/netfilter/ip_nat_rule.c b/net/ipv4/netfilter/ip_nat_rule.c index 080eb1d92200..25415a91e023 100644 --- a/net/ipv4/netfilter/ip_nat_rule.c +++ b/net/ipv4/netfilter/ip_nat_rule.c | |||
@@ -158,7 +158,7 @@ static unsigned int ipt_dnat_target(struct sk_buff **pskb, | |||
158 | 158 | ||
159 | if (hooknum == NF_IP_LOCAL_OUT | 159 | if (hooknum == NF_IP_LOCAL_OUT |
160 | && mr->range[0].flags & IP_NAT_RANGE_MAP_IPS) | 160 | && mr->range[0].flags & IP_NAT_RANGE_MAP_IPS) |
161 | warn_if_extra_mangle((*pskb)->nh.iph->daddr, | 161 | warn_if_extra_mangle(ip_hdr(*pskb)->daddr, |
162 | mr->range[0].min_ip); | 162 | mr->range[0].min_ip); |
163 | 163 | ||
164 | return ip_nat_setup_info(ct, &mr->range[0], hooknum); | 164 | return ip_nat_setup_info(ct, &mr->range[0], hooknum); |
diff --git a/net/ipv4/netfilter/ip_nat_snmp_basic.c b/net/ipv4/netfilter/ip_nat_snmp_basic.c index e41d0efae515..025e04587789 100644 --- a/net/ipv4/netfilter/ip_nat_snmp_basic.c +++ b/net/ipv4/netfilter/ip_nat_snmp_basic.c | |||
@@ -1193,7 +1193,7 @@ static int snmp_translate(struct ip_conntrack *ct, | |||
1193 | enum ip_conntrack_info ctinfo, | 1193 | enum ip_conntrack_info ctinfo, |
1194 | struct sk_buff **pskb) | 1194 | struct sk_buff **pskb) |
1195 | { | 1195 | { |
1196 | struct iphdr *iph = (*pskb)->nh.iph; | 1196 | struct iphdr *iph = ip_hdr(*pskb); |
1197 | struct udphdr *udph = (struct udphdr *)((__be32 *)iph + iph->ihl); | 1197 | struct udphdr *udph = (struct udphdr *)((__be32 *)iph + iph->ihl); |
1198 | u_int16_t udplen = ntohs(udph->len); | 1198 | u_int16_t udplen = ntohs(udph->len); |
1199 | u_int16_t paylen = udplen - sizeof(struct udphdr); | 1199 | u_int16_t paylen = udplen - sizeof(struct udphdr); |
@@ -1234,7 +1234,7 @@ static int help(struct sk_buff **pskb, | |||
1234 | { | 1234 | { |
1235 | int dir = CTINFO2DIR(ctinfo); | 1235 | int dir = CTINFO2DIR(ctinfo); |
1236 | unsigned int ret; | 1236 | unsigned int ret; |
1237 | struct iphdr *iph = (*pskb)->nh.iph; | 1237 | struct iphdr *iph = ip_hdr(*pskb); |
1238 | struct udphdr *udph = (struct udphdr *)((u_int32_t *)iph + iph->ihl); | 1238 | struct udphdr *udph = (struct udphdr *)((u_int32_t *)iph + iph->ihl); |
1239 | 1239 | ||
1240 | /* SNMP replies and originating SNMP traps get mangled */ | 1240 | /* SNMP replies and originating SNMP traps get mangled */ |
diff --git a/net/ipv4/netfilter/ip_nat_standalone.c b/net/ipv4/netfilter/ip_nat_standalone.c index dbaaf78ff9a3..32f7bf661fc8 100644 --- a/net/ipv4/netfilter/ip_nat_standalone.c +++ b/net/ipv4/netfilter/ip_nat_standalone.c | |||
@@ -97,7 +97,7 @@ ip_nat_fn(unsigned int hooknum, | |||
97 | 97 | ||
98 | /* We never see fragments: conntrack defrags on pre-routing | 98 | /* We never see fragments: conntrack defrags on pre-routing |
99 | and local-out, and ip_nat_out protects post-routing. */ | 99 | and local-out, and ip_nat_out protects post-routing. */ |
100 | IP_NF_ASSERT(!((*pskb)->nh.iph->frag_off | 100 | IP_NF_ASSERT(!(ip_hdr(*pskb)->frag_off |
101 | & htons(IP_MF|IP_OFFSET))); | 101 | & htons(IP_MF|IP_OFFSET))); |
102 | 102 | ||
103 | ct = ip_conntrack_get(*pskb, &ctinfo); | 103 | ct = ip_conntrack_get(*pskb, &ctinfo); |
@@ -109,7 +109,7 @@ ip_nat_fn(unsigned int hooknum, | |||
109 | /* Exception: ICMP redirect to new connection (not in | 109 | /* Exception: ICMP redirect to new connection (not in |
110 | hash table yet). We must not let this through, in | 110 | hash table yet). We must not let this through, in |
111 | case we're doing NAT to the same network. */ | 111 | case we're doing NAT to the same network. */ |
112 | if ((*pskb)->nh.iph->protocol == IPPROTO_ICMP) { | 112 | if (ip_hdr(*pskb)->protocol == IPPROTO_ICMP) { |
113 | struct icmphdr _hdr, *hp; | 113 | struct icmphdr _hdr, *hp; |
114 | 114 | ||
115 | hp = skb_header_pointer(*pskb, ip_hdrlen(*pskb), | 115 | hp = skb_header_pointer(*pskb, ip_hdrlen(*pskb), |
@@ -128,7 +128,7 @@ ip_nat_fn(unsigned int hooknum, | |||
128 | switch (ctinfo) { | 128 | switch (ctinfo) { |
129 | case IP_CT_RELATED: | 129 | case IP_CT_RELATED: |
130 | case IP_CT_RELATED+IP_CT_IS_REPLY: | 130 | case IP_CT_RELATED+IP_CT_IS_REPLY: |
131 | if ((*pskb)->nh.iph->protocol == IPPROTO_ICMP) { | 131 | if (ip_hdr(*pskb)->protocol == IPPROTO_ICMP) { |
132 | if (!ip_nat_icmp_reply_translation(ct, ctinfo, | 132 | if (!ip_nat_icmp_reply_translation(ct, ctinfo, |
133 | hooknum, pskb)) | 133 | hooknum, pskb)) |
134 | return NF_DROP; | 134 | return NF_DROP; |
@@ -184,11 +184,11 @@ ip_nat_in(unsigned int hooknum, | |||
184 | int (*okfn)(struct sk_buff *)) | 184 | int (*okfn)(struct sk_buff *)) |
185 | { | 185 | { |
186 | unsigned int ret; | 186 | unsigned int ret; |
187 | __be32 daddr = (*pskb)->nh.iph->daddr; | 187 | __be32 daddr = ip_hdr(*pskb)->daddr; |
188 | 188 | ||
189 | ret = ip_nat_fn(hooknum, pskb, in, out, okfn); | 189 | ret = ip_nat_fn(hooknum, pskb, in, out, okfn); |
190 | if (ret != NF_DROP && ret != NF_STOLEN | 190 | if (ret != NF_DROP && ret != NF_STOLEN |
191 | && daddr != (*pskb)->nh.iph->daddr) { | 191 | && daddr != ip_hdr(*pskb)->daddr) { |
192 | dst_release((*pskb)->dst); | 192 | dst_release((*pskb)->dst); |
193 | (*pskb)->dst = NULL; | 193 | (*pskb)->dst = NULL; |
194 | } | 194 | } |
diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c index f66966650212..39ab8ae282e2 100644 --- a/net/ipv4/netfilter/ip_tables.c +++ b/net/ipv4/netfilter/ip_tables.c | |||
@@ -231,7 +231,7 @@ ipt_do_table(struct sk_buff **pskb, | |||
231 | struct xt_table_info *private; | 231 | struct xt_table_info *private; |
232 | 232 | ||
233 | /* Initialization */ | 233 | /* Initialization */ |
234 | ip = (*pskb)->nh.iph; | 234 | ip = ip_hdr(*pskb); |
235 | datalen = (*pskb)->len - ip->ihl * 4; | 235 | datalen = (*pskb)->len - ip->ihl * 4; |
236 | indev = in ? in->name : nulldevname; | 236 | indev = in ? in->name : nulldevname; |
237 | outdev = out ? out->name : nulldevname; | 237 | outdev = out ? out->name : nulldevname; |
@@ -320,7 +320,7 @@ ipt_do_table(struct sk_buff **pskb, | |||
320 | = 0x57acc001; | 320 | = 0x57acc001; |
321 | #endif | 321 | #endif |
322 | /* Target might have changed stuff. */ | 322 | /* Target might have changed stuff. */ |
323 | ip = (*pskb)->nh.iph; | 323 | ip = ip_hdr(*pskb); |
324 | datalen = (*pskb)->len - ip->ihl * 4; | 324 | datalen = (*pskb)->len - ip->ihl * 4; |
325 | 325 | ||
326 | if (verdict == IPT_CONTINUE) | 326 | if (verdict == IPT_CONTINUE) |
diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c index 42b08029e867..af5b82b8ceb7 100644 --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c | |||
@@ -240,7 +240,7 @@ clusterip_del_node(struct clusterip_config *c, u_int16_t nodenum) | |||
240 | static inline u_int32_t | 240 | static inline u_int32_t |
241 | clusterip_hashfn(struct sk_buff *skb, struct clusterip_config *config) | 241 | clusterip_hashfn(struct sk_buff *skb, struct clusterip_config *config) |
242 | { | 242 | { |
243 | struct iphdr *iph = skb->nh.iph; | 243 | struct iphdr *iph = ip_hdr(skb); |
244 | unsigned long hashval; | 244 | unsigned long hashval; |
245 | u_int16_t sport, dport; | 245 | u_int16_t sport, dport; |
246 | u_int16_t *ports; | 246 | u_int16_t *ports; |
@@ -328,7 +328,7 @@ target(struct sk_buff **pskb, | |||
328 | 328 | ||
329 | /* special case: ICMP error handling. conntrack distinguishes between | 329 | /* special case: ICMP error handling. conntrack distinguishes between |
330 | * error messages (RELATED) and information requests (see below) */ | 330 | * error messages (RELATED) and information requests (see below) */ |
331 | if ((*pskb)->nh.iph->protocol == IPPROTO_ICMP | 331 | if (ip_hdr(*pskb)->protocol == IPPROTO_ICMP |
332 | && (ctinfo == IP_CT_RELATED | 332 | && (ctinfo == IP_CT_RELATED |
333 | || ctinfo == IP_CT_RELATED+IP_CT_IS_REPLY)) | 333 | || ctinfo == IP_CT_RELATED+IP_CT_IS_REPLY)) |
334 | return XT_CONTINUE; | 334 | return XT_CONTINUE; |
diff --git a/net/ipv4/netfilter/ipt_ECN.c b/net/ipv4/netfilter/ipt_ECN.c index 44daf9e1da35..97c0e53c8b22 100644 --- a/net/ipv4/netfilter/ipt_ECN.c +++ b/net/ipv4/netfilter/ipt_ECN.c | |||
@@ -30,13 +30,13 @@ MODULE_DESCRIPTION("iptables ECN modification module"); | |||
30 | static inline int | 30 | static inline int |
31 | set_ect_ip(struct sk_buff **pskb, const struct ipt_ECN_info *einfo) | 31 | set_ect_ip(struct sk_buff **pskb, const struct ipt_ECN_info *einfo) |
32 | { | 32 | { |
33 | struct iphdr *iph = (*pskb)->nh.iph; | 33 | struct iphdr *iph = ip_hdr(*pskb); |
34 | 34 | ||
35 | if ((iph->tos & IPT_ECN_IP_MASK) != (einfo->ip_ect & IPT_ECN_IP_MASK)) { | 35 | if ((iph->tos & IPT_ECN_IP_MASK) != (einfo->ip_ect & IPT_ECN_IP_MASK)) { |
36 | __u8 oldtos; | 36 | __u8 oldtos; |
37 | if (!skb_make_writable(pskb, sizeof(struct iphdr))) | 37 | if (!skb_make_writable(pskb, sizeof(struct iphdr))) |
38 | return 0; | 38 | return 0; |
39 | iph = (*pskb)->nh.iph; | 39 | iph = ip_hdr(*pskb); |
40 | oldtos = iph->tos; | 40 | oldtos = iph->tos; |
41 | iph->tos &= ~IPT_ECN_IP_MASK; | 41 | iph->tos &= ~IPT_ECN_IP_MASK; |
42 | iph->tos |= (einfo->ip_ect & IPT_ECN_IP_MASK); | 42 | iph->tos |= (einfo->ip_ect & IPT_ECN_IP_MASK); |
@@ -66,7 +66,7 @@ set_ect_tcp(struct sk_buff **pskb, const struct ipt_ECN_info *einfo) | |||
66 | 66 | ||
67 | if (!skb_make_writable(pskb, ip_hdrlen(*pskb) + sizeof(*tcph))) | 67 | if (!skb_make_writable(pskb, ip_hdrlen(*pskb) + sizeof(*tcph))) |
68 | return 0; | 68 | return 0; |
69 | tcph = (void *)(*pskb)->nh.iph + ip_hdrlen(*pskb); | 69 | tcph = (void *)ip_hdr(*pskb) + ip_hdrlen(*pskb); |
70 | 70 | ||
71 | oldval = ((__be16 *)tcph)[6]; | 71 | oldval = ((__be16 *)tcph)[6]; |
72 | if (einfo->operation & IPT_ECN_OP_SET_ECE) | 72 | if (einfo->operation & IPT_ECN_OP_SET_ECE) |
@@ -94,7 +94,7 @@ target(struct sk_buff **pskb, | |||
94 | return NF_DROP; | 94 | return NF_DROP; |
95 | 95 | ||
96 | if (einfo->operation & (IPT_ECN_OP_SET_ECE | IPT_ECN_OP_SET_CWR) | 96 | if (einfo->operation & (IPT_ECN_OP_SET_ECE | IPT_ECN_OP_SET_CWR) |
97 | && (*pskb)->nh.iph->protocol == IPPROTO_TCP) | 97 | && ip_hdr(*pskb)->protocol == IPPROTO_TCP) |
98 | if (!set_ect_tcp(pskb, einfo)) | 98 | if (!set_ect_tcp(pskb, einfo)) |
99 | return NF_DROP; | 99 | return NF_DROP; |
100 | 100 | ||
diff --git a/net/ipv4/netfilter/ipt_NETMAP.c b/net/ipv4/netfilter/ipt_NETMAP.c index fd7aaa347cd8..d03f165722da 100644 --- a/net/ipv4/netfilter/ipt_NETMAP.c +++ b/net/ipv4/netfilter/ipt_NETMAP.c | |||
@@ -75,9 +75,9 @@ target(struct sk_buff **pskb, | |||
75 | netmask = ~(mr->range[0].min_ip ^ mr->range[0].max_ip); | 75 | netmask = ~(mr->range[0].min_ip ^ mr->range[0].max_ip); |
76 | 76 | ||
77 | if (hooknum == NF_IP_PRE_ROUTING || hooknum == NF_IP_LOCAL_OUT) | 77 | if (hooknum == NF_IP_PRE_ROUTING || hooknum == NF_IP_LOCAL_OUT) |
78 | new_ip = (*pskb)->nh.iph->daddr & ~netmask; | 78 | new_ip = ip_hdr(*pskb)->daddr & ~netmask; |
79 | else | 79 | else |
80 | new_ip = (*pskb)->nh.iph->saddr & ~netmask; | 80 | new_ip = ip_hdr(*pskb)->saddr & ~netmask; |
81 | new_ip |= mr->range[0].min_ip & netmask; | 81 | new_ip |= mr->range[0].min_ip & netmask; |
82 | 82 | ||
83 | newrange = ((struct ip_nat_range) | 83 | newrange = ((struct ip_nat_range) |
diff --git a/net/ipv4/netfilter/ipt_REJECT.c b/net/ipv4/netfilter/ipt_REJECT.c index 01c04f0e5c91..1399e7c183ba 100644 --- a/net/ipv4/netfilter/ipt_REJECT.c +++ b/net/ipv4/netfilter/ipt_REJECT.c | |||
@@ -43,6 +43,7 @@ MODULE_DESCRIPTION("iptables REJECT target module"); | |||
43 | static void send_reset(struct sk_buff *oldskb, int hook) | 43 | static void send_reset(struct sk_buff *oldskb, int hook) |
44 | { | 44 | { |
45 | struct sk_buff *nskb; | 45 | struct sk_buff *nskb; |
46 | struct iphdr *niph; | ||
46 | struct tcphdr _otcph, *oth, *tcph; | 47 | struct tcphdr _otcph, *oth, *tcph; |
47 | __be16 tmp_port; | 48 | __be16 tmp_port; |
48 | __be32 tmp_addr; | 49 | __be32 tmp_addr; |
@@ -50,7 +51,7 @@ static void send_reset(struct sk_buff *oldskb, int hook) | |||
50 | unsigned int addr_type; | 51 | unsigned int addr_type; |
51 | 52 | ||
52 | /* IP header checks: fragment. */ | 53 | /* IP header checks: fragment. */ |
53 | if (oldskb->nh.iph->frag_off & htons(IP_OFFSET)) | 54 | if (ip_hdr(oldskb)->frag_off & htons(IP_OFFSET)) |
54 | return; | 55 | return; |
55 | 56 | ||
56 | oth = skb_header_pointer(oldskb, ip_hdrlen(oldskb), | 57 | oth = skb_header_pointer(oldskb, ip_hdrlen(oldskb), |
@@ -86,9 +87,10 @@ static void send_reset(struct sk_buff *oldskb, int hook) | |||
86 | tcph = (struct tcphdr *)(skb_network_header(nskb) + ip_hdrlen(nskb)); | 87 | tcph = (struct tcphdr *)(skb_network_header(nskb) + ip_hdrlen(nskb)); |
87 | 88 | ||
88 | /* Swap source and dest */ | 89 | /* Swap source and dest */ |
89 | tmp_addr = nskb->nh.iph->saddr; | 90 | niph = ip_hdr(nskb); |
90 | nskb->nh.iph->saddr = nskb->nh.iph->daddr; | 91 | tmp_addr = niph->saddr; |
91 | nskb->nh.iph->daddr = tmp_addr; | 92 | niph->saddr = niph->daddr; |
93 | niph->daddr = tmp_addr; | ||
92 | tmp_port = tcph->source; | 94 | tmp_port = tcph->source; |
93 | tcph->source = tcph->dest; | 95 | tcph->source = tcph->dest; |
94 | tcph->dest = tmp_port; | 96 | tcph->dest = tmp_port; |
@@ -96,7 +98,7 @@ static void send_reset(struct sk_buff *oldskb, int hook) | |||
96 | /* Truncate to length (no data) */ | 98 | /* Truncate to length (no data) */ |
97 | tcph->doff = sizeof(struct tcphdr)/4; | 99 | tcph->doff = sizeof(struct tcphdr)/4; |
98 | skb_trim(nskb, ip_hdrlen(nskb) + sizeof(struct tcphdr)); | 100 | skb_trim(nskb, ip_hdrlen(nskb) + sizeof(struct tcphdr)); |
99 | nskb->nh.iph->tot_len = htons(nskb->len); | 101 | niph->tot_len = htons(nskb->len); |
100 | 102 | ||
101 | if (tcph->ack) { | 103 | if (tcph->ack) { |
102 | needs_ack = 0; | 104 | needs_ack = 0; |
@@ -121,14 +123,13 @@ static void send_reset(struct sk_buff *oldskb, int hook) | |||
121 | /* Adjust TCP checksum */ | 123 | /* Adjust TCP checksum */ |
122 | tcph->check = 0; | 124 | tcph->check = 0; |
123 | tcph->check = tcp_v4_check(sizeof(struct tcphdr), | 125 | tcph->check = tcp_v4_check(sizeof(struct tcphdr), |
124 | nskb->nh.iph->saddr, | 126 | niph->saddr, niph->daddr, |
125 | nskb->nh.iph->daddr, | ||
126 | csum_partial((char *)tcph, | 127 | csum_partial((char *)tcph, |
127 | sizeof(struct tcphdr), 0)); | 128 | sizeof(struct tcphdr), 0)); |
128 | 129 | ||
129 | /* Set DF, id = 0 */ | 130 | /* Set DF, id = 0 */ |
130 | nskb->nh.iph->frag_off = htons(IP_DF); | 131 | niph->frag_off = htons(IP_DF); |
131 | nskb->nh.iph->id = 0; | 132 | niph->id = 0; |
132 | 133 | ||
133 | addr_type = RTN_UNSPEC; | 134 | addr_type = RTN_UNSPEC; |
134 | if (hook != NF_IP_FORWARD | 135 | if (hook != NF_IP_FORWARD |
@@ -144,12 +145,11 @@ static void send_reset(struct sk_buff *oldskb, int hook) | |||
144 | nskb->ip_summed = CHECKSUM_NONE; | 145 | nskb->ip_summed = CHECKSUM_NONE; |
145 | 146 | ||
146 | /* Adjust IP TTL */ | 147 | /* Adjust IP TTL */ |
147 | nskb->nh.iph->ttl = dst_metric(nskb->dst, RTAX_HOPLIMIT); | 148 | niph->ttl = dst_metric(nskb->dst, RTAX_HOPLIMIT); |
148 | 149 | ||
149 | /* Adjust IP checksum */ | 150 | /* Adjust IP checksum */ |
150 | nskb->nh.iph->check = 0; | 151 | niph->check = 0; |
151 | nskb->nh.iph->check = ip_fast_csum(skb_network_header(nskb), | 152 | niph->check = ip_fast_csum(skb_network_header(nskb), niph->ihl); |
152 | nskb->nh.iph->ihl); | ||
153 | 153 | ||
154 | /* "Never happens" */ | 154 | /* "Never happens" */ |
155 | if (nskb->len > dst_mtu(nskb->dst)) | 155 | if (nskb->len > dst_mtu(nskb->dst)) |
diff --git a/net/ipv4/netfilter/ipt_TOS.c b/net/ipv4/netfilter/ipt_TOS.c index cedf9f7d9d6e..0ad02f249837 100644 --- a/net/ipv4/netfilter/ipt_TOS.c +++ b/net/ipv4/netfilter/ipt_TOS.c | |||
@@ -29,13 +29,13 @@ target(struct sk_buff **pskb, | |||
29 | const void *targinfo) | 29 | const void *targinfo) |
30 | { | 30 | { |
31 | const struct ipt_tos_target_info *tosinfo = targinfo; | 31 | const struct ipt_tos_target_info *tosinfo = targinfo; |
32 | struct iphdr *iph = (*pskb)->nh.iph; | 32 | struct iphdr *iph = ip_hdr(*pskb); |
33 | 33 | ||
34 | if ((iph->tos & IPTOS_TOS_MASK) != tosinfo->tos) { | 34 | if ((iph->tos & IPTOS_TOS_MASK) != tosinfo->tos) { |
35 | __u8 oldtos; | 35 | __u8 oldtos; |
36 | if (!skb_make_writable(pskb, sizeof(struct iphdr))) | 36 | if (!skb_make_writable(pskb, sizeof(struct iphdr))) |
37 | return NF_DROP; | 37 | return NF_DROP; |
38 | iph = (*pskb)->nh.iph; | 38 | iph = ip_hdr(*pskb); |
39 | oldtos = iph->tos; | 39 | oldtos = iph->tos; |
40 | iph->tos = (iph->tos & IPTOS_PREC_MASK) | tosinfo->tos; | 40 | iph->tos = (iph->tos & IPTOS_PREC_MASK) | tosinfo->tos; |
41 | nf_csum_replace2(&iph->check, htons(oldtos), htons(iph->tos)); | 41 | nf_csum_replace2(&iph->check, htons(oldtos), htons(iph->tos)); |
diff --git a/net/ipv4/netfilter/ipt_TTL.c b/net/ipv4/netfilter/ipt_TTL.c index 64be31c22ba9..a991ec7bd4e7 100644 --- a/net/ipv4/netfilter/ipt_TTL.c +++ b/net/ipv4/netfilter/ipt_TTL.c | |||
@@ -32,7 +32,7 @@ ipt_ttl_target(struct sk_buff **pskb, | |||
32 | if (!skb_make_writable(pskb, (*pskb)->len)) | 32 | if (!skb_make_writable(pskb, (*pskb)->len)) |
33 | return NF_DROP; | 33 | return NF_DROP; |
34 | 34 | ||
35 | iph = (*pskb)->nh.iph; | 35 | iph = ip_hdr(*pskb); |
36 | 36 | ||
37 | switch (info->mode) { | 37 | switch (info->mode) { |
38 | case IPT_TTL_SET: | 38 | case IPT_TTL_SET: |
diff --git a/net/ipv4/netfilter/ipt_addrtype.c b/net/ipv4/netfilter/ipt_addrtype.c index cfa0472617f6..a652a1451552 100644 --- a/net/ipv4/netfilter/ipt_addrtype.c +++ b/net/ipv4/netfilter/ipt_addrtype.c | |||
@@ -33,7 +33,7 @@ static int match(const struct sk_buff *skb, | |||
33 | int offset, unsigned int protoff, int *hotdrop) | 33 | int offset, unsigned int protoff, int *hotdrop) |
34 | { | 34 | { |
35 | const struct ipt_addrtype_info *info = matchinfo; | 35 | const struct ipt_addrtype_info *info = matchinfo; |
36 | const struct iphdr *iph = skb->nh.iph; | 36 | const struct iphdr *iph = ip_hdr(skb); |
37 | int ret = 1; | 37 | int ret = 1; |
38 | 38 | ||
39 | if (info->source) | 39 | if (info->source) |
diff --git a/net/ipv4/netfilter/ipt_ecn.c b/net/ipv4/netfilter/ipt_ecn.c index b8ade3cc7757..3b4ca0c5c121 100644 --- a/net/ipv4/netfilter/ipt_ecn.c +++ b/net/ipv4/netfilter/ipt_ecn.c | |||
@@ -27,7 +27,7 @@ MODULE_LICENSE("GPL"); | |||
27 | static inline int match_ip(const struct sk_buff *skb, | 27 | static inline int match_ip(const struct sk_buff *skb, |
28 | const struct ipt_ecn_info *einfo) | 28 | const struct ipt_ecn_info *einfo) |
29 | { | 29 | { |
30 | return ((skb->nh.iph->tos&IPT_ECN_IP_MASK) == einfo->ip_ect); | 30 | return (ip_hdr(skb)->tos & IPT_ECN_IP_MASK) == einfo->ip_ect; |
31 | } | 31 | } |
32 | 32 | ||
33 | static inline int match_tcp(const struct sk_buff *skb, | 33 | static inline int match_tcp(const struct sk_buff *skb, |
@@ -80,7 +80,7 @@ static int match(const struct sk_buff *skb, | |||
80 | return 0; | 80 | return 0; |
81 | 81 | ||
82 | if (info->operation & (IPT_ECN_OP_MATCH_ECE|IPT_ECN_OP_MATCH_CWR)) { | 82 | if (info->operation & (IPT_ECN_OP_MATCH_ECE|IPT_ECN_OP_MATCH_CWR)) { |
83 | if (skb->nh.iph->protocol != IPPROTO_TCP) | 83 | if (ip_hdr(skb)->protocol != IPPROTO_TCP) |
84 | return 0; | 84 | return 0; |
85 | if (!match_tcp(skb, info, hotdrop)) | 85 | if (!match_tcp(skb, info, hotdrop)) |
86 | return 0; | 86 | return 0; |
diff --git a/net/ipv4/netfilter/ipt_iprange.c b/net/ipv4/netfilter/ipt_iprange.c index bc5d5e6091e4..33af9e940887 100644 --- a/net/ipv4/netfilter/ipt_iprange.c +++ b/net/ipv4/netfilter/ipt_iprange.c | |||
@@ -32,7 +32,7 @@ match(const struct sk_buff *skb, | |||
32 | int offset, unsigned int protoff, int *hotdrop) | 32 | int offset, unsigned int protoff, int *hotdrop) |
33 | { | 33 | { |
34 | const struct ipt_iprange_info *info = matchinfo; | 34 | const struct ipt_iprange_info *info = matchinfo; |
35 | const struct iphdr *iph = skb->nh.iph; | 35 | const struct iphdr *iph = ip_hdr(skb); |
36 | 36 | ||
37 | if (info->flags & IPRANGE_SRC) { | 37 | if (info->flags & IPRANGE_SRC) { |
38 | if (((ntohl(iph->saddr) < ntohl(info->src.min_ip)) | 38 | if (((ntohl(iph->saddr) < ntohl(info->src.min_ip)) |
diff --git a/net/ipv4/netfilter/ipt_recent.c b/net/ipv4/netfilter/ipt_recent.c index aecb9c48e152..15a9e8bbb7cc 100644 --- a/net/ipv4/netfilter/ipt_recent.c +++ b/net/ipv4/netfilter/ipt_recent.c | |||
@@ -183,11 +183,11 @@ ipt_recent_match(const struct sk_buff *skb, | |||
183 | int ret = info->invert; | 183 | int ret = info->invert; |
184 | 184 | ||
185 | if (info->side == IPT_RECENT_DEST) | 185 | if (info->side == IPT_RECENT_DEST) |
186 | addr = skb->nh.iph->daddr; | 186 | addr = ip_hdr(skb)->daddr; |
187 | else | 187 | else |
188 | addr = skb->nh.iph->saddr; | 188 | addr = ip_hdr(skb)->saddr; |
189 | 189 | ||
190 | ttl = skb->nh.iph->ttl; | 190 | ttl = ip_hdr(skb)->ttl; |
191 | /* use TTL as seen before forwarding */ | 191 | /* use TTL as seen before forwarding */ |
192 | if (out && !skb->sk) | 192 | if (out && !skb->sk) |
193 | ttl++; | 193 | ttl++; |
diff --git a/net/ipv4/netfilter/ipt_tos.c b/net/ipv4/netfilter/ipt_tos.c index 5d33b51d49d8..d314844af12b 100644 --- a/net/ipv4/netfilter/ipt_tos.c +++ b/net/ipv4/netfilter/ipt_tos.c | |||
@@ -30,7 +30,7 @@ match(const struct sk_buff *skb, | |||
30 | { | 30 | { |
31 | const struct ipt_tos_info *info = matchinfo; | 31 | const struct ipt_tos_info *info = matchinfo; |
32 | 32 | ||
33 | return (skb->nh.iph->tos == info->tos) ^ info->invert; | 33 | return (ip_hdr(skb)->tos == info->tos) ^ info->invert; |
34 | } | 34 | } |
35 | 35 | ||
36 | static struct xt_match tos_match = { | 36 | static struct xt_match tos_match = { |
diff --git a/net/ipv4/netfilter/ipt_ttl.c b/net/ipv4/netfilter/ipt_ttl.c index 1eca9f400374..9615c04a2fc6 100644 --- a/net/ipv4/netfilter/ipt_ttl.c +++ b/net/ipv4/netfilter/ipt_ttl.c | |||
@@ -26,19 +26,20 @@ static int match(const struct sk_buff *skb, | |||
26 | int offset, unsigned int protoff, int *hotdrop) | 26 | int offset, unsigned int protoff, int *hotdrop) |
27 | { | 27 | { |
28 | const struct ipt_ttl_info *info = matchinfo; | 28 | const struct ipt_ttl_info *info = matchinfo; |
29 | const u8 ttl = ip_hdr(skb)->ttl; | ||
29 | 30 | ||
30 | switch (info->mode) { | 31 | switch (info->mode) { |
31 | case IPT_TTL_EQ: | 32 | case IPT_TTL_EQ: |
32 | return (skb->nh.iph->ttl == info->ttl); | 33 | return (ttl == info->ttl); |
33 | break; | 34 | break; |
34 | case IPT_TTL_NE: | 35 | case IPT_TTL_NE: |
35 | return (!(skb->nh.iph->ttl == info->ttl)); | 36 | return (!(ttl == info->ttl)); |
36 | break; | 37 | break; |
37 | case IPT_TTL_LT: | 38 | case IPT_TTL_LT: |
38 | return (skb->nh.iph->ttl < info->ttl); | 39 | return (ttl < info->ttl); |
39 | break; | 40 | break; |
40 | case IPT_TTL_GT: | 41 | case IPT_TTL_GT: |
41 | return (skb->nh.iph->ttl > info->ttl); | 42 | return (ttl > info->ttl); |
42 | break; | 43 | break; |
43 | default: | 44 | default: |
44 | printk(KERN_WARNING "ipt_ttl: unknown mode %d\n", | 45 | printk(KERN_WARNING "ipt_ttl: unknown mode %d\n", |
diff --git a/net/ipv4/netfilter/iptable_mangle.c b/net/ipv4/netfilter/iptable_mangle.c index 6cc3245f676a..26e60fbe7ee0 100644 --- a/net/ipv4/netfilter/iptable_mangle.c +++ b/net/ipv4/netfilter/iptable_mangle.c | |||
@@ -131,6 +131,7 @@ ipt_local_hook(unsigned int hook, | |||
131 | int (*okfn)(struct sk_buff *)) | 131 | int (*okfn)(struct sk_buff *)) |
132 | { | 132 | { |
133 | unsigned int ret; | 133 | unsigned int ret; |
134 | const struct iphdr *iph; | ||
134 | u_int8_t tos; | 135 | u_int8_t tos; |
135 | __be32 saddr, daddr; | 136 | __be32 saddr, daddr; |
136 | u_int32_t mark; | 137 | u_int32_t mark; |
@@ -145,19 +146,23 @@ ipt_local_hook(unsigned int hook, | |||
145 | 146 | ||
146 | /* Save things which could affect route */ | 147 | /* Save things which could affect route */ |
147 | mark = (*pskb)->mark; | 148 | mark = (*pskb)->mark; |
148 | saddr = (*pskb)->nh.iph->saddr; | 149 | iph = ip_hdr(*pskb); |
149 | daddr = (*pskb)->nh.iph->daddr; | 150 | saddr = iph->saddr; |
150 | tos = (*pskb)->nh.iph->tos; | 151 | daddr = iph->daddr; |
152 | tos = iph->tos; | ||
151 | 153 | ||
152 | ret = ipt_do_table(pskb, hook, in, out, &packet_mangler); | 154 | ret = ipt_do_table(pskb, hook, in, out, &packet_mangler); |
153 | /* Reroute for ANY change. */ | 155 | /* Reroute for ANY change. */ |
154 | if (ret != NF_DROP && ret != NF_STOLEN && ret != NF_QUEUE | 156 | if (ret != NF_DROP && ret != NF_STOLEN && ret != NF_QUEUE) { |
155 | && ((*pskb)->nh.iph->saddr != saddr | 157 | iph = ip_hdr(*pskb); |
156 | || (*pskb)->nh.iph->daddr != daddr | 158 | |
157 | || (*pskb)->mark != mark | 159 | if (iph->saddr != saddr || |
158 | || (*pskb)->nh.iph->tos != tos)) | 160 | iph->daddr != daddr || |
159 | if (ip_route_me_harder(pskb, RTN_UNSPEC)) | 161 | (*pskb)->mark != mark || |
160 | ret = NF_DROP; | 162 | iph->tos != tos) |
163 | if (ip_route_me_harder(pskb, RTN_UNSPEC)) | ||
164 | ret = NF_DROP; | ||
165 | } | ||
161 | 166 | ||
162 | return ret; | 167 | return ret; |
163 | } | 168 | } |
diff --git a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c index fa14eb77f9b6..d52ca0c1ce8d 100644 --- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c +++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c | |||
@@ -87,7 +87,7 @@ nf_ct_ipv4_gather_frags(struct sk_buff *skb, u_int32_t user) | |||
87 | local_bh_enable(); | 87 | local_bh_enable(); |
88 | 88 | ||
89 | if (skb) | 89 | if (skb) |
90 | ip_send_check(skb->nh.iph); | 90 | ip_send_check(ip_hdr(skb)); |
91 | 91 | ||
92 | return skb; | 92 | return skb; |
93 | } | 93 | } |
@@ -97,16 +97,16 @@ ipv4_prepare(struct sk_buff **pskb, unsigned int hooknum, unsigned int *dataoff, | |||
97 | u_int8_t *protonum) | 97 | u_int8_t *protonum) |
98 | { | 98 | { |
99 | /* Never happen */ | 99 | /* Never happen */ |
100 | if ((*pskb)->nh.iph->frag_off & htons(IP_OFFSET)) { | 100 | if (ip_hdr(*pskb)->frag_off & htons(IP_OFFSET)) { |
101 | if (net_ratelimit()) { | 101 | if (net_ratelimit()) { |
102 | printk(KERN_ERR "ipv4_prepare: Frag of proto %u (hook=%u)\n", | 102 | printk(KERN_ERR "ipv4_prepare: Frag of proto %u (hook=%u)\n", |
103 | (*pskb)->nh.iph->protocol, hooknum); | 103 | ip_hdr(*pskb)->protocol, hooknum); |
104 | } | 104 | } |
105 | return -NF_DROP; | 105 | return -NF_DROP; |
106 | } | 106 | } |
107 | 107 | ||
108 | *dataoff = skb_network_offset(*pskb) + ip_hdrlen(*pskb); | 108 | *dataoff = skb_network_offset(*pskb) + ip_hdrlen(*pskb); |
109 | *protonum = (*pskb)->nh.iph->protocol; | 109 | *protonum = ip_hdr(*pskb)->protocol; |
110 | 110 | ||
111 | return NF_ACCEPT; | 111 | return NF_ACCEPT; |
112 | } | 112 | } |
@@ -170,7 +170,7 @@ static unsigned int ipv4_conntrack_defrag(unsigned int hooknum, | |||
170 | #endif | 170 | #endif |
171 | 171 | ||
172 | /* Gather fragments. */ | 172 | /* Gather fragments. */ |
173 | if ((*pskb)->nh.iph->frag_off & htons(IP_MF|IP_OFFSET)) { | 173 | if (ip_hdr(*pskb)->frag_off & htons(IP_MF | IP_OFFSET)) { |
174 | *pskb = nf_ct_ipv4_gather_frags(*pskb, | 174 | *pskb = nf_ct_ipv4_gather_frags(*pskb, |
175 | hooknum == NF_IP_PRE_ROUTING ? | 175 | hooknum == NF_IP_PRE_ROUTING ? |
176 | IP_DEFRAG_CONNTRACK_IN : | 176 | IP_DEFRAG_CONNTRACK_IN : |
diff --git a/net/ipv4/netfilter/nf_nat_h323.c b/net/ipv4/netfilter/nf_nat_h323.c index 2eb3832db3a4..3c58fea0d391 100644 --- a/net/ipv4/netfilter/nf_nat_h323.c +++ b/net/ipv4/netfilter/nf_nat_h323.c | |||
@@ -44,7 +44,7 @@ static int set_addr(struct sk_buff **pskb, | |||
44 | buf.port = port; | 44 | buf.port = port; |
45 | addroff += dataoff; | 45 | addroff += dataoff; |
46 | 46 | ||
47 | if ((*pskb)->nh.iph->protocol == IPPROTO_TCP) { | 47 | if (ip_hdr(*pskb)->protocol == IPPROTO_TCP) { |
48 | if (!nf_nat_mangle_tcp_packet(pskb, ct, ctinfo, | 48 | if (!nf_nat_mangle_tcp_packet(pskb, ct, ctinfo, |
49 | addroff, sizeof(buf), | 49 | addroff, sizeof(buf), |
50 | (char *) &buf, sizeof(buf))) { | 50 | (char *) &buf, sizeof(buf))) { |
diff --git a/net/ipv4/netfilter/nf_nat_helper.c b/net/ipv4/netfilter/nf_nat_helper.c index 723302afd840..c2c92ff12781 100644 --- a/net/ipv4/netfilter/nf_nat_helper.c +++ b/net/ipv4/netfilter/nf_nat_helper.c | |||
@@ -87,7 +87,7 @@ static void mangle_contents(struct sk_buff *skb, | |||
87 | unsigned char *data; | 87 | unsigned char *data; |
88 | 88 | ||
89 | BUG_ON(skb_is_nonlinear(skb)); | 89 | BUG_ON(skb_is_nonlinear(skb)); |
90 | data = (unsigned char *)skb->nh.iph + dataoff; | 90 | data = skb_network_header(skb) + dataoff; |
91 | 91 | ||
92 | /* move post-replacement */ | 92 | /* move post-replacement */ |
93 | memmove(data + match_offset + rep_len, | 93 | memmove(data + match_offset + rep_len, |
@@ -111,8 +111,8 @@ static void mangle_contents(struct sk_buff *skb, | |||
111 | } | 111 | } |
112 | 112 | ||
113 | /* fix IP hdr checksum information */ | 113 | /* fix IP hdr checksum information */ |
114 | skb->nh.iph->tot_len = htons(skb->len); | 114 | ip_hdr(skb)->tot_len = htons(skb->len); |
115 | ip_send_check(skb->nh.iph); | 115 | ip_send_check(ip_hdr(skb)); |
116 | } | 116 | } |
117 | 117 | ||
118 | /* Unusual, but possible case. */ | 118 | /* Unusual, but possible case. */ |
@@ -166,7 +166,7 @@ nf_nat_mangle_tcp_packet(struct sk_buff **pskb, | |||
166 | 166 | ||
167 | SKB_LINEAR_ASSERT(*pskb); | 167 | SKB_LINEAR_ASSERT(*pskb); |
168 | 168 | ||
169 | iph = (*pskb)->nh.iph; | 169 | iph = ip_hdr(*pskb); |
170 | tcph = (void *)iph + iph->ihl*4; | 170 | tcph = (void *)iph + iph->ihl*4; |
171 | 171 | ||
172 | oldlen = (*pskb)->len - iph->ihl*4; | 172 | oldlen = (*pskb)->len - iph->ihl*4; |
@@ -221,7 +221,7 @@ nf_nat_mangle_udp_packet(struct sk_buff **pskb, | |||
221 | int datalen, oldlen; | 221 | int datalen, oldlen; |
222 | 222 | ||
223 | /* UDP helpers might accidentally mangle the wrong packet */ | 223 | /* UDP helpers might accidentally mangle the wrong packet */ |
224 | iph = (*pskb)->nh.iph; | 224 | iph = ip_hdr(*pskb); |
225 | if ((*pskb)->len < iph->ihl*4 + sizeof(*udph) + | 225 | if ((*pskb)->len < iph->ihl*4 + sizeof(*udph) + |
226 | match_offset + match_len) | 226 | match_offset + match_len) |
227 | return 0; | 227 | return 0; |
@@ -234,7 +234,7 @@ nf_nat_mangle_udp_packet(struct sk_buff **pskb, | |||
234 | !enlarge_skb(pskb, rep_len - match_len)) | 234 | !enlarge_skb(pskb, rep_len - match_len)) |
235 | return 0; | 235 | return 0; |
236 | 236 | ||
237 | iph = (*pskb)->nh.iph; | 237 | iph = ip_hdr(*pskb); |
238 | udph = (void *)iph + iph->ihl*4; | 238 | udph = (void *)iph + iph->ihl*4; |
239 | 239 | ||
240 | oldlen = (*pskb)->len - iph->ihl*4; | 240 | oldlen = (*pskb)->len - iph->ihl*4; |
diff --git a/net/ipv4/netfilter/nf_nat_rule.c b/net/ipv4/netfilter/nf_nat_rule.c index 147a4370cf03..2a283397a8b6 100644 --- a/net/ipv4/netfilter/nf_nat_rule.c +++ b/net/ipv4/netfilter/nf_nat_rule.c | |||
@@ -191,7 +191,7 @@ static unsigned int ipt_dnat_target(struct sk_buff **pskb, | |||
191 | 191 | ||
192 | if (hooknum == NF_IP_LOCAL_OUT && | 192 | if (hooknum == NF_IP_LOCAL_OUT && |
193 | mr->range[0].flags & IP_NAT_RANGE_MAP_IPS) | 193 | mr->range[0].flags & IP_NAT_RANGE_MAP_IPS) |
194 | warn_if_extra_mangle((*pskb)->nh.iph->daddr, | 194 | warn_if_extra_mangle(ip_hdr(*pskb)->daddr, |
195 | mr->range[0].min_ip); | 195 | mr->range[0].min_ip); |
196 | 196 | ||
197 | return nf_nat_setup_info(ct, &mr->range[0], hooknum); | 197 | return nf_nat_setup_info(ct, &mr->range[0], hooknum); |
diff --git a/net/ipv4/netfilter/nf_nat_snmp_basic.c b/net/ipv4/netfilter/nf_nat_snmp_basic.c index ce5c4939a6ee..0cc0d97585df 100644 --- a/net/ipv4/netfilter/nf_nat_snmp_basic.c +++ b/net/ipv4/netfilter/nf_nat_snmp_basic.c | |||
@@ -1194,7 +1194,7 @@ static int snmp_translate(struct nf_conn *ct, | |||
1194 | enum ip_conntrack_info ctinfo, | 1194 | enum ip_conntrack_info ctinfo, |
1195 | struct sk_buff **pskb) | 1195 | struct sk_buff **pskb) |
1196 | { | 1196 | { |
1197 | struct iphdr *iph = (*pskb)->nh.iph; | 1197 | struct iphdr *iph = ip_hdr(*pskb); |
1198 | struct udphdr *udph = (struct udphdr *)((__be32 *)iph + iph->ihl); | 1198 | struct udphdr *udph = (struct udphdr *)((__be32 *)iph + iph->ihl); |
1199 | u_int16_t udplen = ntohs(udph->len); | 1199 | u_int16_t udplen = ntohs(udph->len); |
1200 | u_int16_t paylen = udplen - sizeof(struct udphdr); | 1200 | u_int16_t paylen = udplen - sizeof(struct udphdr); |
@@ -1235,7 +1235,7 @@ static int help(struct sk_buff **pskb, unsigned int protoff, | |||
1235 | { | 1235 | { |
1236 | int dir = CTINFO2DIR(ctinfo); | 1236 | int dir = CTINFO2DIR(ctinfo); |
1237 | unsigned int ret; | 1237 | unsigned int ret; |
1238 | struct iphdr *iph = (*pskb)->nh.iph; | 1238 | struct iphdr *iph = ip_hdr(*pskb); |
1239 | struct udphdr *udph = (struct udphdr *)((u_int32_t *)iph + iph->ihl); | 1239 | struct udphdr *udph = (struct udphdr *)((u_int32_t *)iph + iph->ihl); |
1240 | 1240 | ||
1241 | /* SNMP replies and originating SNMP traps get mangled */ | 1241 | /* SNMP replies and originating SNMP traps get mangled */ |
diff --git a/net/ipv4/netfilter/nf_nat_standalone.c b/net/ipv4/netfilter/nf_nat_standalone.c index 61ca272165a1..64bbed2ba780 100644 --- a/net/ipv4/netfilter/nf_nat_standalone.c +++ b/net/ipv4/netfilter/nf_nat_standalone.c | |||
@@ -86,8 +86,7 @@ nf_nat_fn(unsigned int hooknum, | |||
86 | 86 | ||
87 | /* We never see fragments: conntrack defrags on pre-routing | 87 | /* We never see fragments: conntrack defrags on pre-routing |
88 | and local-out, and nf_nat_out protects post-routing. */ | 88 | and local-out, and nf_nat_out protects post-routing. */ |
89 | NF_CT_ASSERT(!((*pskb)->nh.iph->frag_off | 89 | NF_CT_ASSERT(!(ip_hdr(*pskb)->frag_off & htons(IP_MF | IP_OFFSET))); |
90 | & htons(IP_MF|IP_OFFSET))); | ||
91 | 90 | ||
92 | ct = nf_ct_get(*pskb, &ctinfo); | 91 | ct = nf_ct_get(*pskb, &ctinfo); |
93 | /* Can't track? It's not due to stress, or conntrack would | 92 | /* Can't track? It's not due to stress, or conntrack would |
@@ -98,7 +97,7 @@ nf_nat_fn(unsigned int hooknum, | |||
98 | /* Exception: ICMP redirect to new connection (not in | 97 | /* Exception: ICMP redirect to new connection (not in |
99 | hash table yet). We must not let this through, in | 98 | hash table yet). We must not let this through, in |
100 | case we're doing NAT to the same network. */ | 99 | case we're doing NAT to the same network. */ |
101 | if ((*pskb)->nh.iph->protocol == IPPROTO_ICMP) { | 100 | if (ip_hdr(*pskb)->protocol == IPPROTO_ICMP) { |
102 | struct icmphdr _hdr, *hp; | 101 | struct icmphdr _hdr, *hp; |
103 | 102 | ||
104 | hp = skb_header_pointer(*pskb, ip_hdrlen(*pskb), | 103 | hp = skb_header_pointer(*pskb, ip_hdrlen(*pskb), |
@@ -121,7 +120,7 @@ nf_nat_fn(unsigned int hooknum, | |||
121 | switch (ctinfo) { | 120 | switch (ctinfo) { |
122 | case IP_CT_RELATED: | 121 | case IP_CT_RELATED: |
123 | case IP_CT_RELATED+IP_CT_IS_REPLY: | 122 | case IP_CT_RELATED+IP_CT_IS_REPLY: |
124 | if ((*pskb)->nh.iph->protocol == IPPROTO_ICMP) { | 123 | if (ip_hdr(*pskb)->protocol == IPPROTO_ICMP) { |
125 | if (!nf_nat_icmp_reply_translation(ct, ctinfo, | 124 | if (!nf_nat_icmp_reply_translation(ct, ctinfo, |
126 | hooknum, pskb)) | 125 | hooknum, pskb)) |
127 | return NF_DROP; | 126 | return NF_DROP; |
@@ -176,11 +175,11 @@ nf_nat_in(unsigned int hooknum, | |||
176 | int (*okfn)(struct sk_buff *)) | 175 | int (*okfn)(struct sk_buff *)) |
177 | { | 176 | { |
178 | unsigned int ret; | 177 | unsigned int ret; |
179 | __be32 daddr = (*pskb)->nh.iph->daddr; | 178 | __be32 daddr = ip_hdr(*pskb)->daddr; |
180 | 179 | ||
181 | ret = nf_nat_fn(hooknum, pskb, in, out, okfn); | 180 | ret = nf_nat_fn(hooknum, pskb, in, out, okfn); |
182 | if (ret != NF_DROP && ret != NF_STOLEN && | 181 | if (ret != NF_DROP && ret != NF_STOLEN && |
183 | daddr != (*pskb)->nh.iph->daddr) { | 182 | daddr != ip_hdr(*pskb)->daddr) { |
184 | dst_release((*pskb)->dst); | 183 | dst_release((*pskb)->dst); |
185 | (*pskb)->dst = NULL; | 184 | (*pskb)->dst = NULL; |
186 | } | 185 | } |
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index c3757bb270ca..ac57afa7c316 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c | |||
@@ -292,7 +292,7 @@ static int raw_send_hdrinc(struct sock *sk, void *from, size_t length, | |||
292 | skb->dst = dst_clone(&rt->u.dst); | 292 | skb->dst = dst_clone(&rt->u.dst); |
293 | 293 | ||
294 | skb_reset_network_header(skb); | 294 | skb_reset_network_header(skb); |
295 | iph = skb->nh.iph; | 295 | iph = ip_hdr(skb); |
296 | skb_put(skb, length); | 296 | skb_put(skb, length); |
297 | 297 | ||
298 | skb->ip_summed = CHECKSUM_NONE; | 298 | skb->ip_summed = CHECKSUM_NONE; |
@@ -615,7 +615,7 @@ static int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, | |||
615 | /* Copy the address. */ | 615 | /* Copy the address. */ |
616 | if (sin) { | 616 | if (sin) { |
617 | sin->sin_family = AF_INET; | 617 | sin->sin_family = AF_INET; |
618 | sin->sin_addr.s_addr = skb->nh.iph->saddr; | 618 | sin->sin_addr.s_addr = ip_hdr(skb)->saddr; |
619 | sin->sin_port = 0; | 619 | sin->sin_port = 0; |
620 | memset(&sin->sin_zero, 0, sizeof(sin->sin_zero)); | 620 | memset(&sin->sin_zero, 0, sizeof(sin->sin_zero)); |
621 | } | 621 | } |
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index e50ad7dbbde8..58417393dec1 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -1519,7 +1519,7 @@ static void ipv4_link_failure(struct sk_buff *skb) | |||
1519 | static int ip_rt_bug(struct sk_buff *skb) | 1519 | static int ip_rt_bug(struct sk_buff *skb) |
1520 | { | 1520 | { |
1521 | printk(KERN_DEBUG "ip_rt_bug: %u.%u.%u.%u -> %u.%u.%u.%u, %s\n", | 1521 | printk(KERN_DEBUG "ip_rt_bug: %u.%u.%u.%u -> %u.%u.%u.%u, %s\n", |
1522 | NIPQUAD(skb->nh.iph->saddr), NIPQUAD(skb->nh.iph->daddr), | 1522 | NIPQUAD(ip_hdr(skb)->saddr), NIPQUAD(ip_hdr(skb)->daddr), |
1523 | skb->dev ? skb->dev->name : "?"); | 1523 | skb->dev ? skb->dev->name : "?"); |
1524 | kfree_skb(skb); | 1524 | kfree_skb(skb); |
1525 | return 0; | 1525 | return 0; |
@@ -2134,7 +2134,7 @@ int ip_route_input(struct sk_buff *skb, __be32 daddr, __be32 saddr, | |||
2134 | rcu_read_lock(); | 2134 | rcu_read_lock(); |
2135 | if ((in_dev = __in_dev_get_rcu(dev)) != NULL) { | 2135 | if ((in_dev = __in_dev_get_rcu(dev)) != NULL) { |
2136 | int our = ip_check_mc(in_dev, daddr, saddr, | 2136 | int our = ip_check_mc(in_dev, daddr, saddr, |
2137 | skb->nh.iph->protocol); | 2137 | ip_hdr(skb)->protocol); |
2138 | if (our | 2138 | if (our |
2139 | #ifdef CONFIG_IP_MROUTE | 2139 | #ifdef CONFIG_IP_MROUTE |
2140 | || (!LOCAL_MCAST(daddr) && IN_DEV_MFORWARD(in_dev)) | 2140 | || (!LOCAL_MCAST(daddr) && IN_DEV_MFORWARD(in_dev)) |
@@ -2751,7 +2751,7 @@ int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh, void *arg) | |||
2751 | skb_reset_network_header(skb); | 2751 | skb_reset_network_header(skb); |
2752 | 2752 | ||
2753 | /* Bugfix: need to give ip_route_input enough of an IP header to not gag. */ | 2753 | /* Bugfix: need to give ip_route_input enough of an IP header to not gag. */ |
2754 | skb->nh.iph->protocol = IPPROTO_ICMP; | 2754 | ip_hdr(skb)->protocol = IPPROTO_ICMP; |
2755 | skb_reserve(skb, MAX_HEADER + sizeof(struct iphdr)); | 2755 | skb_reserve(skb, MAX_HEADER + sizeof(struct iphdr)); |
2756 | 2756 | ||
2757 | src = tb[RTA_SRC] ? nla_get_be32(tb[RTA_SRC]) : 0; | 2757 | src = tb[RTA_SRC] ? nla_get_be32(tb[RTA_SRC]) : 0; |
diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c index 33016cc90f0b..261607178491 100644 --- a/net/ipv4/syncookies.c +++ b/net/ipv4/syncookies.c | |||
@@ -138,7 +138,7 @@ __u32 cookie_v4_init_sequence(struct sock *sk, struct sk_buff *skb, __u16 *mssp) | |||
138 | 138 | ||
139 | NET_INC_STATS_BH(LINUX_MIB_SYNCOOKIESSENT); | 139 | NET_INC_STATS_BH(LINUX_MIB_SYNCOOKIESSENT); |
140 | 140 | ||
141 | return secure_tcp_syn_cookie(skb->nh.iph->saddr, skb->nh.iph->daddr, | 141 | return secure_tcp_syn_cookie(ip_hdr(skb)->saddr, ip_hdr(skb)->daddr, |
142 | skb->h.th->source, skb->h.th->dest, | 142 | skb->h.th->source, skb->h.th->dest, |
143 | ntohl(skb->h.th->seq), | 143 | ntohl(skb->h.th->seq), |
144 | jiffies / (HZ * 60), mssind); | 144 | jiffies / (HZ * 60), mssind); |
@@ -162,7 +162,7 @@ static inline int cookie_check(struct sk_buff *skb, __u32 cookie) | |||
162 | 162 | ||
163 | seq = ntohl(skb->h.th->seq)-1; | 163 | seq = ntohl(skb->h.th->seq)-1; |
164 | mssind = check_tcp_syn_cookie(cookie, | 164 | mssind = check_tcp_syn_cookie(cookie, |
165 | skb->nh.iph->saddr, skb->nh.iph->daddr, | 165 | ip_hdr(skb)->saddr, ip_hdr(skb)->daddr, |
166 | skb->h.th->source, skb->h.th->dest, | 166 | skb->h.th->source, skb->h.th->dest, |
167 | seq, jiffies / (HZ * 60), COUNTER_TRIES); | 167 | seq, jiffies / (HZ * 60), COUNTER_TRIES); |
168 | 168 | ||
@@ -224,8 +224,8 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb, | |||
224 | treq->snt_isn = cookie; | 224 | treq->snt_isn = cookie; |
225 | req->mss = mss; | 225 | req->mss = mss; |
226 | ireq->rmt_port = skb->h.th->source; | 226 | ireq->rmt_port = skb->h.th->source; |
227 | ireq->loc_addr = skb->nh.iph->daddr; | 227 | ireq->loc_addr = ip_hdr(skb)->daddr; |
228 | ireq->rmt_addr = skb->nh.iph->saddr; | 228 | ireq->rmt_addr = ip_hdr(skb)->saddr; |
229 | ireq->opt = NULL; | 229 | ireq->opt = NULL; |
230 | 230 | ||
231 | /* We throwed the options of the initial SYN away, so we hope | 231 | /* We throwed the options of the initial SYN away, so we hope |
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 3326681b8429..3a86d6b887ac 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -125,8 +125,8 @@ void tcp_unhash(struct sock *sk) | |||
125 | 125 | ||
126 | static inline __u32 tcp_v4_init_sequence(struct sk_buff *skb) | 126 | static inline __u32 tcp_v4_init_sequence(struct sk_buff *skb) |
127 | { | 127 | { |
128 | return secure_tcp_sequence_number(skb->nh.iph->daddr, | 128 | return secure_tcp_sequence_number(ip_hdr(skb)->daddr, |
129 | skb->nh.iph->saddr, | 129 | ip_hdr(skb)->saddr, |
130 | skb->h.th->dest, | 130 | skb->h.th->dest, |
131 | skb->h.th->source); | 131 | skb->h.th->source); |
132 | } | 132 | } |
@@ -515,13 +515,13 @@ void tcp_v4_send_check(struct sock *sk, int len, struct sk_buff *skb) | |||
515 | 515 | ||
516 | int tcp_v4_gso_send_check(struct sk_buff *skb) | 516 | int tcp_v4_gso_send_check(struct sk_buff *skb) |
517 | { | 517 | { |
518 | struct iphdr *iph; | 518 | const struct iphdr *iph; |
519 | struct tcphdr *th; | 519 | struct tcphdr *th; |
520 | 520 | ||
521 | if (!pskb_may_pull(skb, sizeof(*th))) | 521 | if (!pskb_may_pull(skb, sizeof(*th))) |
522 | return -EINVAL; | 522 | return -EINVAL; |
523 | 523 | ||
524 | iph = skb->nh.iph; | 524 | iph = ip_hdr(skb); |
525 | th = skb->h.th; | 525 | th = skb->h.th; |
526 | 526 | ||
527 | th->check = 0; | 527 | th->check = 0; |
@@ -585,7 +585,7 @@ static void tcp_v4_send_reset(struct sock *sk, struct sk_buff *skb) | |||
585 | arg.iov[0].iov_len = sizeof(rep.th); | 585 | arg.iov[0].iov_len = sizeof(rep.th); |
586 | 586 | ||
587 | #ifdef CONFIG_TCP_MD5SIG | 587 | #ifdef CONFIG_TCP_MD5SIG |
588 | key = sk ? tcp_v4_md5_do_lookup(sk, skb->nh.iph->daddr) : NULL; | 588 | key = sk ? tcp_v4_md5_do_lookup(sk, ip_hdr(skb)->daddr) : NULL; |
589 | if (key) { | 589 | if (key) { |
590 | rep.opt[0] = htonl((TCPOPT_NOP << 24) | | 590 | rep.opt[0] = htonl((TCPOPT_NOP << 24) | |
591 | (TCPOPT_NOP << 16) | | 591 | (TCPOPT_NOP << 16) | |
@@ -597,14 +597,14 @@ static void tcp_v4_send_reset(struct sock *sk, struct sk_buff *skb) | |||
597 | 597 | ||
598 | tcp_v4_do_calc_md5_hash((__u8 *)&rep.opt[1], | 598 | tcp_v4_do_calc_md5_hash((__u8 *)&rep.opt[1], |
599 | key, | 599 | key, |
600 | skb->nh.iph->daddr, | 600 | ip_hdr(skb)->daddr, |
601 | skb->nh.iph->saddr, | 601 | ip_hdr(skb)->saddr, |
602 | &rep.th, IPPROTO_TCP, | 602 | &rep.th, IPPROTO_TCP, |
603 | arg.iov[0].iov_len); | 603 | arg.iov[0].iov_len); |
604 | } | 604 | } |
605 | #endif | 605 | #endif |
606 | arg.csum = csum_tcpudp_nofold(skb->nh.iph->daddr, | 606 | arg.csum = csum_tcpudp_nofold(ip_hdr(skb)->daddr, |
607 | skb->nh.iph->saddr, /* XXX */ | 607 | ip_hdr(skb)->saddr, /* XXX */ |
608 | sizeof(struct tcphdr), IPPROTO_TCP, 0); | 608 | sizeof(struct tcphdr), IPPROTO_TCP, 0); |
609 | arg.csumoffset = offsetof(struct tcphdr, check) / 2; | 609 | arg.csumoffset = offsetof(struct tcphdr, check) / 2; |
610 | 610 | ||
@@ -670,7 +670,7 @@ static void tcp_v4_send_ack(struct tcp_timewait_sock *twsk, | |||
670 | * skb->sk) holds true, but we program defensively. | 670 | * skb->sk) holds true, but we program defensively. |
671 | */ | 671 | */ |
672 | if (!twsk && skb->sk) { | 672 | if (!twsk && skb->sk) { |
673 | key = tcp_v4_md5_do_lookup(skb->sk, skb->nh.iph->daddr); | 673 | key = tcp_v4_md5_do_lookup(skb->sk, ip_hdr(skb)->daddr); |
674 | } else if (twsk && twsk->tw_md5_keylen) { | 674 | } else if (twsk && twsk->tw_md5_keylen) { |
675 | tw_key.key = twsk->tw_md5_key; | 675 | tw_key.key = twsk->tw_md5_key; |
676 | tw_key.keylen = twsk->tw_md5_keylen; | 676 | tw_key.keylen = twsk->tw_md5_keylen; |
@@ -690,14 +690,14 @@ static void tcp_v4_send_ack(struct tcp_timewait_sock *twsk, | |||
690 | 690 | ||
691 | tcp_v4_do_calc_md5_hash((__u8 *)&rep.opt[offset], | 691 | tcp_v4_do_calc_md5_hash((__u8 *)&rep.opt[offset], |
692 | key, | 692 | key, |
693 | skb->nh.iph->daddr, | 693 | ip_hdr(skb)->daddr, |
694 | skb->nh.iph->saddr, | 694 | ip_hdr(skb)->saddr, |
695 | &rep.th, IPPROTO_TCP, | 695 | &rep.th, IPPROTO_TCP, |
696 | arg.iov[0].iov_len); | 696 | arg.iov[0].iov_len); |
697 | } | 697 | } |
698 | #endif | 698 | #endif |
699 | arg.csum = csum_tcpudp_nofold(skb->nh.iph->daddr, | 699 | arg.csum = csum_tcpudp_nofold(ip_hdr(skb)->daddr, |
700 | skb->nh.iph->saddr, /* XXX */ | 700 | ip_hdr(skb)->saddr, /* XXX */ |
701 | arg.iov[0].iov_len, IPPROTO_TCP, 0); | 701 | arg.iov[0].iov_len, IPPROTO_TCP, 0); |
702 | arg.csumoffset = offsetof(struct tcphdr, check) / 2; | 702 | arg.csumoffset = offsetof(struct tcphdr, check) / 2; |
703 | 703 | ||
@@ -1133,7 +1133,7 @@ static int tcp_v4_inbound_md5_hash(struct sock *sk, struct sk_buff *skb) | |||
1133 | */ | 1133 | */ |
1134 | __u8 *hash_location = NULL; | 1134 | __u8 *hash_location = NULL; |
1135 | struct tcp_md5sig_key *hash_expected; | 1135 | struct tcp_md5sig_key *hash_expected; |
1136 | struct iphdr *iph = skb->nh.iph; | 1136 | const struct iphdr *iph = ip_hdr(skb); |
1137 | struct tcphdr *th = skb->h.th; | 1137 | struct tcphdr *th = skb->h.th; |
1138 | int length = (th->doff << 2) - sizeof(struct tcphdr); | 1138 | int length = (th->doff << 2) - sizeof(struct tcphdr); |
1139 | int genhash; | 1139 | int genhash; |
@@ -1251,8 +1251,8 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb) | |||
1251 | struct inet_request_sock *ireq; | 1251 | struct inet_request_sock *ireq; |
1252 | struct tcp_options_received tmp_opt; | 1252 | struct tcp_options_received tmp_opt; |
1253 | struct request_sock *req; | 1253 | struct request_sock *req; |
1254 | __be32 saddr = skb->nh.iph->saddr; | 1254 | __be32 saddr = ip_hdr(skb)->saddr; |
1255 | __be32 daddr = skb->nh.iph->daddr; | 1255 | __be32 daddr = ip_hdr(skb)->daddr; |
1256 | __u32 isn = TCP_SKB_CB(skb)->when; | 1256 | __u32 isn = TCP_SKB_CB(skb)->when; |
1257 | struct dst_entry *dst = NULL; | 1257 | struct dst_entry *dst = NULL; |
1258 | #ifdef CONFIG_SYN_COOKIES | 1258 | #ifdef CONFIG_SYN_COOKIES |
@@ -1439,7 +1439,7 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
1439 | newinet->opt = ireq->opt; | 1439 | newinet->opt = ireq->opt; |
1440 | ireq->opt = NULL; | 1440 | ireq->opt = NULL; |
1441 | newinet->mc_index = inet_iif(skb); | 1441 | newinet->mc_index = inet_iif(skb); |
1442 | newinet->mc_ttl = skb->nh.iph->ttl; | 1442 | newinet->mc_ttl = ip_hdr(skb)->ttl; |
1443 | inet_csk(newsk)->icsk_ext_hdr_len = 0; | 1443 | inet_csk(newsk)->icsk_ext_hdr_len = 0; |
1444 | if (newinet->opt) | 1444 | if (newinet->opt) |
1445 | inet_csk(newsk)->icsk_ext_hdr_len = newinet->opt->optlen; | 1445 | inet_csk(newsk)->icsk_ext_hdr_len = newinet->opt->optlen; |
@@ -1482,7 +1482,7 @@ exit: | |||
1482 | static struct sock *tcp_v4_hnd_req(struct sock *sk, struct sk_buff *skb) | 1482 | static struct sock *tcp_v4_hnd_req(struct sock *sk, struct sk_buff *skb) |
1483 | { | 1483 | { |
1484 | struct tcphdr *th = skb->h.th; | 1484 | struct tcphdr *th = skb->h.th; |
1485 | struct iphdr *iph = skb->nh.iph; | 1485 | const struct iphdr *iph = ip_hdr(skb); |
1486 | struct sock *nsk; | 1486 | struct sock *nsk; |
1487 | struct request_sock **prev; | 1487 | struct request_sock **prev; |
1488 | /* Find possible connection requests. */ | 1488 | /* Find possible connection requests. */ |
@@ -1491,9 +1491,8 @@ static struct sock *tcp_v4_hnd_req(struct sock *sk, struct sk_buff *skb) | |||
1491 | if (req) | 1491 | if (req) |
1492 | return tcp_check_req(sk, skb, req, prev); | 1492 | return tcp_check_req(sk, skb, req, prev); |
1493 | 1493 | ||
1494 | nsk = inet_lookup_established(&tcp_hashinfo, skb->nh.iph->saddr, | 1494 | nsk = inet_lookup_established(&tcp_hashinfo, iph->saddr, th->source, |
1495 | th->source, skb->nh.iph->daddr, | 1495 | iph->daddr, th->dest, inet_iif(skb)); |
1496 | th->dest, inet_iif(skb)); | ||
1497 | 1496 | ||
1498 | if (nsk) { | 1497 | if (nsk) { |
1499 | if (nsk->sk_state != TCP_TIME_WAIT) { | 1498 | if (nsk->sk_state != TCP_TIME_WAIT) { |
@@ -1513,15 +1512,17 @@ static struct sock *tcp_v4_hnd_req(struct sock *sk, struct sk_buff *skb) | |||
1513 | 1512 | ||
1514 | static __sum16 tcp_v4_checksum_init(struct sk_buff *skb) | 1513 | static __sum16 tcp_v4_checksum_init(struct sk_buff *skb) |
1515 | { | 1514 | { |
1515 | const struct iphdr *iph = ip_hdr(skb); | ||
1516 | |||
1516 | if (skb->ip_summed == CHECKSUM_COMPLETE) { | 1517 | if (skb->ip_summed == CHECKSUM_COMPLETE) { |
1517 | if (!tcp_v4_check(skb->len, skb->nh.iph->saddr, | 1518 | if (!tcp_v4_check(skb->len, iph->saddr, |
1518 | skb->nh.iph->daddr, skb->csum)) { | 1519 | iph->daddr, skb->csum)) { |
1519 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 1520 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
1520 | return 0; | 1521 | return 0; |
1521 | } | 1522 | } |
1522 | } | 1523 | } |
1523 | 1524 | ||
1524 | skb->csum = csum_tcpudp_nofold(skb->nh.iph->saddr, skb->nh.iph->daddr, | 1525 | skb->csum = csum_tcpudp_nofold(iph->saddr, iph->daddr, |
1525 | skb->len, IPPROTO_TCP, 0); | 1526 | skb->len, IPPROTO_TCP, 0); |
1526 | 1527 | ||
1527 | if (skb->len <= 76) { | 1528 | if (skb->len <= 76) { |
@@ -1610,6 +1611,7 @@ csum_err: | |||
1610 | 1611 | ||
1611 | int tcp_v4_rcv(struct sk_buff *skb) | 1612 | int tcp_v4_rcv(struct sk_buff *skb) |
1612 | { | 1613 | { |
1614 | const struct iphdr *iph; | ||
1613 | struct tcphdr *th; | 1615 | struct tcphdr *th; |
1614 | struct sock *sk; | 1616 | struct sock *sk; |
1615 | int ret; | 1617 | int ret; |
@@ -1639,18 +1641,17 @@ int tcp_v4_rcv(struct sk_buff *skb) | |||
1639 | goto bad_packet; | 1641 | goto bad_packet; |
1640 | 1642 | ||
1641 | th = skb->h.th; | 1643 | th = skb->h.th; |
1644 | iph = ip_hdr(skb); | ||
1642 | TCP_SKB_CB(skb)->seq = ntohl(th->seq); | 1645 | TCP_SKB_CB(skb)->seq = ntohl(th->seq); |
1643 | TCP_SKB_CB(skb)->end_seq = (TCP_SKB_CB(skb)->seq + th->syn + th->fin + | 1646 | TCP_SKB_CB(skb)->end_seq = (TCP_SKB_CB(skb)->seq + th->syn + th->fin + |
1644 | skb->len - th->doff * 4); | 1647 | skb->len - th->doff * 4); |
1645 | TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq); | 1648 | TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq); |
1646 | TCP_SKB_CB(skb)->when = 0; | 1649 | TCP_SKB_CB(skb)->when = 0; |
1647 | TCP_SKB_CB(skb)->flags = skb->nh.iph->tos; | 1650 | TCP_SKB_CB(skb)->flags = iph->tos; |
1648 | TCP_SKB_CB(skb)->sacked = 0; | 1651 | TCP_SKB_CB(skb)->sacked = 0; |
1649 | 1652 | ||
1650 | sk = __inet_lookup(&tcp_hashinfo, skb->nh.iph->saddr, th->source, | 1653 | sk = __inet_lookup(&tcp_hashinfo, iph->saddr, th->source, |
1651 | skb->nh.iph->daddr, th->dest, | 1654 | iph->daddr, th->dest, inet_iif(skb)); |
1652 | inet_iif(skb)); | ||
1653 | |||
1654 | if (!sk) | 1655 | if (!sk) |
1655 | goto no_tcp_socket; | 1656 | goto no_tcp_socket; |
1656 | 1657 | ||
@@ -1724,8 +1725,7 @@ do_time_wait: | |||
1724 | switch (tcp_timewait_state_process(inet_twsk(sk), skb, th)) { | 1725 | switch (tcp_timewait_state_process(inet_twsk(sk), skb, th)) { |
1725 | case TCP_TW_SYN: { | 1726 | case TCP_TW_SYN: { |
1726 | struct sock *sk2 = inet_lookup_listener(&tcp_hashinfo, | 1727 | struct sock *sk2 = inet_lookup_listener(&tcp_hashinfo, |
1727 | skb->nh.iph->daddr, | 1728 | iph->daddr, th->dest, |
1728 | th->dest, | ||
1729 | inet_iif(skb)); | 1729 | inet_iif(skb)); |
1730 | if (sk2) { | 1730 | if (sk2) { |
1731 | inet_twsk_deschedule(inet_twsk(sk), &tcp_death_row); | 1731 | inet_twsk_deschedule(inet_twsk(sk), &tcp_death_row); |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 1bbf5510cf3a..b4cad50c18e9 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -867,7 +867,7 @@ try_again: | |||
867 | { | 867 | { |
868 | sin->sin_family = AF_INET; | 868 | sin->sin_family = AF_INET; |
869 | sin->sin_port = skb->h.uh->source; | 869 | sin->sin_port = skb->h.uh->source; |
870 | sin->sin_addr.s_addr = skb->nh.iph->saddr; | 870 | sin->sin_addr.s_addr = ip_hdr(skb)->saddr; |
871 | memset(sin->sin_zero, 0, sizeof(sin->sin_zero)); | 871 | memset(sin->sin_zero, 0, sizeof(sin->sin_zero)); |
872 | } | 872 | } |
873 | if (inet->cmsg_flags) | 873 | if (inet->cmsg_flags) |
@@ -990,7 +990,7 @@ static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb) | |||
990 | return 0; | 990 | return 0; |
991 | 991 | ||
992 | /* Now we can update and verify the packet length... */ | 992 | /* Now we can update and verify the packet length... */ |
993 | iph = skb->nh.iph; | 993 | iph = ip_hdr(skb); |
994 | iphlen = iph->ihl << 2; | 994 | iphlen = iph->ihl << 2; |
995 | iph->tot_len = htons(ntohs(iph->tot_len) - len); | 995 | iph->tot_len = htons(ntohs(iph->tot_len) - len); |
996 | if (skb->len < iphlen + len) { | 996 | if (skb->len < iphlen + len) { |
@@ -1168,6 +1168,7 @@ static int __udp4_lib_mcast_deliver(struct sk_buff *skb, | |||
1168 | static inline int udp4_csum_init(struct sk_buff *skb, struct udphdr *uh, | 1168 | static inline int udp4_csum_init(struct sk_buff *skb, struct udphdr *uh, |
1169 | int proto) | 1169 | int proto) |
1170 | { | 1170 | { |
1171 | const struct iphdr *iph; | ||
1171 | int err; | 1172 | int err; |
1172 | 1173 | ||
1173 | UDP_SKB_CB(skb)->partial_cov = 0; | 1174 | UDP_SKB_CB(skb)->partial_cov = 0; |
@@ -1179,16 +1180,16 @@ static inline int udp4_csum_init(struct sk_buff *skb, struct udphdr *uh, | |||
1179 | return err; | 1180 | return err; |
1180 | } | 1181 | } |
1181 | 1182 | ||
1183 | iph = ip_hdr(skb); | ||
1182 | if (uh->check == 0) { | 1184 | if (uh->check == 0) { |
1183 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 1185 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
1184 | } else if (skb->ip_summed == CHECKSUM_COMPLETE) { | 1186 | } else if (skb->ip_summed == CHECKSUM_COMPLETE) { |
1185 | if (!csum_tcpudp_magic(skb->nh.iph->saddr, skb->nh.iph->daddr, | 1187 | if (!csum_tcpudp_magic(iph->saddr, iph->daddr, skb->len, |
1186 | skb->len, proto, skb->csum)) | 1188 | proto, skb->csum)) |
1187 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 1189 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
1188 | } | 1190 | } |
1189 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) | 1191 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) |
1190 | skb->csum = csum_tcpudp_nofold(skb->nh.iph->saddr, | 1192 | skb->csum = csum_tcpudp_nofold(iph->saddr, iph->daddr, |
1191 | skb->nh.iph->daddr, | ||
1192 | skb->len, proto, 0); | 1193 | skb->len, proto, 0); |
1193 | /* Probably, we should checksum udp header (it should be in cache | 1194 | /* Probably, we should checksum udp header (it should be in cache |
1194 | * in any case) and data in tiny packets (< rx copybreak). | 1195 | * in any case) and data in tiny packets (< rx copybreak). |
@@ -1208,8 +1209,8 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[], | |||
1208 | struct udphdr *uh = skb->h.uh; | 1209 | struct udphdr *uh = skb->h.uh; |
1209 | unsigned short ulen; | 1210 | unsigned short ulen; |
1210 | struct rtable *rt = (struct rtable*)skb->dst; | 1211 | struct rtable *rt = (struct rtable*)skb->dst; |
1211 | __be32 saddr = skb->nh.iph->saddr; | 1212 | __be32 saddr = ip_hdr(skb)->saddr; |
1212 | __be32 daddr = skb->nh.iph->daddr; | 1213 | __be32 daddr = ip_hdr(skb)->daddr; |
1213 | 1214 | ||
1214 | /* | 1215 | /* |
1215 | * Validate the packet. | 1216 | * Validate the packet. |
diff --git a/net/ipv4/xfrm4_input.c b/net/ipv4/xfrm4_input.c index d89969c502dd..5ceca951d73f 100644 --- a/net/ipv4/xfrm4_input.c +++ b/net/ipv4/xfrm4_input.c | |||
@@ -28,7 +28,7 @@ static int xfrm4_parse_spi(struct sk_buff *skb, u8 nexthdr, __be32 *spi, __be32 | |||
28 | switch (nexthdr) { | 28 | switch (nexthdr) { |
29 | case IPPROTO_IPIP: | 29 | case IPPROTO_IPIP: |
30 | case IPPROTO_IPV6: | 30 | case IPPROTO_IPV6: |
31 | *spi = skb->nh.iph->saddr; | 31 | *spi = ip_hdr(skb)->saddr; |
32 | *seq = 0; | 32 | *seq = 0; |
33 | return 0; | 33 | return 0; |
34 | } | 34 | } |
@@ -39,9 +39,9 @@ static int xfrm4_parse_spi(struct sk_buff *skb, u8 nexthdr, __be32 *spi, __be32 | |||
39 | #ifdef CONFIG_NETFILTER | 39 | #ifdef CONFIG_NETFILTER |
40 | static inline int xfrm4_rcv_encap_finish(struct sk_buff *skb) | 40 | static inline int xfrm4_rcv_encap_finish(struct sk_buff *skb) |
41 | { | 41 | { |
42 | struct iphdr *iph = skb->nh.iph; | ||
43 | |||
44 | if (skb->dst == NULL) { | 42 | if (skb->dst == NULL) { |
43 | const struct iphdr *iph = ip_hdr(skb); | ||
44 | |||
45 | if (ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, | 45 | if (ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, |
46 | skb->dev)) | 46 | skb->dev)) |
47 | goto drop; | 47 | goto drop; |
@@ -55,18 +55,18 @@ drop: | |||
55 | 55 | ||
56 | int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type) | 56 | int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type) |
57 | { | 57 | { |
58 | int err; | ||
59 | __be32 spi, seq; | 58 | __be32 spi, seq; |
60 | struct xfrm_state *xfrm_vec[XFRM_MAX_DEPTH]; | 59 | struct xfrm_state *xfrm_vec[XFRM_MAX_DEPTH]; |
61 | struct xfrm_state *x; | 60 | struct xfrm_state *x; |
62 | int xfrm_nr = 0; | 61 | int xfrm_nr = 0; |
63 | int decaps = 0; | 62 | int decaps = 0; |
63 | int err = xfrm4_parse_spi(skb, ip_hdr(skb)->protocol, &spi, &seq); | ||
64 | 64 | ||
65 | if ((err = xfrm4_parse_spi(skb, skb->nh.iph->protocol, &spi, &seq)) != 0) | 65 | if (err != 0) |
66 | goto drop; | 66 | goto drop; |
67 | 67 | ||
68 | do { | 68 | do { |
69 | struct iphdr *iph = skb->nh.iph; | 69 | const struct iphdr *iph = ip_hdr(skb); |
70 | 70 | ||
71 | if (xfrm_nr == XFRM_MAX_DEPTH) | 71 | if (xfrm_nr == XFRM_MAX_DEPTH) |
72 | goto drop; | 72 | goto drop; |
@@ -113,7 +113,8 @@ int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type) | |||
113 | break; | 113 | break; |
114 | } | 114 | } |
115 | 115 | ||
116 | if ((err = xfrm_parse_spi(skb, skb->nh.iph->protocol, &spi, &seq)) < 0) | 116 | err = xfrm_parse_spi(skb, ip_hdr(skb)->protocol, &spi, &seq); |
117 | if (err < 0) | ||
117 | goto drop; | 118 | goto drop; |
118 | } while (!err); | 119 | } while (!err); |
119 | 120 | ||
@@ -147,14 +148,14 @@ int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type) | |||
147 | } else { | 148 | } else { |
148 | #ifdef CONFIG_NETFILTER | 149 | #ifdef CONFIG_NETFILTER |
149 | __skb_push(skb, skb->data - skb_network_header(skb)); | 150 | __skb_push(skb, skb->data - skb_network_header(skb)); |
150 | skb->nh.iph->tot_len = htons(skb->len); | 151 | ip_hdr(skb)->tot_len = htons(skb->len); |
151 | ip_send_check(skb->nh.iph); | 152 | ip_send_check(ip_hdr(skb)); |
152 | 153 | ||
153 | NF_HOOK(PF_INET, NF_IP_PRE_ROUTING, skb, skb->dev, NULL, | 154 | NF_HOOK(PF_INET, NF_IP_PRE_ROUTING, skb, skb->dev, NULL, |
154 | xfrm4_rcv_encap_finish); | 155 | xfrm4_rcv_encap_finish); |
155 | return 0; | 156 | return 0; |
156 | #else | 157 | #else |
157 | return -skb->nh.iph->protocol; | 158 | return -ip_hdr(skb)->protocol; |
158 | #endif | 159 | #endif |
159 | } | 160 | } |
160 | 161 | ||
diff --git a/net/ipv4/xfrm4_mode_beet.c b/net/ipv4/xfrm4_mode_beet.c index 505fca034a1f..9e5ba12c6c75 100644 --- a/net/ipv4/xfrm4_mode_beet.c +++ b/net/ipv4/xfrm4_mode_beet.c | |||
@@ -32,8 +32,8 @@ static int xfrm4_beet_output(struct xfrm_state *x, struct sk_buff *skb) | |||
32 | struct iphdr *iph, *top_iph = NULL; | 32 | struct iphdr *iph, *top_iph = NULL; |
33 | int hdrlen, optlen; | 33 | int hdrlen, optlen; |
34 | 34 | ||
35 | iph = skb->nh.iph; | 35 | iph = ip_hdr(skb); |
36 | skb->h.ipiph = iph; | 36 | skb->h.raw = skb->nh.raw; |
37 | 37 | ||
38 | hdrlen = 0; | 38 | hdrlen = 0; |
39 | optlen = iph->ihl * 4 - sizeof(*iph); | 39 | optlen = iph->ihl * 4 - sizeof(*iph); |
@@ -42,7 +42,7 @@ static int xfrm4_beet_output(struct xfrm_state *x, struct sk_buff *skb) | |||
42 | 42 | ||
43 | skb_push(skb, x->props.header_len + hdrlen); | 43 | skb_push(skb, x->props.header_len + hdrlen); |
44 | skb_reset_network_header(skb); | 44 | skb_reset_network_header(skb); |
45 | top_iph = skb->nh.iph; | 45 | top_iph = ip_hdr(skb); |
46 | skb->h.raw += sizeof(*iph) - hdrlen; | 46 | skb->h.raw += sizeof(*iph) - hdrlen; |
47 | 47 | ||
48 | memmove(top_iph, iph, sizeof(*iph)); | 48 | memmove(top_iph, iph, sizeof(*iph)); |
@@ -70,7 +70,7 @@ static int xfrm4_beet_output(struct xfrm_state *x, struct sk_buff *skb) | |||
70 | 70 | ||
71 | static int xfrm4_beet_input(struct xfrm_state *x, struct sk_buff *skb) | 71 | static int xfrm4_beet_input(struct xfrm_state *x, struct sk_buff *skb) |
72 | { | 72 | { |
73 | struct iphdr *iph = skb->nh.iph; | 73 | struct iphdr *iph = ip_hdr(skb); |
74 | int phlen = 0; | 74 | int phlen = 0; |
75 | int optlen = 0; | 75 | int optlen = 0; |
76 | __u8 ph_nexthdr = 0, protocol = 0; | 76 | __u8 ph_nexthdr = 0, protocol = 0; |
@@ -102,7 +102,7 @@ static int xfrm4_beet_input(struct xfrm_state *x, struct sk_buff *skb) | |||
102 | skb->h.raw = skb->data + (phlen + optlen); | 102 | skb->h.raw = skb->data + (phlen + optlen); |
103 | skb->data = skb->h.raw; | 103 | skb->data = skb->h.raw; |
104 | 104 | ||
105 | iph = skb->nh.iph; | 105 | iph = ip_hdr(skb); |
106 | iph->ihl = (sizeof(*iph) + optlen) / 4; | 106 | iph->ihl = (sizeof(*iph) + optlen) / 4; |
107 | iph->tot_len = htons(skb->len + iph->ihl * 4); | 107 | iph->tot_len = htons(skb->len + iph->ihl * 4); |
108 | iph->daddr = x->sel.daddr.a4; | 108 | iph->daddr = x->sel.daddr.a4; |
diff --git a/net/ipv4/xfrm4_mode_transport.c b/net/ipv4/xfrm4_mode_transport.c index b198087c073e..124f24bc4dbc 100644 --- a/net/ipv4/xfrm4_mode_transport.c +++ b/net/ipv4/xfrm4_mode_transport.c | |||
@@ -23,13 +23,10 @@ | |||
23 | */ | 23 | */ |
24 | static int xfrm4_transport_output(struct xfrm_state *x, struct sk_buff *skb) | 24 | static int xfrm4_transport_output(struct xfrm_state *x, struct sk_buff *skb) |
25 | { | 25 | { |
26 | struct iphdr *iph; | 26 | struct iphdr *iph = ip_hdr(skb); |
27 | int ihl; | 27 | int ihl = iph->ihl * 4; |
28 | 28 | ||
29 | iph = skb->nh.iph; | 29 | skb->h.raw = skb->nh.raw; |
30 | skb->h.ipiph = iph; | ||
31 | |||
32 | ihl = iph->ihl * 4; | ||
33 | skb->h.raw += ihl; | 30 | skb->h.raw += ihl; |
34 | 31 | ||
35 | skb_push(skb, x->props.header_len); | 32 | skb_push(skb, x->props.header_len); |
@@ -54,7 +51,7 @@ static int xfrm4_transport_input(struct xfrm_state *x, struct sk_buff *skb) | |||
54 | memmove(skb->h.raw, skb_network_header(skb), ihl); | 51 | memmove(skb->h.raw, skb_network_header(skb), ihl); |
55 | skb->nh.raw = skb->h.raw; | 52 | skb->nh.raw = skb->h.raw; |
56 | } | 53 | } |
57 | skb->nh.iph->tot_len = htons(skb->len + ihl); | 54 | ip_hdr(skb)->tot_len = htons(skb->len + ihl); |
58 | skb->h.raw = skb->data; | 55 | skb->h.raw = skb->data; |
59 | return 0; | 56 | return 0; |
60 | } | 57 | } |
diff --git a/net/ipv4/xfrm4_mode_tunnel.c b/net/ipv4/xfrm4_mode_tunnel.c index bec851f278e5..faa1b9a76e76 100644 --- a/net/ipv4/xfrm4_mode_tunnel.c +++ b/net/ipv4/xfrm4_mode_tunnel.c | |||
@@ -16,7 +16,7 @@ | |||
16 | 16 | ||
17 | static inline void ipip_ecn_decapsulate(struct sk_buff *skb) | 17 | static inline void ipip_ecn_decapsulate(struct sk_buff *skb) |
18 | { | 18 | { |
19 | struct iphdr *outer_iph = skb->nh.iph; | 19 | struct iphdr *outer_iph = ip_hdr(skb); |
20 | struct iphdr *inner_iph = skb->h.ipiph; | 20 | struct iphdr *inner_iph = skb->h.ipiph; |
21 | 21 | ||
22 | if (INET_ECN_is_ce(outer_iph->tos)) | 22 | if (INET_ECN_is_ce(outer_iph->tos)) |
@@ -46,12 +46,12 @@ static int xfrm4_tunnel_output(struct xfrm_state *x, struct sk_buff *skb) | |||
46 | struct iphdr *iph, *top_iph; | 46 | struct iphdr *iph, *top_iph; |
47 | int flags; | 47 | int flags; |
48 | 48 | ||
49 | iph = skb->nh.iph; | 49 | iph = ip_hdr(skb); |
50 | skb->h.ipiph = iph; | 50 | skb->h.ipiph = iph; |
51 | 51 | ||
52 | skb_push(skb, x->props.header_len); | 52 | skb_push(skb, x->props.header_len); |
53 | skb_reset_network_header(skb); | 53 | skb_reset_network_header(skb); |
54 | top_iph = skb->nh.iph; | 54 | top_iph = ip_hdr(skb); |
55 | 55 | ||
56 | top_iph->ihl = 5; | 56 | top_iph->ihl = 5; |
57 | top_iph->version = 4; | 57 | top_iph->version = 4; |
@@ -91,7 +91,7 @@ static int xfrm4_tunnel_output(struct xfrm_state *x, struct sk_buff *skb) | |||
91 | 91 | ||
92 | static int xfrm4_tunnel_input(struct xfrm_state *x, struct sk_buff *skb) | 92 | static int xfrm4_tunnel_input(struct xfrm_state *x, struct sk_buff *skb) |
93 | { | 93 | { |
94 | struct iphdr *iph = skb->nh.iph; | 94 | struct iphdr *iph = ip_hdr(skb); |
95 | const unsigned char *old_mac; | 95 | const unsigned char *old_mac; |
96 | int err = -EINVAL; | 96 | int err = -EINVAL; |
97 | 97 | ||
@@ -113,7 +113,7 @@ static int xfrm4_tunnel_input(struct xfrm_state *x, struct sk_buff *skb) | |||
113 | (err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC))) | 113 | (err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC))) |
114 | goto out; | 114 | goto out; |
115 | 115 | ||
116 | iph = skb->nh.iph; | 116 | iph = ip_hdr(skb); |
117 | if (iph->protocol == IPPROTO_IPIP) { | 117 | if (iph->protocol == IPPROTO_IPIP) { |
118 | if (x->props.flags & XFRM_STATE_DECAP_DSCP) | 118 | if (x->props.flags & XFRM_STATE_DECAP_DSCP) |
119 | ipv4_copy_dscp(iph, skb->h.ipiph); | 119 | ipv4_copy_dscp(iph, skb->h.ipiph); |
diff --git a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c index 038ca160fe2c..44ef208a75cb 100644 --- a/net/ipv4/xfrm4_output.c +++ b/net/ipv4/xfrm4_output.c | |||
@@ -22,14 +22,13 @@ static int xfrm4_tunnel_check_size(struct sk_buff *skb) | |||
22 | { | 22 | { |
23 | int mtu, ret = 0; | 23 | int mtu, ret = 0; |
24 | struct dst_entry *dst; | 24 | struct dst_entry *dst; |
25 | struct iphdr *iph = skb->nh.iph; | ||
26 | 25 | ||
27 | if (IPCB(skb)->flags & IPSKB_XFRM_TUNNEL_SIZE) | 26 | if (IPCB(skb)->flags & IPSKB_XFRM_TUNNEL_SIZE) |
28 | goto out; | 27 | goto out; |
29 | 28 | ||
30 | IPCB(skb)->flags |= IPSKB_XFRM_TUNNEL_SIZE; | 29 | IPCB(skb)->flags |= IPSKB_XFRM_TUNNEL_SIZE; |
31 | 30 | ||
32 | if (!(iph->frag_off & htons(IP_DF)) || skb->local_df) | 31 | if (!(ip_hdr(skb)->frag_off & htons(IP_DF)) || skb->local_df) |
33 | goto out; | 32 | goto out; |
34 | 33 | ||
35 | dst = skb->dst; | 34 | dst = skb->dst; |
diff --git a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c index fbb1d3decf02..f1c32ff59d16 100644 --- a/net/ipv4/xfrm4_policy.c +++ b/net/ipv4/xfrm4_policy.c | |||
@@ -209,7 +209,7 @@ error: | |||
209 | static void | 209 | static void |
210 | _decode_session4(struct sk_buff *skb, struct flowi *fl) | 210 | _decode_session4(struct sk_buff *skb, struct flowi *fl) |
211 | { | 211 | { |
212 | struct iphdr *iph = skb->nh.iph; | 212 | struct iphdr *iph = ip_hdr(skb); |
213 | u8 *xprth = skb_network_header(skb) + iph->ihl * 4; | 213 | u8 *xprth = skb_network_header(skb) + iph->ihl * 4; |
214 | 214 | ||
215 | memset(fl, 0, sizeof(struct flowi)); | 215 | memset(fl, 0, sizeof(struct flowi)); |
diff --git a/net/ipv4/xfrm4_tunnel.c b/net/ipv4/xfrm4_tunnel.c index 3eef06454da9..568510304553 100644 --- a/net/ipv4/xfrm4_tunnel.c +++ b/net/ipv4/xfrm4_tunnel.c | |||
@@ -12,9 +12,8 @@ | |||
12 | 12 | ||
13 | static int ipip_output(struct xfrm_state *x, struct sk_buff *skb) | 13 | static int ipip_output(struct xfrm_state *x, struct sk_buff *skb) |
14 | { | 14 | { |
15 | struct iphdr *iph; | 15 | struct iphdr *iph = ip_hdr(skb); |
16 | 16 | ||
17 | iph = skb->nh.iph; | ||
18 | iph->tot_len = htons(skb->len); | 17 | iph->tot_len = htons(skb->len); |
19 | ip_send_check(iph); | 18 | ip_send_check(iph); |
20 | 19 | ||
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c index 7a86db6163ee..ac95d3bfdfb7 100644 --- a/net/ipv6/datagram.c +++ b/net/ipv6/datagram.c | |||
@@ -349,8 +349,7 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len) | |||
349 | struct inet_sock *inet = inet_sk(sk); | 349 | struct inet_sock *inet = inet_sk(sk); |
350 | 350 | ||
351 | ipv6_addr_set(&sin->sin6_addr, 0, 0, | 351 | ipv6_addr_set(&sin->sin6_addr, 0, 0, |
352 | htonl(0xffff), | 352 | htonl(0xffff), ip_hdr(skb)->saddr); |
353 | skb->nh.iph->saddr); | ||
354 | if (inet->cmsg_flags) | 353 | if (inet->cmsg_flags) |
355 | ip_cmsg_recv(msg, skb); | 354 | ip_cmsg_recv(msg, skb); |
356 | } | 355 | } |
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c index aafbdfa8d785..bb65779be7a6 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c | |||
@@ -526,7 +526,7 @@ ip4ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
526 | skb2->dst = NULL; | 526 | skb2->dst = NULL; |
527 | skb_pull(skb2, offset); | 527 | skb_pull(skb2, offset); |
528 | skb_reset_network_header(skb2); | 528 | skb_reset_network_header(skb2); |
529 | eiph = skb2->nh.iph; | 529 | eiph = ip_hdr(skb2); |
530 | 530 | ||
531 | /* Try to guess incoming interface */ | 531 | /* Try to guess incoming interface */ |
532 | memset(&fl, 0, sizeof(fl)); | 532 | memset(&fl, 0, sizeof(fl)); |
@@ -625,10 +625,10 @@ static void ip4ip6_dscp_ecn_decapsulate(struct ip6_tnl *t, | |||
625 | __u8 dsfield = ipv6_get_dsfield(ipv6h) & ~INET_ECN_MASK; | 625 | __u8 dsfield = ipv6_get_dsfield(ipv6h) & ~INET_ECN_MASK; |
626 | 626 | ||
627 | if (t->parms.flags & IP6_TNL_F_RCV_DSCP_COPY) | 627 | if (t->parms.flags & IP6_TNL_F_RCV_DSCP_COPY) |
628 | ipv4_change_dsfield(skb->nh.iph, INET_ECN_MASK, dsfield); | 628 | ipv4_change_dsfield(ip_hdr(skb), INET_ECN_MASK, dsfield); |
629 | 629 | ||
630 | if (INET_ECN_is_ce(dsfield)) | 630 | if (INET_ECN_is_ce(dsfield)) |
631 | IP_ECN_set_ce(skb->nh.iph); | 631 | IP_ECN_set_ce(ip_hdr(skb)); |
632 | } | 632 | } |
633 | 633 | ||
634 | static void ip6ip6_dscp_ecn_decapsulate(struct ip6_tnl *t, | 634 | static void ip6ip6_dscp_ecn_decapsulate(struct ip6_tnl *t, |
@@ -944,7 +944,7 @@ static inline int | |||
944 | ip4ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev) | 944 | ip4ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev) |
945 | { | 945 | { |
946 | struct ip6_tnl *t = netdev_priv(dev); | 946 | struct ip6_tnl *t = netdev_priv(dev); |
947 | struct iphdr *iph = skb->nh.iph; | 947 | struct iphdr *iph = ip_hdr(skb); |
948 | int encap_limit = -1; | 948 | int encap_limit = -1; |
949 | struct flowi fl; | 949 | struct flowi fl; |
950 | __u8 dsfield; | 950 | __u8 dsfield; |
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index 62883d41b6c3..e33ac3c3a9ca 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c | |||
@@ -377,7 +377,7 @@ static int ipip6_rcv(struct sk_buff *skb) | |||
377 | if (!pskb_may_pull(skb, sizeof(struct ipv6hdr))) | 377 | if (!pskb_may_pull(skb, sizeof(struct ipv6hdr))) |
378 | goto out; | 378 | goto out; |
379 | 379 | ||
380 | iph = skb->nh.iph; | 380 | iph = ip_hdr(skb); |
381 | 381 | ||
382 | read_lock(&ipip6_lock); | 382 | read_lock(&ipip6_lock); |
383 | if ((tunnel = ipip6_tunnel_lookup(iph->saddr, iph->daddr)) != NULL) { | 383 | if ((tunnel = ipip6_tunnel_lookup(iph->saddr, iph->daddr)) != NULL) { |
@@ -565,7 +565,7 @@ static int ipip6_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
565 | * Push down and install the IPIP header. | 565 | * Push down and install the IPIP header. |
566 | */ | 566 | */ |
567 | 567 | ||
568 | iph = skb->nh.iph; | 568 | iph = ip_hdr(skb); |
569 | iph->version = 4; | 569 | iph->version = 4; |
570 | iph->ihl = sizeof(struct iphdr)>>2; | 570 | iph->ihl = sizeof(struct iphdr)>>2; |
571 | if (mtu > IPV6_MIN_MTU) | 571 | if (mtu > IPV6_MIN_MTU) |
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 87b06a80102b..e991e606ab1f 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c | |||
@@ -178,7 +178,7 @@ try_again: | |||
178 | 178 | ||
179 | if (skb->protocol == htons(ETH_P_IP)) | 179 | if (skb->protocol == htons(ETH_P_IP)) |
180 | ipv6_addr_set(&sin6->sin6_addr, 0, 0, | 180 | ipv6_addr_set(&sin6->sin6_addr, 0, 0, |
181 | htonl(0xffff), skb->nh.iph->saddr); | 181 | htonl(0xffff), ip_hdr(skb)->saddr); |
182 | else { | 182 | else { |
183 | ipv6_addr_copy(&sin6->sin6_addr, &skb->nh.ipv6h->saddr); | 183 | ipv6_addr_copy(&sin6->sin6_addr, &skb->nh.ipv6h->saddr); |
184 | if (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LINKLOCAL) | 184 | if (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LINKLOCAL) |
diff --git a/net/netfilter/nf_conntrack_netbios_ns.c b/net/netfilter/nf_conntrack_netbios_ns.c index bb26a658cc1c..1093478cc007 100644 --- a/net/netfilter/nf_conntrack_netbios_ns.c +++ b/net/netfilter/nf_conntrack_netbios_ns.c | |||
@@ -46,7 +46,7 @@ static int help(struct sk_buff **pskb, unsigned int protoff, | |||
46 | struct nf_conn *ct, enum ip_conntrack_info ctinfo) | 46 | struct nf_conn *ct, enum ip_conntrack_info ctinfo) |
47 | { | 47 | { |
48 | struct nf_conntrack_expect *exp; | 48 | struct nf_conntrack_expect *exp; |
49 | struct iphdr *iph = (*pskb)->nh.iph; | 49 | struct iphdr *iph = ip_hdr(*pskb); |
50 | struct rtable *rt = (struct rtable *)(*pskb)->dst; | 50 | struct rtable *rt = (struct rtable *)(*pskb)->dst; |
51 | struct in_device *in_dev; | 51 | struct in_device *in_dev; |
52 | __be32 mask = 0; | 52 | __be32 mask = 0; |
diff --git a/net/netfilter/xt_DSCP.c b/net/netfilter/xt_DSCP.c index a7cc75aeb38d..de647bd54893 100644 --- a/net/netfilter/xt_DSCP.c +++ b/net/netfilter/xt_DSCP.c | |||
@@ -35,13 +35,13 @@ static unsigned int target(struct sk_buff **pskb, | |||
35 | const void *targinfo) | 35 | const void *targinfo) |
36 | { | 36 | { |
37 | const struct xt_DSCP_info *dinfo = targinfo; | 37 | const struct xt_DSCP_info *dinfo = targinfo; |
38 | u_int8_t dscp = ipv4_get_dsfield((*pskb)->nh.iph) >> XT_DSCP_SHIFT; | 38 | u_int8_t dscp = ipv4_get_dsfield(ip_hdr(*pskb)) >> XT_DSCP_SHIFT; |
39 | 39 | ||
40 | if (dscp != dinfo->dscp) { | 40 | if (dscp != dinfo->dscp) { |
41 | if (!skb_make_writable(pskb, sizeof(struct iphdr))) | 41 | if (!skb_make_writable(pskb, sizeof(struct iphdr))) |
42 | return NF_DROP; | 42 | return NF_DROP; |
43 | 43 | ||
44 | ipv4_change_dsfield((*pskb)->nh.iph, (__u8)(~XT_DSCP_MASK), | 44 | ipv4_change_dsfield(ip_hdr(*pskb), (__u8)(~XT_DSCP_MASK), |
45 | dinfo->dscp << XT_DSCP_SHIFT); | 45 | dinfo->dscp << XT_DSCP_SHIFT); |
46 | 46 | ||
47 | } | 47 | } |
diff --git a/net/netfilter/xt_TCPMSS.c b/net/netfilter/xt_TCPMSS.c index afc0c60e19d5..9e948ce27600 100644 --- a/net/netfilter/xt_TCPMSS.c +++ b/net/netfilter/xt_TCPMSS.c | |||
@@ -145,7 +145,7 @@ xt_tcpmss_target4(struct sk_buff **pskb, | |||
145 | const struct xt_target *target, | 145 | const struct xt_target *target, |
146 | const void *targinfo) | 146 | const void *targinfo) |
147 | { | 147 | { |
148 | struct iphdr *iph = (*pskb)->nh.iph; | 148 | struct iphdr *iph = ip_hdr(*pskb); |
149 | __be16 newlen; | 149 | __be16 newlen; |
150 | int ret; | 150 | int ret; |
151 | 151 | ||
@@ -154,7 +154,7 @@ xt_tcpmss_target4(struct sk_buff **pskb, | |||
154 | if (ret < 0) | 154 | if (ret < 0) |
155 | return NF_DROP; | 155 | return NF_DROP; |
156 | if (ret > 0) { | 156 | if (ret > 0) { |
157 | iph = (*pskb)->nh.iph; | 157 | iph = ip_hdr(*pskb); |
158 | newlen = htons(ntohs(iph->tot_len) + ret); | 158 | newlen = htons(ntohs(iph->tot_len) + ret); |
159 | nf_csum_replace2(&iph->check, iph->tot_len, newlen); | 159 | nf_csum_replace2(&iph->check, iph->tot_len, newlen); |
160 | iph->tot_len = newlen; | 160 | iph->tot_len = newlen; |
diff --git a/net/netfilter/xt_dscp.c b/net/netfilter/xt_dscp.c index 26c7f4ad102a..9ec294cd2436 100644 --- a/net/netfilter/xt_dscp.c +++ b/net/netfilter/xt_dscp.c | |||
@@ -34,7 +34,7 @@ static int match(const struct sk_buff *skb, | |||
34 | int *hotdrop) | 34 | int *hotdrop) |
35 | { | 35 | { |
36 | const struct xt_dscp_info *info = matchinfo; | 36 | const struct xt_dscp_info *info = matchinfo; |
37 | u_int8_t dscp = ipv4_get_dsfield(skb->nh.iph) >> XT_DSCP_SHIFT; | 37 | u_int8_t dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT; |
38 | 38 | ||
39 | return (dscp == info->dscp) ^ !!info->invert; | 39 | return (dscp == info->dscp) ^ !!info->invert; |
40 | } | 40 | } |
diff --git a/net/netfilter/xt_hashlimit.c b/net/netfilter/xt_hashlimit.c index 9f37d593ca38..47af19ab03cf 100644 --- a/net/netfilter/xt_hashlimit.c +++ b/net/netfilter/xt_hashlimit.c | |||
@@ -380,14 +380,14 @@ hashlimit_init_dst(struct xt_hashlimit_htable *hinfo, struct dsthash_dst *dst, | |||
380 | switch (hinfo->family) { | 380 | switch (hinfo->family) { |
381 | case AF_INET: | 381 | case AF_INET: |
382 | if (hinfo->cfg.mode & XT_HASHLIMIT_HASH_DIP) | 382 | if (hinfo->cfg.mode & XT_HASHLIMIT_HASH_DIP) |
383 | dst->addr.ip.dst = skb->nh.iph->daddr; | 383 | dst->addr.ip.dst = ip_hdr(skb)->daddr; |
384 | if (hinfo->cfg.mode & XT_HASHLIMIT_HASH_SIP) | 384 | if (hinfo->cfg.mode & XT_HASHLIMIT_HASH_SIP) |
385 | dst->addr.ip.src = skb->nh.iph->saddr; | 385 | dst->addr.ip.src = ip_hdr(skb)->saddr; |
386 | 386 | ||
387 | if (!(hinfo->cfg.mode & | 387 | if (!(hinfo->cfg.mode & |
388 | (XT_HASHLIMIT_HASH_DPT | XT_HASHLIMIT_HASH_SPT))) | 388 | (XT_HASHLIMIT_HASH_DPT | XT_HASHLIMIT_HASH_SPT))) |
389 | return 0; | 389 | return 0; |
390 | nexthdr = skb->nh.iph->protocol; | 390 | nexthdr = ip_hdr(skb)->protocol; |
391 | break; | 391 | break; |
392 | #if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE) | 392 | #if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE) |
393 | case AF_INET6: | 393 | case AF_INET6: |
diff --git a/net/netfilter/xt_length.c b/net/netfilter/xt_length.c index 32fb998d9bac..65fdb2166996 100644 --- a/net/netfilter/xt_length.c +++ b/net/netfilter/xt_length.c | |||
@@ -31,7 +31,7 @@ match(const struct sk_buff *skb, | |||
31 | int *hotdrop) | 31 | int *hotdrop) |
32 | { | 32 | { |
33 | const struct xt_length_info *info = matchinfo; | 33 | const struct xt_length_info *info = matchinfo; |
34 | u_int16_t pktlen = ntohs(skb->nh.iph->tot_len); | 34 | u_int16_t pktlen = ntohs(ip_hdr(skb)->tot_len); |
35 | 35 | ||
36 | return (pktlen >= info->min && pktlen <= info->max) ^ info->invert; | 36 | return (pktlen >= info->min && pktlen <= info->max) ^ info->invert; |
37 | } | 37 | } |
diff --git a/net/netfilter/xt_pkttype.c b/net/netfilter/xt_pkttype.c index 16e7b0804287..e1409fc5c288 100644 --- a/net/netfilter/xt_pkttype.c +++ b/net/netfilter/xt_pkttype.c | |||
@@ -34,7 +34,7 @@ static int match(const struct sk_buff *skb, | |||
34 | const struct xt_pkttype_info *info = matchinfo; | 34 | const struct xt_pkttype_info *info = matchinfo; |
35 | 35 | ||
36 | if (skb->pkt_type == PACKET_LOOPBACK) | 36 | if (skb->pkt_type == PACKET_LOOPBACK) |
37 | type = (MULTICAST(skb->nh.iph->daddr) | 37 | type = (MULTICAST(ip_hdr(skb)->daddr) |
38 | ? PACKET_MULTICAST | 38 | ? PACKET_MULTICAST |
39 | : PACKET_BROADCAST); | 39 | : PACKET_BROADCAST); |
40 | else | 40 | else |
diff --git a/net/rxrpc/connection.c b/net/rxrpc/connection.c index a7c929a9fdca..e601fa87bb77 100644 --- a/net/rxrpc/connection.c +++ b/net/rxrpc/connection.c | |||
@@ -267,7 +267,7 @@ int rxrpc_connection_lookup(struct rxrpc_peer *peer, | |||
267 | /* fill in the specifics */ | 267 | /* fill in the specifics */ |
268 | candidate->addr.sin_family = AF_INET; | 268 | candidate->addr.sin_family = AF_INET; |
269 | candidate->addr.sin_port = x_port; | 269 | candidate->addr.sin_port = x_port; |
270 | candidate->addr.sin_addr.s_addr = pkt->nh.iph->saddr; | 270 | candidate->addr.sin_addr.s_addr = ip_hdr(pkt)->saddr; |
271 | candidate->in_epoch = x_epoch; | 271 | candidate->in_epoch = x_epoch; |
272 | candidate->out_epoch = x_epoch; | 272 | candidate->out_epoch = x_epoch; |
273 | candidate->in_clientflag = RXRPC_CLIENT_INITIATED; | 273 | candidate->in_clientflag = RXRPC_CLIENT_INITIATED; |
diff --git a/net/rxrpc/transport.c b/net/rxrpc/transport.c index 8e57be2df936..cac078b74068 100644 --- a/net/rxrpc/transport.c +++ b/net/rxrpc/transport.c | |||
@@ -478,7 +478,7 @@ void rxrpc_trans_receive_packet(struct rxrpc_transport *trans) | |||
478 | return; | 478 | return; |
479 | } | 479 | } |
480 | 480 | ||
481 | addr = pkt->nh.iph->saddr; | 481 | addr = ip_hdr(pkt)->saddr; |
482 | port = pkt->h.uh->source; | 482 | port = pkt->h.uh->source; |
483 | 483 | ||
484 | _net("Rx Received UDP packet from %08x:%04hu", | 484 | _net("Rx Received UDP packet from %08x:%04hu", |
@@ -626,7 +626,7 @@ int rxrpc_trans_immediate_abort(struct rxrpc_transport *trans, | |||
626 | memset(&sin,0,sizeof(sin)); | 626 | memset(&sin,0,sizeof(sin)); |
627 | sin.sin_family = AF_INET; | 627 | sin.sin_family = AF_INET; |
628 | sin.sin_port = msg->pkt->h.uh->source; | 628 | sin.sin_port = msg->pkt->h.uh->source; |
629 | sin.sin_addr.s_addr = msg->pkt->nh.iph->saddr; | 629 | sin.sin_addr.s_addr = ip_hdr(msg->pkt)->saddr; |
630 | 630 | ||
631 | msghdr.msg_name = &sin; | 631 | msghdr.msg_name = &sin; |
632 | msghdr.msg_namelen = sizeof(sin); | 632 | msghdr.msg_namelen = sizeof(sin); |
diff --git a/net/sched/cls_rsvp.h b/net/sched/cls_rsvp.h index b6ac0e287872..cb8cf5bfa053 100644 --- a/net/sched/cls_rsvp.h +++ b/net/sched/cls_rsvp.h | |||
@@ -145,7 +145,7 @@ static int rsvp_classify(struct sk_buff *skb, struct tcf_proto *tp, | |||
145 | #if RSVP_DST_LEN == 4 | 145 | #if RSVP_DST_LEN == 4 |
146 | struct ipv6hdr *nhptr = skb->nh.ipv6h; | 146 | struct ipv6hdr *nhptr = skb->nh.ipv6h; |
147 | #else | 147 | #else |
148 | struct iphdr *nhptr = skb->nh.iph; | 148 | struct iphdr *nhptr = ip_hdr(skb); |
149 | #endif | 149 | #endif |
150 | 150 | ||
151 | restart: | 151 | restart: |
diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c index afb3bbd571f2..baca8743c12b 100644 --- a/net/sched/sch_atm.c +++ b/net/sched/sch_atm.c | |||
@@ -503,7 +503,7 @@ static void sch_atm_dequeue(unsigned long data) | |||
503 | } | 503 | } |
504 | D2PRINTK("atm_tc_dequeue: sending on class %p\n",flow); | 504 | D2PRINTK("atm_tc_dequeue: sending on class %p\n",flow); |
505 | /* remove any LL header somebody else has attached */ | 505 | /* remove any LL header somebody else has attached */ |
506 | skb_pull(skb,(char *) skb->nh.iph-(char *) skb->data); | 506 | skb_pull(skb, skb_network_offset(skb)); |
507 | if (skb_headroom(skb) < flow->hdr_len) { | 507 | if (skb_headroom(skb) < flow->hdr_len) { |
508 | struct sk_buff *new; | 508 | struct sk_buff *new; |
509 | 509 | ||
@@ -513,7 +513,7 @@ static void sch_atm_dequeue(unsigned long data) | |||
513 | skb = new; | 513 | skb = new; |
514 | } | 514 | } |
515 | D2PRINTK("sch_atm_dequeue: ip %p, data %p\n", | 515 | D2PRINTK("sch_atm_dequeue: ip %p, data %p\n", |
516 | skb->nh.iph,skb->data); | 516 | skb_network_header(skb), skb->data); |
517 | ATM_SKB(skb)->vcc = flow->vcc; | 517 | ATM_SKB(skb)->vcc = flow->vcc; |
518 | memcpy(skb_push(skb,flow->hdr_len),flow->hdr, | 518 | memcpy(skb_push(skb,flow->hdr_len),flow->hdr, |
519 | flow->hdr_len); | 519 | flow->hdr_len); |
diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c index 96324cf4e6a9..45b5734dd72a 100644 --- a/net/sched/sch_dsmark.c +++ b/net/sched/sch_dsmark.c | |||
@@ -216,7 +216,7 @@ static int dsmark_enqueue(struct sk_buff *skb,struct Qdisc *sch) | |||
216 | /* FIXME: Safe with non-linear skbs? --RR */ | 216 | /* FIXME: Safe with non-linear skbs? --RR */ |
217 | switch (skb->protocol) { | 217 | switch (skb->protocol) { |
218 | case __constant_htons(ETH_P_IP): | 218 | case __constant_htons(ETH_P_IP): |
219 | skb->tc_index = ipv4_get_dsfield(skb->nh.iph) | 219 | skb->tc_index = ipv4_get_dsfield(ip_hdr(skb)) |
220 | & ~INET_ECN_MASK; | 220 | & ~INET_ECN_MASK; |
221 | break; | 221 | break; |
222 | case __constant_htons(ETH_P_IPV6): | 222 | case __constant_htons(ETH_P_IPV6): |
@@ -292,7 +292,7 @@ static struct sk_buff *dsmark_dequeue(struct Qdisc *sch) | |||
292 | 292 | ||
293 | switch (skb->protocol) { | 293 | switch (skb->protocol) { |
294 | case __constant_htons(ETH_P_IP): | 294 | case __constant_htons(ETH_P_IP): |
295 | ipv4_change_dsfield(skb->nh.iph, p->mask[index], | 295 | ipv4_change_dsfield(ip_hdr(skb), p->mask[index], |
296 | p->value[index]); | 296 | p->value[index]); |
297 | break; | 297 | break; |
298 | case __constant_htons(ETH_P_IPV6): | 298 | case __constant_htons(ETH_P_IPV6): |
diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c index 66f32051a99b..02081bc9e0d1 100644 --- a/net/sched/sch_sfq.c +++ b/net/sched/sch_sfq.c | |||
@@ -137,7 +137,7 @@ static unsigned sfq_hash(struct sfq_sched_data *q, struct sk_buff *skb) | |||
137 | switch (skb->protocol) { | 137 | switch (skb->protocol) { |
138 | case __constant_htons(ETH_P_IP): | 138 | case __constant_htons(ETH_P_IP): |
139 | { | 139 | { |
140 | struct iphdr *iph = skb->nh.iph; | 140 | const struct iphdr *iph = ip_hdr(skb); |
141 | h = iph->daddr; | 141 | h = iph->daddr; |
142 | h2 = iph->saddr^iph->protocol; | 142 | h2 = iph->saddr^iph->protocol; |
143 | if (!(iph->frag_off&htons(IP_MF|IP_OFFSET)) && | 143 | if (!(iph->frag_off&htons(IP_MF|IP_OFFSET)) && |
diff --git a/net/sctp/input.c b/net/sctp/input.c index 2b0863aba3fb..595fe32b3d41 100644 --- a/net/sctp/input.c +++ b/net/sctp/input.c | |||
@@ -154,7 +154,7 @@ int sctp_rcv(struct sk_buff *skb) | |||
154 | if (skb->len < sizeof(struct sctp_chunkhdr)) | 154 | if (skb->len < sizeof(struct sctp_chunkhdr)) |
155 | goto discard_it; | 155 | goto discard_it; |
156 | 156 | ||
157 | family = ipver2af(skb->nh.iph->version); | 157 | family = ipver2af(ip_hdr(skb)->version); |
158 | af = sctp_get_af_specific(family); | 158 | af = sctp_get_af_specific(family); |
159 | if (unlikely(!af)) | 159 | if (unlikely(!af)) |
160 | goto discard_it; | 160 | goto discard_it; |
diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c index 5f9b145b0b90..742f9ff42fbf 100644 --- a/net/sctp/ipv6.c +++ b/net/sctp/ipv6.c | |||
@@ -770,9 +770,9 @@ static void sctp_inet6_skb_msgname(struct sk_buff *skb, char *msgname, | |||
770 | 770 | ||
771 | /* Map ipv4 address into v4-mapped-on-v6 address. */ | 771 | /* Map ipv4 address into v4-mapped-on-v6 address. */ |
772 | if (sctp_sk(skb->sk)->v4mapped && | 772 | if (sctp_sk(skb->sk)->v4mapped && |
773 | skb->nh.iph->version == 4) { | 773 | ip_hdr(skb)->version == 4) { |
774 | sctp_v4_map_v6((union sctp_addr *)sin6); | 774 | sctp_v4_map_v6((union sctp_addr *)sin6); |
775 | sin6->sin6_addr.s6_addr32[3] = skb->nh.iph->saddr; | 775 | sin6->sin6_addr.s6_addr32[3] = ip_hdr(skb)->saddr; |
776 | return; | 776 | return; |
777 | } | 777 | } |
778 | 778 | ||
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index e17a823ca90f..08f92ba4ebd7 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
@@ -238,10 +238,10 @@ static void sctp_v4_from_skb(union sctp_addr *addr, struct sk_buff *skb, | |||
238 | sh = (struct sctphdr *) skb->h.raw; | 238 | sh = (struct sctphdr *) skb->h.raw; |
239 | if (is_saddr) { | 239 | if (is_saddr) { |
240 | *port = sh->source; | 240 | *port = sh->source; |
241 | from = &skb->nh.iph->saddr; | 241 | from = &ip_hdr(skb)->saddr; |
242 | } else { | 242 | } else { |
243 | *port = sh->dest; | 243 | *port = sh->dest; |
244 | from = &skb->nh.iph->daddr; | 244 | from = &ip_hdr(skb)->daddr; |
245 | } | 245 | } |
246 | memcpy(&addr->v4.sin_addr.s_addr, from, sizeof(struct in_addr)); | 246 | memcpy(&addr->v4.sin_addr.s_addr, from, sizeof(struct in_addr)); |
247 | } | 247 | } |
@@ -530,7 +530,7 @@ static int sctp_v4_skb_iif(const struct sk_buff *skb) | |||
530 | /* Was this packet marked by Explicit Congestion Notification? */ | 530 | /* Was this packet marked by Explicit Congestion Notification? */ |
531 | static int sctp_v4_is_ce(const struct sk_buff *skb) | 531 | static int sctp_v4_is_ce(const struct sk_buff *skb) |
532 | { | 532 | { |
533 | return INET_ECN_is_ce(skb->nh.iph->tos); | 533 | return INET_ECN_is_ce(ip_hdr(skb)->tos); |
534 | } | 534 | } |
535 | 535 | ||
536 | /* Create and initialize a new sk for the socket returned by accept(). */ | 536 | /* Create and initialize a new sk for the socket returned by accept(). */ |
@@ -739,7 +739,7 @@ static void sctp_inet_skb_msgname(struct sk_buff *skb, char *msgname, int *len) | |||
739 | sin = (struct sockaddr_in *)msgname; | 739 | sin = (struct sockaddr_in *)msgname; |
740 | sh = (struct sctphdr *)skb->h.raw; | 740 | sh = (struct sctphdr *)skb->h.raw; |
741 | sin->sin_port = sh->source; | 741 | sin->sin_port = sh->source; |
742 | sin->sin_addr.s_addr = skb->nh.iph->saddr; | 742 | sin->sin_addr.s_addr = ip_hdr(skb)->saddr; |
743 | } | 743 | } |
744 | } | 744 | } |
745 | 745 | ||
diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c index f7fb29d5a0c7..60c5b59d4c65 100644 --- a/net/sctp/sm_make_chunk.c +++ b/net/sctp/sm_make_chunk.c | |||
@@ -86,7 +86,7 @@ int sctp_chunk_iif(const struct sctp_chunk *chunk) | |||
86 | struct sctp_af *af; | 86 | struct sctp_af *af; |
87 | int iif = 0; | 87 | int iif = 0; |
88 | 88 | ||
89 | af = sctp_get_af_specific(ipver2af(chunk->skb->nh.iph->version)); | 89 | af = sctp_get_af_specific(ipver2af(ip_hdr(chunk->skb)->version)); |
90 | if (af) | 90 | if (af) |
91 | iif = af->skb_iif(chunk->skb); | 91 | iif = af->skb_iif(chunk->skb); |
92 | 92 | ||
@@ -1233,7 +1233,7 @@ struct sctp_association *sctp_make_temp_asoc(const struct sctp_endpoint *ep, | |||
1233 | asoc->temp = 1; | 1233 | asoc->temp = 1; |
1234 | skb = chunk->skb; | 1234 | skb = chunk->skb; |
1235 | /* Create an entry for the source address of the packet. */ | 1235 | /* Create an entry for the source address of the packet. */ |
1236 | af = sctp_get_af_specific(ipver2af(skb->nh.iph->version)); | 1236 | af = sctp_get_af_specific(ipver2af(ip_hdr(skb)->version)); |
1237 | if (unlikely(!af)) | 1237 | if (unlikely(!af)) |
1238 | goto fail; | 1238 | goto fail; |
1239 | af->from_skb(&asoc->c.peer_addr, skb, 1); | 1239 | af->from_skb(&asoc->c.peer_addr, skb, 1); |
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c index e9097cf614ba..bf502c499c81 100644 --- a/net/sctp/sm_statefuns.c +++ b/net/sctp/sm_statefuns.c | |||
@@ -5286,7 +5286,7 @@ static int sctp_eat_data(const struct sctp_association *asoc, | |||
5286 | chunk->ecn_ce_done = 1; | 5286 | chunk->ecn_ce_done = 1; |
5287 | 5287 | ||
5288 | af = sctp_get_af_specific( | 5288 | af = sctp_get_af_specific( |
5289 | ipver2af(chunk->skb->nh.iph->version)); | 5289 | ipver2af(ip_hdr(chunk->skb)->version)); |
5290 | 5290 | ||
5291 | if (af && af->is_ce(chunk->skb) && asoc->peer.ecn_capable) { | 5291 | if (af && af->is_ce(chunk->skb) && asoc->peer.ecn_capable) { |
5292 | /* Do real work as sideffect. */ | 5292 | /* Do real work as sideffect. */ |