*(u32*)hdr = htonl(0x60000000) | fl->fl6_flowlabel; 
int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,	     struct ipv6_txoptions *opt, int ipfragok){	struct ipv6_pinfo *np = sk ? inet6_sk(sk) : NULL;	struct in6_addr *first_hop = &fl->fl6_dst;	struct dst_entry *dst = skb->dst;	struct ipv6hdr *hdr;	u8  proto = fl->proto;	int seg_len = skb->len;	int hlimit;	u32 mtu;	if (opt) {		int head_room;		/* First: exthdrs may take lots of space (~8K for now)		   MAX_HEADER is not enough.		 */		head_room = opt->opt_nflen + opt->opt_flen;		seg_len += head_room;		head_room += sizeof(struct ipv6hdr) + LL_RESERVED_SPACE(dst->dev);		if (skb_headroom(skb) < head_room) {			struct sk_buff *skb2 = skb_realloc_headroom(skb, head_room);			kfree_skb(skb);			skb = skb2;			if (skb == NULL) {					IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS);				return -ENOBUFS;			}			if (sk)				skb_set_owner_w(skb, sk);		}		if (opt->opt_flen)			ipv6_push_frag_opts(skb, opt, &proto);		if (opt->opt_nflen)			ipv6_push_nfrag_opts(skb, opt, &proto, &first_hop);	}	hdr = skb->nh.ipv6h = (struct ipv6hdr*)skb_push(skb, sizeof(struct ipv6hdr));	/*	 *	Fill in the IPv6 header	 */	*(u32*)hdr = htonl(0x60000000) | fl->fl6_flowlabel;	hlimit = -1;	if (np)		hlimit = np->hop_limit;	if (hlimit < 0)		hlimit = dst_metric(dst, RTAX_HOPLIMIT);	if (hlimit < 0)		hlimit = ipv6_get_hoplimit(dst->dev);	hdr->payload_len = htons(seg_len);	hdr->nexthdr = proto;	hdr->hop_limit = hlimit;	ipv6_addr_copy(&hdr->saddr, &fl->fl6_src);	ipv6_addr_copy(&hdr->daddr, first_hop);	mtu = dst_mtu(dst);	if ((skb->len <= mtu) || ipfragok) {		IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS);		return NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev,				dst_output);	}	if (net_ratelimit())		printk(KERN_DEBUG "IPv6: sending pkt_too_big to self\n");	skb->dev = dst->dev;	icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, skb->dev);	IP6_INC_STATS(IPSTATS_MIB_FRAGFAILS);	kfree_skb(skb);	return -EMSGSIZE;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/41a1f8ea4fbfcdc4232f023732584aae2220de31/ip6_output.c/clean/net/ipv6/ip6_output.c