mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	[SK_BUFF]: unions of just one member don't get anything done, kill them
Renaming skb->h to skb->transport_header, skb->nh to skb->network_header and
skb->mac to skb->mac_header, to match the names of the associated helpers
(skb[_[re]set]_{transport,network,mac}_header).
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
			
			
This commit is contained in:
		
							parent
							
								
									cfe1fc7759
								
							
						
					
					
						commit
						b0e380b1d8
					
				
					 46 changed files with 162 additions and 165 deletions
				
			
		| 
						 | 
				
			
			@ -519,9 +519,12 @@ static int arcnet_header(struct sk_buff *skb, struct net_device *dev,
 | 
			
		|||
		 * real header when we do rebuild_header.
 | 
			
		||||
		 */
 | 
			
		||||
		*(uint16_t *) skb_push(skb, 2) = type;
 | 
			
		||||
		if (skb->nh.raw - skb->mac.raw != 2)
 | 
			
		||||
		/*
 | 
			
		||||
		 * XXX: Why not use skb->mac_len?
 | 
			
		||||
		 */
 | 
			
		||||
		if (skb->network_header - skb->mac_header != 2)
 | 
			
		||||
			BUGMSG(D_NORMAL, "arcnet_header: Yikes!  diff (%d) is not 2!\n",
 | 
			
		||||
			       (int)(skb->nh.raw - skb->mac.raw));
 | 
			
		||||
			       (int)(skb->network_header - skb->mac_header));
 | 
			
		||||
		return -2;	/* return error -- can't transmit yet! */
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
| 
						 | 
				
			
			@ -554,11 +557,13 @@ static int arcnet_rebuild_header(struct sk_buff *skb)
 | 
			
		|||
	unsigned short type;
 | 
			
		||||
	uint8_t daddr=0;
 | 
			
		||||
	struct ArcProto *proto;
 | 
			
		||||
 | 
			
		||||
	if (skb->nh.raw - skb->mac.raw != 2) {
 | 
			
		||||
	/*
 | 
			
		||||
	 * XXX: Why not use skb->mac_len?
 | 
			
		||||
	 */
 | 
			
		||||
	if (skb->network_header - skb->mac_header != 2) {
 | 
			
		||||
		BUGMSG(D_NORMAL,
 | 
			
		||||
		     "rebuild_header: shouldn't be here! (hdrsize=%d)\n",
 | 
			
		||||
		     (int)(skb->nh.raw - skb->mac.raw));
 | 
			
		||||
		       "rebuild_header: shouldn't be here! (hdrsize=%d)\n",
 | 
			
		||||
		       (int)(skb->network_header - skb->mac_header));
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	type = *(uint16_t *) skb_pull(skb, 2);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -885,7 +885,7 @@ static int ad_lacpdu_send(struct port *port)
 | 
			
		|||
 | 
			
		||||
	skb->dev = slave->dev;
 | 
			
		||||
	skb_reset_mac_header(skb);
 | 
			
		||||
	skb->nh.raw = skb->mac.raw + ETH_HLEN;
 | 
			
		||||
	skb->network_header = skb->mac_header + ETH_HLEN;
 | 
			
		||||
	skb->protocol = PKT_TYPE_LACPDU;
 | 
			
		||||
	skb->priority = TC_PRIO_CONTROL;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -929,7 +929,7 @@ static int ad_marker_send(struct port *port, struct marker *marker)
 | 
			
		|||
 | 
			
		||||
	skb->dev = slave->dev;
 | 
			
		||||
	skb_reset_mac_header(skb);
 | 
			
		||||
	skb->nh.raw = skb->mac.raw + ETH_HLEN;
 | 
			
		||||
	skb->network_header = skb->mac_header + ETH_HLEN;
 | 
			
		||||
	skb->protocol = PKT_TYPE_LACPDU;
 | 
			
		||||
 | 
			
		||||
	marker_header = (struct marker_header *)skb_put(skb, length);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -896,7 +896,7 @@ static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[])
 | 
			
		|||
		memcpy(data, &pkt, size);
 | 
			
		||||
 | 
			
		||||
		skb_reset_mac_header(skb);
 | 
			
		||||
		skb->nh.raw = skb->mac.raw + ETH_HLEN;
 | 
			
		||||
		skb->network_header = skb->mac_header + ETH_HLEN;
 | 
			
		||||
		skb->protocol = pkt.type;
 | 
			
		||||
		skb->priority = TC_PRIO_CONTROL;
 | 
			
		||||
		skb->dev = slave->dev;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1077,7 +1077,7 @@ void hostap_80211_rx(struct net_device *dev, struct sk_buff *skb,
 | 
			
		|||
		skb2->protocol = __constant_htons(ETH_P_802_3);
 | 
			
		||||
		skb_reset_mac_header(skb2);
 | 
			
		||||
		skb_reset_network_header(skb2);
 | 
			
		||||
		/* skb2->nh.raw += ETH_HLEN; */
 | 
			
		||||
		/* skb2->network_header += ETH_HLEN; */
 | 
			
		||||
		dev_queue_xmit(skb2);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -275,8 +275,8 @@ static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, unsigned short
 | 
			
		|||
	veth->h_vlan_TCI = htons(tag);
 | 
			
		||||
 | 
			
		||||
	skb->protocol = __constant_htons(ETH_P_8021Q);
 | 
			
		||||
	skb->mac.raw -= VLAN_HLEN;
 | 
			
		||||
	skb->nh.raw -= VLAN_HLEN;
 | 
			
		||||
	skb->mac_header -= VLAN_HLEN;
 | 
			
		||||
	skb->network_header -= VLAN_HLEN;
 | 
			
		||||
 | 
			
		||||
	return skb;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,8 +69,8 @@
 | 
			
		|||
 *	NONE: skb is checksummed by protocol or csum is not required.
 | 
			
		||||
 *
 | 
			
		||||
 *	PARTIAL: device is required to csum packet as seen by hard_start_xmit
 | 
			
		||||
 *	from skb->h.raw to the end and to record the checksum
 | 
			
		||||
 *	at skb->h.raw+skb->csum.
 | 
			
		||||
 *	from skb->transport_header to the end and to record the checksum
 | 
			
		||||
 *	at skb->transport_header + skb->csum.
 | 
			
		||||
 *
 | 
			
		||||
 *	Device must show its capabilities in dev->features, set
 | 
			
		||||
 *	at device setup time.
 | 
			
		||||
| 
						 | 
				
			
			@ -188,8 +188,8 @@ enum {
 | 
			
		|||
 *	@dev: Device we arrived on/are leaving by
 | 
			
		||||
 *	@iif: ifindex of device we arrived on
 | 
			
		||||
 *	@h: Transport layer header
 | 
			
		||||
 *	@nh: Network layer header
 | 
			
		||||
 *	@mac: Link layer header
 | 
			
		||||
 *	@network_header: Network layer header
 | 
			
		||||
 *	@mac_header: Link layer header
 | 
			
		||||
 *	@dst: destination entry
 | 
			
		||||
 *	@sp: the security path, used for xfrm
 | 
			
		||||
 *	@cb: Control buffer. Free for use by every layer. Put private vars here
 | 
			
		||||
| 
						 | 
				
			
			@ -236,18 +236,9 @@ struct sk_buff {
 | 
			
		|||
	int			iif;
 | 
			
		||||
	/* 4 byte hole on 64 bit*/
 | 
			
		||||
 | 
			
		||||
	union {
 | 
			
		||||
		unsigned char	*raw;
 | 
			
		||||
	} h;
 | 
			
		||||
 | 
			
		||||
	union {
 | 
			
		||||
		unsigned char	*raw;
 | 
			
		||||
	} nh;
 | 
			
		||||
 | 
			
		||||
	union {
 | 
			
		||||
	  	unsigned char 	*raw;
 | 
			
		||||
	} mac;
 | 
			
		||||
 | 
			
		||||
	unsigned char		*transport_header;
 | 
			
		||||
	unsigned char		*network_header;
 | 
			
		||||
	unsigned char		*mac_header;
 | 
			
		||||
	struct  dst_entry	*dst;
 | 
			
		||||
	struct	sec_path	*sp;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -953,68 +944,68 @@ static inline void skb_reserve(struct sk_buff *skb, int len)
 | 
			
		|||
 | 
			
		||||
static inline unsigned char *skb_transport_header(const struct sk_buff *skb)
 | 
			
		||||
{
 | 
			
		||||
	return skb->h.raw;
 | 
			
		||||
	return skb->transport_header;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void skb_reset_transport_header(struct sk_buff *skb)
 | 
			
		||||
{
 | 
			
		||||
	skb->h.raw = skb->data;
 | 
			
		||||
	skb->transport_header = skb->data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void skb_set_transport_header(struct sk_buff *skb,
 | 
			
		||||
					    const int offset)
 | 
			
		||||
{
 | 
			
		||||
	skb->h.raw = skb->data + offset;
 | 
			
		||||
	skb->transport_header = skb->data + offset;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int skb_transport_offset(const struct sk_buff *skb)
 | 
			
		||||
{
 | 
			
		||||
	return skb->h.raw - skb->data;
 | 
			
		||||
	return skb->transport_header - skb->data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline unsigned char *skb_network_header(const struct sk_buff *skb)
 | 
			
		||||
{
 | 
			
		||||
	return skb->nh.raw;
 | 
			
		||||
	return skb->network_header;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void skb_reset_network_header(struct sk_buff *skb)
 | 
			
		||||
{
 | 
			
		||||
	skb->nh.raw = skb->data;
 | 
			
		||||
	skb->network_header = skb->data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void skb_set_network_header(struct sk_buff *skb, const int offset)
 | 
			
		||||
{
 | 
			
		||||
	skb->nh.raw = skb->data + offset;
 | 
			
		||||
	skb->network_header = skb->data + offset;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int skb_network_offset(const struct sk_buff *skb)
 | 
			
		||||
{
 | 
			
		||||
	return skb->nh.raw - skb->data;
 | 
			
		||||
	return skb->network_header - skb->data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline u32 skb_network_header_len(const struct sk_buff *skb)
 | 
			
		||||
{
 | 
			
		||||
	return skb->h.raw - skb->nh.raw;
 | 
			
		||||
	return skb->transport_header - skb->network_header;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline unsigned char *skb_mac_header(const struct sk_buff *skb)
 | 
			
		||||
{
 | 
			
		||||
	return skb->mac.raw;
 | 
			
		||||
	return skb->mac_header;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int skb_mac_header_was_set(const struct sk_buff *skb)
 | 
			
		||||
{
 | 
			
		||||
	return skb->mac.raw != NULL;
 | 
			
		||||
	return skb->mac_header != NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void skb_reset_mac_header(struct sk_buff *skb)
 | 
			
		||||
{
 | 
			
		||||
	skb->mac.raw = skb->data;
 | 
			
		||||
	skb->mac_header = skb->data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void skb_set_mac_header(struct sk_buff *skb, const int offset)
 | 
			
		||||
{
 | 
			
		||||
	skb->mac.raw = skb->data + offset;
 | 
			
		||||
	skb->mac_header = skb->data + offset;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ static int snap_rcv(struct sk_buff *skb, struct net_device *dev,
 | 
			
		|||
	proto = find_snap_client(skb_transport_header(skb));
 | 
			
		||||
	if (proto) {
 | 
			
		||||
		/* Pass the frame on. */
 | 
			
		||||
		skb->h.raw  += 5;
 | 
			
		||||
		skb->transport_header += 5;
 | 
			
		||||
		skb_pull_rcsum(skb, 5);
 | 
			
		||||
		rc = proto->rcvfunc(skb, dev, &snap_packet_type, orig_dev);
 | 
			
		||||
	} else {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,7 +83,7 @@ static inline struct sk_buff *vlan_check_reorder_header(struct sk_buff *skb)
 | 
			
		|||
			/* Lifted from Gleb's VLAN code... */
 | 
			
		||||
			memmove(skb->data - ETH_HLEN,
 | 
			
		||||
				skb->data - VLAN_ETH_HLEN, 12);
 | 
			
		||||
			skb->mac.raw += VLAN_HLEN;
 | 
			
		||||
			skb->mac_header += VLAN_HLEN;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1383,10 +1383,10 @@ static void atalk_route_packet(struct sk_buff *skb, struct net_device *dev,
 | 
			
		|||
 *	@pt - packet type
 | 
			
		||||
 *
 | 
			
		||||
 *	Receive a packet (in skb) from device dev. This has come from the SNAP
 | 
			
		||||
 *	decoder, and on entry skb->h.raw is the DDP header, skb->len is the DDP
 | 
			
		||||
 *	header, skb->len is the DDP length. The physical headers have been
 | 
			
		||||
 *	extracted. PPP should probably pass frames marked as for this layer.
 | 
			
		||||
 *	[ie ARPHRD_ETHERTALK]
 | 
			
		||||
 *	decoder, and on entry skb->transport_header is the DDP header, skb->len
 | 
			
		||||
 *	is the DDP header, skb->len is the DDP length. The physical headers
 | 
			
		||||
 *	have been extracted. PPP should probably pass frames marked as for this
 | 
			
		||||
 *	layer.  [ie ARPHRD_ETHERTALK]
 | 
			
		||||
 */
 | 
			
		||||
static int atalk_rcv(struct sk_buff *skb, struct net_device *dev,
 | 
			
		||||
		     struct packet_type *pt, struct net_device *orig_dev)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -174,7 +174,7 @@ static int br_nf_pre_routing_finish_ipv6(struct sk_buff *skb)
 | 
			
		|||
	skb->dev = nf_bridge->physindev;
 | 
			
		||||
	if (skb->protocol == htons(ETH_P_8021Q)) {
 | 
			
		||||
		skb_push(skb, VLAN_HLEN);
 | 
			
		||||
		skb->nh.raw -= VLAN_HLEN;
 | 
			
		||||
		skb->network_header -= VLAN_HLEN;
 | 
			
		||||
	}
 | 
			
		||||
	NF_HOOK_THRESH(PF_BRIDGE, NF_BR_PRE_ROUTING, skb, skb->dev, NULL,
 | 
			
		||||
		       br_handle_frame_finish, 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -255,7 +255,7 @@ static int br_nf_pre_routing_finish_bridge(struct sk_buff *skb)
 | 
			
		|||
	else {
 | 
			
		||||
		if (skb->protocol == htons(ETH_P_8021Q)) {
 | 
			
		||||
			skb_pull(skb, VLAN_HLEN);
 | 
			
		||||
			skb->nh.raw += VLAN_HLEN;
 | 
			
		||||
			skb->network_header += VLAN_HLEN;
 | 
			
		||||
		}
 | 
			
		||||
		skb->dst->output(skb);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -325,7 +325,7 @@ static int br_nf_pre_routing_finish(struct sk_buff *skb)
 | 
			
		|||
				if (skb->protocol ==
 | 
			
		||||
				    htons(ETH_P_8021Q)) {
 | 
			
		||||
					skb_push(skb, VLAN_HLEN);
 | 
			
		||||
					skb->nh.raw -= VLAN_HLEN;
 | 
			
		||||
					skb->network_header -= VLAN_HLEN;
 | 
			
		||||
				}
 | 
			
		||||
				NF_HOOK_THRESH(PF_BRIDGE, NF_BR_PRE_ROUTING,
 | 
			
		||||
					       skb, skb->dev, NULL,
 | 
			
		||||
| 
						 | 
				
			
			@ -344,7 +344,7 @@ static int br_nf_pre_routing_finish(struct sk_buff *skb)
 | 
			
		|||
	skb->dev = nf_bridge->physindev;
 | 
			
		||||
	if (skb->protocol == htons(ETH_P_8021Q)) {
 | 
			
		||||
		skb_push(skb, VLAN_HLEN);
 | 
			
		||||
		skb->nh.raw -= VLAN_HLEN;
 | 
			
		||||
		skb->network_header -= VLAN_HLEN;
 | 
			
		||||
	}
 | 
			
		||||
	NF_HOOK_THRESH(PF_BRIDGE, NF_BR_PRE_ROUTING, skb, skb->dev, NULL,
 | 
			
		||||
		       br_handle_frame_finish, 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -497,7 +497,7 @@ static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb,
 | 
			
		|||
 | 
			
		||||
		if (skb->protocol == htons(ETH_P_8021Q)) {
 | 
			
		||||
			skb_pull_rcsum(skb, VLAN_HLEN);
 | 
			
		||||
			skb->nh.raw += VLAN_HLEN;
 | 
			
		||||
			skb->network_header += VLAN_HLEN;
 | 
			
		||||
		}
 | 
			
		||||
		return br_nf_pre_routing_ipv6(hook, skb, in, out, okfn);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -514,7 +514,7 @@ static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb,
 | 
			
		|||
 | 
			
		||||
	if (skb->protocol == htons(ETH_P_8021Q)) {
 | 
			
		||||
		skb_pull_rcsum(skb, VLAN_HLEN);
 | 
			
		||||
		skb->nh.raw += VLAN_HLEN;
 | 
			
		||||
		skb->network_header += VLAN_HLEN;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!pskb_may_pull(skb, sizeof(struct iphdr)))
 | 
			
		||||
| 
						 | 
				
			
			@ -595,7 +595,7 @@ static int br_nf_forward_finish(struct sk_buff *skb)
 | 
			
		|||
	}
 | 
			
		||||
	if (skb->protocol == htons(ETH_P_8021Q)) {
 | 
			
		||||
		skb_push(skb, VLAN_HLEN);
 | 
			
		||||
		skb->nh.raw -= VLAN_HLEN;
 | 
			
		||||
		skb->network_header -= VLAN_HLEN;
 | 
			
		||||
	}
 | 
			
		||||
	NF_HOOK_THRESH(PF_BRIDGE, NF_BR_FORWARD, skb, in,
 | 
			
		||||
		       skb->dev, br_forward_finish, 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -631,7 +631,7 @@ static unsigned int br_nf_forward_ip(unsigned int hook, struct sk_buff **pskb,
 | 
			
		|||
 | 
			
		||||
	if (skb->protocol == htons(ETH_P_8021Q)) {
 | 
			
		||||
		skb_pull(*pskb, VLAN_HLEN);
 | 
			
		||||
		(*pskb)->nh.raw += VLAN_HLEN;
 | 
			
		||||
		(*pskb)->network_header += VLAN_HLEN;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	nf_bridge = skb->nf_bridge;
 | 
			
		||||
| 
						 | 
				
			
			@ -667,13 +667,13 @@ static unsigned int br_nf_forward_arp(unsigned int hook, struct sk_buff **pskb,
 | 
			
		|||
		if (!IS_VLAN_ARP(skb))
 | 
			
		||||
			return NF_ACCEPT;
 | 
			
		||||
		skb_pull(*pskb, VLAN_HLEN);
 | 
			
		||||
		(*pskb)->nh.raw += VLAN_HLEN;
 | 
			
		||||
		(*pskb)->network_header += VLAN_HLEN;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (arp_hdr(skb)->ar_pln != 4) {
 | 
			
		||||
		if (IS_VLAN_ARP(skb)) {
 | 
			
		||||
			skb_push(*pskb, VLAN_HLEN);
 | 
			
		||||
			(*pskb)->nh.raw -= VLAN_HLEN;
 | 
			
		||||
			(*pskb)->network_header -= VLAN_HLEN;
 | 
			
		||||
		}
 | 
			
		||||
		return NF_ACCEPT;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -723,7 +723,7 @@ static unsigned int br_nf_local_out(unsigned int hook, struct sk_buff **pskb,
 | 
			
		|||
	}
 | 
			
		||||
	if (skb->protocol == htons(ETH_P_8021Q)) {
 | 
			
		||||
		skb_push(skb, VLAN_HLEN);
 | 
			
		||||
		skb->nh.raw -= VLAN_HLEN;
 | 
			
		||||
		skb->network_header -= VLAN_HLEN;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	NF_HOOK(PF_BRIDGE, NF_BR_FORWARD, skb, realindev, skb->dev,
 | 
			
		||||
| 
						 | 
				
			
			@ -790,7 +790,7 @@ static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff **pskb,
 | 
			
		|||
 | 
			
		||||
	if (skb->protocol == htons(ETH_P_8021Q)) {
 | 
			
		||||
		skb_pull(skb, VLAN_HLEN);
 | 
			
		||||
		skb->nh.raw += VLAN_HLEN;
 | 
			
		||||
		skb->network_header += VLAN_HLEN;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	nf_bridge_save_header(skb);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1077,7 +1077,7 @@ static void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev)
 | 
			
		|||
				skb_reset_network_header(skb2);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			skb2->h.raw = skb2->nh.raw;
 | 
			
		||||
			skb2->transport_header = skb2->network_header;
 | 
			
		||||
			skb2->pkt_type = PACKET_OUTGOING;
 | 
			
		||||
			ptype->func(skb2, skb->dev, ptype, skb->dev);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1207,7 +1207,7 @@ struct sk_buff *skb_gso_segment(struct sk_buff *skb, int features)
 | 
			
		|||
	BUG_ON(skb_shinfo(skb)->frag_list);
 | 
			
		||||
 | 
			
		||||
	skb_reset_mac_header(skb);
 | 
			
		||||
	skb->mac_len = skb->nh.raw - skb->mac.raw;
 | 
			
		||||
	skb->mac_len = skb->network_header - skb->mac_header;
 | 
			
		||||
	__skb_pull(skb, skb->mac_len);
 | 
			
		||||
 | 
			
		||||
	if (unlikely(skb->ip_summed != CHECKSUM_PARTIAL)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1774,7 +1774,7 @@ int netif_receive_skb(struct sk_buff *skb)
 | 
			
		|||
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
	skb_reset_transport_header(skb);
 | 
			
		||||
	skb->mac_len = skb->nh.raw - skb->mac.raw;
 | 
			
		||||
	skb->mac_len = skb->network_header - skb->mac_header;
 | 
			
		||||
 | 
			
		||||
	pt_prev = NULL;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2358,7 +2358,7 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev,
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	skb_set_network_header(skb, skb->tail - skb->data);
 | 
			
		||||
	skb->h.raw = skb->nh.raw + sizeof(struct iphdr);
 | 
			
		||||
	skb->transport_header = skb->network_header + sizeof(struct iphdr);
 | 
			
		||||
	skb_put(skb, sizeof(struct iphdr) + sizeof(struct udphdr));
 | 
			
		||||
 | 
			
		||||
	iph = ip_hdr(skb);
 | 
			
		||||
| 
						 | 
				
			
			@ -2391,9 +2391,9 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev,
 | 
			
		|||
	iph->check = 0;
 | 
			
		||||
	iph->check = ip_fast_csum((void *)iph, iph->ihl);
 | 
			
		||||
	skb->protocol = protocol;
 | 
			
		||||
	skb->mac.raw = (skb->nh.raw - ETH_HLEN -
 | 
			
		||||
			pkt_dev->nr_labels * sizeof(u32) -
 | 
			
		||||
			VLAN_TAG_SIZE(pkt_dev) - SVLAN_TAG_SIZE(pkt_dev));
 | 
			
		||||
	skb->mac_header = (skb->network_header - ETH_HLEN -
 | 
			
		||||
			   pkt_dev->nr_labels * sizeof(u32) -
 | 
			
		||||
			   VLAN_TAG_SIZE(pkt_dev) - SVLAN_TAG_SIZE(pkt_dev));
 | 
			
		||||
	skb->dev = odev;
 | 
			
		||||
	skb->pkt_type = PACKET_HOST;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2697,7 +2697,7 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev,
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	skb_set_network_header(skb, skb->tail - skb->data);
 | 
			
		||||
	skb->h.raw = skb->nh.raw + sizeof(struct ipv6hdr);
 | 
			
		||||
	skb->transport_header = skb->network_header + sizeof(struct ipv6hdr);
 | 
			
		||||
	skb_put(skb, sizeof(struct ipv6hdr) + sizeof(struct udphdr));
 | 
			
		||||
 | 
			
		||||
	iph = ipv6_hdr(skb);
 | 
			
		||||
| 
						 | 
				
			
			@ -2738,9 +2738,9 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev,
 | 
			
		|||
	ipv6_addr_copy(&iph->daddr, &pkt_dev->cur_in6_daddr);
 | 
			
		||||
	ipv6_addr_copy(&iph->saddr, &pkt_dev->cur_in6_saddr);
 | 
			
		||||
 | 
			
		||||
	skb->mac.raw = (skb->nh.raw - ETH_HLEN -
 | 
			
		||||
			pkt_dev->nr_labels * sizeof(u32) -
 | 
			
		||||
			VLAN_TAG_SIZE(pkt_dev) - SVLAN_TAG_SIZE(pkt_dev));
 | 
			
		||||
	skb->mac_header = (skb->network_header - ETH_HLEN -
 | 
			
		||||
			   pkt_dev->nr_labels * sizeof(u32) -
 | 
			
		||||
			   VLAN_TAG_SIZE(pkt_dev) - SVLAN_TAG_SIZE(pkt_dev));
 | 
			
		||||
	skb->protocol = protocol;
 | 
			
		||||
	skb->dev = odev;
 | 
			
		||||
	skb->pkt_type = PACKET_HOST;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -396,9 +396,9 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
 | 
			
		|||
	n->sk = NULL;
 | 
			
		||||
	C(tstamp);
 | 
			
		||||
	C(dev);
 | 
			
		||||
	C(h);
 | 
			
		||||
	C(nh);
 | 
			
		||||
	C(mac);
 | 
			
		||||
	C(transport_header);
 | 
			
		||||
	C(network_header);
 | 
			
		||||
	C(mac_header);
 | 
			
		||||
	C(dst);
 | 
			
		||||
	dst_clone(skb->dst);
 | 
			
		||||
	C(sp);
 | 
			
		||||
| 
						 | 
				
			
			@ -461,9 +461,9 @@ static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
 | 
			
		|||
#ifdef CONFIG_INET
 | 
			
		||||
	new->sp		= secpath_get(old->sp);
 | 
			
		||||
#endif
 | 
			
		||||
	new->h.raw	= old->h.raw + offset;
 | 
			
		||||
	new->nh.raw	= old->nh.raw + offset;
 | 
			
		||||
	new->mac.raw	= old->mac.raw + offset;
 | 
			
		||||
	new->transport_header = old->transport_header + offset;
 | 
			
		||||
	new->network_header   = old->network_header + offset;
 | 
			
		||||
	new->mac_header	      = old->mac_header + offset;
 | 
			
		||||
	memcpy(new->cb, old->cb, sizeof(old->cb));
 | 
			
		||||
	new->local_df	= old->local_df;
 | 
			
		||||
	new->fclone	= SKB_FCLONE_UNAVAILABLE;
 | 
			
		||||
| 
						 | 
				
			
			@ -639,9 +639,9 @@ int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail,
 | 
			
		|||
	skb->end      = data + size;
 | 
			
		||||
	skb->data    += off;
 | 
			
		||||
	skb->tail    += off;
 | 
			
		||||
	skb->mac.raw += off;
 | 
			
		||||
	skb->h.raw   += off;
 | 
			
		||||
	skb->nh.raw  += off;
 | 
			
		||||
	skb->transport_header += off;
 | 
			
		||||
	skb->network_header   += off;
 | 
			
		||||
	skb->mac_header	      += off;
 | 
			
		||||
	skb->cloned   = 0;
 | 
			
		||||
	skb->nohdr    = 0;
 | 
			
		||||
	atomic_set(&skb_shinfo(skb)->dataref, 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -1906,7 +1906,8 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features)
 | 
			
		|||
		skb_reserve(nskb, headroom);
 | 
			
		||||
		skb_reset_mac_header(nskb);
 | 
			
		||||
		skb_set_network_header(nskb, skb->mac_len);
 | 
			
		||||
		nskb->h.raw = nskb->nh.raw + skb_network_header_len(skb);
 | 
			
		||||
		nskb->transport_header = (nskb->network_header +
 | 
			
		||||
					  skb_network_header_len(skb));
 | 
			
		||||
		memcpy(skb_put(nskb, doffset), skb->data, doffset);
 | 
			
		||||
 | 
			
		||||
		if (!sg) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -793,7 +793,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
 | 
			
		|||
		skb2->protocol = __constant_htons(ETH_P_802_3);
 | 
			
		||||
		skb_reset_mac_header(skb2);
 | 
			
		||||
		skb_reset_network_header(skb2);
 | 
			
		||||
		/* skb2->nh.raw += ETH_HLEN; */
 | 
			
		||||
		/* skb2->network_header += ETH_HLEN; */
 | 
			
		||||
		dev_queue_xmit(skb2);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -181,9 +181,9 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb)
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
	((struct iphdr*)work_buf)->protocol = ah->nexthdr;
 | 
			
		||||
	skb->nh.raw += ah_hlen;
 | 
			
		||||
	skb->network_header += ah_hlen;
 | 
			
		||||
	memcpy(skb_network_header(skb), work_buf, ihl);
 | 
			
		||||
	skb->h.raw = skb->nh.raw;
 | 
			
		||||
	skb->transport_header = skb->network_header;
 | 
			
		||||
	__skb_pull(skb, ah_hlen + ihl);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -333,7 +333,7 @@ static struct sk_buff *igmpv3_newpack(struct net_device *dev, int size)
 | 
			
		|||
	((u8*)&pip[1])[2] = 0;
 | 
			
		||||
	((u8*)&pip[1])[3] = 0;
 | 
			
		||||
 | 
			
		||||
	skb->h.raw = skb->nh.raw + sizeof(struct iphdr) + 4;
 | 
			
		||||
	skb->transport_header = skb->network_header + sizeof(struct iphdr) + 4;
 | 
			
		||||
	skb_put(skb, sizeof(*pig));
 | 
			
		||||
	pig = igmpv3_report_hdr(skb);
 | 
			
		||||
	pig->type = IGMPV3_HOST_MEMBERSHIP_REPORT;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -828,7 +828,7 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
 | 
			
		|||
		old_iph = ip_hdr(skb);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	skb->h.raw = skb->nh.raw;
 | 
			
		||||
	skb->transport_header = skb->network_header;
 | 
			
		||||
	skb_push(skb, gre_hlen);
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
	memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -582,7 +582,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
 | 
			
		|||
		skb_reserve(skb2, ll_rs);
 | 
			
		||||
		skb_put(skb2, len + hlen);
 | 
			
		||||
		skb_reset_network_header(skb2);
 | 
			
		||||
		skb2->h.raw = skb2->nh.raw + hlen;
 | 
			
		||||
		skb2->transport_header = skb2->network_header + hlen;
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 *	Charge the memory for the fragment to any owner
 | 
			
		||||
| 
						 | 
				
			
			@ -713,7 +713,7 @@ static inline int ip_ufo_append_data(struct sock *sk,
 | 
			
		|||
		skb_reset_network_header(skb);
 | 
			
		||||
 | 
			
		||||
		/* initialize protocol header pointer */
 | 
			
		||||
		skb->h.raw = skb->nh.raw + fragheaderlen;
 | 
			
		||||
		skb->transport_header = skb->network_header + fragheaderlen;
 | 
			
		||||
 | 
			
		||||
		skb->ip_summed = CHECKSUM_PARTIAL;
 | 
			
		||||
		skb->csum = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -918,7 +918,8 @@ int ip_append_data(struct sock *sk,
 | 
			
		|||
			 */
 | 
			
		||||
			data = skb_put(skb, fraglen);
 | 
			
		||||
			skb_set_network_header(skb, exthdrlen);
 | 
			
		||||
			skb->h.raw = skb->nh.raw + fragheaderlen;
 | 
			
		||||
			skb->transport_header = (skb->network_header +
 | 
			
		||||
						 fragheaderlen);
 | 
			
		||||
			data += fragheaderlen;
 | 
			
		||||
 | 
			
		||||
			if (fraggap) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1112,8 +1113,8 @@ ssize_t	ip_append_page(struct sock *sk, struct page *page,
 | 
			
		|||
			 */
 | 
			
		||||
			skb_put(skb, fragheaderlen + fraggap);
 | 
			
		||||
			skb_reset_network_header(skb);
 | 
			
		||||
			skb->h.raw = skb->nh.raw + fragheaderlen;
 | 
			
		||||
 | 
			
		||||
			skb->transport_header = (skb->network_header +
 | 
			
		||||
						 fragheaderlen);
 | 
			
		||||
			if (fraggap) {
 | 
			
		||||
				skb->csum = skb_copy_and_csum_bits(skb_prev,
 | 
			
		||||
								   maxfraglen,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,7 +87,7 @@ static int ipcomp_input(struct xfrm_state *x, struct sk_buff *skb)
 | 
			
		|||
	iph = ip_hdr(skb);
 | 
			
		||||
	ipch = (void *)skb->data;
 | 
			
		||||
	iph->protocol = ipch->nexthdr;
 | 
			
		||||
	skb->h.raw = skb->nh.raw + sizeof(*ipch);
 | 
			
		||||
	skb->transport_header = skb->network_header + sizeof(*ipch);
 | 
			
		||||
	__skb_pull(skb, sizeof(*ipch));
 | 
			
		||||
	err = ipcomp_decompress(x, skb);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -485,7 +485,7 @@ static int ipip_rcv(struct sk_buff *skb)
 | 
			
		|||
 | 
			
		||||
		secpath_reset(skb);
 | 
			
		||||
 | 
			
		||||
		skb->mac.raw = skb->nh.raw;
 | 
			
		||||
		skb->mac_header = skb->network_header;
 | 
			
		||||
		skb_reset_network_header(skb);
 | 
			
		||||
		skb->protocol = htons(ETH_P_IP);
 | 
			
		||||
		skb->pkt_type = PACKET_HOST;
 | 
			
		||||
| 
						 | 
				
			
			@ -617,7 +617,7 @@ static int ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
 | 
			
		|||
		old_iph = ip_hdr(skb);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	skb->h.raw = skb->nh.raw;
 | 
			
		||||
	skb->transport_header = skb->network_header;
 | 
			
		||||
	skb_push(skb, sizeof(struct iphdr));
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
	memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -597,7 +597,7 @@ static int ipmr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert)
 | 
			
		|||
	msg->im_msgtype = assert;
 | 
			
		||||
	igmp->code 	=	0;
 | 
			
		||||
	ip_hdr(skb)->tot_len = htons(skb->len);			/* Fix the length */
 | 
			
		||||
	skb->h.raw = skb->nh.raw;
 | 
			
		||||
	skb->transport_header = skb->network_header;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (mroute_socket == NULL) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1102,7 +1102,7 @@ static void ip_encap(struct sk_buff *skb, __be32 saddr, __be32 daddr)
 | 
			
		|||
	struct iphdr *old_iph = ip_hdr(skb);
 | 
			
		||||
 | 
			
		||||
	skb_push(skb, sizeof(struct iphdr));
 | 
			
		||||
	skb->h.raw = skb->nh.raw;
 | 
			
		||||
	skb->transport_header = skb->network_header;
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
	iph = ip_hdr(skb);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1461,7 +1461,7 @@ int pim_rcv_v1(struct sk_buff * skb)
 | 
			
		|||
	if (reg_dev == NULL)
 | 
			
		||||
		goto drop;
 | 
			
		||||
 | 
			
		||||
	skb->mac.raw = skb->nh.raw;
 | 
			
		||||
	skb->mac_header = skb->network_header;
 | 
			
		||||
	skb_pull(skb, (u8*)encap - skb->data);
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
	skb->dev = reg_dev;
 | 
			
		||||
| 
						 | 
				
			
			@ -1517,7 +1517,7 @@ static int pim_rcv(struct sk_buff * skb)
 | 
			
		|||
	if (reg_dev == NULL)
 | 
			
		||||
		goto drop;
 | 
			
		||||
 | 
			
		||||
	skb->mac.raw = skb->nh.raw;
 | 
			
		||||
	skb->mac_header = skb->network_header;
 | 
			
		||||
	skb_pull(skb, (u8*)encap - skb->data);
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
	skb->dev = reg_dev;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -323,7 +323,7 @@ ip_vs_tunnel_xmit(struct sk_buff *skb, struct ip_vs_conn *cp,
 | 
			
		|||
	struct iphdr  *old_iph = ip_hdr(skb);
 | 
			
		||||
	u8     tos = old_iph->tos;
 | 
			
		||||
	__be16 df = old_iph->frag_off;
 | 
			
		||||
	unsigned char *old_h = skb_transport_header(skb);
 | 
			
		||||
	unsigned char *old_transport_header = skb->transport_header;
 | 
			
		||||
	struct iphdr  *iph;			/* Our new IP header */
 | 
			
		||||
	int    max_headroom;			/* The extra header space needed */
 | 
			
		||||
	int    mtu;
 | 
			
		||||
| 
						 | 
				
			
			@ -381,7 +381,7 @@ ip_vs_tunnel_xmit(struct sk_buff *skb, struct ip_vs_conn *cp,
 | 
			
		|||
		old_iph = ip_hdr(skb);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	skb->h.raw = old_h;
 | 
			
		||||
	skb->transport_header = old_transport_header;
 | 
			
		||||
 | 
			
		||||
	/* fix old IP header checksum */
 | 
			
		||||
	ip_send_check(old_iph);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -399,7 +399,7 @@ ipt_log_packet(unsigned int pf,
 | 
			
		|||
		/* MAC logging for input chain only. */
 | 
			
		||||
		printk("MAC=");
 | 
			
		||||
		if (skb->dev && skb->dev->hard_header_len
 | 
			
		||||
		    && skb->mac.raw != skb->nh.raw) {
 | 
			
		||||
		    && skb->mac_header != skb->network_header) {
 | 
			
		||||
			int i;
 | 
			
		||||
			const unsigned char *p = skb_mac_header(skb);
 | 
			
		||||
			for (i = 0; i < skb->dev->hard_header_len; i++,p++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -251,7 +251,7 @@ static void ipt_ulog_packet(unsigned int hooknum,
 | 
			
		|||
		*(pm->prefix) = '\0';
 | 
			
		||||
 | 
			
		||||
	if (in && in->hard_header_len > 0
 | 
			
		||||
	    && skb->mac.raw != skb->nh.raw
 | 
			
		||||
	    && skb->mac_header != skb->network_header
 | 
			
		||||
	    && in->hard_header_len <= ULOG_MAC_LEN) {
 | 
			
		||||
		memcpy(pm->mac, skb_mac_header(skb), in->hard_header_len);
 | 
			
		||||
		pm->mac_len = in->hard_header_len;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -297,7 +297,7 @@ static int raw_send_hdrinc(struct sock *sk, void *from, size_t length,
 | 
			
		|||
 | 
			
		||||
	skb->ip_summed = CHECKSUM_NONE;
 | 
			
		||||
 | 
			
		||||
	skb->h.raw = skb->nh.raw;
 | 
			
		||||
	skb->transport_header = skb->network_header;
 | 
			
		||||
	err = memcpy_fromiovecend((void *)iph, from, 0, length);
 | 
			
		||||
	if (err)
 | 
			
		||||
		goto error_fault;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ static int xfrm4_beet_output(struct xfrm_state *x, struct sk_buff *skb)
 | 
			
		|||
	int hdrlen, optlen;
 | 
			
		||||
 | 
			
		||||
	iph = ip_hdr(skb);
 | 
			
		||||
	skb->h.raw = skb->nh.raw;
 | 
			
		||||
	skb->transport_header = skb->network_header;
 | 
			
		||||
 | 
			
		||||
	hdrlen = 0;
 | 
			
		||||
	optlen = iph->ihl * 4 - sizeof(*iph);
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ static int xfrm4_beet_output(struct xfrm_state *x, struct sk_buff *skb)
 | 
			
		|||
	skb_push(skb, x->props.header_len + hdrlen);
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
	top_iph = ip_hdr(skb);
 | 
			
		||||
	skb->h.raw += sizeof(*iph) - hdrlen;
 | 
			
		||||
	skb->transport_header += sizeof(*iph) - hdrlen;
 | 
			
		||||
 | 
			
		||||
	memmove(top_iph, iph, sizeof(*iph));
 | 
			
		||||
	if (unlikely(optlen)) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,9 +26,7 @@ static int xfrm4_transport_output(struct xfrm_state *x, struct sk_buff *skb)
 | 
			
		|||
	struct iphdr *iph = ip_hdr(skb);
 | 
			
		||||
	int ihl = iph->ihl * 4;
 | 
			
		||||
 | 
			
		||||
	skb->h.raw = skb->nh.raw;
 | 
			
		||||
	skb->h.raw += ihl;
 | 
			
		||||
 | 
			
		||||
	skb->transport_header = skb->network_header + ihl;
 | 
			
		||||
	skb_push(skb, x->props.header_len);
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
	memmove(skb_network_header(skb), iph, ihl);
 | 
			
		||||
| 
						 | 
				
			
			@ -47,10 +45,10 @@ static int xfrm4_transport_input(struct xfrm_state *x, struct sk_buff *skb)
 | 
			
		|||
{
 | 
			
		||||
	int ihl = skb->data - skb_transport_header(skb);
 | 
			
		||||
 | 
			
		||||
	if (skb->h.raw != skb->nh.raw) {
 | 
			
		||||
	if (skb->transport_header != skb->network_header) {
 | 
			
		||||
		memmove(skb_transport_header(skb),
 | 
			
		||||
			skb_network_header(skb), ihl);
 | 
			
		||||
		skb->nh.raw = skb->h.raw;
 | 
			
		||||
		skb->network_header = skb->transport_header;
 | 
			
		||||
	}
 | 
			
		||||
	ip_hdr(skb)->tot_len = htons(skb->len + ihl);
 | 
			
		||||
	skb_reset_transport_header(skb);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ static int xfrm4_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
 | 
			
		|||
	int flags;
 | 
			
		||||
 | 
			
		||||
	iph = ip_hdr(skb);
 | 
			
		||||
	skb->h.raw = skb->nh.raw;
 | 
			
		||||
	skb->transport_header = skb->network_header;
 | 
			
		||||
 | 
			
		||||
	skb_push(skb, x->props.header_len);
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -316,8 +316,8 @@ static int ah6_input(struct xfrm_state *x, struct sk_buff *skb)
 | 
			
		|||
	 *
 | 
			
		||||
	 * To erase AH:
 | 
			
		||||
	 * Keeping copy of cleared headers. After AH processing,
 | 
			
		||||
	 * Moving the pointer of skb->nh.raw by using skb_pull as long as AH
 | 
			
		||||
	 * header length. Then copy back the copy as long as hdr_len
 | 
			
		||||
	 * Moving the pointer of skb->network_header by using skb_pull as long
 | 
			
		||||
	 * as AH header length. Then copy back the copy as long as hdr_len
 | 
			
		||||
	 * If destination header following AH exists, copy it into after [Ext2].
 | 
			
		||||
	 *
 | 
			
		||||
	 * |<>|[IPv6][Ext1][Ext2][Dest][Payload]
 | 
			
		||||
| 
						 | 
				
			
			@ -384,9 +384,9 @@ static int ah6_input(struct xfrm_state *x, struct sk_buff *skb)
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	skb->nh.raw += ah_hlen;
 | 
			
		||||
	skb->network_header += ah_hlen;
 | 
			
		||||
	memcpy(skb_network_header(skb), tmp_hdr, hdr_len);
 | 
			
		||||
	skb->h.raw = skb->nh.raw;
 | 
			
		||||
	skb->transport_header = skb->network_header;
 | 
			
		||||
	__skb_pull(skb, ah_hlen + hdr_len);
 | 
			
		||||
 | 
			
		||||
	kfree(tmp_hdr);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -306,7 +306,7 @@ static int ipv6_destopt_rcv(struct sk_buff **skbp)
 | 
			
		|||
	if (ip6_parse_tlv(tlvprocdestopt_lst, skbp)) {
 | 
			
		||||
		dst_release(dst);
 | 
			
		||||
		skb = *skbp;
 | 
			
		||||
		skb->h.raw += (skb_transport_header(skb)[1] + 1) << 3;
 | 
			
		||||
		skb->transport_header += (skb_transport_header(skb)[1] + 1) << 3;
 | 
			
		||||
		opt = IP6CB(skb);
 | 
			
		||||
#ifdef CONFIG_IPV6_MIP6
 | 
			
		||||
		opt->nhoff = dstbuf;
 | 
			
		||||
| 
						 | 
				
			
			@ -444,7 +444,7 @@ static int ipv6_rthdr_rcv(struct sk_buff **skbp)
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		opt->lastopt = opt->srcrt = skb_network_header_len(skb);
 | 
			
		||||
		skb->h.raw += (hdr->hdrlen + 1) << 3;
 | 
			
		||||
		skb->transport_header += (hdr->hdrlen + 1) << 3;
 | 
			
		||||
		opt->dst0 = opt->dst1;
 | 
			
		||||
		opt->dst1 = 0;
 | 
			
		||||
		opt->nhoff = (&hdr->nexthdr) - skb_network_header(skb);
 | 
			
		||||
| 
						 | 
				
			
			@ -752,7 +752,7 @@ int ipv6_parse_hopopts(struct sk_buff **skbp)
 | 
			
		|||
	opt->hop = sizeof(struct ipv6hdr);
 | 
			
		||||
	if (ip6_parse_tlv(tlvprochopopt_lst, skbp)) {
 | 
			
		||||
		skb = *skbp;
 | 
			
		||||
		skb->h.raw += (skb_transport_header(skb)[1] + 1) << 3;
 | 
			
		||||
		skb->transport_header += (skb_transport_header(skb)[1] + 1) << 3;
 | 
			
		||||
		opt = IP6CB(skb);
 | 
			
		||||
		opt->nhoff = sizeof(struct ipv6hdr);
 | 
			
		||||
		return 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -101,7 +101,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
 | 
			
		|||
	if (hdr->version != 6)
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	skb->h.raw = skb->nh.raw + sizeof(*hdr);
 | 
			
		||||
	skb->transport_header = skb->network_header + sizeof(*hdr);
 | 
			
		||||
	IP6CB(skb)->nhoff = offsetof(struct ipv6hdr, nexthdr);
 | 
			
		||||
 | 
			
		||||
	pkt_len = ntohs(hdr->payload_len);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -733,7 +733,8 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *))
 | 
			
		|||
		skb_put(frag, len + hlen + sizeof(struct frag_hdr));
 | 
			
		||||
		skb_reset_network_header(frag);
 | 
			
		||||
		fh = (struct frag_hdr *)(skb_network_header(frag) + hlen);
 | 
			
		||||
		frag->h.raw = frag->nh.raw + hlen + sizeof(struct frag_hdr);
 | 
			
		||||
		frag->transport_header = (frag->network_header + hlen +
 | 
			
		||||
					  sizeof(struct frag_hdr));
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 *	Charge the memory for the fragment to any owner
 | 
			
		||||
| 
						 | 
				
			
			@ -761,7 +762,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *))
 | 
			
		|||
		/*
 | 
			
		||||
		 *	Copy a block of the IP datagram.
 | 
			
		||||
		 */
 | 
			
		||||
		if (skb_copy_bits(skb, ptr, frag->h.raw, len))
 | 
			
		||||
		if (skb_copy_bits(skb, ptr, skb_transport_header(skb), len))
 | 
			
		||||
			BUG();
 | 
			
		||||
		left -= len;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -976,7 +977,7 @@ static inline int ip6_ufo_append_data(struct sock *sk,
 | 
			
		|||
		skb_reset_network_header(skb);
 | 
			
		||||
 | 
			
		||||
		/* initialize protocol header pointer */
 | 
			
		||||
		skb->h.raw = skb->nh.raw + fragheaderlen;
 | 
			
		||||
		skb->transport_header = skb->network_header + fragheaderlen;
 | 
			
		||||
 | 
			
		||||
		skb->ip_summed = CHECKSUM_PARTIAL;
 | 
			
		||||
		skb->csum = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -1198,8 +1199,8 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
 | 
			
		|||
			data = skb_put(skb, fraglen);
 | 
			
		||||
			skb_set_network_header(skb, exthdrlen);
 | 
			
		||||
			data += fragheaderlen;
 | 
			
		||||
			skb->h.raw = skb->nh.raw + fragheaderlen;
 | 
			
		||||
 | 
			
		||||
			skb->transport_header = (skb->network_header +
 | 
			
		||||
						 fragheaderlen);
 | 
			
		||||
			if (fraggap) {
 | 
			
		||||
				skb->csum = skb_copy_and_csum_bits(
 | 
			
		||||
					skb_prev, maxfraglen,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -701,7 +701,7 @@ static int ip6_tnl_rcv(struct sk_buff *skb, __u16 protocol,
 | 
			
		|||
			goto discard;
 | 
			
		||||
		}
 | 
			
		||||
		secpath_reset(skb);
 | 
			
		||||
		skb->mac.raw = skb->nh.raw;
 | 
			
		||||
		skb->mac_header = skb->network_header;
 | 
			
		||||
		skb_reset_network_header(skb);
 | 
			
		||||
		skb->protocol = htons(protocol);
 | 
			
		||||
		skb->pkt_type = PACKET_HOST;
 | 
			
		||||
| 
						 | 
				
			
			@ -898,7 +898,7 @@ static int ip6_tnl_xmit2(struct sk_buff *skb,
 | 
			
		|||
	dst_release(skb->dst);
 | 
			
		||||
	skb->dst = dst_clone(dst);
 | 
			
		||||
 | 
			
		||||
	skb->h.raw = skb->nh.raw;
 | 
			
		||||
	skb->transport_header = skb->network_header;
 | 
			
		||||
 | 
			
		||||
	proto = fl->proto;
 | 
			
		||||
	if (encap_limit >= 0) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,7 +81,7 @@ static int ipcomp6_input(struct xfrm_state *x, struct sk_buff *skb)
 | 
			
		|||
	/* Remove ipcomp header and decompress original payload */
 | 
			
		||||
	iph = ipv6_hdr(skb);
 | 
			
		||||
	ipch = (void *)skb->data;
 | 
			
		||||
	skb->h.raw = skb->nh.raw + sizeof(*ipch);
 | 
			
		||||
	skb->transport_header = skb->network_header + sizeof(*ipch);
 | 
			
		||||
	__skb_pull(skb, sizeof(*ipch));
 | 
			
		||||
 | 
			
		||||
	/* decompression */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -396,7 +396,7 @@ ip6t_log_packet(unsigned int pf,
 | 
			
		|||
		/* MAC logging for input chain only. */
 | 
			
		||||
		printk("MAC=");
 | 
			
		||||
		if (skb->dev && (len = skb->dev->hard_header_len) &&
 | 
			
		||||
		    skb->mac.raw != skb->nh.raw) {
 | 
			
		||||
		    skb->mac_header != skb->network_header) {
 | 
			
		||||
			const unsigned char *p = skb_mac_header(skb);
 | 
			
		||||
			int i;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -630,8 +630,8 @@ nf_ct_frag6_reasm(struct nf_ct_frag6_queue *fq, struct net_device *dev)
 | 
			
		|||
	skb_network_header(head)[fq->nhoffset] = skb_transport_header(head)[0];
 | 
			
		||||
	memmove(head->head + sizeof(struct frag_hdr), head->head,
 | 
			
		||||
		(head->data - head->head) - sizeof(struct frag_hdr));
 | 
			
		||||
	head->mac.raw += sizeof(struct frag_hdr);
 | 
			
		||||
	head->nh.raw += sizeof(struct frag_hdr);
 | 
			
		||||
	head->mac_header += sizeof(struct frag_hdr);
 | 
			
		||||
	head->network_header += sizeof(struct frag_hdr);
 | 
			
		||||
 | 
			
		||||
	skb_shinfo(head)->frag_list = head->next;
 | 
			
		||||
	skb_reset_transport_header(head);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -583,7 +583,7 @@ static int rawv6_send_hdrinc(struct sock *sk, void *from, int length,
 | 
			
		|||
 | 
			
		||||
	skb->ip_summed = CHECKSUM_NONE;
 | 
			
		||||
 | 
			
		||||
	skb->h.raw = skb->nh.raw;
 | 
			
		||||
	skb->transport_header = skb->network_header;
 | 
			
		||||
	err = memcpy_fromiovecend((void *)iph, from, 0, length);
 | 
			
		||||
	if (err)
 | 
			
		||||
		goto error_fault;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -646,11 +646,11 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff **skb_in,
 | 
			
		|||
	/* We have to remove fragment header from datagram and to relocate
 | 
			
		||||
	 * header in order to calculate ICV correctly. */
 | 
			
		||||
	nhoff = fq->nhoffset;
 | 
			
		||||
	skb_network_header(head)[nhoff] = head->h.raw[0];
 | 
			
		||||
	skb_network_header(head)[nhoff] = skb_transport_header(head)[0];
 | 
			
		||||
	memmove(head->head + sizeof(struct frag_hdr), head->head,
 | 
			
		||||
		(head->data - head->head) - sizeof(struct frag_hdr));
 | 
			
		||||
	head->mac.raw += sizeof(struct frag_hdr);
 | 
			
		||||
	head->nh.raw += sizeof(struct frag_hdr);
 | 
			
		||||
	head->mac_header += sizeof(struct frag_hdr);
 | 
			
		||||
	head->network_header += sizeof(struct frag_hdr);
 | 
			
		||||
 | 
			
		||||
	skb_shinfo(head)->frag_list = head->next;
 | 
			
		||||
	skb_reset_transport_header(head);
 | 
			
		||||
| 
						 | 
				
			
			@ -732,7 +732,7 @@ static int ipv6_frag_rcv(struct sk_buff **skbp)
 | 
			
		|||
 | 
			
		||||
	if (!(fhdr->frag_off & htons(0xFFF9))) {
 | 
			
		||||
		/* It is not a fragmented frame */
 | 
			
		||||
		skb->h.raw += sizeof(struct frag_hdr);
 | 
			
		||||
		skb->transport_header += sizeof(struct frag_hdr);
 | 
			
		||||
		IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), IPSTATS_MIB_REASMOKS);
 | 
			
		||||
 | 
			
		||||
		IP6CB(skb)->nhoff = (u8 *)fhdr - skb_network_header(skb);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -382,7 +382,7 @@ static int ipip6_rcv(struct sk_buff *skb)
 | 
			
		|||
	read_lock(&ipip6_lock);
 | 
			
		||||
	if ((tunnel = ipip6_tunnel_lookup(iph->saddr, iph->daddr)) != NULL) {
 | 
			
		||||
		secpath_reset(skb);
 | 
			
		||||
		skb->mac.raw = skb->nh.raw;
 | 
			
		||||
		skb->mac_header = skb->network_header;
 | 
			
		||||
		skb_reset_network_header(skb);
 | 
			
		||||
		IPCB(skb)->flags = 0;
 | 
			
		||||
		skb->protocol = htons(ETH_P_IPV6);
 | 
			
		||||
| 
						 | 
				
			
			@ -553,7 +553,7 @@ static int ipip6_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
 | 
			
		|||
		iph6 = ipv6_hdr(skb);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	skb->h.raw = skb->nh.raw;
 | 
			
		||||
	skb->transport_header = skb->network_header;
 | 
			
		||||
	skb_push(skb, sizeof(struct iphdr));
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
	memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,8 +48,8 @@ static int xfrm6_beet_output(struct xfrm_state *x, struct sk_buff *skb)
 | 
			
		|||
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
	top_iph = ipv6_hdr(skb);
 | 
			
		||||
	skb->h.raw = skb->nh.raw + sizeof(struct ipv6hdr);
 | 
			
		||||
	skb->nh.raw += offsetof(struct ipv6hdr, nexthdr);
 | 
			
		||||
	skb->transport_header = skb->network_header + sizeof(struct ipv6hdr);
 | 
			
		||||
	skb->network_header += offsetof(struct ipv6hdr, nexthdr);
 | 
			
		||||
 | 
			
		||||
	ipv6_addr_copy(&top_iph->saddr, (struct in6_addr *)&x->props.saddr);
 | 
			
		||||
	ipv6_addr_copy(&top_iph->daddr, (struct in6_addr *)&x->id.daddr);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,10 +54,10 @@ static int xfrm6_transport_input(struct xfrm_state *x, struct sk_buff *skb)
 | 
			
		|||
{
 | 
			
		||||
	int ihl = skb->data - skb_transport_header(skb);
 | 
			
		||||
 | 
			
		||||
	if (skb->h.raw != skb->nh.raw) {
 | 
			
		||||
	if (skb->transport_header != skb->network_header) {
 | 
			
		||||
		memmove(skb_transport_header(skb),
 | 
			
		||||
			skb_network_header(skb), ihl);
 | 
			
		||||
		skb->nh.raw = skb->h.raw;
 | 
			
		||||
		skb->network_header = skb->transport_header;
 | 
			
		||||
	}
 | 
			
		||||
	ipv6_hdr(skb)->payload_len = htons(skb->len + ihl -
 | 
			
		||||
					   sizeof(struct ipv6hdr));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,8 +55,8 @@ static int xfrm6_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
 | 
			
		|||
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
	top_iph = ipv6_hdr(skb);
 | 
			
		||||
	skb->h.raw = skb->nh.raw + sizeof(struct ipv6hdr);
 | 
			
		||||
	skb->nh.raw += offsetof(struct ipv6hdr, nexthdr);
 | 
			
		||||
	skb->transport_header = skb->network_header + sizeof(struct ipv6hdr);
 | 
			
		||||
	skb->network_header   += offsetof(struct ipv6hdr, nexthdr);
 | 
			
		||||
 | 
			
		||||
	top_iph->version = 6;
 | 
			
		||||
	if (xdst->route->ops->family == AF_INET6) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -112,7 +112,7 @@ static inline int llc_fixup_skb(struct sk_buff *skb)
 | 
			
		|||
	if (unlikely(!pskb_may_pull(skb, llc_len)))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	skb->h.raw += llc_len;
 | 
			
		||||
	skb->transport_header += llc_len;
 | 
			
		||||
	skb_pull(skb, llc_len);
 | 
			
		||||
	if (skb->protocol == htons(ETH_P_802_2)) {
 | 
			
		||||
		__be16 pdulen = eth_hdr(skb)->h_proto;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -114,22 +114,22 @@ On receive:
 | 
			
		|||
-----------
 | 
			
		||||
 | 
			
		||||
Incoming, dev->hard_header!=NULL
 | 
			
		||||
   mac.raw -> ll header
 | 
			
		||||
   data    -> data
 | 
			
		||||
   mac_header -> ll header
 | 
			
		||||
   data       -> data
 | 
			
		||||
 | 
			
		||||
Outgoing, dev->hard_header!=NULL
 | 
			
		||||
   mac.raw -> ll header
 | 
			
		||||
   data    -> ll header
 | 
			
		||||
   mac_header -> ll header
 | 
			
		||||
   data       -> ll header
 | 
			
		||||
 | 
			
		||||
Incoming, dev->hard_header==NULL
 | 
			
		||||
   mac.raw -> UNKNOWN position. It is very likely, that it points to ll header.
 | 
			
		||||
	      PPP makes it, that is wrong, because introduce assymetry
 | 
			
		||||
	      between rx and tx paths.
 | 
			
		||||
   data    -> data
 | 
			
		||||
   mac_header -> UNKNOWN position. It is very likely, that it points to ll
 | 
			
		||||
		 header.  PPP makes it, that is wrong, because introduce
 | 
			
		||||
                 assymetry between rx and tx paths.
 | 
			
		||||
   data       -> data
 | 
			
		||||
 | 
			
		||||
Outgoing, dev->hard_header==NULL
 | 
			
		||||
   mac.raw -> data. ll header is still not built!
 | 
			
		||||
   data    -> data
 | 
			
		||||
   mac_header -> data. ll header is still not built!
 | 
			
		||||
   data       -> data
 | 
			
		||||
 | 
			
		||||
Resume
 | 
			
		||||
  If dev->hard_header==NULL we are unlikely to restore sensible ll header.
 | 
			
		||||
| 
						 | 
				
			
			@ -139,12 +139,12 @@ On transmit:
 | 
			
		|||
------------
 | 
			
		||||
 | 
			
		||||
dev->hard_header != NULL
 | 
			
		||||
   mac.raw -> ll header
 | 
			
		||||
   data    -> ll header
 | 
			
		||||
   mac_header -> ll header
 | 
			
		||||
   data       -> ll header
 | 
			
		||||
 | 
			
		||||
dev->hard_header == NULL (ll header is added by device, we cannot control it)
 | 
			
		||||
   mac.raw -> data
 | 
			
		||||
   data -> data
 | 
			
		||||
   mac_header -> data
 | 
			
		||||
   data       -> data
 | 
			
		||||
 | 
			
		||||
   We should set nh.raw on output to correct posistion,
 | 
			
		||||
   packet classifier depends on it.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -522,14 +522,14 @@ void sctp_v4_err(struct sk_buff *skb, __u32 info)
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	/* Fix up skb to look at the embedded net header. */
 | 
			
		||||
	saveip = skb->nh.raw;
 | 
			
		||||
	savesctp  = skb->h.raw;
 | 
			
		||||
	saveip = skb->network_header;
 | 
			
		||||
	savesctp = skb->transport_header;
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
	skb_set_transport_header(skb, ihlen);
 | 
			
		||||
	sk = sctp_err_lookup(AF_INET, skb, sctp_hdr(skb), &asoc, &transport);
 | 
			
		||||
	/* Put back, the original pointers. */
 | 
			
		||||
	skb->nh.raw = saveip;
 | 
			
		||||
	skb->h.raw = savesctp;
 | 
			
		||||
	skb->network_header = saveip;
 | 
			
		||||
	skb->transport_header = savesctp;
 | 
			
		||||
	if (!sk) {
 | 
			
		||||
		ICMP_INC_STATS_BH(ICMP_MIB_INERRORS);
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -132,14 +132,14 @@ SCTP_STATIC void sctp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
 | 
			
		|||
	idev = in6_dev_get(skb->dev);
 | 
			
		||||
 | 
			
		||||
	/* Fix up skb to look at the embedded net header. */
 | 
			
		||||
	saveip = skb->nh.raw;
 | 
			
		||||
	savesctp  = skb->h.raw;
 | 
			
		||||
	saveip	 = skb->network_header;
 | 
			
		||||
	savesctp = skb->transport_header;
 | 
			
		||||
	skb_reset_network_header(skb);
 | 
			
		||||
	skb_set_transport_header(skb, offset);
 | 
			
		||||
	sk = sctp_err_lookup(AF_INET6, skb, sctp_hdr(skb), &asoc, &transport);
 | 
			
		||||
	/* Put back, the original pointers. */
 | 
			
		||||
	skb->nh.raw = saveip;
 | 
			
		||||
	skb->h.raw = savesctp;
 | 
			
		||||
	skb->network_header   = saveip;
 | 
			
		||||
	skb->transport_header = savesctp;
 | 
			
		||||
	if (!sk) {
 | 
			
		||||
		ICMP6_INC_STATS_BH(idev, ICMP6_MIB_INERRORS);
 | 
			
		||||
		goto out;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue