ip_select_ident_more(iph, &rt->u.dst, sk, skb_shinfo(skb)->tso_segs); 
ip_select_ident_more(iph, &rt->u.dst, sk, (skb_shinfo(skb)->tso_segs ?: 1) - 1); 
int ip_queue_xmit(struct sk_buff *skb, int ipfragok){	struct sock *sk = skb->sk;	struct inet_sock *inet = inet_sk(sk);	struct ip_options *opt = inet->opt;	struct rtable *rt;	struct iphdr *iph;	/* Skip all of this if the packet is already routed,	 * f.e. by something like SCTP.	 */	rt = (struct rtable *) skb->dst;	if (rt != NULL)		goto packet_routed;	/* Make sure we can route this packet. */	rt = (struct rtable *)__sk_dst_check(sk, 0);	if (rt == NULL) {		u32 daddr;		/* Use correct destination address if we have options. */		daddr = inet->daddr;		if(opt && opt->srr)			daddr = opt->faddr;		{			struct flowi fl = { .oif = sk->sk_bound_dev_if,					    .nl_u = { .ip4_u =						      { .daddr = daddr,							.saddr = inet->saddr,							.tos = RT_CONN_FLAGS(sk) } },					    .proto = sk->sk_protocol,					    .uli_u = { .ports =						       { .sport = inet->sport,							 .dport = inet->dport } } };			/* If this fails, retransmit mechanism of transport layer will			 * keep trying until route appears or the connection times			 * itself out.			 */			if (ip_route_output_flow(&rt, &fl, sk, 0))				goto no_route;		}		sk_setup_caps(sk, &rt->u.dst);	}	skb->dst = dst_clone(&rt->u.dst);packet_routed:	if (opt && opt->is_strictroute && rt->rt_dst != rt->rt_gateway)		goto no_route;	/* OK, we know where to send it, allocate and build IP header. */	iph = (struct iphdr *) skb_push(skb, sizeof(struct iphdr) + (opt ? opt->optlen : 0));	*((__u16 *)iph)	= htons((4 << 12) | (5 << 8) | (inet->tos & 0xff));	iph->tot_len = htons(skb->len);	if (ip_dont_fragment(sk, &rt->u.dst) && !ipfragok)		iph->frag_off = htons(IP_DF);	else		iph->frag_off = 0;	iph->ttl      = ip_select_ttl(inet, &rt->u.dst);	iph->protocol = sk->sk_protocol;	iph->saddr    = rt->rt_src;	iph->daddr    = rt->rt_dst;	skb->nh.iph   = iph;	/* Transport layer set skb->h.foo itself. */	if (opt && opt->optlen) {		iph->ihl += opt->optlen >> 2;		ip_options_build(skb, opt, inet->daddr, rt, 0);	}	ip_select_ident_more(iph, &rt->u.dst, sk, skb_shinfo(skb)->tso_segs);	/* Add an IP checksum. */	ip_send_check(iph);	skb->priority = sk->sk_priority;	return NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev,		       dst_output);no_route:	IP_INC_STATS(IPSTATS_MIB_OUTNOROUTES);	kfree_skb(skb);	return -EHOSTUNREACH;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/89f5f0aeed14ac7245f760b0b96c9269c87bcbbe/ip_output.c/clean/net/ipv4/ip_output.c