]> bbs.cooldavid.org Git - net-next-2.6.git/blob - net/caif/caif_socket.c
caif: Use default send and receive buffer size in caif_socket.
[net-next-2.6.git] / net / caif / caif_socket.c
1 /*
2  * Copyright (C) ST-Ericsson AB 2010
3  * Author:      Sjur Brendeland sjur.brandeland@stericsson.com
4  * License terms: GNU General Public License (GPL) version 2
5  */
6
7 #define pr_fmt(fmt) KBUILD_MODNAME ":%s(): " fmt, __func__
8
9 #include <linux/fs.h>
10 #include <linux/init.h>
11 #include <linux/module.h>
12 #include <linux/sched.h>
13 #include <linux/spinlock.h>
14 #include <linux/mutex.h>
15 #include <linux/list.h>
16 #include <linux/wait.h>
17 #include <linux/poll.h>
18 #include <linux/tcp.h>
19 #include <linux/uaccess.h>
20 #include <linux/mutex.h>
21 #include <linux/debugfs.h>
22 #include <linux/caif/caif_socket.h>
23 #include <asm/atomic.h>
24 #include <net/sock.h>
25 #include <net/tcp_states.h>
26 #include <net/caif/caif_layer.h>
27 #include <net/caif/caif_dev.h>
28 #include <net/caif/cfpkt.h>
29
30 MODULE_LICENSE("GPL");
31 MODULE_ALIAS_NETPROTO(AF_CAIF);
32
33 /*
34  * CAIF state is re-using the TCP socket states.
35  * caif_states stored in sk_state reflect the state as reported by
36  * the CAIF stack, while sk_socket->state is the state of the socket.
37  */
38 enum caif_states {
39         CAIF_CONNECTED          = TCP_ESTABLISHED,
40         CAIF_CONNECTING = TCP_SYN_SENT,
41         CAIF_DISCONNECTED       = TCP_CLOSE
42 };
43
44 #define TX_FLOW_ON_BIT  1
45 #define RX_FLOW_ON_BIT  2
46
47 static struct dentry *debugfsdir;
48
49 #ifdef CONFIG_DEBUG_FS
50 struct debug_fs_counter {
51         atomic_t caif_nr_socks;
52         atomic_t num_connect_req;
53         atomic_t num_connect_resp;
54         atomic_t num_connect_fail_resp;
55         atomic_t num_disconnect;
56         atomic_t num_remote_shutdown_ind;
57         atomic_t num_tx_flow_off_ind;
58         atomic_t num_tx_flow_on_ind;
59         atomic_t num_rx_flow_off;
60         atomic_t num_rx_flow_on;
61 };
62 static struct debug_fs_counter cnt;
63 #define dbfs_atomic_inc(v) atomic_inc(v)
64 #define dbfs_atomic_dec(v) atomic_dec(v)
65 #else
66 #define dbfs_atomic_inc(v)
67 #define dbfs_atomic_dec(v)
68 #endif
69
70 struct caifsock {
71         struct sock sk; /* must be first member */
72         struct cflayer layer;
73         char name[CAIF_LAYER_NAME_SZ]; /* Used for debugging */
74         u32 flow_state;
75         struct caif_connect_request conn_req;
76         struct mutex readlock;
77         struct dentry *debugfs_socket_dir;
78         int headroom, tailroom, maxframe;
79 };
80
81 static int rx_flow_is_on(struct caifsock *cf_sk)
82 {
83         return test_bit(RX_FLOW_ON_BIT,
84                         (void *) &cf_sk->flow_state);
85 }
86
87 static int tx_flow_is_on(struct caifsock *cf_sk)
88 {
89         return test_bit(TX_FLOW_ON_BIT,
90                         (void *) &cf_sk->flow_state);
91 }
92
93 static void set_rx_flow_off(struct caifsock *cf_sk)
94 {
95          clear_bit(RX_FLOW_ON_BIT,
96                  (void *) &cf_sk->flow_state);
97 }
98
99 static void set_rx_flow_on(struct caifsock *cf_sk)
100 {
101          set_bit(RX_FLOW_ON_BIT,
102                         (void *) &cf_sk->flow_state);
103 }
104
105 static void set_tx_flow_off(struct caifsock *cf_sk)
106 {
107          clear_bit(TX_FLOW_ON_BIT,
108                 (void *) &cf_sk->flow_state);
109 }
110
111 static void set_tx_flow_on(struct caifsock *cf_sk)
112 {
113          set_bit(TX_FLOW_ON_BIT,
114                 (void *) &cf_sk->flow_state);
115 }
116
117 static void caif_read_lock(struct sock *sk)
118 {
119         struct caifsock *cf_sk;
120         cf_sk = container_of(sk, struct caifsock, sk);
121         mutex_lock(&cf_sk->readlock);
122 }
123
124 static void caif_read_unlock(struct sock *sk)
125 {
126         struct caifsock *cf_sk;
127         cf_sk = container_of(sk, struct caifsock, sk);
128         mutex_unlock(&cf_sk->readlock);
129 }
130
131 static int sk_rcvbuf_lowwater(struct caifsock *cf_sk)
132 {
133         /* A quarter of full buffer is used a low water mark */
134         return cf_sk->sk.sk_rcvbuf / 4;
135 }
136
137 static void caif_flow_ctrl(struct sock *sk, int mode)
138 {
139         struct caifsock *cf_sk;
140         cf_sk = container_of(sk, struct caifsock, sk);
141         if (cf_sk->layer.dn && cf_sk->layer.dn->modemcmd)
142                 cf_sk->layer.dn->modemcmd(cf_sk->layer.dn, mode);
143 }
144
145 /*
146  * Copied from sock.c:sock_queue_rcv_skb(), but changed so packets are
147  * not dropped, but CAIF is sending flow off instead.
148  */
149 static int caif_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
150 {
151         int err;
152         int skb_len;
153         unsigned long flags;
154         struct sk_buff_head *list = &sk->sk_receive_queue;
155         struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);
156
157         if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
158                 (unsigned)sk->sk_rcvbuf && rx_flow_is_on(cf_sk)) {
159                 pr_debug("sending flow OFF (queue len = %d %d)\n",
160                         atomic_read(&cf_sk->sk.sk_rmem_alloc),
161                         sk_rcvbuf_lowwater(cf_sk));
162                 set_rx_flow_off(cf_sk);
163                 dbfs_atomic_inc(&cnt.num_rx_flow_off);
164                 caif_flow_ctrl(sk, CAIF_MODEMCMD_FLOW_OFF_REQ);
165         }
166
167         err = sk_filter(sk, skb);
168         if (err)
169                 return err;
170         if (!sk_rmem_schedule(sk, skb->truesize) && rx_flow_is_on(cf_sk)) {
171                 set_rx_flow_off(cf_sk);
172                 pr_debug("sending flow OFF due to rmem_schedule\n");
173                 dbfs_atomic_inc(&cnt.num_rx_flow_off);
174                 caif_flow_ctrl(sk, CAIF_MODEMCMD_FLOW_OFF_REQ);
175         }
176         skb->dev = NULL;
177         skb_set_owner_r(skb, sk);
178         /* Cache the SKB length before we tack it onto the receive
179          * queue. Once it is added it no longer belongs to us and
180          * may be freed by other threads of control pulling packets
181          * from the queue.
182          */
183         skb_len = skb->len;
184         spin_lock_irqsave(&list->lock, flags);
185         if (!sock_flag(sk, SOCK_DEAD))
186                 __skb_queue_tail(list, skb);
187         spin_unlock_irqrestore(&list->lock, flags);
188
189         if (!sock_flag(sk, SOCK_DEAD))
190                 sk->sk_data_ready(sk, skb_len);
191         else
192                 kfree_skb(skb);
193         return 0;
194 }
195
196 /* Packet Receive Callback function called from CAIF Stack */
197 static int caif_sktrecv_cb(struct cflayer *layr, struct cfpkt *pkt)
198 {
199         struct caifsock *cf_sk;
200         struct sk_buff *skb;
201
202         cf_sk = container_of(layr, struct caifsock, layer);
203         skb = cfpkt_tonative(pkt);
204
205         if (unlikely(cf_sk->sk.sk_state != CAIF_CONNECTED)) {
206                 cfpkt_destroy(pkt);
207                 return 0;
208         }
209         caif_queue_rcv_skb(&cf_sk->sk, skb);
210         return 0;
211 }
212
213 /* Packet Control Callback function called from CAIF */
214 static void caif_ctrl_cb(struct cflayer *layr,
215                                 enum caif_ctrlcmd flow,
216                                 int phyid)
217 {
218         struct caifsock *cf_sk = container_of(layr, struct caifsock, layer);
219         switch (flow) {
220         case CAIF_CTRLCMD_FLOW_ON_IND:
221                 /* OK from modem to start sending again */
222                 dbfs_atomic_inc(&cnt.num_tx_flow_on_ind);
223                 set_tx_flow_on(cf_sk);
224                 cf_sk->sk.sk_state_change(&cf_sk->sk);
225                 break;
226
227         case CAIF_CTRLCMD_FLOW_OFF_IND:
228                 /* Modem asks us to shut up */
229                 dbfs_atomic_inc(&cnt.num_tx_flow_off_ind);
230                 set_tx_flow_off(cf_sk);
231                 cf_sk->sk.sk_state_change(&cf_sk->sk);
232                 break;
233
234         case CAIF_CTRLCMD_INIT_RSP:
235                 /* We're now connected */
236                 dbfs_atomic_inc(&cnt.num_connect_resp);
237                 cf_sk->sk.sk_state = CAIF_CONNECTED;
238                 set_tx_flow_on(cf_sk);
239                 cf_sk->sk.sk_state_change(&cf_sk->sk);
240                 break;
241
242         case CAIF_CTRLCMD_DEINIT_RSP:
243                 /* We're now disconnected */
244                 cf_sk->sk.sk_state = CAIF_DISCONNECTED;
245                 cf_sk->sk.sk_state_change(&cf_sk->sk);
246                 cfcnfg_release_adap_layer(&cf_sk->layer);
247                 break;
248
249         case CAIF_CTRLCMD_INIT_FAIL_RSP:
250                 /* Connect request failed */
251                 dbfs_atomic_inc(&cnt.num_connect_fail_resp);
252                 cf_sk->sk.sk_err = ECONNREFUSED;
253                 cf_sk->sk.sk_state = CAIF_DISCONNECTED;
254                 cf_sk->sk.sk_shutdown = SHUTDOWN_MASK;
255                 /*
256                  * Socket "standards" seems to require POLLOUT to
257                  * be set at connect failure.
258                  */
259                 set_tx_flow_on(cf_sk);
260                 cf_sk->sk.sk_state_change(&cf_sk->sk);
261                 break;
262
263         case CAIF_CTRLCMD_REMOTE_SHUTDOWN_IND:
264                 /* Modem has closed this connection, or device is down. */
265                 dbfs_atomic_inc(&cnt.num_remote_shutdown_ind);
266                 cf_sk->sk.sk_shutdown = SHUTDOWN_MASK;
267                 cf_sk->sk.sk_err = ECONNRESET;
268                 set_rx_flow_on(cf_sk);
269                 cf_sk->sk.sk_error_report(&cf_sk->sk);
270                 break;
271
272         default:
273                 pr_debug("Unexpected flow command %d\n", flow);
274         }
275 }
276
277 static void caif_check_flow_release(struct sock *sk)
278 {
279         struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);
280
281         if (rx_flow_is_on(cf_sk))
282                 return;
283
284         if (atomic_read(&sk->sk_rmem_alloc) <= sk_rcvbuf_lowwater(cf_sk)) {
285                         dbfs_atomic_inc(&cnt.num_rx_flow_on);
286                         set_rx_flow_on(cf_sk);
287                         caif_flow_ctrl(sk, CAIF_MODEMCMD_FLOW_ON_REQ);
288         }
289 }
290
291 /*
292  * Copied from unix_dgram_recvmsg, but removed credit checks,
293  * changed locking, address handling and added MSG_TRUNC.
294  */
295 static int caif_seqpkt_recvmsg(struct kiocb *iocb, struct socket *sock,
296                                 struct msghdr *m, size_t len, int flags)
297
298 {
299         struct sock *sk = sock->sk;
300         struct sk_buff *skb;
301         int ret;
302         int copylen;
303
304         ret = -EOPNOTSUPP;
305         if (m->msg_flags&MSG_OOB)
306                 goto read_error;
307
308         skb = skb_recv_datagram(sk, flags, 0 , &ret);
309         if (!skb)
310                 goto read_error;
311         copylen = skb->len;
312         if (len < copylen) {
313                 m->msg_flags |= MSG_TRUNC;
314                 copylen = len;
315         }
316
317         ret = skb_copy_datagram_iovec(skb, 0, m->msg_iov, copylen);
318         if (ret)
319                 goto out_free;
320
321         ret = (flags & MSG_TRUNC) ? skb->len : copylen;
322 out_free:
323         skb_free_datagram(sk, skb);
324         caif_check_flow_release(sk);
325         return ret;
326
327 read_error:
328         return ret;
329 }
330
331
332 /* Copied from unix_stream_wait_data, identical except for lock call. */
333 static long caif_stream_data_wait(struct sock *sk, long timeo)
334 {
335         DEFINE_WAIT(wait);
336         lock_sock(sk);
337
338         for (;;) {
339                 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
340
341                 if (!skb_queue_empty(&sk->sk_receive_queue) ||
342                         sk->sk_err ||
343                         sk->sk_state != CAIF_CONNECTED ||
344                         sock_flag(sk, SOCK_DEAD) ||
345                         (sk->sk_shutdown & RCV_SHUTDOWN) ||
346                         signal_pending(current) ||
347                         !timeo)
348                         break;
349
350                 set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
351                 release_sock(sk);
352                 timeo = schedule_timeout(timeo);
353                 lock_sock(sk);
354                 clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
355         }
356
357         finish_wait(sk_sleep(sk), &wait);
358         release_sock(sk);
359         return timeo;
360 }
361
362
363 /*
364  * Copied from unix_stream_recvmsg, but removed credit checks,
365  * changed locking calls, changed address handling.
366  */
367 static int caif_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
368                                 struct msghdr *msg, size_t size,
369                                 int flags)
370 {
371         struct sock *sk = sock->sk;
372         int copied = 0;
373         int target;
374         int err = 0;
375         long timeo;
376
377         err = -EOPNOTSUPP;
378         if (flags&MSG_OOB)
379                 goto out;
380
381         msg->msg_namelen = 0;
382
383         /*
384          * Lock the socket to prevent queue disordering
385          * while sleeps in memcpy_tomsg
386          */
387         err = -EAGAIN;
388         if (sk->sk_state == CAIF_CONNECTING)
389                 goto out;
390
391         caif_read_lock(sk);
392         target = sock_rcvlowat(sk, flags&MSG_WAITALL, size);
393         timeo = sock_rcvtimeo(sk, flags&MSG_DONTWAIT);
394
395         do {
396                 int chunk;
397                 struct sk_buff *skb;
398
399                 lock_sock(sk);
400                 skb = skb_dequeue(&sk->sk_receive_queue);
401                 caif_check_flow_release(sk);
402
403                 if (skb == NULL) {
404                         if (copied >= target)
405                                 goto unlock;
406                         /*
407                          *      POSIX 1003.1g mandates this order.
408                          */
409                         err = sock_error(sk);
410                         if (err)
411                                 goto unlock;
412                         err = -ECONNRESET;
413                         if (sk->sk_shutdown & RCV_SHUTDOWN)
414                                 goto unlock;
415
416                         err = -EPIPE;
417                         if (sk->sk_state != CAIF_CONNECTED)
418                                 goto unlock;
419                         if (sock_flag(sk, SOCK_DEAD))
420                                 goto unlock;
421
422                         release_sock(sk);
423
424                         err = -EAGAIN;
425                         if (!timeo)
426                                 break;
427
428                         caif_read_unlock(sk);
429
430                         timeo = caif_stream_data_wait(sk, timeo);
431
432                         if (signal_pending(current)) {
433                                 err = sock_intr_errno(timeo);
434                                 goto out;
435                         }
436                         caif_read_lock(sk);
437                         continue;
438 unlock:
439                         release_sock(sk);
440                         break;
441                 }
442                 release_sock(sk);
443                 chunk = min_t(unsigned int, skb->len, size);
444                 if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) {
445                         skb_queue_head(&sk->sk_receive_queue, skb);
446                         if (copied == 0)
447                                 copied = -EFAULT;
448                         break;
449                 }
450                 copied += chunk;
451                 size -= chunk;
452
453                 /* Mark read part of skb as used */
454                 if (!(flags & MSG_PEEK)) {
455                         skb_pull(skb, chunk);
456
457                         /* put the skb back if we didn't use it up. */
458                         if (skb->len) {
459                                 skb_queue_head(&sk->sk_receive_queue, skb);
460                                 break;
461                         }
462                         kfree_skb(skb);
463
464                 } else {
465                         /*
466                          * It is questionable, see note in unix_dgram_recvmsg.
467                          */
468                         /* put message back and return */
469                         skb_queue_head(&sk->sk_receive_queue, skb);
470                         break;
471                 }
472         } while (size);
473         caif_read_unlock(sk);
474
475 out:
476         return copied ? : err;
477 }
478
479 /*
480  * Copied from sock.c:sock_wait_for_wmem, but change to wait for
481  * CAIF flow-on and sock_writable.
482  */
483 static long caif_wait_for_flow_on(struct caifsock *cf_sk,
484                                 int wait_writeable, long timeo, int *err)
485 {
486         struct sock *sk = &cf_sk->sk;
487         DEFINE_WAIT(wait);
488         for (;;) {
489                 *err = 0;
490                 if (tx_flow_is_on(cf_sk) &&
491                         (!wait_writeable || sock_writeable(&cf_sk->sk)))
492                         break;
493                 *err = -ETIMEDOUT;
494                 if (!timeo)
495                         break;
496                 *err = -ERESTARTSYS;
497                 if (signal_pending(current))
498                         break;
499                 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
500                 *err = -ECONNRESET;
501                 if (sk->sk_shutdown & SHUTDOWN_MASK)
502                         break;
503                 *err = -sk->sk_err;
504                 if (sk->sk_err)
505                         break;
506                 *err = -EPIPE;
507                 if (cf_sk->sk.sk_state != CAIF_CONNECTED)
508                         break;
509                 timeo = schedule_timeout(timeo);
510         }
511         finish_wait(sk_sleep(sk), &wait);
512         return timeo;
513 }
514
515 /*
516  * Transmit a SKB. The device may temporarily request re-transmission
517  * by returning EAGAIN.
518  */
519 static int transmit_skb(struct sk_buff *skb, struct caifsock *cf_sk,
520                         int noblock, long timeo)
521 {
522         struct cfpkt *pkt;
523         int ret, loopcnt = 0;
524
525         pkt = cfpkt_fromnative(CAIF_DIR_OUT, skb);
526         memset(cfpkt_info(pkt), 0, sizeof(struct caif_payload_info));
527         do {
528
529                 ret = -ETIMEDOUT;
530
531                 /* Slight paranoia, probably not needed. */
532                 if (unlikely(loopcnt++ > 1000)) {
533                         pr_warn("transmit retries failed, error = %d\n", ret);
534                         break;
535                 }
536
537                 if (cf_sk->layer.dn != NULL)
538                         ret = cf_sk->layer.dn->transmit(cf_sk->layer.dn, pkt);
539                 if (likely(ret >= 0))
540                         break;
541                 /* if transmit return -EAGAIN, then retry */
542                 if (noblock && ret == -EAGAIN)
543                         break;
544                 timeo = caif_wait_for_flow_on(cf_sk, 0, timeo, &ret);
545                 if (signal_pending(current)) {
546                         ret = sock_intr_errno(timeo);
547                         break;
548                 }
549                 if (ret)
550                         break;
551                 if (cf_sk->sk.sk_state != CAIF_CONNECTED ||
552                         sock_flag(&cf_sk->sk, SOCK_DEAD) ||
553                         (cf_sk->sk.sk_shutdown & RCV_SHUTDOWN)) {
554                         ret = -EPIPE;
555                         cf_sk->sk.sk_err = EPIPE;
556                         break;
557                 }
558         } while (ret == -EAGAIN);
559         return ret;
560 }
561
562 /* Copied from af_unix:unix_dgram_sendmsg, and adapted to CAIF */
563 static int caif_seqpkt_sendmsg(struct kiocb *kiocb, struct socket *sock,
564                         struct msghdr *msg, size_t len)
565 {
566         struct sock *sk = sock->sk;
567         struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);
568         int buffer_size;
569         int ret = 0;
570         struct sk_buff *skb = NULL;
571         int noblock;
572         long timeo;
573         caif_assert(cf_sk);
574         ret = sock_error(sk);
575         if (ret)
576                 goto err;
577
578         ret = -EOPNOTSUPP;
579         if (msg->msg_flags&MSG_OOB)
580                 goto err;
581
582         ret = -EOPNOTSUPP;
583         if (msg->msg_namelen)
584                 goto err;
585
586         ret = -EINVAL;
587         if (unlikely(msg->msg_iov->iov_base == NULL))
588                 goto err;
589         noblock = msg->msg_flags & MSG_DONTWAIT;
590
591         timeo = sock_sndtimeo(sk, noblock);
592         timeo = caif_wait_for_flow_on(container_of(sk, struct caifsock, sk),
593                                 1, timeo, &ret);
594
595         if (ret)
596                 goto err;
597         ret = -EPIPE;
598         if (cf_sk->sk.sk_state != CAIF_CONNECTED ||
599                 sock_flag(sk, SOCK_DEAD) ||
600                 (sk->sk_shutdown & RCV_SHUTDOWN))
601                 goto err;
602
603         /* Error if trying to write more than maximum frame size. */
604         ret = -EMSGSIZE;
605         if (len > cf_sk->maxframe && cf_sk->sk.sk_protocol != CAIFPROTO_RFM)
606                 goto err;
607
608         buffer_size = len + cf_sk->headroom + cf_sk->tailroom;
609
610         ret = -ENOMEM;
611         skb = sock_alloc_send_skb(sk, buffer_size, noblock, &ret);
612
613         if (!skb || skb_tailroom(skb) < buffer_size)
614                 goto err;
615
616         skb_reserve(skb, cf_sk->headroom);
617
618         ret = memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len);
619
620         if (ret)
621                 goto err;
622         ret = transmit_skb(skb, cf_sk, noblock, timeo);
623         if (ret < 0)
624                 goto err;
625         return len;
626 err:
627         kfree_skb(skb);
628         return ret;
629 }
630
631 /*
632  * Copied from unix_stream_sendmsg and adapted to CAIF:
633  * Changed removed permission handling and added waiting for flow on
634  * and other minor adaptations.
635  */
636 static int caif_stream_sendmsg(struct kiocb *kiocb, struct socket *sock,
637                                 struct msghdr *msg, size_t len)
638 {
639         struct sock *sk = sock->sk;
640         struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);
641         int err, size;
642         struct sk_buff *skb;
643         int sent = 0;
644         long timeo;
645
646         err = -EOPNOTSUPP;
647         if (unlikely(msg->msg_flags&MSG_OOB))
648                 goto out_err;
649
650         if (unlikely(msg->msg_namelen))
651                 goto out_err;
652
653         timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
654         timeo = caif_wait_for_flow_on(cf_sk, 1, timeo, &err);
655
656         if (unlikely(sk->sk_shutdown & SEND_SHUTDOWN))
657                 goto pipe_err;
658
659         while (sent < len) {
660
661                 size = len-sent;
662
663                 if (size > cf_sk->maxframe)
664                         size = cf_sk->maxframe;
665
666                 /* If size is more than half of sndbuf, chop up message */
667                 if (size > ((sk->sk_sndbuf >> 1) - 64))
668                         size = (sk->sk_sndbuf >> 1) - 64;
669
670                 if (size > SKB_MAX_ALLOC)
671                         size = SKB_MAX_ALLOC;
672
673                 skb = sock_alloc_send_skb(sk,
674                                         size + cf_sk->headroom +
675                                         cf_sk->tailroom,
676                                         msg->msg_flags&MSG_DONTWAIT,
677                                         &err);
678                 if (skb == NULL)
679                         goto out_err;
680
681                 skb_reserve(skb, cf_sk->headroom);
682                 /*
683                  *      If you pass two values to the sock_alloc_send_skb
684                  *      it tries to grab the large buffer with GFP_NOFS
685                  *      (which can fail easily), and if it fails grab the
686                  *      fallback size buffer which is under a page and will
687                  *      succeed. [Alan]
688                  */
689                 size = min_t(int, size, skb_tailroom(skb));
690
691                 err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size);
692                 if (err) {
693                         kfree_skb(skb);
694                         goto out_err;
695                 }
696                 err = transmit_skb(skb, cf_sk,
697                                 msg->msg_flags&MSG_DONTWAIT, timeo);
698                 if (err < 0) {
699                         kfree_skb(skb);
700                         goto pipe_err;
701                 }
702                 sent += size;
703         }
704
705         return sent;
706
707 pipe_err:
708         if (sent == 0 && !(msg->msg_flags&MSG_NOSIGNAL))
709                 send_sig(SIGPIPE, current, 0);
710         err = -EPIPE;
711 out_err:
712         return sent ? : err;
713 }
714
715 static int setsockopt(struct socket *sock,
716                         int lvl, int opt, char __user *ov, unsigned int ol)
717 {
718         struct sock *sk = sock->sk;
719         struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);
720         int prio, linksel;
721         struct ifreq ifreq;
722
723         if (cf_sk->sk.sk_socket->state != SS_UNCONNECTED)
724                 return -ENOPROTOOPT;
725
726         switch (opt) {
727         case CAIFSO_LINK_SELECT:
728                 if (ol < sizeof(int))
729                         return -EINVAL;
730                 if (lvl != SOL_CAIF)
731                         goto bad_sol;
732                 if (copy_from_user(&linksel, ov, sizeof(int)))
733                         return -EINVAL;
734                 lock_sock(&(cf_sk->sk));
735                 cf_sk->conn_req.link_selector = linksel;
736                 release_sock(&cf_sk->sk);
737                 return 0;
738
739         case SO_PRIORITY:
740                 if (lvl != SOL_SOCKET)
741                         goto bad_sol;
742                 if (ol < sizeof(int))
743                         return -EINVAL;
744                 if (copy_from_user(&prio, ov, sizeof(int)))
745                         return -EINVAL;
746                 lock_sock(&(cf_sk->sk));
747                 cf_sk->conn_req.priority = prio;
748                 release_sock(&cf_sk->sk);
749                 return 0;
750
751         case SO_BINDTODEVICE:
752                 if (lvl != SOL_SOCKET)
753                         goto bad_sol;
754                 if (ol < sizeof(struct ifreq))
755                         return -EINVAL;
756                 if (copy_from_user(&ifreq, ov, sizeof(ifreq)))
757                         return -EFAULT;
758                 lock_sock(&(cf_sk->sk));
759                 strncpy(cf_sk->conn_req.link_name, ifreq.ifr_name,
760                         sizeof(cf_sk->conn_req.link_name));
761                 cf_sk->conn_req.link_name
762                         [sizeof(cf_sk->conn_req.link_name)-1] = 0;
763                 release_sock(&cf_sk->sk);
764                 return 0;
765
766         case CAIFSO_REQ_PARAM:
767                 if (lvl != SOL_CAIF)
768                         goto bad_sol;
769                 if (cf_sk->sk.sk_protocol != CAIFPROTO_UTIL)
770                         return -ENOPROTOOPT;
771                 lock_sock(&(cf_sk->sk));
772                 cf_sk->conn_req.param.size = ol;
773                 if (ol > sizeof(cf_sk->conn_req.param.data) ||
774                         copy_from_user(&cf_sk->conn_req.param.data, ov, ol)) {
775                         release_sock(&cf_sk->sk);
776                         return -EINVAL;
777                 }
778                 release_sock(&cf_sk->sk);
779                 return 0;
780
781         default:
782                 return -ENOPROTOOPT;
783         }
784
785         return 0;
786 bad_sol:
787         return -ENOPROTOOPT;
788
789 }
790
791 /*
792  * caif_connect() - Connect a CAIF Socket
793  * Copied and modified af_irda.c:irda_connect().
794  *
795  * Note : by consulting "errno", the user space caller may learn the cause
796  * of the failure. Most of them are visible in the function, others may come
797  * from subroutines called and are listed here :
798  *  o -EAFNOSUPPORT: bad socket family or type.
799  *  o -ESOCKTNOSUPPORT: bad socket type or protocol
800  *  o -EINVAL: bad socket address, or CAIF link type
801  *  o -ECONNREFUSED: remote end refused the connection.
802  *  o -EINPROGRESS: connect request sent but timed out (or non-blocking)
803  *  o -EISCONN: already connected.
804  *  o -ETIMEDOUT: Connection timed out (send timeout)
805  *  o -ENODEV: No link layer to send request
806  *  o -ECONNRESET: Received Shutdown indication or lost link layer
807  *  o -ENOMEM: Out of memory
808  *
809  *  State Strategy:
810  *  o sk_state: holds the CAIF_* protocol state, it's updated by
811  *      caif_ctrl_cb.
812  *  o sock->state: holds the SS_* socket state and is updated by connect and
813  *      disconnect.
814  */
815 static int caif_connect(struct socket *sock, struct sockaddr *uaddr,
816                         int addr_len, int flags)
817 {
818         struct sock *sk = sock->sk;
819         struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);
820         long timeo;
821         int err;
822         int ifindex, headroom, tailroom;
823         struct net_device *dev;
824
825         lock_sock(sk);
826
827         err = -EAFNOSUPPORT;
828         if (uaddr->sa_family != AF_CAIF)
829                 goto out;
830
831         switch (sock->state) {
832         case SS_UNCONNECTED:
833                 /* Normal case, a fresh connect */
834                 caif_assert(sk->sk_state == CAIF_DISCONNECTED);
835                 break;
836         case SS_CONNECTING:
837                 switch (sk->sk_state) {
838                 case CAIF_CONNECTED:
839                         sock->state = SS_CONNECTED;
840                         err = -EISCONN;
841                         goto out;
842                 case CAIF_DISCONNECTED:
843                         /* Reconnect allowed */
844                         break;
845                 case CAIF_CONNECTING:
846                         err = -EALREADY;
847                         if (flags & O_NONBLOCK)
848                                 goto out;
849                         goto wait_connect;
850                 }
851                 break;
852         case SS_CONNECTED:
853                 caif_assert(sk->sk_state == CAIF_CONNECTED ||
854                                 sk->sk_state == CAIF_DISCONNECTED);
855                 if (sk->sk_shutdown & SHUTDOWN_MASK) {
856                         /* Allow re-connect after SHUTDOWN_IND */
857                         caif_disconnect_client(&cf_sk->layer);
858                         break;
859                 }
860                 /* No reconnect on a seqpacket socket */
861                 err = -EISCONN;
862                 goto out;
863         case SS_DISCONNECTING:
864         case SS_FREE:
865                 caif_assert(1); /*Should never happen */
866                 break;
867         }
868         sk->sk_state = CAIF_DISCONNECTED;
869         sock->state = SS_UNCONNECTED;
870         sk_stream_kill_queues(&cf_sk->sk);
871
872         err = -EINVAL;
873         if (addr_len != sizeof(struct sockaddr_caif))
874                 goto out;
875
876         memcpy(&cf_sk->conn_req.sockaddr, uaddr,
877                 sizeof(struct sockaddr_caif));
878
879         /* Move to connecting socket, start sending Connect Requests */
880         sock->state = SS_CONNECTING;
881         sk->sk_state = CAIF_CONNECTING;
882
883         dbfs_atomic_inc(&cnt.num_connect_req);
884         cf_sk->layer.receive = caif_sktrecv_cb;
885         err = caif_connect_client(&cf_sk->conn_req,
886                                 &cf_sk->layer, &ifindex, &headroom, &tailroom);
887         if (err < 0) {
888                 cf_sk->sk.sk_socket->state = SS_UNCONNECTED;
889                 cf_sk->sk.sk_state = CAIF_DISCONNECTED;
890                 goto out;
891         }
892         dev = dev_get_by_index(sock_net(sk), ifindex);
893         cf_sk->headroom = LL_RESERVED_SPACE_EXTRA(dev, headroom);
894         cf_sk->tailroom = tailroom;
895         cf_sk->maxframe = dev->mtu - (headroom + tailroom);
896         dev_put(dev);
897         if (cf_sk->maxframe < 1) {
898                 pr_warn("CAIF Interface MTU too small (%d)\n", dev->mtu);
899                 err = -ENODEV;
900                 goto out;
901         }
902
903         err = -EINPROGRESS;
904 wait_connect:
905
906         if (sk->sk_state != CAIF_CONNECTED && (flags & O_NONBLOCK))
907                 goto out;
908
909         timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);
910
911         release_sock(sk);
912         err = -ERESTARTSYS;
913         timeo = wait_event_interruptible_timeout(*sk_sleep(sk),
914                         sk->sk_state != CAIF_CONNECTING,
915                         timeo);
916         lock_sock(sk);
917         if (timeo < 0)
918                 goto out; /* -ERESTARTSYS */
919
920         err = -ETIMEDOUT;
921         if (timeo == 0 && sk->sk_state != CAIF_CONNECTED)
922                 goto out;
923         if (sk->sk_state != CAIF_CONNECTED) {
924                 sock->state = SS_UNCONNECTED;
925                 err = sock_error(sk);
926                 if (!err)
927                         err = -ECONNREFUSED;
928                 goto out;
929         }
930         sock->state = SS_CONNECTED;
931         err = 0;
932 out:
933         release_sock(sk);
934         return err;
935 }
936
937 /*
938  * caif_release() - Disconnect a CAIF Socket
939  * Copied and modified af_irda.c:irda_release().
940  */
941 static int caif_release(struct socket *sock)
942 {
943         struct sock *sk = sock->sk;
944         struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);
945         int res = 0;
946
947         if (!sk)
948                 return 0;
949
950         set_tx_flow_off(cf_sk);
951
952         /*
953          * Ensure that packets are not queued after this point in time.
954          * caif_queue_rcv_skb checks SOCK_DEAD holding the queue lock,
955          * this ensures no packets when sock is dead.
956          */
957         spin_lock(&sk->sk_receive_queue.lock);
958         sock_set_flag(sk, SOCK_DEAD);
959         spin_unlock(&sk->sk_receive_queue.lock);
960         sock->sk = NULL;
961
962         dbfs_atomic_inc(&cnt.num_disconnect);
963
964         if (cf_sk->debugfs_socket_dir != NULL)
965                 debugfs_remove_recursive(cf_sk->debugfs_socket_dir);
966
967         lock_sock(&(cf_sk->sk));
968         sk->sk_state = CAIF_DISCONNECTED;
969         sk->sk_shutdown = SHUTDOWN_MASK;
970
971         if (cf_sk->sk.sk_socket->state == SS_CONNECTED ||
972                 cf_sk->sk.sk_socket->state == SS_CONNECTING)
973                 res = caif_disconnect_client(&cf_sk->layer);
974
975         cf_sk->sk.sk_socket->state = SS_DISCONNECTING;
976         wake_up_interruptible_poll(sk_sleep(sk), POLLERR|POLLHUP);
977
978         sock_orphan(sk);
979         cf_sk->layer.dn = NULL;
980         sk_stream_kill_queues(&cf_sk->sk);
981         release_sock(sk);
982         sock_put(sk);
983         return res;
984 }
985
986 /* Copied from af_unix.c:unix_poll(), added CAIF tx_flow handling */
987 static unsigned int caif_poll(struct file *file,
988                                 struct socket *sock, poll_table *wait)
989 {
990         struct sock *sk = sock->sk;
991         unsigned int mask;
992         struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);
993
994         sock_poll_wait(file, sk_sleep(sk), wait);
995         mask = 0;
996
997         /* exceptional events? */
998         if (sk->sk_err)
999                 mask |= POLLERR;
1000         if (sk->sk_shutdown == SHUTDOWN_MASK)
1001                 mask |= POLLHUP;
1002         if (sk->sk_shutdown & RCV_SHUTDOWN)
1003                 mask |= POLLRDHUP;
1004
1005         /* readable? */
1006         if (!skb_queue_empty(&sk->sk_receive_queue) ||
1007                 (sk->sk_shutdown & RCV_SHUTDOWN))
1008                 mask |= POLLIN | POLLRDNORM;
1009
1010         /*
1011          * we set writable also when the other side has shut down the
1012          * connection. This prevents stuck sockets.
1013          */
1014         if (sock_writeable(sk) && tx_flow_is_on(cf_sk))
1015                 mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
1016
1017         return mask;
1018 }
1019
1020 static const struct proto_ops caif_seqpacket_ops = {
1021         .family = PF_CAIF,
1022         .owner = THIS_MODULE,
1023         .release = caif_release,
1024         .bind = sock_no_bind,
1025         .connect = caif_connect,
1026         .socketpair = sock_no_socketpair,
1027         .accept = sock_no_accept,
1028         .getname = sock_no_getname,
1029         .poll = caif_poll,
1030         .ioctl = sock_no_ioctl,
1031         .listen = sock_no_listen,
1032         .shutdown = sock_no_shutdown,
1033         .setsockopt = setsockopt,
1034         .getsockopt = sock_no_getsockopt,
1035         .sendmsg = caif_seqpkt_sendmsg,
1036         .recvmsg = caif_seqpkt_recvmsg,
1037         .mmap = sock_no_mmap,
1038         .sendpage = sock_no_sendpage,
1039 };
1040
1041 static const struct proto_ops caif_stream_ops = {
1042         .family = PF_CAIF,
1043         .owner = THIS_MODULE,
1044         .release = caif_release,
1045         .bind = sock_no_bind,
1046         .connect = caif_connect,
1047         .socketpair = sock_no_socketpair,
1048         .accept = sock_no_accept,
1049         .getname = sock_no_getname,
1050         .poll = caif_poll,
1051         .ioctl = sock_no_ioctl,
1052         .listen = sock_no_listen,
1053         .shutdown = sock_no_shutdown,
1054         .setsockopt = setsockopt,
1055         .getsockopt = sock_no_getsockopt,
1056         .sendmsg = caif_stream_sendmsg,
1057         .recvmsg = caif_stream_recvmsg,
1058         .mmap = sock_no_mmap,
1059         .sendpage = sock_no_sendpage,
1060 };
1061
1062 /* This function is called when a socket is finally destroyed. */
1063 static void caif_sock_destructor(struct sock *sk)
1064 {
1065         struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);
1066         caif_assert(!atomic_read(&sk->sk_wmem_alloc));
1067         caif_assert(sk_unhashed(sk));
1068         caif_assert(!sk->sk_socket);
1069         if (!sock_flag(sk, SOCK_DEAD)) {
1070                 pr_info("Attempt to release alive CAIF socket: %p\n", sk);
1071                 return;
1072         }
1073         sk_stream_kill_queues(&cf_sk->sk);
1074         dbfs_atomic_dec(&cnt.caif_nr_socks);
1075 }
1076
1077 static int caif_create(struct net *net, struct socket *sock, int protocol,
1078                         int kern)
1079 {
1080         struct sock *sk = NULL;
1081         struct caifsock *cf_sk = NULL;
1082         static struct proto prot = {.name = "PF_CAIF",
1083                 .owner = THIS_MODULE,
1084                 .obj_size = sizeof(struct caifsock),
1085         };
1086
1087         if (!capable(CAP_SYS_ADMIN) && !capable(CAP_NET_ADMIN))
1088                 return -EPERM;
1089         /*
1090          * The sock->type specifies the socket type to use.
1091          * The CAIF socket is a packet stream in the sense
1092          * that it is packet based. CAIF trusts the reliability
1093          * of the link, no resending is implemented.
1094          */
1095         if (sock->type == SOCK_SEQPACKET)
1096                 sock->ops = &caif_seqpacket_ops;
1097         else if (sock->type == SOCK_STREAM)
1098                 sock->ops = &caif_stream_ops;
1099         else
1100                 return -ESOCKTNOSUPPORT;
1101
1102         if (protocol < 0 || protocol >= CAIFPROTO_MAX)
1103                 return -EPROTONOSUPPORT;
1104         /*
1105          * Set the socket state to unconnected.  The socket state
1106          * is really not used at all in the net/core or socket.c but the
1107          * initialization makes sure that sock->state is not uninitialized.
1108          */
1109         sk = sk_alloc(net, PF_CAIF, GFP_KERNEL, &prot);
1110         if (!sk)
1111                 return -ENOMEM;
1112
1113         cf_sk = container_of(sk, struct caifsock, sk);
1114
1115         /* Store the protocol */
1116         sk->sk_protocol = (unsigned char) protocol;
1117
1118         /*
1119          * Lock in order to try to stop someone from opening the socket
1120          * too early.
1121          */
1122         lock_sock(&(cf_sk->sk));
1123
1124         /* Initialize the nozero default sock structure data. */
1125         sock_init_data(sock, sk);
1126         sk->sk_destruct = caif_sock_destructor;
1127
1128         mutex_init(&cf_sk->readlock); /* single task reading lock */
1129         cf_sk->layer.ctrlcmd = caif_ctrl_cb;
1130         cf_sk->sk.sk_socket->state = SS_UNCONNECTED;
1131         cf_sk->sk.sk_state = CAIF_DISCONNECTED;
1132
1133         set_tx_flow_off(cf_sk);
1134         set_rx_flow_on(cf_sk);
1135
1136         /* Set default options on configuration */
1137         cf_sk->conn_req.priority = CAIF_PRIO_NORMAL;
1138         cf_sk->conn_req.link_selector = CAIF_LINK_LOW_LATENCY;
1139         cf_sk->conn_req.protocol = protocol;
1140         /* Increase the number of sockets created. */
1141         dbfs_atomic_inc(&cnt.caif_nr_socks);
1142 #ifdef CONFIG_DEBUG_FS
1143         if (!IS_ERR(debugfsdir)) {
1144                 /* Fill in some information concerning the misc socket. */
1145                 snprintf(cf_sk->name, sizeof(cf_sk->name), "cfsk%d",
1146                                 atomic_read(&cnt.caif_nr_socks));
1147
1148                 cf_sk->debugfs_socket_dir =
1149                         debugfs_create_dir(cf_sk->name, debugfsdir);
1150                 debugfs_create_u32("sk_state", S_IRUSR | S_IWUSR,
1151                                 cf_sk->debugfs_socket_dir,
1152                                 (u32 *) &cf_sk->sk.sk_state);
1153                 debugfs_create_u32("flow_state", S_IRUSR | S_IWUSR,
1154                                 cf_sk->debugfs_socket_dir, &cf_sk->flow_state);
1155                 debugfs_create_u32("sk_rmem_alloc", S_IRUSR | S_IWUSR,
1156                                 cf_sk->debugfs_socket_dir,
1157                                 (u32 *) &cf_sk->sk.sk_rmem_alloc);
1158                 debugfs_create_u32("sk_wmem_alloc", S_IRUSR | S_IWUSR,
1159                                 cf_sk->debugfs_socket_dir,
1160                                 (u32 *) &cf_sk->sk.sk_wmem_alloc);
1161                 debugfs_create_u32("identity", S_IRUSR | S_IWUSR,
1162                                 cf_sk->debugfs_socket_dir,
1163                                 (u32 *) &cf_sk->layer.id);
1164         }
1165 #endif
1166         release_sock(&cf_sk->sk);
1167         return 0;
1168 }
1169
1170
1171 static struct net_proto_family caif_family_ops = {
1172         .family = PF_CAIF,
1173         .create = caif_create,
1174         .owner = THIS_MODULE,
1175 };
1176
1177 static int af_caif_init(void)
1178 {
1179         int err = sock_register(&caif_family_ops);
1180         if (!err)
1181                 return err;
1182         return 0;
1183 }
1184
1185 static int __init caif_sktinit_module(void)
1186 {
1187 #ifdef CONFIG_DEBUG_FS
1188         debugfsdir = debugfs_create_dir("caif_sk", NULL);
1189         if (!IS_ERR(debugfsdir)) {
1190                 debugfs_create_u32("num_sockets", S_IRUSR | S_IWUSR,
1191                                 debugfsdir,
1192                                 (u32 *) &cnt.caif_nr_socks);
1193                 debugfs_create_u32("num_connect_req", S_IRUSR | S_IWUSR,
1194                                 debugfsdir,
1195                                 (u32 *) &cnt.num_connect_req);
1196                 debugfs_create_u32("num_connect_resp", S_IRUSR | S_IWUSR,
1197                                 debugfsdir,
1198                                 (u32 *) &cnt.num_connect_resp);
1199                 debugfs_create_u32("num_connect_fail_resp", S_IRUSR | S_IWUSR,
1200                                 debugfsdir,
1201                                 (u32 *) &cnt.num_connect_fail_resp);
1202                 debugfs_create_u32("num_disconnect", S_IRUSR | S_IWUSR,
1203                                 debugfsdir,
1204                                 (u32 *) &cnt.num_disconnect);
1205                 debugfs_create_u32("num_remote_shutdown_ind",
1206                                 S_IRUSR | S_IWUSR, debugfsdir,
1207                                 (u32 *) &cnt.num_remote_shutdown_ind);
1208                 debugfs_create_u32("num_tx_flow_off_ind", S_IRUSR | S_IWUSR,
1209                                 debugfsdir,
1210                                 (u32 *) &cnt.num_tx_flow_off_ind);
1211                 debugfs_create_u32("num_tx_flow_on_ind", S_IRUSR | S_IWUSR,
1212                                 debugfsdir,
1213                                 (u32 *) &cnt.num_tx_flow_on_ind);
1214                 debugfs_create_u32("num_rx_flow_off", S_IRUSR | S_IWUSR,
1215                                 debugfsdir,
1216                                 (u32 *) &cnt.num_rx_flow_off);
1217                 debugfs_create_u32("num_rx_flow_on", S_IRUSR | S_IWUSR,
1218                                 debugfsdir,
1219                                 (u32 *) &cnt.num_rx_flow_on);
1220         }
1221 #endif
1222         return af_caif_init();
1223 }
1224
1225 static void __exit caif_sktexit_module(void)
1226 {
1227         sock_unregister(PF_CAIF);
1228         if (debugfsdir != NULL)
1229                 debugfs_remove_recursive(debugfsdir);
1230 }
1231 module_init(caif_sktinit_module);
1232 module_exit(caif_sktexit_module);