1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37#include "core.h"
38#include "port.h"
39
40#include <linux/export.h>
41#include <net/sock.h>
42
43#define SS_LISTENING -1
44#define SS_READY -2
45
46#define CONN_TIMEOUT_DEFAULT 8000
47
48struct tipc_sock {
49 struct sock sk;
50 struct tipc_port *p;
51 struct tipc_portid peer_name;
52 unsigned int conn_timeout;
53};
54
55#define tipc_sk(sk) ((struct tipc_sock *)(sk))
56#define tipc_sk_port(sk) (tipc_sk(sk)->p)
57
58static int backlog_rcv(struct sock *sk, struct sk_buff *skb);
59static u32 dispatch(struct tipc_port *tport, struct sk_buff *buf);
60static void wakeupdispatch(struct tipc_port *tport);
61static void tipc_data_ready(struct sock *sk, int len);
62static void tipc_write_space(struct sock *sk);
63static int release(struct socket *sock);
64static int accept(struct socket *sock, struct socket *new_sock, int flags);
65
66static const struct proto_ops packet_ops;
67static const struct proto_ops stream_ops;
68static const struct proto_ops msg_ops;
69
70static struct proto tipc_proto;
71static struct proto tipc_proto_kern;
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123static void advance_rx_queue(struct sock *sk)
124{
125 kfree_skb(__skb_dequeue(&sk->sk_receive_queue));
126}
127
128
129
130
131
132
133static void reject_rx_queue(struct sock *sk)
134{
135 struct sk_buff *buf;
136
137 while ((buf = __skb_dequeue(&sk->sk_receive_queue)))
138 tipc_reject_msg(buf, TIPC_ERR_NO_PORT);
139}
140
141
142
143
144
145
146
147
148
149
150
151
152
153static int tipc_sk_create(struct net *net, struct socket *sock, int protocol,
154 int kern)
155{
156 const struct proto_ops *ops;
157 socket_state state;
158 struct sock *sk;
159 struct tipc_port *tp_ptr;
160
161
162 if (unlikely(protocol != 0))
163 return -EPROTONOSUPPORT;
164
165 switch (sock->type) {
166 case SOCK_STREAM:
167 ops = &stream_ops;
168 state = SS_UNCONNECTED;
169 break;
170 case SOCK_SEQPACKET:
171 ops = &packet_ops;
172 state = SS_UNCONNECTED;
173 break;
174 case SOCK_DGRAM:
175 case SOCK_RDM:
176 ops = &msg_ops;
177 state = SS_READY;
178 break;
179 default:
180 return -EPROTOTYPE;
181 }
182
183
184 if (!kern)
185 sk = sk_alloc(net, AF_TIPC, GFP_KERNEL, &tipc_proto);
186 else
187 sk = sk_alloc(net, AF_TIPC, GFP_KERNEL, &tipc_proto_kern);
188
189 if (sk == NULL)
190 return -ENOMEM;
191
192
193 tp_ptr = tipc_createport(sk, &dispatch, &wakeupdispatch,
194 TIPC_LOW_IMPORTANCE);
195 if (unlikely(!tp_ptr)) {
196 sk_free(sk);
197 return -ENOMEM;
198 }
199
200
201 sock->ops = ops;
202 sock->state = state;
203
204 sock_init_data(sock, sk);
205 sk->sk_backlog_rcv = backlog_rcv;
206 sk->sk_rcvbuf = sysctl_tipc_rmem[1];
207 sk->sk_data_ready = tipc_data_ready;
208 sk->sk_write_space = tipc_write_space;
209 tipc_sk(sk)->p = tp_ptr;
210 tipc_sk(sk)->conn_timeout = CONN_TIMEOUT_DEFAULT;
211
212 spin_unlock_bh(tp_ptr->lock);
213
214 if (sock->state == SS_READY) {
215 tipc_set_portunreturnable(tp_ptr->ref, 1);
216 if (sock->type == SOCK_DGRAM)
217 tipc_set_portunreliable(tp_ptr->ref, 1);
218 }
219
220 return 0;
221}
222
223
224
225
226
227
228
229
230
231
232
233
234int tipc_sock_create_local(int type, struct socket **res)
235{
236 int rc;
237
238 rc = sock_create_lite(AF_TIPC, type, 0, res);
239 if (rc < 0) {
240 pr_err("Failed to create kernel socket\n");
241 return rc;
242 }
243 tipc_sk_create(&init_net, *res, 0, 1);
244
245 return 0;
246}
247
248
249
250
251
252
253
254
255void tipc_sock_release_local(struct socket *sock)
256{
257 release(sock);
258 sock->ops = NULL;
259 sock_release(sock);
260}
261
262
263
264
265
266
267
268
269
270
271
272int tipc_sock_accept_local(struct socket *sock, struct socket **newsock,
273 int flags)
274{
275 struct sock *sk = sock->sk;
276 int ret;
277
278 ret = sock_create_lite(sk->sk_family, sk->sk_type,
279 sk->sk_protocol, newsock);
280 if (ret < 0)
281 return ret;
282
283 ret = accept(sock, *newsock, flags);
284 if (ret < 0) {
285 sock_release(*newsock);
286 return ret;
287 }
288 (*newsock)->ops = sock->ops;
289 return ret;
290}
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308static int release(struct socket *sock)
309{
310 struct sock *sk = sock->sk;
311 struct tipc_port *tport;
312 struct sk_buff *buf;
313 int res;
314
315
316
317
318
319 if (sk == NULL)
320 return 0;
321
322 tport = tipc_sk_port(sk);
323 lock_sock(sk);
324
325
326
327
328
329 while (sock->state != SS_DISCONNECTING) {
330 buf = __skb_dequeue(&sk->sk_receive_queue);
331 if (buf == NULL)
332 break;
333 if (TIPC_SKB_CB(buf)->handle != NULL)
334 kfree_skb(buf);
335 else {
336 if ((sock->state == SS_CONNECTING) ||
337 (sock->state == SS_CONNECTED)) {
338 sock->state = SS_DISCONNECTING;
339 tipc_disconnect(tport->ref);
340 }
341 tipc_reject_msg(buf, TIPC_ERR_NO_PORT);
342 }
343 }
344
345
346
347
348
349 res = tipc_deleteport(tport);
350
351
352 __skb_queue_purge(&sk->sk_receive_queue);
353
354
355 sock->state = SS_DISCONNECTING;
356 release_sock(sk);
357
358 sock_put(sk);
359 sock->sk = NULL;
360
361 return res;
362}
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379static int bind(struct socket *sock, struct sockaddr *uaddr, int uaddr_len)
380{
381 struct sock *sk = sock->sk;
382 struct sockaddr_tipc *addr = (struct sockaddr_tipc *)uaddr;
383 struct tipc_port *tport = tipc_sk_port(sock->sk);
384 int res = -EINVAL;
385
386 lock_sock(sk);
387 if (unlikely(!uaddr_len)) {
388 res = tipc_withdraw(tport, 0, NULL);
389 goto exit;
390 }
391
392 if (uaddr_len < sizeof(struct sockaddr_tipc)) {
393 res = -EINVAL;
394 goto exit;
395 }
396 if (addr->family != AF_TIPC) {
397 res = -EAFNOSUPPORT;
398 goto exit;
399 }
400
401 if (addr->addrtype == TIPC_ADDR_NAME)
402 addr->addr.nameseq.upper = addr->addr.nameseq.lower;
403 else if (addr->addrtype != TIPC_ADDR_NAMESEQ) {
404 res = -EAFNOSUPPORT;
405 goto exit;
406 }
407
408 if ((addr->addr.nameseq.type < TIPC_RESERVED_TYPES) &&
409 (addr->addr.nameseq.type != TIPC_TOP_SRV) &&
410 (addr->addr.nameseq.type != TIPC_CFG_SRV)) {
411 res = -EACCES;
412 goto exit;
413 }
414
415 res = (addr->scope > 0) ?
416 tipc_publish(tport, addr->scope, &addr->addr.nameseq) :
417 tipc_withdraw(tport, -addr->scope, &addr->addr.nameseq);
418exit:
419 release_sock(sk);
420 return res;
421}
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436static int get_name(struct socket *sock, struct sockaddr *uaddr,
437 int *uaddr_len, int peer)
438{
439 struct sockaddr_tipc *addr = (struct sockaddr_tipc *)uaddr;
440 struct tipc_sock *tsock = tipc_sk(sock->sk);
441
442 memset(addr, 0, sizeof(*addr));
443 if (peer) {
444 if ((sock->state != SS_CONNECTED) &&
445 ((peer != 2) || (sock->state != SS_DISCONNECTING)))
446 return -ENOTCONN;
447 addr->addr.id.ref = tsock->peer_name.ref;
448 addr->addr.id.node = tsock->peer_name.node;
449 } else {
450 addr->addr.id.ref = tsock->p->ref;
451 addr->addr.id.node = tipc_own_addr;
452 }
453
454 *uaddr_len = sizeof(*addr);
455 addr->addrtype = TIPC_ADDR_ID;
456 addr->family = AF_TIPC;
457 addr->scope = 0;
458 addr->addr.name.domain = 0;
459
460 return 0;
461}
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503static unsigned int poll(struct file *file, struct socket *sock,
504 poll_table *wait)
505{
506 struct sock *sk = sock->sk;
507 u32 mask = 0;
508
509 sock_poll_wait(file, sk_sleep(sk), wait);
510
511 switch ((int)sock->state) {
512 case SS_UNCONNECTED:
513 if (!tipc_sk_port(sk)->congested)
514 mask |= POLLOUT;
515 break;
516 case SS_READY:
517 case SS_CONNECTED:
518 if (!tipc_sk_port(sk)->congested)
519 mask |= POLLOUT;
520
521 case SS_CONNECTING:
522 case SS_LISTENING:
523 if (!skb_queue_empty(&sk->sk_receive_queue))
524 mask |= (POLLIN | POLLRDNORM);
525 break;
526 case SS_DISCONNECTING:
527 mask = (POLLIN | POLLRDNORM | POLLHUP);
528 break;
529 }
530
531 return mask;
532}
533
534
535
536
537
538
539
540
541
542
543
544static int dest_name_check(struct sockaddr_tipc *dest, struct msghdr *m)
545{
546 struct tipc_cfg_msg_hdr hdr;
547
548 if (likely(dest->addr.name.name.type >= TIPC_RESERVED_TYPES))
549 return 0;
550 if (likely(dest->addr.name.name.type == TIPC_TOP_SRV))
551 return 0;
552 if (likely(dest->addr.name.name.type != TIPC_CFG_SRV))
553 return -EACCES;
554
555 if (!m->msg_iovlen || (m->msg_iov[0].iov_len < sizeof(hdr)))
556 return -EMSGSIZE;
557 if (copy_from_user(&hdr, m->msg_iov[0].iov_base, sizeof(hdr)))
558 return -EFAULT;
559 if ((ntohs(hdr.tcm_type) & 0xC000) && (!capable(CAP_NET_ADMIN)))
560 return -EACCES;
561
562 return 0;
563}
564
565static int tipc_wait_for_sndmsg(struct socket *sock, long *timeo_p)
566{
567 struct sock *sk = sock->sk;
568 struct tipc_port *tport = tipc_sk_port(sk);
569 DEFINE_WAIT(wait);
570 int done;
571
572 do {
573 int err = sock_error(sk);
574 if (err)
575 return err;
576 if (sock->state == SS_DISCONNECTING)
577 return -EPIPE;
578 if (!*timeo_p)
579 return -EAGAIN;
580 if (signal_pending(current))
581 return sock_intr_errno(*timeo_p);
582
583 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
584 done = sk_wait_event(sk, timeo_p, !tport->congested);
585 finish_wait(sk_sleep(sk), &wait);
586 } while (!done);
587 return 0;
588}
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604static int send_msg(struct kiocb *iocb, struct socket *sock,
605 struct msghdr *m, size_t total_len)
606{
607 struct sock *sk = sock->sk;
608 struct tipc_port *tport = tipc_sk_port(sk);
609 DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name);
610 int needs_conn;
611 long timeo;
612 int res = -EINVAL;
613
614 if (unlikely(!dest))
615 return -EDESTADDRREQ;
616 if (unlikely((m->msg_namelen < sizeof(*dest)) ||
617 (dest->family != AF_TIPC)))
618 return -EINVAL;
619 if (total_len > TIPC_MAX_USER_MSG_SIZE)
620 return -EMSGSIZE;
621
622 if (iocb)
623 lock_sock(sk);
624
625 needs_conn = (sock->state != SS_READY);
626 if (unlikely(needs_conn)) {
627 if (sock->state == SS_LISTENING) {
628 res = -EPIPE;
629 goto exit;
630 }
631 if (sock->state != SS_UNCONNECTED) {
632 res = -EISCONN;
633 goto exit;
634 }
635 if (tport->published) {
636 res = -EOPNOTSUPP;
637 goto exit;
638 }
639 if (dest->addrtype == TIPC_ADDR_NAME) {
640 tport->conn_type = dest->addr.name.name.type;
641 tport->conn_instance = dest->addr.name.name.instance;
642 }
643
644
645 reject_rx_queue(sk);
646 }
647
648 timeo = sock_sndtimeo(sk, m->msg_flags & MSG_DONTWAIT);
649 do {
650 if (dest->addrtype == TIPC_ADDR_NAME) {
651 res = dest_name_check(dest, m);
652 if (res)
653 break;
654 res = tipc_send2name(tport->ref,
655 &dest->addr.name.name,
656 dest->addr.name.domain,
657 m->msg_iov,
658 total_len);
659 } else if (dest->addrtype == TIPC_ADDR_ID) {
660 res = tipc_send2port(tport->ref,
661 &dest->addr.id,
662 m->msg_iov,
663 total_len);
664 } else if (dest->addrtype == TIPC_ADDR_MCAST) {
665 if (needs_conn) {
666 res = -EOPNOTSUPP;
667 break;
668 }
669 res = dest_name_check(dest, m);
670 if (res)
671 break;
672 res = tipc_multicast(tport->ref,
673 &dest->addr.nameseq,
674 m->msg_iov,
675 total_len);
676 }
677 if (likely(res != -ELINKCONG)) {
678 if (needs_conn && (res >= 0))
679 sock->state = SS_CONNECTING;
680 break;
681 }
682 res = tipc_wait_for_sndmsg(sock, &timeo);
683 if (res)
684 break;
685 } while (1);
686
687exit:
688 if (iocb)
689 release_sock(sk);
690 return res;
691}
692
693static int tipc_wait_for_sndpkt(struct socket *sock, long *timeo_p)
694{
695 struct sock *sk = sock->sk;
696 struct tipc_port *tport = tipc_sk_port(sk);
697 DEFINE_WAIT(wait);
698 int done;
699
700 do {
701 int err = sock_error(sk);
702 if (err)
703 return err;
704 if (sock->state == SS_DISCONNECTING)
705 return -EPIPE;
706 else if (sock->state != SS_CONNECTED)
707 return -ENOTCONN;
708 if (!*timeo_p)
709 return -EAGAIN;
710 if (signal_pending(current))
711 return sock_intr_errno(*timeo_p);
712
713 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
714 done = sk_wait_event(sk, timeo_p,
715 (!tport->congested || !tport->connected));
716 finish_wait(sk_sleep(sk), &wait);
717 } while (!done);
718 return 0;
719}
720
721
722
723
724
725
726
727
728
729
730
731
732static int send_packet(struct kiocb *iocb, struct socket *sock,
733 struct msghdr *m, size_t total_len)
734{
735 struct sock *sk = sock->sk;
736 struct tipc_port *tport = tipc_sk_port(sk);
737 DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name);
738 int res = -EINVAL;
739 long timeo;
740
741
742 if (unlikely(dest))
743 return send_msg(iocb, sock, m, total_len);
744
745 if (total_len > TIPC_MAX_USER_MSG_SIZE)
746 return -EMSGSIZE;
747
748 if (iocb)
749 lock_sock(sk);
750
751 if (unlikely(sock->state != SS_CONNECTED)) {
752 if (sock->state == SS_DISCONNECTING)
753 res = -EPIPE;
754 else
755 res = -ENOTCONN;
756 goto exit;
757 }
758
759 timeo = sock_sndtimeo(sk, m->msg_flags & MSG_DONTWAIT);
760 do {
761 res = tipc_send(tport->ref, m->msg_iov, total_len);
762 if (likely(res != -ELINKCONG))
763 break;
764 res = tipc_wait_for_sndpkt(sock, &timeo);
765 if (res)
766 break;
767 } while (1);
768exit:
769 if (iocb)
770 release_sock(sk);
771 return res;
772}
773
774
775
776
777
778
779
780
781
782
783
784
785
786static int send_stream(struct kiocb *iocb, struct socket *sock,
787 struct msghdr *m, size_t total_len)
788{
789 struct sock *sk = sock->sk;
790 struct tipc_port *tport = tipc_sk_port(sk);
791 struct msghdr my_msg;
792 struct iovec my_iov;
793 struct iovec *curr_iov;
794 int curr_iovlen;
795 char __user *curr_start;
796 u32 hdr_size;
797 int curr_left;
798 int bytes_to_send;
799 int bytes_sent;
800 int res;
801
802 lock_sock(sk);
803
804
805 if (unlikely(sock->state != SS_CONNECTED)) {
806 if (sock->state == SS_UNCONNECTED)
807 res = send_packet(NULL, sock, m, total_len);
808 else
809 res = sock->state == SS_DISCONNECTING ? -EPIPE : -ENOTCONN;
810 goto exit;
811 }
812
813 if (unlikely(m->msg_name)) {
814 res = -EISCONN;
815 goto exit;
816 }
817
818 if (total_len > (unsigned int)INT_MAX) {
819 res = -EMSGSIZE;
820 goto exit;
821 }
822
823
824
825
826
827
828
829
830 curr_iov = m->msg_iov;
831 curr_iovlen = m->msg_iovlen;
832 my_msg.msg_iov = &my_iov;
833 my_msg.msg_iovlen = 1;
834 my_msg.msg_flags = m->msg_flags;
835 my_msg.msg_name = NULL;
836 bytes_sent = 0;
837
838 hdr_size = msg_hdr_sz(&tport->phdr);
839
840 while (curr_iovlen--) {
841 curr_start = curr_iov->iov_base;
842 curr_left = curr_iov->iov_len;
843
844 while (curr_left) {
845 bytes_to_send = tport->max_pkt - hdr_size;
846 if (bytes_to_send > TIPC_MAX_USER_MSG_SIZE)
847 bytes_to_send = TIPC_MAX_USER_MSG_SIZE;
848 if (curr_left < bytes_to_send)
849 bytes_to_send = curr_left;
850 my_iov.iov_base = curr_start;
851 my_iov.iov_len = bytes_to_send;
852 res = send_packet(NULL, sock, &my_msg, bytes_to_send);
853 if (res < 0) {
854 if (bytes_sent)
855 res = bytes_sent;
856 goto exit;
857 }
858 curr_left -= bytes_to_send;
859 curr_start += bytes_to_send;
860 bytes_sent += bytes_to_send;
861 }
862
863 curr_iov++;
864 }
865 res = bytes_sent;
866exit:
867 release_sock(sk);
868 return res;
869}
870
871
872
873
874
875
876
877
878static int auto_connect(struct socket *sock, struct tipc_msg *msg)
879{
880 struct tipc_sock *tsock = tipc_sk(sock->sk);
881 struct tipc_port *p_ptr;
882
883 tsock->peer_name.ref = msg_origport(msg);
884 tsock->peer_name.node = msg_orignode(msg);
885 p_ptr = tipc_port_deref(tsock->p->ref);
886 if (!p_ptr)
887 return -EINVAL;
888
889 __tipc_connect(tsock->p->ref, p_ptr, &tsock->peer_name);
890
891 if (msg_importance(msg) > TIPC_CRITICAL_IMPORTANCE)
892 return -EINVAL;
893 msg_set_importance(&p_ptr->phdr, (u32)msg_importance(msg));
894 sock->state = SS_CONNECTED;
895 return 0;
896}
897
898
899
900
901
902
903
904
905static void set_orig_addr(struct msghdr *m, struct tipc_msg *msg)
906{
907 DECLARE_SOCKADDR(struct sockaddr_tipc *, addr, m->msg_name);
908
909 if (addr) {
910 addr->family = AF_TIPC;
911 addr->addrtype = TIPC_ADDR_ID;
912 memset(&addr->addr, 0, sizeof(addr->addr));
913 addr->addr.id.ref = msg_origport(msg);
914 addr->addr.id.node = msg_orignode(msg);
915 addr->addr.name.domain = 0;
916 addr->scope = 0;
917 m->msg_namelen = sizeof(struct sockaddr_tipc);
918 }
919}
920
921
922
923
924
925
926
927
928
929
930
931static int anc_data_recv(struct msghdr *m, struct tipc_msg *msg,
932 struct tipc_port *tport)
933{
934 u32 anc_data[3];
935 u32 err;
936 u32 dest_type;
937 int has_name;
938 int res;
939
940 if (likely(m->msg_controllen == 0))
941 return 0;
942
943
944 err = msg ? msg_errcode(msg) : 0;
945 if (unlikely(err)) {
946 anc_data[0] = err;
947 anc_data[1] = msg_data_sz(msg);
948 res = put_cmsg(m, SOL_TIPC, TIPC_ERRINFO, 8, anc_data);
949 if (res)
950 return res;
951 if (anc_data[1]) {
952 res = put_cmsg(m, SOL_TIPC, TIPC_RETDATA, anc_data[1],
953 msg_data(msg));
954 if (res)
955 return res;
956 }
957 }
958
959
960 dest_type = msg ? msg_type(msg) : TIPC_DIRECT_MSG;
961 switch (dest_type) {
962 case TIPC_NAMED_MSG:
963 has_name = 1;
964 anc_data[0] = msg_nametype(msg);
965 anc_data[1] = msg_namelower(msg);
966 anc_data[2] = msg_namelower(msg);
967 break;
968 case TIPC_MCAST_MSG:
969 has_name = 1;
970 anc_data[0] = msg_nametype(msg);
971 anc_data[1] = msg_namelower(msg);
972 anc_data[2] = msg_nameupper(msg);
973 break;
974 case TIPC_CONN_MSG:
975 has_name = (tport->conn_type != 0);
976 anc_data[0] = tport->conn_type;
977 anc_data[1] = tport->conn_instance;
978 anc_data[2] = tport->conn_instance;
979 break;
980 default:
981 has_name = 0;
982 }
983 if (has_name) {
984 res = put_cmsg(m, SOL_TIPC, TIPC_DESTNAME, 12, anc_data);
985 if (res)
986 return res;
987 }
988
989 return 0;
990}
991
992static int tipc_wait_for_rcvmsg(struct socket *sock, long timeo)
993{
994 struct sock *sk = sock->sk;
995 DEFINE_WAIT(wait);
996 int err;
997
998 for (;;) {
999 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1000 if (timeo && skb_queue_empty(&sk->sk_receive_queue)) {
1001 if (sock->state == SS_DISCONNECTING) {
1002 err = -ENOTCONN;
1003 break;
1004 }
1005 release_sock(sk);
1006 timeo = schedule_timeout(timeo);
1007 lock_sock(sk);
1008 }
1009 err = 0;
1010 if (!skb_queue_empty(&sk->sk_receive_queue))
1011 break;
1012 err = sock_intr_errno(timeo);
1013 if (signal_pending(current))
1014 break;
1015 err = -EAGAIN;
1016 if (!timeo)
1017 break;
1018 }
1019 finish_wait(sk_sleep(sk), &wait);
1020 return err;
1021}
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035static int recv_msg(struct kiocb *iocb, struct socket *sock,
1036 struct msghdr *m, size_t buf_len, int flags)
1037{
1038 struct sock *sk = sock->sk;
1039 struct tipc_port *tport = tipc_sk_port(sk);
1040 struct sk_buff *buf;
1041 struct tipc_msg *msg;
1042 long timeo;
1043 unsigned int sz;
1044 u32 err;
1045 int res;
1046
1047
1048 if (unlikely(!buf_len))
1049 return -EINVAL;
1050
1051 lock_sock(sk);
1052
1053 if (unlikely(sock->state == SS_UNCONNECTED)) {
1054 res = -ENOTCONN;
1055 goto exit;
1056 }
1057
1058 timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
1059restart:
1060
1061
1062 res = tipc_wait_for_rcvmsg(sock, timeo);
1063 if (res)
1064 goto exit;
1065
1066
1067 buf = skb_peek(&sk->sk_receive_queue);
1068 msg = buf_msg(buf);
1069 sz = msg_data_sz(msg);
1070 err = msg_errcode(msg);
1071
1072
1073 if ((!sz) && (!err)) {
1074 advance_rx_queue(sk);
1075 goto restart;
1076 }
1077
1078
1079 set_orig_addr(m, msg);
1080
1081
1082 res = anc_data_recv(m, msg, tport);
1083 if (res)
1084 goto exit;
1085
1086
1087 if (!err) {
1088 if (unlikely(buf_len < sz)) {
1089 sz = buf_len;
1090 m->msg_flags |= MSG_TRUNC;
1091 }
1092 res = skb_copy_datagram_iovec(buf, msg_hdr_sz(msg),
1093 m->msg_iov, sz);
1094 if (res)
1095 goto exit;
1096 res = sz;
1097 } else {
1098 if ((sock->state == SS_READY) ||
1099 ((err == TIPC_CONN_SHUTDOWN) || m->msg_control))
1100 res = 0;
1101 else
1102 res = -ECONNRESET;
1103 }
1104
1105
1106 if (likely(!(flags & MSG_PEEK))) {
1107 if ((sock->state != SS_READY) &&
1108 (++tport->conn_unacked >= TIPC_FLOW_CONTROL_WIN))
1109 tipc_acknowledge(tport->ref, tport->conn_unacked);
1110 advance_rx_queue(sk);
1111 }
1112exit:
1113 release_sock(sk);
1114 return res;
1115}
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129static int recv_stream(struct kiocb *iocb, struct socket *sock,
1130 struct msghdr *m, size_t buf_len, int flags)
1131{
1132 struct sock *sk = sock->sk;
1133 struct tipc_port *tport = tipc_sk_port(sk);
1134 struct sk_buff *buf;
1135 struct tipc_msg *msg;
1136 long timeo;
1137 unsigned int sz;
1138 int sz_to_copy, target, needed;
1139 int sz_copied = 0;
1140 u32 err;
1141 int res = 0;
1142
1143
1144 if (unlikely(!buf_len))
1145 return -EINVAL;
1146
1147 lock_sock(sk);
1148
1149 if (unlikely(sock->state == SS_UNCONNECTED)) {
1150 res = -ENOTCONN;
1151 goto exit;
1152 }
1153
1154 target = sock_rcvlowat(sk, flags & MSG_WAITALL, buf_len);
1155 timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
1156
1157restart:
1158
1159 res = tipc_wait_for_rcvmsg(sock, timeo);
1160 if (res)
1161 goto exit;
1162
1163
1164 buf = skb_peek(&sk->sk_receive_queue);
1165 msg = buf_msg(buf);
1166 sz = msg_data_sz(msg);
1167 err = msg_errcode(msg);
1168
1169
1170 if ((!sz) && (!err)) {
1171 advance_rx_queue(sk);
1172 goto restart;
1173 }
1174
1175
1176 if (sz_copied == 0) {
1177 set_orig_addr(m, msg);
1178 res = anc_data_recv(m, msg, tport);
1179 if (res)
1180 goto exit;
1181 }
1182
1183
1184 if (!err) {
1185 u32 offset = (u32)(unsigned long)(TIPC_SKB_CB(buf)->handle);
1186
1187 sz -= offset;
1188 needed = (buf_len - sz_copied);
1189 sz_to_copy = (sz <= needed) ? sz : needed;
1190
1191 res = skb_copy_datagram_iovec(buf, msg_hdr_sz(msg) + offset,
1192 m->msg_iov, sz_to_copy);
1193 if (res)
1194 goto exit;
1195
1196 sz_copied += sz_to_copy;
1197
1198 if (sz_to_copy < sz) {
1199 if (!(flags & MSG_PEEK))
1200 TIPC_SKB_CB(buf)->handle =
1201 (void *)(unsigned long)(offset + sz_to_copy);
1202 goto exit;
1203 }
1204 } else {
1205 if (sz_copied != 0)
1206 goto exit;
1207
1208 if ((err == TIPC_CONN_SHUTDOWN) || m->msg_control)
1209 res = 0;
1210 else
1211 res = -ECONNRESET;
1212 }
1213
1214
1215 if (likely(!(flags & MSG_PEEK))) {
1216 if (unlikely(++tport->conn_unacked >= TIPC_FLOW_CONTROL_WIN))
1217 tipc_acknowledge(tport->ref, tport->conn_unacked);
1218 advance_rx_queue(sk);
1219 }
1220
1221
1222 if ((sz_copied < buf_len) &&
1223 (!skb_queue_empty(&sk->sk_receive_queue) ||
1224 (sz_copied < target)) &&
1225 (!(flags & MSG_PEEK)) &&
1226 (!err))
1227 goto restart;
1228
1229exit:
1230 release_sock(sk);
1231 return sz_copied ? sz_copied : res;
1232}
1233
1234
1235
1236
1237
1238static void tipc_write_space(struct sock *sk)
1239{
1240 struct socket_wq *wq;
1241
1242 rcu_read_lock();
1243 wq = rcu_dereference(sk->sk_wq);
1244 if (wq_has_sleeper(wq))
1245 wake_up_interruptible_sync_poll(&wq->wait, POLLOUT |
1246 POLLWRNORM | POLLWRBAND);
1247 rcu_read_unlock();
1248}
1249
1250
1251
1252
1253
1254
1255static void tipc_data_ready(struct sock *sk, int len)
1256{
1257 struct socket_wq *wq;
1258
1259 rcu_read_lock();
1260 wq = rcu_dereference(sk->sk_wq);
1261 if (wq_has_sleeper(wq))
1262 wake_up_interruptible_sync_poll(&wq->wait, POLLIN |
1263 POLLRDNORM | POLLRDBAND);
1264 rcu_read_unlock();
1265}
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275static u32 filter_connect(struct tipc_sock *tsock, struct sk_buff **buf)
1276{
1277 struct socket *sock = tsock->sk.sk_socket;
1278 struct tipc_msg *msg = buf_msg(*buf);
1279 struct sock *sk = &tsock->sk;
1280 u32 retval = TIPC_ERR_NO_PORT;
1281 int res;
1282
1283 if (msg_mcast(msg))
1284 return retval;
1285
1286 switch ((int)sock->state) {
1287 case SS_CONNECTED:
1288
1289 if (msg_connected(msg) && tipc_port_peer_msg(tsock->p, msg)) {
1290 if (unlikely(msg_errcode(msg))) {
1291 sock->state = SS_DISCONNECTING;
1292 __tipc_disconnect(tsock->p);
1293 }
1294 retval = TIPC_OK;
1295 }
1296 break;
1297 case SS_CONNECTING:
1298
1299 if (unlikely(msg_errcode(msg))) {
1300 sock->state = SS_DISCONNECTING;
1301 sk->sk_err = ECONNREFUSED;
1302 retval = TIPC_OK;
1303 break;
1304 }
1305
1306 if (unlikely(!msg_connected(msg)))
1307 break;
1308
1309 res = auto_connect(sock, msg);
1310 if (res) {
1311 sock->state = SS_DISCONNECTING;
1312 sk->sk_err = -res;
1313 retval = TIPC_OK;
1314 break;
1315 }
1316
1317
1318
1319
1320
1321
1322 if (msg_data_sz(msg) == 0) {
1323 kfree_skb(*buf);
1324 *buf = NULL;
1325 if (waitqueue_active(sk_sleep(sk)))
1326 wake_up_interruptible(sk_sleep(sk));
1327 }
1328 retval = TIPC_OK;
1329 break;
1330 case SS_LISTENING:
1331 case SS_UNCONNECTED:
1332
1333 if (!msg_connected(msg) && !(msg_errcode(msg)))
1334 retval = TIPC_OK;
1335 break;
1336 case SS_DISCONNECTING:
1337 break;
1338 default:
1339 pr_err("Unknown socket state %u\n", sock->state);
1340 }
1341 return retval;
1342}
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362static unsigned int rcvbuf_limit(struct sock *sk, struct sk_buff *buf)
1363{
1364 struct tipc_msg *msg = buf_msg(buf);
1365
1366 if (msg_connected(msg))
1367 return sysctl_tipc_rmem[2];
1368
1369 return sk->sk_rcvbuf >> TIPC_CRITICAL_IMPORTANCE <<
1370 msg_importance(msg);
1371}
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385static u32 filter_rcv(struct sock *sk, struct sk_buff *buf)
1386{
1387 struct socket *sock = sk->sk_socket;
1388 struct tipc_msg *msg = buf_msg(buf);
1389 unsigned int limit = rcvbuf_limit(sk, buf);
1390 u32 res = TIPC_OK;
1391
1392
1393 if (msg_type(msg) > TIPC_DIRECT_MSG)
1394 return TIPC_ERR_NO_PORT;
1395
1396 if (sock->state == SS_READY) {
1397 if (msg_connected(msg))
1398 return TIPC_ERR_NO_PORT;
1399 } else {
1400 res = filter_connect(tipc_sk(sk), &buf);
1401 if (res != TIPC_OK || buf == NULL)
1402 return res;
1403 }
1404
1405
1406 if (sk_rmem_alloc_get(sk) + buf->truesize >= limit)
1407 return TIPC_ERR_OVERLOAD;
1408
1409
1410 TIPC_SKB_CB(buf)->handle = NULL;
1411 __skb_queue_tail(&sk->sk_receive_queue, buf);
1412 skb_set_owner_r(buf, sk);
1413
1414 sk->sk_data_ready(sk, 0);
1415 return TIPC_OK;
1416}
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427static int backlog_rcv(struct sock *sk, struct sk_buff *buf)
1428{
1429 u32 res;
1430
1431 res = filter_rcv(sk, buf);
1432 if (res)
1433 tipc_reject_msg(buf, res);
1434 return 0;
1435}
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446static u32 dispatch(struct tipc_port *tport, struct sk_buff *buf)
1447{
1448 struct sock *sk = tport->sk;
1449 u32 res;
1450
1451
1452
1453
1454
1455
1456
1457 bh_lock_sock(sk);
1458 if (!sock_owned_by_user(sk)) {
1459 res = filter_rcv(sk, buf);
1460 } else {
1461 if (sk_add_backlog(sk, buf, rcvbuf_limit(sk, buf)))
1462 res = TIPC_ERR_OVERLOAD;
1463 else
1464 res = TIPC_OK;
1465 }
1466 bh_unlock_sock(sk);
1467
1468 return res;
1469}
1470
1471
1472
1473
1474
1475
1476
1477static void wakeupdispatch(struct tipc_port *tport)
1478{
1479 struct sock *sk = tport->sk;
1480
1481 sk->sk_write_space(sk);
1482}
1483
1484static int tipc_wait_for_connect(struct socket *sock, long *timeo_p)
1485{
1486 struct sock *sk = sock->sk;
1487 DEFINE_WAIT(wait);
1488 int done;
1489
1490 do {
1491 int err = sock_error(sk);
1492 if (err)
1493 return err;
1494 if (!*timeo_p)
1495 return -ETIMEDOUT;
1496 if (signal_pending(current))
1497 return sock_intr_errno(*timeo_p);
1498
1499 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1500 done = sk_wait_event(sk, timeo_p, sock->state != SS_CONNECTING);
1501 finish_wait(sk_sleep(sk), &wait);
1502 } while (!done);
1503 return 0;
1504}
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515static int connect(struct socket *sock, struct sockaddr *dest, int destlen,
1516 int flags)
1517{
1518 struct sock *sk = sock->sk;
1519 struct sockaddr_tipc *dst = (struct sockaddr_tipc *)dest;
1520 struct msghdr m = {NULL,};
1521 long timeout = (flags & O_NONBLOCK) ? 0 : tipc_sk(sk)->conn_timeout;
1522 socket_state previous;
1523 int res;
1524
1525 lock_sock(sk);
1526
1527
1528 if (sock->state == SS_READY) {
1529 res = -EOPNOTSUPP;
1530 goto exit;
1531 }
1532
1533
1534
1535
1536
1537
1538
1539 if (dst->addrtype == TIPC_ADDR_MCAST) {
1540 res = -EINVAL;
1541 goto exit;
1542 }
1543
1544 previous = sock->state;
1545 switch (sock->state) {
1546 case SS_UNCONNECTED:
1547
1548 m.msg_name = dest;
1549 m.msg_namelen = destlen;
1550
1551
1552
1553
1554 if (!timeout)
1555 m.msg_flags = MSG_DONTWAIT;
1556
1557 res = send_msg(NULL, sock, &m, 0);
1558 if ((res < 0) && (res != -EWOULDBLOCK))
1559 goto exit;
1560
1561
1562
1563
1564
1565 res = -EINPROGRESS;
1566 case SS_CONNECTING:
1567 if (previous == SS_CONNECTING)
1568 res = -EALREADY;
1569 if (!timeout)
1570 goto exit;
1571 timeout = msecs_to_jiffies(timeout);
1572
1573 res = tipc_wait_for_connect(sock, &timeout);
1574 break;
1575 case SS_CONNECTED:
1576 res = -EISCONN;
1577 break;
1578 default:
1579 res = -EINVAL;
1580 break;
1581 }
1582exit:
1583 release_sock(sk);
1584 return res;
1585}
1586
1587
1588
1589
1590
1591
1592
1593
1594static int listen(struct socket *sock, int len)
1595{
1596 struct sock *sk = sock->sk;
1597 int res;
1598
1599 lock_sock(sk);
1600
1601 if (sock->state != SS_UNCONNECTED)
1602 res = -EINVAL;
1603 else {
1604 sock->state = SS_LISTENING;
1605 res = 0;
1606 }
1607
1608 release_sock(sk);
1609 return res;
1610}
1611
1612static int tipc_wait_for_accept(struct socket *sock, long timeo)
1613{
1614 struct sock *sk = sock->sk;
1615 DEFINE_WAIT(wait);
1616 int err;
1617
1618
1619
1620
1621
1622
1623 for (;;) {
1624 prepare_to_wait_exclusive(sk_sleep(sk), &wait,
1625 TASK_INTERRUPTIBLE);
1626 if (timeo && skb_queue_empty(&sk->sk_receive_queue)) {
1627 release_sock(sk);
1628 timeo = schedule_timeout(timeo);
1629 lock_sock(sk);
1630 }
1631 err = 0;
1632 if (!skb_queue_empty(&sk->sk_receive_queue))
1633 break;
1634 err = -EINVAL;
1635 if (sock->state != SS_LISTENING)
1636 break;
1637 err = sock_intr_errno(timeo);
1638 if (signal_pending(current))
1639 break;
1640 err = -EAGAIN;
1641 if (!timeo)
1642 break;
1643 }
1644 finish_wait(sk_sleep(sk), &wait);
1645 return err;
1646}
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656static int accept(struct socket *sock, struct socket *new_sock, int flags)
1657{
1658 struct sock *new_sk, *sk = sock->sk;
1659 struct sk_buff *buf;
1660 struct tipc_sock *new_tsock;
1661 struct tipc_port *new_tport;
1662 struct tipc_msg *msg;
1663 u32 new_ref;
1664 long timeo;
1665 int res;
1666
1667 lock_sock(sk);
1668
1669 if (sock->state != SS_LISTENING) {
1670 res = -EINVAL;
1671 goto exit;
1672 }
1673
1674 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
1675 res = tipc_wait_for_accept(sock, timeo);
1676 if (res)
1677 goto exit;
1678
1679 buf = skb_peek(&sk->sk_receive_queue);
1680
1681 res = tipc_sk_create(sock_net(sock->sk), new_sock, 0, 1);
1682 if (res)
1683 goto exit;
1684
1685 new_sk = new_sock->sk;
1686 new_tsock = tipc_sk(new_sk);
1687 new_tport = new_tsock->p;
1688 new_ref = new_tport->ref;
1689 msg = buf_msg(buf);
1690
1691
1692 lock_sock_nested(new_sk, SINGLE_DEPTH_NESTING);
1693
1694
1695
1696
1697
1698 reject_rx_queue(new_sk);
1699
1700
1701 new_tsock->peer_name.ref = msg_origport(msg);
1702 new_tsock->peer_name.node = msg_orignode(msg);
1703 tipc_connect(new_ref, &new_tsock->peer_name);
1704 new_sock->state = SS_CONNECTED;
1705
1706 tipc_set_portimportance(new_ref, msg_importance(msg));
1707 if (msg_named(msg)) {
1708 new_tport->conn_type = msg_nametype(msg);
1709 new_tport->conn_instance = msg_nameinst(msg);
1710 }
1711
1712
1713
1714
1715
1716 if (!msg_data_sz(msg)) {
1717 struct msghdr m = {NULL,};
1718
1719 advance_rx_queue(sk);
1720 send_packet(NULL, new_sock, &m, 0);
1721 } else {
1722 __skb_dequeue(&sk->sk_receive_queue);
1723 __skb_queue_head(&new_sk->sk_receive_queue, buf);
1724 skb_set_owner_r(buf, new_sk);
1725 }
1726 release_sock(new_sk);
1727
1728exit:
1729 release_sock(sk);
1730 return res;
1731}
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742static int shutdown(struct socket *sock, int how)
1743{
1744 struct sock *sk = sock->sk;
1745 struct tipc_port *tport = tipc_sk_port(sk);
1746 struct sk_buff *buf;
1747 int res;
1748
1749 if (how != SHUT_RDWR)
1750 return -EINVAL;
1751
1752 lock_sock(sk);
1753
1754 switch (sock->state) {
1755 case SS_CONNECTING:
1756 case SS_CONNECTED:
1757
1758restart:
1759
1760 buf = __skb_dequeue(&sk->sk_receive_queue);
1761 if (buf) {
1762 if (TIPC_SKB_CB(buf)->handle != NULL) {
1763 kfree_skb(buf);
1764 goto restart;
1765 }
1766 tipc_disconnect(tport->ref);
1767 tipc_reject_msg(buf, TIPC_CONN_SHUTDOWN);
1768 } else {
1769 tipc_shutdown(tport->ref);
1770 }
1771
1772 sock->state = SS_DISCONNECTING;
1773
1774
1775
1776 case SS_DISCONNECTING:
1777
1778
1779 __skb_queue_purge(&sk->sk_receive_queue);
1780
1781
1782 sk->sk_state_change(sk);
1783 res = 0;
1784 break;
1785
1786 default:
1787 res = -ENOTCONN;
1788 }
1789
1790 release_sock(sk);
1791 return res;
1792}
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807static int setsockopt(struct socket *sock, int lvl, int opt, char __user *ov,
1808 unsigned int ol)
1809{
1810 struct sock *sk = sock->sk;
1811 struct tipc_port *tport = tipc_sk_port(sk);
1812 u32 value;
1813 int res;
1814
1815 if ((lvl == IPPROTO_TCP) && (sock->type == SOCK_STREAM))
1816 return 0;
1817 if (lvl != SOL_TIPC)
1818 return -ENOPROTOOPT;
1819 if (ol < sizeof(value))
1820 return -EINVAL;
1821 res = get_user(value, (u32 __user *)ov);
1822 if (res)
1823 return res;
1824
1825 lock_sock(sk);
1826
1827 switch (opt) {
1828 case TIPC_IMPORTANCE:
1829 res = tipc_set_portimportance(tport->ref, value);
1830 break;
1831 case TIPC_SRC_DROPPABLE:
1832 if (sock->type != SOCK_STREAM)
1833 res = tipc_set_portunreliable(tport->ref, value);
1834 else
1835 res = -ENOPROTOOPT;
1836 break;
1837 case TIPC_DEST_DROPPABLE:
1838 res = tipc_set_portunreturnable(tport->ref, value);
1839 break;
1840 case TIPC_CONN_TIMEOUT:
1841 tipc_sk(sk)->conn_timeout = value;
1842
1843 break;
1844 default:
1845 res = -EINVAL;
1846 }
1847
1848 release_sock(sk);
1849
1850 return res;
1851}
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866static int getsockopt(struct socket *sock, int lvl, int opt, char __user *ov,
1867 int __user *ol)
1868{
1869 struct sock *sk = sock->sk;
1870 struct tipc_port *tport = tipc_sk_port(sk);
1871 int len;
1872 u32 value;
1873 int res;
1874
1875 if ((lvl == IPPROTO_TCP) && (sock->type == SOCK_STREAM))
1876 return put_user(0, ol);
1877 if (lvl != SOL_TIPC)
1878 return -ENOPROTOOPT;
1879 res = get_user(len, ol);
1880 if (res)
1881 return res;
1882
1883 lock_sock(sk);
1884
1885 switch (opt) {
1886 case TIPC_IMPORTANCE:
1887 res = tipc_portimportance(tport->ref, &value);
1888 break;
1889 case TIPC_SRC_DROPPABLE:
1890 res = tipc_portunreliable(tport->ref, &value);
1891 break;
1892 case TIPC_DEST_DROPPABLE:
1893 res = tipc_portunreturnable(tport->ref, &value);
1894 break;
1895 case TIPC_CONN_TIMEOUT:
1896 value = tipc_sk(sk)->conn_timeout;
1897
1898 break;
1899 case TIPC_NODE_RECVQ_DEPTH:
1900 value = 0;
1901 break;
1902 case TIPC_SOCK_RECVQ_DEPTH:
1903 value = skb_queue_len(&sk->sk_receive_queue);
1904 break;
1905 default:
1906 res = -EINVAL;
1907 }
1908
1909 release_sock(sk);
1910
1911 if (res)
1912 return res;
1913
1914 if (len < sizeof(value))
1915 return -EINVAL;
1916
1917 if (copy_to_user(ov, &value, sizeof(value)))
1918 return -EFAULT;
1919
1920 return put_user(sizeof(value), ol);
1921}
1922
1923
1924
1925static const struct proto_ops msg_ops = {
1926 .owner = THIS_MODULE,
1927 .family = AF_TIPC,
1928 .release = release,
1929 .bind = bind,
1930 .connect = connect,
1931 .socketpair = sock_no_socketpair,
1932 .accept = sock_no_accept,
1933 .getname = get_name,
1934 .poll = poll,
1935 .ioctl = sock_no_ioctl,
1936 .listen = sock_no_listen,
1937 .shutdown = shutdown,
1938 .setsockopt = setsockopt,
1939 .getsockopt = getsockopt,
1940 .sendmsg = send_msg,
1941 .recvmsg = recv_msg,
1942 .mmap = sock_no_mmap,
1943 .sendpage = sock_no_sendpage
1944};
1945
1946static const struct proto_ops packet_ops = {
1947 .owner = THIS_MODULE,
1948 .family = AF_TIPC,
1949 .release = release,
1950 .bind = bind,
1951 .connect = connect,
1952 .socketpair = sock_no_socketpair,
1953 .accept = accept,
1954 .getname = get_name,
1955 .poll = poll,
1956 .ioctl = sock_no_ioctl,
1957 .listen = listen,
1958 .shutdown = shutdown,
1959 .setsockopt = setsockopt,
1960 .getsockopt = getsockopt,
1961 .sendmsg = send_packet,
1962 .recvmsg = recv_msg,
1963 .mmap = sock_no_mmap,
1964 .sendpage = sock_no_sendpage
1965};
1966
1967static const struct proto_ops stream_ops = {
1968 .owner = THIS_MODULE,
1969 .family = AF_TIPC,
1970 .release = release,
1971 .bind = bind,
1972 .connect = connect,
1973 .socketpair = sock_no_socketpair,
1974 .accept = accept,
1975 .getname = get_name,
1976 .poll = poll,
1977 .ioctl = sock_no_ioctl,
1978 .listen = listen,
1979 .shutdown = shutdown,
1980 .setsockopt = setsockopt,
1981 .getsockopt = getsockopt,
1982 .sendmsg = send_stream,
1983 .recvmsg = recv_stream,
1984 .mmap = sock_no_mmap,
1985 .sendpage = sock_no_sendpage
1986};
1987
1988static const struct net_proto_family tipc_family_ops = {
1989 .owner = THIS_MODULE,
1990 .family = AF_TIPC,
1991 .create = tipc_sk_create
1992};
1993
1994static struct proto tipc_proto = {
1995 .name = "TIPC",
1996 .owner = THIS_MODULE,
1997 .obj_size = sizeof(struct tipc_sock),
1998 .sysctl_rmem = sysctl_tipc_rmem
1999};
2000
2001static struct proto tipc_proto_kern = {
2002 .name = "TIPC",
2003 .obj_size = sizeof(struct tipc_sock),
2004 .sysctl_rmem = sysctl_tipc_rmem
2005};
2006
2007
2008
2009
2010
2011
2012int tipc_socket_init(void)
2013{
2014 int res;
2015
2016 res = proto_register(&tipc_proto, 1);
2017 if (res) {
2018 pr_err("Failed to register TIPC protocol type\n");
2019 goto out;
2020 }
2021
2022 res = sock_register(&tipc_family_ops);
2023 if (res) {
2024 pr_err("Failed to register TIPC socket type\n");
2025 proto_unregister(&tipc_proto);
2026 goto out;
2027 }
2028 out:
2029 return res;
2030}
2031
2032
2033
2034
2035void tipc_socket_stop(void)
2036{
2037 sock_unregister(tipc_family_ops.family);
2038 proto_unregister(&tipc_proto);
2039}
2040