]> git.karo-electronics.de Git - mv-sheeva.git/blob - net/ipv4/ip_output.c
net: ip_append_data() optim
[mv-sheeva.git] / net / ipv4 / ip_output.c
1 /*
2  * INET         An implementation of the TCP/IP protocol suite for the LINUX
3  *              operating system.  INET is implemented using the  BSD Socket
4  *              interface as the means of communication with the user level.
5  *
6  *              The Internet Protocol (IP) output module.
7  *
8  * Authors:     Ross Biro
9  *              Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
10  *              Donald Becker, <becker@super.org>
11  *              Alan Cox, <Alan.Cox@linux.org>
12  *              Richard Underwood
13  *              Stefan Becker, <stefanb@yello.ping.de>
14  *              Jorge Cwik, <jorge@laser.satlink.net>
15  *              Arnt Gulbrandsen, <agulbra@nvg.unit.no>
16  *              Hirokazu Takahashi, <taka@valinux.co.jp>
17  *
18  *      See ip_input.c for original log
19  *
20  *      Fixes:
21  *              Alan Cox        :       Missing nonblock feature in ip_build_xmit.
22  *              Mike Kilburn    :       htons() missing in ip_build_xmit.
23  *              Bradford Johnson:       Fix faulty handling of some frames when
24  *                                      no route is found.
25  *              Alexander Demenshin:    Missing sk/skb free in ip_queue_xmit
26  *                                      (in case if packet not accepted by
27  *                                      output firewall rules)
28  *              Mike McLagan    :       Routing by source
29  *              Alexey Kuznetsov:       use new route cache
30  *              Andi Kleen:             Fix broken PMTU recovery and remove
31  *                                      some redundant tests.
32  *      Vitaly E. Lavrov        :       Transparent proxy revived after year coma.
33  *              Andi Kleen      :       Replace ip_reply with ip_send_reply.
34  *              Andi Kleen      :       Split fast and slow ip_build_xmit path
35  *                                      for decreased register pressure on x86
36  *                                      and more readibility.
37  *              Marc Boucher    :       When call_out_firewall returns FW_QUEUE,
38  *                                      silently drop skb instead of failing with -EPERM.
39  *              Detlev Wengorz  :       Copy protocol for fragments.
40  *              Hirokazu Takahashi:     HW checksumming for outgoing UDP
41  *                                      datagrams.
42  *              Hirokazu Takahashi:     sendfile() on UDP works now.
43  */
44
45 #include <asm/uaccess.h>
46 #include <asm/system.h>
47 #include <linux/module.h>
48 #include <linux/types.h>
49 #include <linux/kernel.h>
50 #include <linux/mm.h>
51 #include <linux/string.h>
52 #include <linux/errno.h>
53 #include <linux/highmem.h>
54 #include <linux/slab.h>
55
56 #include <linux/socket.h>
57 #include <linux/sockios.h>
58 #include <linux/in.h>
59 #include <linux/inet.h>
60 #include <linux/netdevice.h>
61 #include <linux/etherdevice.h>
62 #include <linux/proc_fs.h>
63 #include <linux/stat.h>
64 #include <linux/init.h>
65
66 #include <net/snmp.h>
67 #include <net/ip.h>
68 #include <net/protocol.h>
69 #include <net/route.h>
70 #include <net/xfrm.h>
71 #include <linux/skbuff.h>
72 #include <net/sock.h>
73 #include <net/arp.h>
74 #include <net/icmp.h>
75 #include <net/checksum.h>
76 #include <net/inetpeer.h>
77 #include <linux/igmp.h>
78 #include <linux/netfilter_ipv4.h>
79 #include <linux/netfilter_bridge.h>
80 #include <linux/mroute.h>
81 #include <linux/netlink.h>
82 #include <linux/tcp.h>
83
84 int sysctl_ip_default_ttl __read_mostly = IPDEFTTL;
85
86 /* Generate a checksum for an outgoing IP datagram. */
87 __inline__ void ip_send_check(struct iphdr *iph)
88 {
89         iph->check = 0;
90         iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl);
91 }
92 EXPORT_SYMBOL(ip_send_check);
93
94 int __ip_local_out(struct sk_buff *skb)
95 {
96         struct iphdr *iph = ip_hdr(skb);
97
98         iph->tot_len = htons(skb->len);
99         ip_send_check(iph);
100         return nf_hook(NFPROTO_IPV4, NF_INET_LOCAL_OUT, skb, NULL,
101                        skb_dst(skb)->dev, dst_output);
102 }
103
104 int ip_local_out(struct sk_buff *skb)
105 {
106         int err;
107
108         err = __ip_local_out(skb);
109         if (likely(err == 1))
110                 err = dst_output(skb);
111
112         return err;
113 }
114 EXPORT_SYMBOL_GPL(ip_local_out);
115
116 /* dev_loopback_xmit for use with netfilter. */
117 static int ip_dev_loopback_xmit(struct sk_buff *newskb)
118 {
119         skb_reset_mac_header(newskb);
120         __skb_pull(newskb, skb_network_offset(newskb));
121         newskb->pkt_type = PACKET_LOOPBACK;
122         newskb->ip_summed = CHECKSUM_UNNECESSARY;
123         WARN_ON(!skb_dst(newskb));
124         netif_rx_ni(newskb);
125         return 0;
126 }
127
128 static inline int ip_select_ttl(struct inet_sock *inet, struct dst_entry *dst)
129 {
130         int ttl = inet->uc_ttl;
131
132         if (ttl < 0)
133                 ttl = dst_metric(dst, RTAX_HOPLIMIT);
134         return ttl;
135 }
136
137 /*
138  *              Add an ip header to a skbuff and send it out.
139  *
140  */
141 int ip_build_and_send_pkt(struct sk_buff *skb, struct sock *sk,
142                           __be32 saddr, __be32 daddr, struct ip_options *opt)
143 {
144         struct inet_sock *inet = inet_sk(sk);
145         struct rtable *rt = skb_rtable(skb);
146         struct iphdr *iph;
147
148         /* Build the IP header. */
149         skb_push(skb, sizeof(struct iphdr) + (opt ? opt->optlen : 0));
150         skb_reset_network_header(skb);
151         iph = ip_hdr(skb);
152         iph->version  = 4;
153         iph->ihl      = 5;
154         iph->tos      = inet->tos;
155         if (ip_dont_fragment(sk, &rt->dst))
156                 iph->frag_off = htons(IP_DF);
157         else
158                 iph->frag_off = 0;
159         iph->ttl      = ip_select_ttl(inet, &rt->dst);
160         iph->daddr    = rt->rt_dst;
161         iph->saddr    = rt->rt_src;
162         iph->protocol = sk->sk_protocol;
163         ip_select_ident(iph, &rt->dst, sk);
164
165         if (opt && opt->optlen) {
166                 iph->ihl += opt->optlen>>2;
167                 ip_options_build(skb, opt, daddr, rt, 0);
168         }
169
170         skb->priority = sk->sk_priority;
171         skb->mark = sk->sk_mark;
172
173         /* Send it out. */
174         return ip_local_out(skb);
175 }
176 EXPORT_SYMBOL_GPL(ip_build_and_send_pkt);
177
178 static inline int ip_finish_output2(struct sk_buff *skb)
179 {
180         struct dst_entry *dst = skb_dst(skb);
181         struct rtable *rt = (struct rtable *)dst;
182         struct net_device *dev = dst->dev;
183         unsigned int hh_len = LL_RESERVED_SPACE(dev);
184
185         if (rt->rt_type == RTN_MULTICAST) {
186                 IP_UPD_PO_STATS(dev_net(dev), IPSTATS_MIB_OUTMCAST, skb->len);
187         } else if (rt->rt_type == RTN_BROADCAST)
188                 IP_UPD_PO_STATS(dev_net(dev), IPSTATS_MIB_OUTBCAST, skb->len);
189
190         /* Be paranoid, rather than too clever. */
191         if (unlikely(skb_headroom(skb) < hh_len && dev->header_ops)) {
192                 struct sk_buff *skb2;
193
194                 skb2 = skb_realloc_headroom(skb, LL_RESERVED_SPACE(dev));
195                 if (skb2 == NULL) {
196                         kfree_skb(skb);
197                         return -ENOMEM;
198                 }
199                 if (skb->sk)
200                         skb_set_owner_w(skb2, skb->sk);
201                 kfree_skb(skb);
202                 skb = skb2;
203         }
204
205         if (dst->hh)
206                 return neigh_hh_output(dst->hh, skb);
207         else if (dst->neighbour)
208                 return dst->neighbour->output(skb);
209
210         if (net_ratelimit())
211                 printk(KERN_DEBUG "ip_finish_output2: No header cache and no neighbour!\n");
212         kfree_skb(skb);
213         return -EINVAL;
214 }
215
216 static inline int ip_skb_dst_mtu(struct sk_buff *skb)
217 {
218         struct inet_sock *inet = skb->sk ? inet_sk(skb->sk) : NULL;
219
220         return (inet && inet->pmtudisc == IP_PMTUDISC_PROBE) ?
221                skb_dst(skb)->dev->mtu : dst_mtu(skb_dst(skb));
222 }
223
224 static int ip_finish_output(struct sk_buff *skb)
225 {
226 #if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM)
227         /* Policy lookup after SNAT yielded a new policy */
228         if (skb_dst(skb)->xfrm != NULL) {
229                 IPCB(skb)->flags |= IPSKB_REROUTED;
230                 return dst_output(skb);
231         }
232 #endif
233         if (skb->len > ip_skb_dst_mtu(skb) && !skb_is_gso(skb))
234                 return ip_fragment(skb, ip_finish_output2);
235         else
236                 return ip_finish_output2(skb);
237 }
238
239 int ip_mc_output(struct sk_buff *skb)
240 {
241         struct sock *sk = skb->sk;
242         struct rtable *rt = skb_rtable(skb);
243         struct net_device *dev = rt->dst.dev;
244
245         /*
246          *      If the indicated interface is up and running, send the packet.
247          */
248         IP_UPD_PO_STATS(dev_net(dev), IPSTATS_MIB_OUT, skb->len);
249
250         skb->dev = dev;
251         skb->protocol = htons(ETH_P_IP);
252
253         /*
254          *      Multicasts are looped back for other local users
255          */
256
257         if (rt->rt_flags&RTCF_MULTICAST) {
258                 if (sk_mc_loop(sk)
259 #ifdef CONFIG_IP_MROUTE
260                 /* Small optimization: do not loopback not local frames,
261                    which returned after forwarding; they will be  dropped
262                    by ip_mr_input in any case.
263                    Note, that local frames are looped back to be delivered
264                    to local recipients.
265
266                    This check is duplicated in ip_mr_input at the moment.
267                  */
268                     &&
269                     ((rt->rt_flags & RTCF_LOCAL) ||
270                      !(IPCB(skb)->flags & IPSKB_FORWARDED))
271 #endif
272                    ) {
273                         struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC);
274                         if (newskb)
275                                 NF_HOOK(NFPROTO_IPV4, NF_INET_POST_ROUTING,
276                                         newskb, NULL, newskb->dev,
277                                         ip_dev_loopback_xmit);
278                 }
279
280                 /* Multicasts with ttl 0 must not go beyond the host */
281
282                 if (ip_hdr(skb)->ttl == 0) {
283                         kfree_skb(skb);
284                         return 0;
285                 }
286         }
287
288         if (rt->rt_flags&RTCF_BROADCAST) {
289                 struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC);
290                 if (newskb)
291                         NF_HOOK(NFPROTO_IPV4, NF_INET_POST_ROUTING, newskb,
292                                 NULL, newskb->dev, ip_dev_loopback_xmit);
293         }
294
295         return NF_HOOK_COND(NFPROTO_IPV4, NF_INET_POST_ROUTING, skb, NULL,
296                             skb->dev, ip_finish_output,
297                             !(IPCB(skb)->flags & IPSKB_REROUTED));
298 }
299
300 int ip_output(struct sk_buff *skb)
301 {
302         struct net_device *dev = skb_dst(skb)->dev;
303
304         IP_UPD_PO_STATS(dev_net(dev), IPSTATS_MIB_OUT, skb->len);
305
306         skb->dev = dev;
307         skb->protocol = htons(ETH_P_IP);
308
309         return NF_HOOK_COND(NFPROTO_IPV4, NF_INET_POST_ROUTING, skb, NULL, dev,
310                             ip_finish_output,
311                             !(IPCB(skb)->flags & IPSKB_REROUTED));
312 }
313
314 int ip_queue_xmit(struct sk_buff *skb)
315 {
316         struct sock *sk = skb->sk;
317         struct inet_sock *inet = inet_sk(sk);
318         struct ip_options *opt = inet->opt;
319         struct rtable *rt;
320         struct iphdr *iph;
321         int res;
322
323         /* Skip all of this if the packet is already routed,
324          * f.e. by something like SCTP.
325          */
326         rcu_read_lock();
327         rt = skb_rtable(skb);
328         if (rt != NULL)
329                 goto packet_routed;
330
331         /* Make sure we can route this packet. */
332         rt = (struct rtable *)__sk_dst_check(sk, 0);
333         if (rt == NULL) {
334                 __be32 daddr;
335
336                 /* Use correct destination address if we have options. */
337                 daddr = inet->inet_daddr;
338                 if(opt && opt->srr)
339                         daddr = opt->faddr;
340
341                 {
342                         struct flowi fl = { .oif = sk->sk_bound_dev_if,
343                                             .mark = sk->sk_mark,
344                                             .nl_u = { .ip4_u =
345                                                       { .daddr = daddr,
346                                                         .saddr = inet->inet_saddr,
347                                                         .tos = RT_CONN_FLAGS(sk) } },
348                                             .proto = sk->sk_protocol,
349                                             .flags = inet_sk_flowi_flags(sk),
350                                             .uli_u = { .ports =
351                                                        { .sport = inet->inet_sport,
352                                                          .dport = inet->inet_dport } } };
353
354                         /* If this fails, retransmit mechanism of transport layer will
355                          * keep trying until route appears or the connection times
356                          * itself out.
357                          */
358                         security_sk_classify_flow(sk, &fl);
359                         if (ip_route_output_flow(sock_net(sk), &rt, &fl, sk, 0))
360                                 goto no_route;
361                 }
362                 sk_setup_caps(sk, &rt->dst);
363         }
364         skb_dst_set_noref(skb, &rt->dst);
365
366 packet_routed:
367         if (opt && opt->is_strictroute && rt->rt_dst != rt->rt_gateway)
368                 goto no_route;
369
370         /* OK, we know where to send it, allocate and build IP header. */
371         skb_push(skb, sizeof(struct iphdr) + (opt ? opt->optlen : 0));
372         skb_reset_network_header(skb);
373         iph = ip_hdr(skb);
374         *((__be16 *)iph) = htons((4 << 12) | (5 << 8) | (inet->tos & 0xff));
375         if (ip_dont_fragment(sk, &rt->dst) && !skb->local_df)
376                 iph->frag_off = htons(IP_DF);
377         else
378                 iph->frag_off = 0;
379         iph->ttl      = ip_select_ttl(inet, &rt->dst);
380         iph->protocol = sk->sk_protocol;
381         iph->saddr    = rt->rt_src;
382         iph->daddr    = rt->rt_dst;
383         /* Transport layer set skb->h.foo itself. */
384
385         if (opt && opt->optlen) {
386                 iph->ihl += opt->optlen >> 2;
387                 ip_options_build(skb, opt, inet->inet_daddr, rt, 0);
388         }
389
390         ip_select_ident_more(iph, &rt->dst, sk,
391                              (skb_shinfo(skb)->gso_segs ?: 1) - 1);
392
393         skb->priority = sk->sk_priority;
394         skb->mark = sk->sk_mark;
395
396         res = ip_local_out(skb);
397         rcu_read_unlock();
398         return res;
399
400 no_route:
401         rcu_read_unlock();
402         IP_INC_STATS(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
403         kfree_skb(skb);
404         return -EHOSTUNREACH;
405 }
406 EXPORT_SYMBOL(ip_queue_xmit);
407
408
409 static void ip_copy_metadata(struct sk_buff *to, struct sk_buff *from)
410 {
411         to->pkt_type = from->pkt_type;
412         to->priority = from->priority;
413         to->protocol = from->protocol;
414         skb_dst_drop(to);
415         skb_dst_copy(to, from);
416         to->dev = from->dev;
417         to->mark = from->mark;
418
419         /* Copy the flags to each fragment. */
420         IPCB(to)->flags = IPCB(from)->flags;
421
422 #ifdef CONFIG_NET_SCHED
423         to->tc_index = from->tc_index;
424 #endif
425         nf_copy(to, from);
426 #if defined(CONFIG_NETFILTER_XT_TARGET_TRACE) || \
427     defined(CONFIG_NETFILTER_XT_TARGET_TRACE_MODULE)
428         to->nf_trace = from->nf_trace;
429 #endif
430 #if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
431         to->ipvs_property = from->ipvs_property;
432 #endif
433         skb_copy_secmark(to, from);
434 }
435
436 /*
437  *      This IP datagram is too large to be sent in one piece.  Break it up into
438  *      smaller pieces (each of size equal to IP header plus
439  *      a block of the data of the original IP data part) that will yet fit in a
440  *      single device frame, and queue such a frame for sending.
441  */
442
443 int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *))
444 {
445         struct iphdr *iph;
446         int ptr;
447         struct net_device *dev;
448         struct sk_buff *skb2;
449         unsigned int mtu, hlen, left, len, ll_rs;
450         int offset;
451         __be16 not_last_frag;
452         struct rtable *rt = skb_rtable(skb);
453         int err = 0;
454
455         dev = rt->dst.dev;
456
457         /*
458          *      Point into the IP datagram header.
459          */
460
461         iph = ip_hdr(skb);
462
463         if (unlikely((iph->frag_off & htons(IP_DF)) && !skb->local_df)) {
464                 IP_INC_STATS(dev_net(dev), IPSTATS_MIB_FRAGFAILS);
465                 icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED,
466                           htonl(ip_skb_dst_mtu(skb)));
467                 kfree_skb(skb);
468                 return -EMSGSIZE;
469         }
470
471         /*
472          *      Setup starting values.
473          */
474
475         hlen = iph->ihl * 4;
476         mtu = dst_mtu(&rt->dst) - hlen; /* Size of data space */
477 #ifdef CONFIG_BRIDGE_NETFILTER
478         if (skb->nf_bridge)
479                 mtu -= nf_bridge_mtu_reduction(skb);
480 #endif
481         IPCB(skb)->flags |= IPSKB_FRAG_COMPLETE;
482
483         /* When frag_list is given, use it. First, check its validity:
484          * some transformers could create wrong frag_list or break existing
485          * one, it is not prohibited. In this case fall back to copying.
486          *
487          * LATER: this step can be merged to real generation of fragments,
488          * we can switch to copy when see the first bad fragment.
489          */
490         if (skb_has_frag_list(skb)) {
491                 struct sk_buff *frag;
492                 int first_len = skb_pagelen(skb);
493                 int truesizes = 0;
494
495                 if (first_len - hlen > mtu ||
496                     ((first_len - hlen) & 7) ||
497                     (iph->frag_off & htons(IP_MF|IP_OFFSET)) ||
498                     skb_cloned(skb))
499                         goto slow_path;
500
501                 skb_walk_frags(skb, frag) {
502                         /* Correct geometry. */
503                         if (frag->len > mtu ||
504                             ((frag->len & 7) && frag->next) ||
505                             skb_headroom(frag) < hlen)
506                             goto slow_path;
507
508                         /* Partially cloned skb? */
509                         if (skb_shared(frag))
510                                 goto slow_path;
511
512                         BUG_ON(frag->sk);
513                         if (skb->sk) {
514                                 frag->sk = skb->sk;
515                                 frag->destructor = sock_wfree;
516                         }
517                         truesizes += frag->truesize;
518                 }
519
520                 /* Everything is OK. Generate! */
521
522                 err = 0;
523                 offset = 0;
524                 frag = skb_shinfo(skb)->frag_list;
525                 skb_frag_list_init(skb);
526                 skb->data_len = first_len - skb_headlen(skb);
527                 skb->truesize -= truesizes;
528                 skb->len = first_len;
529                 iph->tot_len = htons(first_len);
530                 iph->frag_off = htons(IP_MF);
531                 ip_send_check(iph);
532
533                 for (;;) {
534                         /* Prepare header of the next frame,
535                          * before previous one went down. */
536                         if (frag) {
537                                 frag->ip_summed = CHECKSUM_NONE;
538                                 skb_reset_transport_header(frag);
539                                 __skb_push(frag, hlen);
540                                 skb_reset_network_header(frag);
541                                 memcpy(skb_network_header(frag), iph, hlen);
542                                 iph = ip_hdr(frag);
543                                 iph->tot_len = htons(frag->len);
544                                 ip_copy_metadata(frag, skb);
545                                 if (offset == 0)
546                                         ip_options_fragment(frag);
547                                 offset += skb->len - hlen;
548                                 iph->frag_off = htons(offset>>3);
549                                 if (frag->next != NULL)
550                                         iph->frag_off |= htons(IP_MF);
551                                 /* Ready, complete checksum */
552                                 ip_send_check(iph);
553                         }
554
555                         err = output(skb);
556
557                         if (!err)
558                                 IP_INC_STATS(dev_net(dev), IPSTATS_MIB_FRAGCREATES);
559                         if (err || !frag)
560                                 break;
561
562                         skb = frag;
563                         frag = skb->next;
564                         skb->next = NULL;
565                 }
566
567                 if (err == 0) {
568                         IP_INC_STATS(dev_net(dev), IPSTATS_MIB_FRAGOKS);
569                         return 0;
570                 }
571
572                 while (frag) {
573                         skb = frag->next;
574                         kfree_skb(frag);
575                         frag = skb;
576                 }
577                 IP_INC_STATS(dev_net(dev), IPSTATS_MIB_FRAGFAILS);
578                 return err;
579         }
580
581 slow_path:
582         left = skb->len - hlen;         /* Space per frame */
583         ptr = hlen;             /* Where to start from */
584
585         /* for bridged IP traffic encapsulated inside f.e. a vlan header,
586          * we need to make room for the encapsulating header
587          */
588         ll_rs = LL_RESERVED_SPACE_EXTRA(rt->dst.dev, nf_bridge_pad(skb));
589
590         /*
591          *      Fragment the datagram.
592          */
593
594         offset = (ntohs(iph->frag_off) & IP_OFFSET) << 3;
595         not_last_frag = iph->frag_off & htons(IP_MF);
596
597         /*
598          *      Keep copying data until we run out.
599          */
600
601         while (left > 0) {
602                 len = left;
603                 /* IF: it doesn't fit, use 'mtu' - the data space left */
604                 if (len > mtu)
605                         len = mtu;
606                 /* IF: we are not sending upto and including the packet end
607                    then align the next start on an eight byte boundary */
608                 if (len < left) {
609                         len &= ~7;
610                 }
611                 /*
612                  *      Allocate buffer.
613                  */
614
615                 if ((skb2 = alloc_skb(len+hlen+ll_rs, GFP_ATOMIC)) == NULL) {
616                         NETDEBUG(KERN_INFO "IP: frag: no memory for new fragment!\n");
617                         err = -ENOMEM;
618                         goto fail;
619                 }
620
621                 /*
622                  *      Set up data on packet
623                  */
624
625                 ip_copy_metadata(skb2, skb);
626                 skb_reserve(skb2, ll_rs);
627                 skb_put(skb2, len + hlen);
628                 skb_reset_network_header(skb2);
629                 skb2->transport_header = skb2->network_header + hlen;
630
631                 /*
632                  *      Charge the memory for the fragment to any owner
633                  *      it might possess
634                  */
635
636                 if (skb->sk)
637                         skb_set_owner_w(skb2, skb->sk);
638
639                 /*
640                  *      Copy the packet header into the new buffer.
641                  */
642
643                 skb_copy_from_linear_data(skb, skb_network_header(skb2), hlen);
644
645                 /*
646                  *      Copy a block of the IP datagram.
647                  */
648                 if (skb_copy_bits(skb, ptr, skb_transport_header(skb2), len))
649                         BUG();
650                 left -= len;
651
652                 /*
653                  *      Fill in the new header fields.
654                  */
655                 iph = ip_hdr(skb2);
656                 iph->frag_off = htons((offset >> 3));
657
658                 /* ANK: dirty, but effective trick. Upgrade options only if
659                  * the segment to be fragmented was THE FIRST (otherwise,
660                  * options are already fixed) and make it ONCE
661                  * on the initial skb, so that all the following fragments
662                  * will inherit fixed options.
663                  */
664                 if (offset == 0)
665                         ip_options_fragment(skb);
666
667                 /*
668                  *      Added AC : If we are fragmenting a fragment that's not the
669                  *                 last fragment then keep MF on each bit
670                  */
671                 if (left > 0 || not_last_frag)
672                         iph->frag_off |= htons(IP_MF);
673                 ptr += len;
674                 offset += len;
675
676                 /*
677                  *      Put this fragment into the sending queue.
678                  */
679                 iph->tot_len = htons(len + hlen);
680
681                 ip_send_check(iph);
682
683                 err = output(skb2);
684                 if (err)
685                         goto fail;
686
687                 IP_INC_STATS(dev_net(dev), IPSTATS_MIB_FRAGCREATES);
688         }
689         kfree_skb(skb);
690         IP_INC_STATS(dev_net(dev), IPSTATS_MIB_FRAGOKS);
691         return err;
692
693 fail:
694         kfree_skb(skb);
695         IP_INC_STATS(dev_net(dev), IPSTATS_MIB_FRAGFAILS);
696         return err;
697 }
698 EXPORT_SYMBOL(ip_fragment);
699
700 int
701 ip_generic_getfrag(void *from, char *to, int offset, int len, int odd, struct sk_buff *skb)
702 {
703         struct iovec *iov = from;
704
705         if (skb->ip_summed == CHECKSUM_PARTIAL) {
706                 if (memcpy_fromiovecend(to, iov, offset, len) < 0)
707                         return -EFAULT;
708         } else {
709                 __wsum csum = 0;
710                 if (csum_partial_copy_fromiovecend(to, iov, offset, len, &csum) < 0)
711                         return -EFAULT;
712                 skb->csum = csum_block_add(skb->csum, csum, odd);
713         }
714         return 0;
715 }
716 EXPORT_SYMBOL(ip_generic_getfrag);
717
718 static inline __wsum
719 csum_page(struct page *page, int offset, int copy)
720 {
721         char *kaddr;
722         __wsum csum;
723         kaddr = kmap(page);
724         csum = csum_partial(kaddr + offset, copy, 0);
725         kunmap(page);
726         return csum;
727 }
728
729 static inline int ip_ufo_append_data(struct sock *sk,
730                         int getfrag(void *from, char *to, int offset, int len,
731                                int odd, struct sk_buff *skb),
732                         void *from, int length, int hh_len, int fragheaderlen,
733                         int transhdrlen, int mtu, unsigned int flags)
734 {
735         struct sk_buff *skb;
736         int err;
737
738         /* There is support for UDP fragmentation offload by network
739          * device, so create one single skb packet containing complete
740          * udp datagram
741          */
742         if ((skb = skb_peek_tail(&sk->sk_write_queue)) == NULL) {
743                 skb = sock_alloc_send_skb(sk,
744                         hh_len + fragheaderlen + transhdrlen + 20,
745                         (flags & MSG_DONTWAIT), &err);
746
747                 if (skb == NULL)
748                         return err;
749
750                 /* reserve space for Hardware header */
751                 skb_reserve(skb, hh_len);
752
753                 /* create space for UDP/IP header */
754                 skb_put(skb, fragheaderlen + transhdrlen);
755
756                 /* initialize network header pointer */
757                 skb_reset_network_header(skb);
758
759                 /* initialize protocol header pointer */
760                 skb->transport_header = skb->network_header + fragheaderlen;
761
762                 skb->ip_summed = CHECKSUM_PARTIAL;
763                 skb->csum = 0;
764                 sk->sk_sndmsg_off = 0;
765
766                 /* specify the length of each IP datagram fragment */
767                 skb_shinfo(skb)->gso_size = mtu - fragheaderlen;
768                 skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
769                 __skb_queue_tail(&sk->sk_write_queue, skb);
770         }
771
772         return skb_append_datato_frags(sk, skb, getfrag, from,
773                                        (length - transhdrlen));
774 }
775
776 /*
777  *      ip_append_data() and ip_append_page() can make one large IP datagram
778  *      from many pieces of data. Each pieces will be holded on the socket
779  *      until ip_push_pending_frames() is called. Each piece can be a page
780  *      or non-page data.
781  *
782  *      Not only UDP, other transport protocols - e.g. raw sockets - can use
783  *      this interface potentially.
784  *
785  *      LATER: length must be adjusted by pad at tail, when it is required.
786  */
787 int ip_append_data(struct sock *sk,
788                    int getfrag(void *from, char *to, int offset, int len,
789                                int odd, struct sk_buff *skb),
790                    void *from, int length, int transhdrlen,
791                    struct ipcm_cookie *ipc, struct rtable **rtp,
792                    unsigned int flags)
793 {
794         struct inet_sock *inet = inet_sk(sk);
795         struct sk_buff *skb;
796
797         struct ip_options *opt = NULL;
798         int hh_len;
799         int exthdrlen;
800         int mtu;
801         int copy;
802         int err;
803         int offset = 0;
804         unsigned int maxfraglen, fragheaderlen;
805         int csummode = CHECKSUM_NONE;
806         struct rtable *rt;
807
808         if (flags&MSG_PROBE)
809                 return 0;
810
811         if (skb_queue_empty(&sk->sk_write_queue)) {
812                 /*
813                  * setup for corking.
814                  */
815                 opt = ipc->opt;
816                 if (opt) {
817                         if (inet->cork.opt == NULL) {
818                                 inet->cork.opt = kmalloc(sizeof(struct ip_options) + 40, sk->sk_allocation);
819                                 if (unlikely(inet->cork.opt == NULL))
820                                         return -ENOBUFS;
821                         }
822                         memcpy(inet->cork.opt, opt, sizeof(struct ip_options)+opt->optlen);
823                         inet->cork.flags |= IPCORK_OPT;
824                         inet->cork.addr = ipc->addr;
825                 }
826                 rt = *rtp;
827                 if (unlikely(!rt))
828                         return -EFAULT;
829                 /*
830                  * We steal reference to this route, caller should not release it
831                  */
832                 *rtp = NULL;
833                 inet->cork.fragsize = mtu = inet->pmtudisc == IP_PMTUDISC_PROBE ?
834                                             rt->dst.dev->mtu :
835                                             dst_mtu(rt->dst.path);
836                 inet->cork.dst = &rt->dst;
837                 inet->cork.length = 0;
838                 sk->sk_sndmsg_page = NULL;
839                 sk->sk_sndmsg_off = 0;
840                 exthdrlen = rt->dst.header_len;
841                 length += exthdrlen;
842                 transhdrlen += exthdrlen;
843         } else {
844                 rt = (struct rtable *)inet->cork.dst;
845                 if (inet->cork.flags & IPCORK_OPT)
846                         opt = inet->cork.opt;
847
848                 transhdrlen = 0;
849                 exthdrlen = 0;
850                 mtu = inet->cork.fragsize;
851         }
852         hh_len = LL_RESERVED_SPACE(rt->dst.dev);
853
854         fragheaderlen = sizeof(struct iphdr) + (opt ? opt->optlen : 0);
855         maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen;
856
857         if (inet->cork.length + length > 0xFFFF - fragheaderlen) {
858                 ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->inet_dport,
859                                mtu-exthdrlen);
860                 return -EMSGSIZE;
861         }
862
863         /*
864          * transhdrlen > 0 means that this is the first fragment and we wish
865          * it won't be fragmented in the future.
866          */
867         if (transhdrlen &&
868             length + fragheaderlen <= mtu &&
869             rt->dst.dev->features & NETIF_F_V4_CSUM &&
870             !exthdrlen)
871                 csummode = CHECKSUM_PARTIAL;
872
873         skb = skb_peek_tail(&sk->sk_write_queue);
874
875         inet->cork.length += length;
876         if (((length > mtu) || (skb && skb_is_gso(skb))) &&
877             (sk->sk_protocol == IPPROTO_UDP) &&
878             (rt->dst.dev->features & NETIF_F_UFO)) {
879                 err = ip_ufo_append_data(sk, getfrag, from, length, hh_len,
880                                          fragheaderlen, transhdrlen, mtu,
881                                          flags);
882                 if (err)
883                         goto error;
884                 return 0;
885         }
886
887         /* So, what's going on in the loop below?
888          *
889          * We use calculated fragment length to generate chained skb,
890          * each of segments is IP fragment ready for sending to network after
891          * adding appropriate IP header.
892          */
893
894         if (!skb)
895                 goto alloc_new_skb;
896
897         while (length > 0) {
898                 /* Check if the remaining data fits into current packet. */
899                 copy = mtu - skb->len;
900                 if (copy < length)
901                         copy = maxfraglen - skb->len;
902                 if (copy <= 0) {
903                         char *data;
904                         unsigned int datalen;
905                         unsigned int fraglen;
906                         unsigned int fraggap;
907                         unsigned int alloclen;
908                         struct sk_buff *skb_prev;
909 alloc_new_skb:
910                         skb_prev = skb;
911                         if (skb_prev)
912                                 fraggap = skb_prev->len - maxfraglen;
913                         else
914                                 fraggap = 0;
915
916                         /*
917                          * If remaining data exceeds the mtu,
918                          * we know we need more fragment(s).
919                          */
920                         datalen = length + fraggap;
921                         if (datalen > mtu - fragheaderlen)
922                                 datalen = maxfraglen - fragheaderlen;
923                         fraglen = datalen + fragheaderlen;
924
925                         if ((flags & MSG_MORE) &&
926                             !(rt->dst.dev->features&NETIF_F_SG))
927                                 alloclen = mtu;
928                         else
929                                 alloclen = datalen + fragheaderlen;
930
931                         /* The last fragment gets additional space at tail.
932                          * Note, with MSG_MORE we overallocate on fragments,
933                          * because we have no idea what fragment will be
934                          * the last.
935                          */
936                         if (datalen == length + fraggap)
937                                 alloclen += rt->dst.trailer_len;
938
939                         if (transhdrlen) {
940                                 skb = sock_alloc_send_skb(sk,
941                                                 alloclen + hh_len + 15,
942                                                 (flags & MSG_DONTWAIT), &err);
943                         } else {
944                                 skb = NULL;
945                                 if (atomic_read(&sk->sk_wmem_alloc) <=
946                                     2 * sk->sk_sndbuf)
947                                         skb = sock_wmalloc(sk,
948                                                            alloclen + hh_len + 15, 1,
949                                                            sk->sk_allocation);
950                                 if (unlikely(skb == NULL))
951                                         err = -ENOBUFS;
952                                 else
953                                         /* only the initial fragment is
954                                            time stamped */
955                                         ipc->tx_flags = 0;
956                         }
957                         if (skb == NULL)
958                                 goto error;
959
960                         /*
961                          *      Fill in the control structures
962                          */
963                         skb->ip_summed = csummode;
964                         skb->csum = 0;
965                         skb_reserve(skb, hh_len);
966                         skb_shinfo(skb)->tx_flags = ipc->tx_flags;
967
968                         /*
969                          *      Find where to start putting bytes.
970                          */
971                         data = skb_put(skb, fraglen);
972                         skb_set_network_header(skb, exthdrlen);
973                         skb->transport_header = (skb->network_header +
974                                                  fragheaderlen);
975                         data += fragheaderlen;
976
977                         if (fraggap) {
978                                 skb->csum = skb_copy_and_csum_bits(
979                                         skb_prev, maxfraglen,
980                                         data + transhdrlen, fraggap, 0);
981                                 skb_prev->csum = csum_sub(skb_prev->csum,
982                                                           skb->csum);
983                                 data += fraggap;
984                                 pskb_trim_unique(skb_prev, maxfraglen);
985                         }
986
987                         copy = datalen - transhdrlen - fraggap;
988                         if (copy > 0 && getfrag(from, data + transhdrlen, offset, copy, fraggap, skb) < 0) {
989                                 err = -EFAULT;
990                                 kfree_skb(skb);
991                                 goto error;
992                         }
993
994                         offset += copy;
995                         length -= datalen - fraggap;
996                         transhdrlen = 0;
997                         exthdrlen = 0;
998                         csummode = CHECKSUM_NONE;
999
1000                         /*
1001                          * Put the packet on the pending queue.
1002                          */
1003                         __skb_queue_tail(&sk->sk_write_queue, skb);
1004                         continue;
1005                 }
1006
1007                 if (copy > length)
1008                         copy = length;
1009
1010                 if (!(rt->dst.dev->features&NETIF_F_SG)) {
1011                         unsigned int off;
1012
1013                         off = skb->len;
1014                         if (getfrag(from, skb_put(skb, copy),
1015                                         offset, copy, off, skb) < 0) {
1016                                 __skb_trim(skb, off);
1017                                 err = -EFAULT;
1018                                 goto error;
1019                         }
1020                 } else {
1021                         int i = skb_shinfo(skb)->nr_frags;
1022                         skb_frag_t *frag = &skb_shinfo(skb)->frags[i-1];
1023                         struct page *page = sk->sk_sndmsg_page;
1024                         int off = sk->sk_sndmsg_off;
1025                         unsigned int left;
1026
1027                         if (page && (left = PAGE_SIZE - off) > 0) {
1028                                 if (copy >= left)
1029                                         copy = left;
1030                                 if (page != frag->page) {
1031                                         if (i == MAX_SKB_FRAGS) {
1032                                                 err = -EMSGSIZE;
1033                                                 goto error;
1034                                         }
1035                                         get_page(page);
1036                                         skb_fill_page_desc(skb, i, page, sk->sk_sndmsg_off, 0);
1037                                         frag = &skb_shinfo(skb)->frags[i];
1038                                 }
1039                         } else if (i < MAX_SKB_FRAGS) {
1040                                 if (copy > PAGE_SIZE)
1041                                         copy = PAGE_SIZE;
1042                                 page = alloc_pages(sk->sk_allocation, 0);
1043                                 if (page == NULL)  {
1044                                         err = -ENOMEM;
1045                                         goto error;
1046                                 }
1047                                 sk->sk_sndmsg_page = page;
1048                                 sk->sk_sndmsg_off = 0;
1049
1050                                 skb_fill_page_desc(skb, i, page, 0, 0);
1051                                 frag = &skb_shinfo(skb)->frags[i];
1052                         } else {
1053                                 err = -EMSGSIZE;
1054                                 goto error;
1055                         }
1056                         if (getfrag(from, page_address(frag->page)+frag->page_offset+frag->size, offset, copy, skb->len, skb) < 0) {
1057                                 err = -EFAULT;
1058                                 goto error;
1059                         }
1060                         sk->sk_sndmsg_off += copy;
1061                         frag->size += copy;
1062                         skb->len += copy;
1063                         skb->data_len += copy;
1064                         skb->truesize += copy;
1065                         atomic_add(copy, &sk->sk_wmem_alloc);
1066                 }
1067                 offset += copy;
1068                 length -= copy;
1069         }
1070
1071         return 0;
1072
1073 error:
1074         inet->cork.length -= length;
1075         IP_INC_STATS(sock_net(sk), IPSTATS_MIB_OUTDISCARDS);
1076         return err;
1077 }
1078
1079 ssize_t ip_append_page(struct sock *sk, struct page *page,
1080                        int offset, size_t size, int flags)
1081 {
1082         struct inet_sock *inet = inet_sk(sk);
1083         struct sk_buff *skb;
1084         struct rtable *rt;
1085         struct ip_options *opt = NULL;
1086         int hh_len;
1087         int mtu;
1088         int len;
1089         int err;
1090         unsigned int maxfraglen, fragheaderlen, fraggap;
1091
1092         if (inet->hdrincl)
1093                 return -EPERM;
1094
1095         if (flags&MSG_PROBE)
1096                 return 0;
1097
1098         if (skb_queue_empty(&sk->sk_write_queue))
1099                 return -EINVAL;
1100
1101         rt = (struct rtable *)inet->cork.dst;
1102         if (inet->cork.flags & IPCORK_OPT)
1103                 opt = inet->cork.opt;
1104
1105         if (!(rt->dst.dev->features&NETIF_F_SG))
1106                 return -EOPNOTSUPP;
1107
1108         hh_len = LL_RESERVED_SPACE(rt->dst.dev);
1109         mtu = inet->cork.fragsize;
1110
1111         fragheaderlen = sizeof(struct iphdr) + (opt ? opt->optlen : 0);
1112         maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen;
1113
1114         if (inet->cork.length + size > 0xFFFF - fragheaderlen) {
1115                 ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->inet_dport, mtu);
1116                 return -EMSGSIZE;
1117         }
1118
1119         if ((skb = skb_peek_tail(&sk->sk_write_queue)) == NULL)
1120                 return -EINVAL;
1121
1122         inet->cork.length += size;
1123         if ((size + skb->len > mtu) &&
1124             (sk->sk_protocol == IPPROTO_UDP) &&
1125             (rt->dst.dev->features & NETIF_F_UFO)) {
1126                 skb_shinfo(skb)->gso_size = mtu - fragheaderlen;
1127                 skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
1128         }
1129
1130
1131         while (size > 0) {
1132                 int i;
1133
1134                 if (skb_is_gso(skb))
1135                         len = size;
1136                 else {
1137
1138                         /* Check if the remaining data fits into current packet. */
1139                         len = mtu - skb->len;
1140                         if (len < size)
1141                                 len = maxfraglen - skb->len;
1142                 }
1143                 if (len <= 0) {
1144                         struct sk_buff *skb_prev;
1145                         int alloclen;
1146
1147                         skb_prev = skb;
1148                         fraggap = skb_prev->len - maxfraglen;
1149
1150                         alloclen = fragheaderlen + hh_len + fraggap + 15;
1151                         skb = sock_wmalloc(sk, alloclen, 1, sk->sk_allocation);
1152                         if (unlikely(!skb)) {
1153                                 err = -ENOBUFS;
1154                                 goto error;
1155                         }
1156
1157                         /*
1158                          *      Fill in the control structures
1159                          */
1160                         skb->ip_summed = CHECKSUM_NONE;
1161                         skb->csum = 0;
1162                         skb_reserve(skb, hh_len);
1163
1164                         /*
1165                          *      Find where to start putting bytes.
1166                          */
1167                         skb_put(skb, fragheaderlen + fraggap);
1168                         skb_reset_network_header(skb);
1169                         skb->transport_header = (skb->network_header +
1170                                                  fragheaderlen);
1171                         if (fraggap) {
1172                                 skb->csum = skb_copy_and_csum_bits(skb_prev,
1173                                                                    maxfraglen,
1174                                                     skb_transport_header(skb),
1175                                                                    fraggap, 0);
1176                                 skb_prev->csum = csum_sub(skb_prev->csum,
1177                                                           skb->csum);
1178                                 pskb_trim_unique(skb_prev, maxfraglen);
1179                         }
1180
1181                         /*
1182                          * Put the packet on the pending queue.
1183                          */
1184                         __skb_queue_tail(&sk->sk_write_queue, skb);
1185                         continue;
1186                 }
1187
1188                 i = skb_shinfo(skb)->nr_frags;
1189                 if (len > size)
1190                         len = size;
1191                 if (skb_can_coalesce(skb, i, page, offset)) {
1192                         skb_shinfo(skb)->frags[i-1].size += len;
1193                 } else if (i < MAX_SKB_FRAGS) {
1194                         get_page(page);
1195                         skb_fill_page_desc(skb, i, page, offset, len);
1196                 } else {
1197                         err = -EMSGSIZE;
1198                         goto error;
1199                 }
1200
1201                 if (skb->ip_summed == CHECKSUM_NONE) {
1202                         __wsum csum;
1203                         csum = csum_page(page, offset, len);
1204                         skb->csum = csum_block_add(skb->csum, csum, skb->len);
1205                 }
1206
1207                 skb->len += len;
1208                 skb->data_len += len;
1209                 skb->truesize += len;
1210                 atomic_add(len, &sk->sk_wmem_alloc);
1211                 offset += len;
1212                 size -= len;
1213         }
1214         return 0;
1215
1216 error:
1217         inet->cork.length -= size;
1218         IP_INC_STATS(sock_net(sk), IPSTATS_MIB_OUTDISCARDS);
1219         return err;
1220 }
1221
1222 static void ip_cork_release(struct inet_sock *inet)
1223 {
1224         inet->cork.flags &= ~IPCORK_OPT;
1225         kfree(inet->cork.opt);
1226         inet->cork.opt = NULL;
1227         dst_release(inet->cork.dst);
1228         inet->cork.dst = NULL;
1229 }
1230
1231 /*
1232  *      Combined all pending IP fragments on the socket as one IP datagram
1233  *      and push them out.
1234  */
1235 int ip_push_pending_frames(struct sock *sk)
1236 {
1237         struct sk_buff *skb, *tmp_skb;
1238         struct sk_buff **tail_skb;
1239         struct inet_sock *inet = inet_sk(sk);
1240         struct net *net = sock_net(sk);
1241         struct ip_options *opt = NULL;
1242         struct rtable *rt = (struct rtable *)inet->cork.dst;
1243         struct iphdr *iph;
1244         __be16 df = 0;
1245         __u8 ttl;
1246         int err = 0;
1247
1248         if ((skb = __skb_dequeue(&sk->sk_write_queue)) == NULL)
1249                 goto out;
1250         tail_skb = &(skb_shinfo(skb)->frag_list);
1251
1252         /* move skb->data to ip header from ext header */
1253         if (skb->data < skb_network_header(skb))
1254                 __skb_pull(skb, skb_network_offset(skb));
1255         while ((tmp_skb = __skb_dequeue(&sk->sk_write_queue)) != NULL) {
1256                 __skb_pull(tmp_skb, skb_network_header_len(skb));
1257                 *tail_skb = tmp_skb;
1258                 tail_skb = &(tmp_skb->next);
1259                 skb->len += tmp_skb->len;
1260                 skb->data_len += tmp_skb->len;
1261                 skb->truesize += tmp_skb->truesize;
1262                 tmp_skb->destructor = NULL;
1263                 tmp_skb->sk = NULL;
1264         }
1265
1266         /* Unless user demanded real pmtu discovery (IP_PMTUDISC_DO), we allow
1267          * to fragment the frame generated here. No matter, what transforms
1268          * how transforms change size of the packet, it will come out.
1269          */
1270         if (inet->pmtudisc < IP_PMTUDISC_DO)
1271                 skb->local_df = 1;
1272
1273         /* DF bit is set when we want to see DF on outgoing frames.
1274          * If local_df is set too, we still allow to fragment this frame
1275          * locally. */
1276         if (inet->pmtudisc >= IP_PMTUDISC_DO ||
1277             (skb->len <= dst_mtu(&rt->dst) &&
1278              ip_dont_fragment(sk, &rt->dst)))
1279                 df = htons(IP_DF);
1280
1281         if (inet->cork.flags & IPCORK_OPT)
1282                 opt = inet->cork.opt;
1283
1284         if (rt->rt_type == RTN_MULTICAST)
1285                 ttl = inet->mc_ttl;
1286         else
1287                 ttl = ip_select_ttl(inet, &rt->dst);
1288
1289         iph = (struct iphdr *)skb->data;
1290         iph->version = 4;
1291         iph->ihl = 5;
1292         if (opt) {
1293                 iph->ihl += opt->optlen>>2;
1294                 ip_options_build(skb, opt, inet->cork.addr, rt, 0);
1295         }
1296         iph->tos = inet->tos;
1297         iph->frag_off = df;
1298         ip_select_ident(iph, &rt->dst, sk);
1299         iph->ttl = ttl;
1300         iph->protocol = sk->sk_protocol;
1301         iph->saddr = rt->rt_src;
1302         iph->daddr = rt->rt_dst;
1303
1304         skb->priority = sk->sk_priority;
1305         skb->mark = sk->sk_mark;
1306         /*
1307          * Steal rt from cork.dst to avoid a pair of atomic_inc/atomic_dec
1308          * on dst refcount
1309          */
1310         inet->cork.dst = NULL;
1311         skb_dst_set(skb, &rt->dst);
1312
1313         if (iph->protocol == IPPROTO_ICMP)
1314                 icmp_out_count(net, ((struct icmphdr *)
1315                         skb_transport_header(skb))->type);
1316
1317         /* Netfilter gets whole the not fragmented skb. */
1318         err = ip_local_out(skb);
1319         if (err) {
1320                 if (err > 0)
1321                         err = net_xmit_errno(err);
1322                 if (err)
1323                         goto error;
1324         }
1325
1326 out:
1327         ip_cork_release(inet);
1328         return err;
1329
1330 error:
1331         IP_INC_STATS(net, IPSTATS_MIB_OUTDISCARDS);
1332         goto out;
1333 }
1334
1335 /*
1336  *      Throw away all pending data on the socket.
1337  */
1338 void ip_flush_pending_frames(struct sock *sk)
1339 {
1340         struct sk_buff *skb;
1341
1342         while ((skb = __skb_dequeue_tail(&sk->sk_write_queue)) != NULL)
1343                 kfree_skb(skb);
1344
1345         ip_cork_release(inet_sk(sk));
1346 }
1347
1348
1349 /*
1350  *      Fetch data from kernel space and fill in checksum if needed.
1351  */
1352 static int ip_reply_glue_bits(void *dptr, char *to, int offset,
1353                               int len, int odd, struct sk_buff *skb)
1354 {
1355         __wsum csum;
1356
1357         csum = csum_partial_copy_nocheck(dptr+offset, to, len, 0);
1358         skb->csum = csum_block_add(skb->csum, csum, odd);
1359         return 0;
1360 }
1361
1362 /*
1363  *      Generic function to send a packet as reply to another packet.
1364  *      Used to send TCP resets so far. ICMP should use this function too.
1365  *
1366  *      Should run single threaded per socket because it uses the sock
1367  *      structure to pass arguments.
1368  */
1369 void ip_send_reply(struct sock *sk, struct sk_buff *skb, struct ip_reply_arg *arg,
1370                    unsigned int len)
1371 {
1372         struct inet_sock *inet = inet_sk(sk);
1373         struct {
1374                 struct ip_options       opt;
1375                 char                    data[40];
1376         } replyopts;
1377         struct ipcm_cookie ipc;
1378         __be32 daddr;
1379         struct rtable *rt = skb_rtable(skb);
1380
1381         if (ip_options_echo(&replyopts.opt, skb))
1382                 return;
1383
1384         daddr = ipc.addr = rt->rt_src;
1385         ipc.opt = NULL;
1386         ipc.tx_flags = 0;
1387
1388         if (replyopts.opt.optlen) {
1389                 ipc.opt = &replyopts.opt;
1390
1391                 if (ipc.opt->srr)
1392                         daddr = replyopts.opt.faddr;
1393         }
1394
1395         {
1396                 struct flowi fl = { .oif = arg->bound_dev_if,
1397                                     .nl_u = { .ip4_u =
1398                                               { .daddr = daddr,
1399                                                 .saddr = rt->rt_spec_dst,
1400                                                 .tos = RT_TOS(ip_hdr(skb)->tos) } },
1401                                     /* Not quite clean, but right. */
1402                                     .uli_u = { .ports =
1403                                                { .sport = tcp_hdr(skb)->dest,
1404                                                  .dport = tcp_hdr(skb)->source } },
1405                                     .proto = sk->sk_protocol,
1406                                     .flags = ip_reply_arg_flowi_flags(arg) };
1407                 security_skb_classify_flow(skb, &fl);
1408                 if (ip_route_output_key(sock_net(sk), &rt, &fl))
1409                         return;
1410         }
1411
1412         /* And let IP do all the hard work.
1413
1414            This chunk is not reenterable, hence spinlock.
1415            Note that it uses the fact, that this function is called
1416            with locally disabled BH and that sk cannot be already spinlocked.
1417          */
1418         bh_lock_sock(sk);
1419         inet->tos = ip_hdr(skb)->tos;
1420         sk->sk_priority = skb->priority;
1421         sk->sk_protocol = ip_hdr(skb)->protocol;
1422         sk->sk_bound_dev_if = arg->bound_dev_if;
1423         ip_append_data(sk, ip_reply_glue_bits, arg->iov->iov_base, len, 0,
1424                        &ipc, &rt, MSG_DONTWAIT);
1425         if ((skb = skb_peek(&sk->sk_write_queue)) != NULL) {
1426                 if (arg->csumoffset >= 0)
1427                         *((__sum16 *)skb_transport_header(skb) +
1428                           arg->csumoffset) = csum_fold(csum_add(skb->csum,
1429                                                                 arg->csum));
1430                 skb->ip_summed = CHECKSUM_NONE;
1431                 ip_push_pending_frames(sk);
1432         }
1433
1434         bh_unlock_sock(sk);
1435
1436         ip_rt_put(rt);
1437 }
1438
1439 void __init ip_init(void)
1440 {
1441         ip_rt_init();
1442         inet_initpeers();
1443
1444 #if defined(CONFIG_IP_MULTICAST) && defined(CONFIG_PROC_FS)
1445         igmp_mc_proc_init();
1446 #endif
1447 }