aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/socket.c')
-rw-r--r--net/tipc/socket.c423
1 files changed, 204 insertions, 219 deletions
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index 0ed0eaa62f29..3c0256962f7d 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * net/tipc/socket.c: TIPC socket API 2 * net/tipc/socket.c: TIPC socket API
3 * 3 *
4 * Copyright (c) 2001-2007, 2012 Ericsson AB 4 * Copyright (c) 2001-2007, 2012-2014, Ericsson AB
5 * Copyright (c) 2004-2008, 2010-2013, Wind River Systems 5 * Copyright (c) 2004-2008, 2010-2013, Wind River Systems
6 * All rights reserved. 6 * All rights reserved.
7 * 7 *
@@ -38,30 +38,17 @@
38#include "port.h" 38#include "port.h"
39 39
40#include <linux/export.h> 40#include <linux/export.h>
41#include <net/sock.h>
42 41
43#define SS_LISTENING -1 /* socket is listening */ 42#define SS_LISTENING -1 /* socket is listening */
44#define SS_READY -2 /* socket is connectionless */ 43#define SS_READY -2 /* socket is connectionless */
45 44
46#define CONN_TIMEOUT_DEFAULT 8000 /* default connect timeout = 8s */ 45#define CONN_TIMEOUT_DEFAULT 8000 /* default connect timeout = 8s */
47 46
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); 47static int backlog_rcv(struct sock *sk, struct sk_buff *skb);
59static u32 dispatch(struct tipc_port *tport, struct sk_buff *buf); 48static void tipc_data_ready(struct sock *sk);
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); 49static void tipc_write_space(struct sock *sk);
63static int release(struct socket *sock); 50static int tipc_release(struct socket *sock);
64static int accept(struct socket *sock, struct socket *new_sock, int flags); 51static int tipc_accept(struct socket *sock, struct socket *new_sock, int flags);
65 52
66static const struct proto_ops packet_ops; 53static const struct proto_ops packet_ops;
67static const struct proto_ops stream_ops; 54static const struct proto_ops stream_ops;
@@ -115,6 +102,8 @@ static struct proto tipc_proto_kern;
115 * - port reference 102 * - port reference
116 */ 103 */
117 104
105#include "socket.h"
106
118/** 107/**
119 * advance_rx_queue - discard first buffer in socket receive queue 108 * advance_rx_queue - discard first buffer in socket receive queue
120 * 109 *
@@ -150,13 +139,15 @@ static void reject_rx_queue(struct sock *sk)
150 * 139 *
151 * Returns 0 on success, errno otherwise 140 * Returns 0 on success, errno otherwise
152 */ 141 */
153static int tipc_sk_create(struct net *net, struct socket *sock, int protocol, 142static int tipc_sk_create(struct net *net, struct socket *sock,
154 int kern) 143 int protocol, int kern)
155{ 144{
156 const struct proto_ops *ops; 145 const struct proto_ops *ops;
157 socket_state state; 146 socket_state state;
158 struct sock *sk; 147 struct sock *sk;
159 struct tipc_port *tp_ptr; 148 struct tipc_sock *tsk;
149 struct tipc_port *port;
150 u32 ref;
160 151
161 /* Validate arguments */ 152 /* Validate arguments */
162 if (unlikely(protocol != 0)) 153 if (unlikely(protocol != 0))
@@ -189,10 +180,12 @@ static int tipc_sk_create(struct net *net, struct socket *sock, int protocol,
189 if (sk == NULL) 180 if (sk == NULL)
190 return -ENOMEM; 181 return -ENOMEM;
191 182
192 /* Allocate TIPC port for socket to use */ 183 tsk = tipc_sk(sk);
193 tp_ptr = tipc_createport(sk, &dispatch, &wakeupdispatch, 184 port = &tsk->port;
194 TIPC_LOW_IMPORTANCE); 185
195 if (unlikely(!tp_ptr)) { 186 ref = tipc_port_init(port, TIPC_LOW_IMPORTANCE);
187 if (!ref) {
188 pr_warn("Socket registration failed, ref. table exhausted\n");
196 sk_free(sk); 189 sk_free(sk);
197 return -ENOMEM; 190 return -ENOMEM;
198 } 191 }
@@ -206,17 +199,14 @@ static int tipc_sk_create(struct net *net, struct socket *sock, int protocol,
206 sk->sk_rcvbuf = sysctl_tipc_rmem[1]; 199 sk->sk_rcvbuf = sysctl_tipc_rmem[1];
207 sk->sk_data_ready = tipc_data_ready; 200 sk->sk_data_ready = tipc_data_ready;
208 sk->sk_write_space = tipc_write_space; 201 sk->sk_write_space = tipc_write_space;
209 tipc_sk(sk)->p = tp_ptr;
210 tipc_sk(sk)->conn_timeout = CONN_TIMEOUT_DEFAULT; 202 tipc_sk(sk)->conn_timeout = CONN_TIMEOUT_DEFAULT;
211 203 tipc_port_unlock(port);
212 spin_unlock_bh(tp_ptr->lock);
213 204
214 if (sock->state == SS_READY) { 205 if (sock->state == SS_READY) {
215 tipc_set_portunreturnable(tp_ptr->ref, 1); 206 tipc_port_set_unreturnable(port, true);
216 if (sock->type == SOCK_DGRAM) 207 if (sock->type == SOCK_DGRAM)
217 tipc_set_portunreliable(tp_ptr->ref, 1); 208 tipc_port_set_unreliable(port, true);
218 } 209 }
219
220 return 0; 210 return 0;
221} 211}
222 212
@@ -254,7 +244,7 @@ int tipc_sock_create_local(int type, struct socket **res)
254 */ 244 */
255void tipc_sock_release_local(struct socket *sock) 245void tipc_sock_release_local(struct socket *sock)
256{ 246{
257 release(sock); 247 tipc_release(sock);
258 sock->ops = NULL; 248 sock->ops = NULL;
259 sock_release(sock); 249 sock_release(sock);
260} 250}
@@ -280,7 +270,7 @@ int tipc_sock_accept_local(struct socket *sock, struct socket **newsock,
280 if (ret < 0) 270 if (ret < 0)
281 return ret; 271 return ret;
282 272
283 ret = accept(sock, *newsock, flags); 273 ret = tipc_accept(sock, *newsock, flags);
284 if (ret < 0) { 274 if (ret < 0) {
285 sock_release(*newsock); 275 sock_release(*newsock);
286 return ret; 276 return ret;
@@ -290,7 +280,7 @@ int tipc_sock_accept_local(struct socket *sock, struct socket **newsock,
290} 280}
291 281
292/** 282/**
293 * release - destroy a TIPC socket 283 * tipc_release - destroy a TIPC socket
294 * @sock: socket to destroy 284 * @sock: socket to destroy
295 * 285 *
296 * This routine cleans up any messages that are still queued on the socket. 286 * This routine cleans up any messages that are still queued on the socket.
@@ -305,12 +295,12 @@ int tipc_sock_accept_local(struct socket *sock, struct socket **newsock,
305 * 295 *
306 * Returns 0 on success, errno otherwise 296 * Returns 0 on success, errno otherwise
307 */ 297 */
308static int release(struct socket *sock) 298static int tipc_release(struct socket *sock)
309{ 299{
310 struct sock *sk = sock->sk; 300 struct sock *sk = sock->sk;
311 struct tipc_port *tport; 301 struct tipc_sock *tsk;
302 struct tipc_port *port;
312 struct sk_buff *buf; 303 struct sk_buff *buf;
313 int res;
314 304
315 /* 305 /*
316 * Exit if socket isn't fully initialized (occurs when a failed accept() 306 * Exit if socket isn't fully initialized (occurs when a failed accept()
@@ -319,7 +309,8 @@ static int release(struct socket *sock)
319 if (sk == NULL) 309 if (sk == NULL)
320 return 0; 310 return 0;
321 311
322 tport = tipc_sk_port(sk); 312 tsk = tipc_sk(sk);
313 port = &tsk->port;
323 lock_sock(sk); 314 lock_sock(sk);
324 315
325 /* 316 /*
@@ -336,17 +327,16 @@ static int release(struct socket *sock)
336 if ((sock->state == SS_CONNECTING) || 327 if ((sock->state == SS_CONNECTING) ||
337 (sock->state == SS_CONNECTED)) { 328 (sock->state == SS_CONNECTED)) {
338 sock->state = SS_DISCONNECTING; 329 sock->state = SS_DISCONNECTING;
339 tipc_disconnect(tport->ref); 330 tipc_port_disconnect(port->ref);
340 } 331 }
341 tipc_reject_msg(buf, TIPC_ERR_NO_PORT); 332 tipc_reject_msg(buf, TIPC_ERR_NO_PORT);
342 } 333 }
343 } 334 }
344 335
345 /* 336 /* Destroy TIPC port; also disconnects an active connection and
346 * Delete TIPC port; this ensures no more messages are queued 337 * sends a 'FIN-' to peer.
347 * (also disconnects an active connection & sends a 'FIN-' to peer)
348 */ 338 */
349 res = tipc_deleteport(tport); 339 tipc_port_destroy(port);
350 340
351 /* Discard any remaining (connection-based) messages in receive queue */ 341 /* Discard any remaining (connection-based) messages in receive queue */
352 __skb_queue_purge(&sk->sk_receive_queue); 342 __skb_queue_purge(&sk->sk_receive_queue);
@@ -358,11 +348,11 @@ static int release(struct socket *sock)
358 sock_put(sk); 348 sock_put(sk);
359 sock->sk = NULL; 349 sock->sk = NULL;
360 350
361 return res; 351 return 0;
362} 352}
363 353
364/** 354/**
365 * bind - associate or disassocate TIPC name(s) with a socket 355 * tipc_bind - associate or disassocate TIPC name(s) with a socket
366 * @sock: socket structure 356 * @sock: socket structure
367 * @uaddr: socket address describing name(s) and desired operation 357 * @uaddr: socket address describing name(s) and desired operation
368 * @uaddr_len: size of socket address data structure 358 * @uaddr_len: size of socket address data structure
@@ -376,16 +366,17 @@ static int release(struct socket *sock)
376 * NOTE: This routine doesn't need to take the socket lock since it doesn't 366 * NOTE: This routine doesn't need to take the socket lock since it doesn't
377 * access any non-constant socket information. 367 * access any non-constant socket information.
378 */ 368 */
379static int bind(struct socket *sock, struct sockaddr *uaddr, int uaddr_len) 369static int tipc_bind(struct socket *sock, struct sockaddr *uaddr,
370 int uaddr_len)
380{ 371{
381 struct sock *sk = sock->sk; 372 struct sock *sk = sock->sk;
382 struct sockaddr_tipc *addr = (struct sockaddr_tipc *)uaddr; 373 struct sockaddr_tipc *addr = (struct sockaddr_tipc *)uaddr;
383 struct tipc_port *tport = tipc_sk_port(sock->sk); 374 struct tipc_sock *tsk = tipc_sk(sk);
384 int res = -EINVAL; 375 int res = -EINVAL;
385 376
386 lock_sock(sk); 377 lock_sock(sk);
387 if (unlikely(!uaddr_len)) { 378 if (unlikely(!uaddr_len)) {
388 res = tipc_withdraw(tport, 0, NULL); 379 res = tipc_withdraw(&tsk->port, 0, NULL);
389 goto exit; 380 goto exit;
390 } 381 }
391 382
@@ -413,15 +404,15 @@ static int bind(struct socket *sock, struct sockaddr *uaddr, int uaddr_len)
413 } 404 }
414 405
415 res = (addr->scope > 0) ? 406 res = (addr->scope > 0) ?
416 tipc_publish(tport, addr->scope, &addr->addr.nameseq) : 407 tipc_publish(&tsk->port, addr->scope, &addr->addr.nameseq) :
417 tipc_withdraw(tport, -addr->scope, &addr->addr.nameseq); 408 tipc_withdraw(&tsk->port, -addr->scope, &addr->addr.nameseq);
418exit: 409exit:
419 release_sock(sk); 410 release_sock(sk);
420 return res; 411 return res;
421} 412}
422 413
423/** 414/**
424 * get_name - get port ID of socket or peer socket 415 * tipc_getname - get port ID of socket or peer socket
425 * @sock: socket structure 416 * @sock: socket structure
426 * @uaddr: area for returned socket address 417 * @uaddr: area for returned socket address
427 * @uaddr_len: area for returned length of socket address 418 * @uaddr_len: area for returned length of socket address
@@ -433,21 +424,21 @@ exit:
433 * accesses socket information that is unchanging (or which changes in 424 * accesses socket information that is unchanging (or which changes in
434 * a completely predictable manner). 425 * a completely predictable manner).
435 */ 426 */
436static int get_name(struct socket *sock, struct sockaddr *uaddr, 427static int tipc_getname(struct socket *sock, struct sockaddr *uaddr,
437 int *uaddr_len, int peer) 428 int *uaddr_len, int peer)
438{ 429{
439 struct sockaddr_tipc *addr = (struct sockaddr_tipc *)uaddr; 430 struct sockaddr_tipc *addr = (struct sockaddr_tipc *)uaddr;
440 struct tipc_sock *tsock = tipc_sk(sock->sk); 431 struct tipc_sock *tsk = tipc_sk(sock->sk);
441 432
442 memset(addr, 0, sizeof(*addr)); 433 memset(addr, 0, sizeof(*addr));
443 if (peer) { 434 if (peer) {
444 if ((sock->state != SS_CONNECTED) && 435 if ((sock->state != SS_CONNECTED) &&
445 ((peer != 2) || (sock->state != SS_DISCONNECTING))) 436 ((peer != 2) || (sock->state != SS_DISCONNECTING)))
446 return -ENOTCONN; 437 return -ENOTCONN;
447 addr->addr.id.ref = tsock->peer_name.ref; 438 addr->addr.id.ref = tipc_port_peerport(&tsk->port);
448 addr->addr.id.node = tsock->peer_name.node; 439 addr->addr.id.node = tipc_port_peernode(&tsk->port);
449 } else { 440 } else {
450 addr->addr.id.ref = tsock->p->ref; 441 addr->addr.id.ref = tsk->port.ref;
451 addr->addr.id.node = tipc_own_addr; 442 addr->addr.id.node = tipc_own_addr;
452 } 443 }
453 444
@@ -461,7 +452,7 @@ static int get_name(struct socket *sock, struct sockaddr *uaddr,
461} 452}
462 453
463/** 454/**
464 * poll - read and possibly block on pollmask 455 * tipc_poll - read and possibly block on pollmask
465 * @file: file structure associated with the socket 456 * @file: file structure associated with the socket
466 * @sock: socket for which to calculate the poll bits 457 * @sock: socket for which to calculate the poll bits
467 * @wait: ??? 458 * @wait: ???
@@ -500,22 +491,23 @@ static int get_name(struct socket *sock, struct sockaddr *uaddr,
500 * imply that the operation will succeed, merely that it should be performed 491 * imply that the operation will succeed, merely that it should be performed
501 * and will not block. 492 * and will not block.
502 */ 493 */
503static unsigned int poll(struct file *file, struct socket *sock, 494static unsigned int tipc_poll(struct file *file, struct socket *sock,
504 poll_table *wait) 495 poll_table *wait)
505{ 496{
506 struct sock *sk = sock->sk; 497 struct sock *sk = sock->sk;
498 struct tipc_sock *tsk = tipc_sk(sk);
507 u32 mask = 0; 499 u32 mask = 0;
508 500
509 sock_poll_wait(file, sk_sleep(sk), wait); 501 sock_poll_wait(file, sk_sleep(sk), wait);
510 502
511 switch ((int)sock->state) { 503 switch ((int)sock->state) {
512 case SS_UNCONNECTED: 504 case SS_UNCONNECTED:
513 if (!tipc_sk_port(sk)->congested) 505 if (!tsk->port.congested)
514 mask |= POLLOUT; 506 mask |= POLLOUT;
515 break; 507 break;
516 case SS_READY: 508 case SS_READY:
517 case SS_CONNECTED: 509 case SS_CONNECTED:
518 if (!tipc_sk_port(sk)->congested) 510 if (!tsk->port.congested)
519 mask |= POLLOUT; 511 mask |= POLLOUT;
520 /* fall thru' */ 512 /* fall thru' */
521 case SS_CONNECTING: 513 case SS_CONNECTING:
@@ -565,7 +557,7 @@ static int dest_name_check(struct sockaddr_tipc *dest, struct msghdr *m)
565static int tipc_wait_for_sndmsg(struct socket *sock, long *timeo_p) 557static int tipc_wait_for_sndmsg(struct socket *sock, long *timeo_p)
566{ 558{
567 struct sock *sk = sock->sk; 559 struct sock *sk = sock->sk;
568 struct tipc_port *tport = tipc_sk_port(sk); 560 struct tipc_sock *tsk = tipc_sk(sk);
569 DEFINE_WAIT(wait); 561 DEFINE_WAIT(wait);
570 int done; 562 int done;
571 563
@@ -581,14 +573,15 @@ static int tipc_wait_for_sndmsg(struct socket *sock, long *timeo_p)
581 return sock_intr_errno(*timeo_p); 573 return sock_intr_errno(*timeo_p);
582 574
583 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); 575 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
584 done = sk_wait_event(sk, timeo_p, !tport->congested); 576 done = sk_wait_event(sk, timeo_p, !tsk->port.congested);
585 finish_wait(sk_sleep(sk), &wait); 577 finish_wait(sk_sleep(sk), &wait);
586 } while (!done); 578 } while (!done);
587 return 0; 579 return 0;
588} 580}
589 581
582
590/** 583/**
591 * send_msg - send message in connectionless manner 584 * tipc_sendmsg - send message in connectionless manner
592 * @iocb: if NULL, indicates that socket lock is already held 585 * @iocb: if NULL, indicates that socket lock is already held
593 * @sock: socket structure 586 * @sock: socket structure
594 * @m: message to send 587 * @m: message to send
@@ -601,11 +594,12 @@ static int tipc_wait_for_sndmsg(struct socket *sock, long *timeo_p)
601 * 594 *
602 * Returns the number of bytes sent on success, or errno otherwise 595 * Returns the number of bytes sent on success, or errno otherwise
603 */ 596 */
604static int send_msg(struct kiocb *iocb, struct socket *sock, 597static int tipc_sendmsg(struct kiocb *iocb, struct socket *sock,
605 struct msghdr *m, size_t total_len) 598 struct msghdr *m, size_t total_len)
606{ 599{
607 struct sock *sk = sock->sk; 600 struct sock *sk = sock->sk;
608 struct tipc_port *tport = tipc_sk_port(sk); 601 struct tipc_sock *tsk = tipc_sk(sk);
602 struct tipc_port *port = &tsk->port;
609 DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name); 603 DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name);
610 int needs_conn; 604 int needs_conn;
611 long timeo; 605 long timeo;
@@ -632,13 +626,13 @@ static int send_msg(struct kiocb *iocb, struct socket *sock,
632 res = -EISCONN; 626 res = -EISCONN;
633 goto exit; 627 goto exit;
634 } 628 }
635 if (tport->published) { 629 if (tsk->port.published) {
636 res = -EOPNOTSUPP; 630 res = -EOPNOTSUPP;
637 goto exit; 631 goto exit;
638 } 632 }
639 if (dest->addrtype == TIPC_ADDR_NAME) { 633 if (dest->addrtype == TIPC_ADDR_NAME) {
640 tport->conn_type = dest->addr.name.name.type; 634 tsk->port.conn_type = dest->addr.name.name.type;
641 tport->conn_instance = dest->addr.name.name.instance; 635 tsk->port.conn_instance = dest->addr.name.name.instance;
642 } 636 }
643 637
644 /* Abort any pending connection attempts (very unlikely) */ 638 /* Abort any pending connection attempts (very unlikely) */
@@ -651,13 +645,13 @@ static int send_msg(struct kiocb *iocb, struct socket *sock,
651 res = dest_name_check(dest, m); 645 res = dest_name_check(dest, m);
652 if (res) 646 if (res)
653 break; 647 break;
654 res = tipc_send2name(tport->ref, 648 res = tipc_send2name(port,
655 &dest->addr.name.name, 649 &dest->addr.name.name,
656 dest->addr.name.domain, 650 dest->addr.name.domain,
657 m->msg_iov, 651 m->msg_iov,
658 total_len); 652 total_len);
659 } else if (dest->addrtype == TIPC_ADDR_ID) { 653 } else if (dest->addrtype == TIPC_ADDR_ID) {
660 res = tipc_send2port(tport->ref, 654 res = tipc_send2port(port,
661 &dest->addr.id, 655 &dest->addr.id,
662 m->msg_iov, 656 m->msg_iov,
663 total_len); 657 total_len);
@@ -669,10 +663,10 @@ static int send_msg(struct kiocb *iocb, struct socket *sock,
669 res = dest_name_check(dest, m); 663 res = dest_name_check(dest, m);
670 if (res) 664 if (res)
671 break; 665 break;
672 res = tipc_multicast(tport->ref, 666 res = tipc_port_mcast_xmit(port,
673 &dest->addr.nameseq, 667 &dest->addr.nameseq,
674 m->msg_iov, 668 m->msg_iov,
675 total_len); 669 total_len);
676 } 670 }
677 if (likely(res != -ELINKCONG)) { 671 if (likely(res != -ELINKCONG)) {
678 if (needs_conn && (res >= 0)) 672 if (needs_conn && (res >= 0))
@@ -693,7 +687,8 @@ exit:
693static int tipc_wait_for_sndpkt(struct socket *sock, long *timeo_p) 687static int tipc_wait_for_sndpkt(struct socket *sock, long *timeo_p)
694{ 688{
695 struct sock *sk = sock->sk; 689 struct sock *sk = sock->sk;
696 struct tipc_port *tport = tipc_sk_port(sk); 690 struct tipc_sock *tsk = tipc_sk(sk);
691 struct tipc_port *port = &tsk->port;
697 DEFINE_WAIT(wait); 692 DEFINE_WAIT(wait);
698 int done; 693 int done;
699 694
@@ -712,14 +707,14 @@ static int tipc_wait_for_sndpkt(struct socket *sock, long *timeo_p)
712 707
713 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); 708 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
714 done = sk_wait_event(sk, timeo_p, 709 done = sk_wait_event(sk, timeo_p,
715 (!tport->congested || !tport->connected)); 710 (!port->congested || !port->connected));
716 finish_wait(sk_sleep(sk), &wait); 711 finish_wait(sk_sleep(sk), &wait);
717 } while (!done); 712 } while (!done);
718 return 0; 713 return 0;
719} 714}
720 715
721/** 716/**
722 * send_packet - send a connection-oriented message 717 * tipc_send_packet - send a connection-oriented message
723 * @iocb: if NULL, indicates that socket lock is already held 718 * @iocb: if NULL, indicates that socket lock is already held
724 * @sock: socket structure 719 * @sock: socket structure
725 * @m: message to send 720 * @m: message to send
@@ -729,18 +724,18 @@ static int tipc_wait_for_sndpkt(struct socket *sock, long *timeo_p)
729 * 724 *
730 * Returns the number of bytes sent on success, or errno otherwise 725 * Returns the number of bytes sent on success, or errno otherwise
731 */ 726 */
732static int send_packet(struct kiocb *iocb, struct socket *sock, 727static int tipc_send_packet(struct kiocb *iocb, struct socket *sock,
733 struct msghdr *m, size_t total_len) 728 struct msghdr *m, size_t total_len)
734{ 729{
735 struct sock *sk = sock->sk; 730 struct sock *sk = sock->sk;
736 struct tipc_port *tport = tipc_sk_port(sk); 731 struct tipc_sock *tsk = tipc_sk(sk);
737 DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name); 732 DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name);
738 int res = -EINVAL; 733 int res = -EINVAL;
739 long timeo; 734 long timeo;
740 735
741 /* Handle implied connection establishment */ 736 /* Handle implied connection establishment */
742 if (unlikely(dest)) 737 if (unlikely(dest))
743 return send_msg(iocb, sock, m, total_len); 738 return tipc_sendmsg(iocb, sock, m, total_len);
744 739
745 if (total_len > TIPC_MAX_USER_MSG_SIZE) 740 if (total_len > TIPC_MAX_USER_MSG_SIZE)
746 return -EMSGSIZE; 741 return -EMSGSIZE;
@@ -758,7 +753,7 @@ static int send_packet(struct kiocb *iocb, struct socket *sock,
758 753
759 timeo = sock_sndtimeo(sk, m->msg_flags & MSG_DONTWAIT); 754 timeo = sock_sndtimeo(sk, m->msg_flags & MSG_DONTWAIT);
760 do { 755 do {
761 res = tipc_send(tport->ref, m->msg_iov, total_len); 756 res = tipc_send(&tsk->port, m->msg_iov, total_len);
762 if (likely(res != -ELINKCONG)) 757 if (likely(res != -ELINKCONG))
763 break; 758 break;
764 res = tipc_wait_for_sndpkt(sock, &timeo); 759 res = tipc_wait_for_sndpkt(sock, &timeo);
@@ -772,7 +767,7 @@ exit:
772} 767}
773 768
774/** 769/**
775 * send_stream - send stream-oriented data 770 * tipc_send_stream - send stream-oriented data
776 * @iocb: (unused) 771 * @iocb: (unused)
777 * @sock: socket structure 772 * @sock: socket structure
778 * @m: data to send 773 * @m: data to send
@@ -783,11 +778,11 @@ exit:
783 * Returns the number of bytes sent on success (or partial success), 778 * Returns the number of bytes sent on success (or partial success),
784 * or errno if no data sent 779 * or errno if no data sent
785 */ 780 */
786static int send_stream(struct kiocb *iocb, struct socket *sock, 781static int tipc_send_stream(struct kiocb *iocb, struct socket *sock,
787 struct msghdr *m, size_t total_len) 782 struct msghdr *m, size_t total_len)
788{ 783{
789 struct sock *sk = sock->sk; 784 struct sock *sk = sock->sk;
790 struct tipc_port *tport = tipc_sk_port(sk); 785 struct tipc_sock *tsk = tipc_sk(sk);
791 struct msghdr my_msg; 786 struct msghdr my_msg;
792 struct iovec my_iov; 787 struct iovec my_iov;
793 struct iovec *curr_iov; 788 struct iovec *curr_iov;
@@ -804,7 +799,7 @@ static int send_stream(struct kiocb *iocb, struct socket *sock,
804 /* Handle special cases where there is no connection */ 799 /* Handle special cases where there is no connection */
805 if (unlikely(sock->state != SS_CONNECTED)) { 800 if (unlikely(sock->state != SS_CONNECTED)) {
806 if (sock->state == SS_UNCONNECTED) 801 if (sock->state == SS_UNCONNECTED)
807 res = send_packet(NULL, sock, m, total_len); 802 res = tipc_send_packet(NULL, sock, m, total_len);
808 else 803 else
809 res = sock->state == SS_DISCONNECTING ? -EPIPE : -ENOTCONN; 804 res = sock->state == SS_DISCONNECTING ? -EPIPE : -ENOTCONN;
810 goto exit; 805 goto exit;
@@ -835,21 +830,22 @@ static int send_stream(struct kiocb *iocb, struct socket *sock,
835 my_msg.msg_name = NULL; 830 my_msg.msg_name = NULL;
836 bytes_sent = 0; 831 bytes_sent = 0;
837 832
838 hdr_size = msg_hdr_sz(&tport->phdr); 833 hdr_size = msg_hdr_sz(&tsk->port.phdr);
839 834
840 while (curr_iovlen--) { 835 while (curr_iovlen--) {
841 curr_start = curr_iov->iov_base; 836 curr_start = curr_iov->iov_base;
842 curr_left = curr_iov->iov_len; 837 curr_left = curr_iov->iov_len;
843 838
844 while (curr_left) { 839 while (curr_left) {
845 bytes_to_send = tport->max_pkt - hdr_size; 840 bytes_to_send = tsk->port.max_pkt - hdr_size;
846 if (bytes_to_send > TIPC_MAX_USER_MSG_SIZE) 841 if (bytes_to_send > TIPC_MAX_USER_MSG_SIZE)
847 bytes_to_send = TIPC_MAX_USER_MSG_SIZE; 842 bytes_to_send = TIPC_MAX_USER_MSG_SIZE;
848 if (curr_left < bytes_to_send) 843 if (curr_left < bytes_to_send)
849 bytes_to_send = curr_left; 844 bytes_to_send = curr_left;
850 my_iov.iov_base = curr_start; 845 my_iov.iov_base = curr_start;
851 my_iov.iov_len = bytes_to_send; 846 my_iov.iov_len = bytes_to_send;
852 res = send_packet(NULL, sock, &my_msg, bytes_to_send); 847 res = tipc_send_packet(NULL, sock, &my_msg,
848 bytes_to_send);
853 if (res < 0) { 849 if (res < 0) {
854 if (bytes_sent) 850 if (bytes_sent)
855 res = bytes_sent; 851 res = bytes_sent;
@@ -870,27 +866,25 @@ exit:
870 866
871/** 867/**
872 * auto_connect - complete connection setup to a remote port 868 * auto_connect - complete connection setup to a remote port
873 * @sock: socket structure 869 * @tsk: tipc socket structure
874 * @msg: peer's response message 870 * @msg: peer's response message
875 * 871 *
876 * Returns 0 on success, errno otherwise 872 * Returns 0 on success, errno otherwise
877 */ 873 */
878static int auto_connect(struct socket *sock, struct tipc_msg *msg) 874static int auto_connect(struct tipc_sock *tsk, struct tipc_msg *msg)
879{ 875{
880 struct tipc_sock *tsock = tipc_sk(sock->sk); 876 struct tipc_port *port = &tsk->port;
881 struct tipc_port *p_ptr; 877 struct socket *sock = tsk->sk.sk_socket;
878 struct tipc_portid peer;
882 879
883 tsock->peer_name.ref = msg_origport(msg); 880 peer.ref = msg_origport(msg);
884 tsock->peer_name.node = msg_orignode(msg); 881 peer.node = msg_orignode(msg);
885 p_ptr = tipc_port_deref(tsock->p->ref);
886 if (!p_ptr)
887 return -EINVAL;
888 882
889 __tipc_connect(tsock->p->ref, p_ptr, &tsock->peer_name); 883 __tipc_port_connect(port->ref, port, &peer);
890 884
891 if (msg_importance(msg) > TIPC_CRITICAL_IMPORTANCE) 885 if (msg_importance(msg) > TIPC_CRITICAL_IMPORTANCE)
892 return -EINVAL; 886 return -EINVAL;
893 msg_set_importance(&p_ptr->phdr, (u32)msg_importance(msg)); 887 msg_set_importance(&port->phdr, (u32)msg_importance(msg));
894 sock->state = SS_CONNECTED; 888 sock->state = SS_CONNECTED;
895 return 0; 889 return 0;
896} 890}
@@ -1021,7 +1015,7 @@ static int tipc_wait_for_rcvmsg(struct socket *sock, long timeo)
1021} 1015}
1022 1016
1023/** 1017/**
1024 * recv_msg - receive packet-oriented message 1018 * tipc_recvmsg - receive packet-oriented message
1025 * @iocb: (unused) 1019 * @iocb: (unused)
1026 * @m: descriptor for message info 1020 * @m: descriptor for message info
1027 * @buf_len: total size of user buffer area 1021 * @buf_len: total size of user buffer area
@@ -1032,11 +1026,12 @@ static int tipc_wait_for_rcvmsg(struct socket *sock, long timeo)
1032 * 1026 *
1033 * Returns size of returned message data, errno otherwise 1027 * Returns size of returned message data, errno otherwise
1034 */ 1028 */
1035static int recv_msg(struct kiocb *iocb, struct socket *sock, 1029static int tipc_recvmsg(struct kiocb *iocb, struct socket *sock,
1036 struct msghdr *m, size_t buf_len, int flags) 1030 struct msghdr *m, size_t buf_len, int flags)
1037{ 1031{
1038 struct sock *sk = sock->sk; 1032 struct sock *sk = sock->sk;
1039 struct tipc_port *tport = tipc_sk_port(sk); 1033 struct tipc_sock *tsk = tipc_sk(sk);
1034 struct tipc_port *port = &tsk->port;
1040 struct sk_buff *buf; 1035 struct sk_buff *buf;
1041 struct tipc_msg *msg; 1036 struct tipc_msg *msg;
1042 long timeo; 1037 long timeo;
@@ -1079,7 +1074,7 @@ restart:
1079 set_orig_addr(m, msg); 1074 set_orig_addr(m, msg);
1080 1075
1081 /* Capture ancillary data (optional) */ 1076 /* Capture ancillary data (optional) */
1082 res = anc_data_recv(m, msg, tport); 1077 res = anc_data_recv(m, msg, port);
1083 if (res) 1078 if (res)
1084 goto exit; 1079 goto exit;
1085 1080
@@ -1105,8 +1100,8 @@ restart:
1105 /* Consume received message (optional) */ 1100 /* Consume received message (optional) */
1106 if (likely(!(flags & MSG_PEEK))) { 1101 if (likely(!(flags & MSG_PEEK))) {
1107 if ((sock->state != SS_READY) && 1102 if ((sock->state != SS_READY) &&
1108 (++tport->conn_unacked >= TIPC_FLOW_CONTROL_WIN)) 1103 (++port->conn_unacked >= TIPC_FLOW_CONTROL_WIN))
1109 tipc_acknowledge(tport->ref, tport->conn_unacked); 1104 tipc_acknowledge(port->ref, port->conn_unacked);
1110 advance_rx_queue(sk); 1105 advance_rx_queue(sk);
1111 } 1106 }
1112exit: 1107exit:
@@ -1115,7 +1110,7 @@ exit:
1115} 1110}
1116 1111
1117/** 1112/**
1118 * recv_stream - receive stream-oriented data 1113 * tipc_recv_stream - receive stream-oriented data
1119 * @iocb: (unused) 1114 * @iocb: (unused)
1120 * @m: descriptor for message info 1115 * @m: descriptor for message info
1121 * @buf_len: total size of user buffer area 1116 * @buf_len: total size of user buffer area
@@ -1126,11 +1121,12 @@ exit:
1126 * 1121 *
1127 * Returns size of returned message data, errno otherwise 1122 * Returns size of returned message data, errno otherwise
1128 */ 1123 */
1129static int recv_stream(struct kiocb *iocb, struct socket *sock, 1124static int tipc_recv_stream(struct kiocb *iocb, struct socket *sock,
1130 struct msghdr *m, size_t buf_len, int flags) 1125 struct msghdr *m, size_t buf_len, int flags)
1131{ 1126{
1132 struct sock *sk = sock->sk; 1127 struct sock *sk = sock->sk;
1133 struct tipc_port *tport = tipc_sk_port(sk); 1128 struct tipc_sock *tsk = tipc_sk(sk);
1129 struct tipc_port *port = &tsk->port;
1134 struct sk_buff *buf; 1130 struct sk_buff *buf;
1135 struct tipc_msg *msg; 1131 struct tipc_msg *msg;
1136 long timeo; 1132 long timeo;
@@ -1175,7 +1171,7 @@ restart:
1175 /* Optionally capture sender's address & ancillary data of first msg */ 1171 /* Optionally capture sender's address & ancillary data of first msg */
1176 if (sz_copied == 0) { 1172 if (sz_copied == 0) {
1177 set_orig_addr(m, msg); 1173 set_orig_addr(m, msg);
1178 res = anc_data_recv(m, msg, tport); 1174 res = anc_data_recv(m, msg, port);
1179 if (res) 1175 if (res)
1180 goto exit; 1176 goto exit;
1181 } 1177 }
@@ -1213,8 +1209,8 @@ restart:
1213 1209
1214 /* Consume received message (optional) */ 1210 /* Consume received message (optional) */
1215 if (likely(!(flags & MSG_PEEK))) { 1211 if (likely(!(flags & MSG_PEEK))) {
1216 if (unlikely(++tport->conn_unacked >= TIPC_FLOW_CONTROL_WIN)) 1212 if (unlikely(++port->conn_unacked >= TIPC_FLOW_CONTROL_WIN))
1217 tipc_acknowledge(tport->ref, tport->conn_unacked); 1213 tipc_acknowledge(port->ref, port->conn_unacked);
1218 advance_rx_queue(sk); 1214 advance_rx_queue(sk);
1219 } 1215 }
1220 1216
@@ -1252,7 +1248,7 @@ static void tipc_write_space(struct sock *sk)
1252 * @sk: socket 1248 * @sk: socket
1253 * @len: the length of messages 1249 * @len: the length of messages
1254 */ 1250 */
1255static void tipc_data_ready(struct sock *sk, int len) 1251static void tipc_data_ready(struct sock *sk)
1256{ 1252{
1257 struct socket_wq *wq; 1253 struct socket_wq *wq;
1258 1254
@@ -1266,17 +1262,19 @@ static void tipc_data_ready(struct sock *sk, int len)
1266 1262
1267/** 1263/**
1268 * filter_connect - Handle all incoming messages for a connection-based socket 1264 * filter_connect - Handle all incoming messages for a connection-based socket
1269 * @tsock: TIPC socket 1265 * @tsk: TIPC socket
1270 * @msg: message 1266 * @msg: message
1271 * 1267 *
1272 * Returns TIPC error status code and socket error status code 1268 * Returns TIPC error status code and socket error status code
1273 * once it encounters some errors 1269 * once it encounters some errors
1274 */ 1270 */
1275static u32 filter_connect(struct tipc_sock *tsock, struct sk_buff **buf) 1271static u32 filter_connect(struct tipc_sock *tsk, struct sk_buff **buf)
1276{ 1272{
1277 struct socket *sock = tsock->sk.sk_socket; 1273 struct sock *sk = &tsk->sk;
1274 struct tipc_port *port = &tsk->port;
1275 struct socket *sock = sk->sk_socket;
1278 struct tipc_msg *msg = buf_msg(*buf); 1276 struct tipc_msg *msg = buf_msg(*buf);
1279 struct sock *sk = &tsock->sk; 1277
1280 u32 retval = TIPC_ERR_NO_PORT; 1278 u32 retval = TIPC_ERR_NO_PORT;
1281 int res; 1279 int res;
1282 1280
@@ -1286,10 +1284,10 @@ static u32 filter_connect(struct tipc_sock *tsock, struct sk_buff **buf)
1286 switch ((int)sock->state) { 1284 switch ((int)sock->state) {
1287 case SS_CONNECTED: 1285 case SS_CONNECTED:
1288 /* Accept only connection-based messages sent by peer */ 1286 /* Accept only connection-based messages sent by peer */
1289 if (msg_connected(msg) && tipc_port_peer_msg(tsock->p, msg)) { 1287 if (msg_connected(msg) && tipc_port_peer_msg(port, msg)) {
1290 if (unlikely(msg_errcode(msg))) { 1288 if (unlikely(msg_errcode(msg))) {
1291 sock->state = SS_DISCONNECTING; 1289 sock->state = SS_DISCONNECTING;
1292 __tipc_disconnect(tsock->p); 1290 __tipc_port_disconnect(port);
1293 } 1291 }
1294 retval = TIPC_OK; 1292 retval = TIPC_OK;
1295 } 1293 }
@@ -1306,7 +1304,7 @@ static u32 filter_connect(struct tipc_sock *tsock, struct sk_buff **buf)
1306 if (unlikely(!msg_connected(msg))) 1304 if (unlikely(!msg_connected(msg)))
1307 break; 1305 break;
1308 1306
1309 res = auto_connect(sock, msg); 1307 res = auto_connect(tsk, msg);
1310 if (res) { 1308 if (res) {
1311 sock->state = SS_DISCONNECTING; 1309 sock->state = SS_DISCONNECTING;
1312 sk->sk_err = -res; 1310 sk->sk_err = -res;
@@ -1385,6 +1383,7 @@ static unsigned int rcvbuf_limit(struct sock *sk, struct sk_buff *buf)
1385static u32 filter_rcv(struct sock *sk, struct sk_buff *buf) 1383static u32 filter_rcv(struct sock *sk, struct sk_buff *buf)
1386{ 1384{
1387 struct socket *sock = sk->sk_socket; 1385 struct socket *sock = sk->sk_socket;
1386 struct tipc_sock *tsk = tipc_sk(sk);
1388 struct tipc_msg *msg = buf_msg(buf); 1387 struct tipc_msg *msg = buf_msg(buf);
1389 unsigned int limit = rcvbuf_limit(sk, buf); 1388 unsigned int limit = rcvbuf_limit(sk, buf);
1390 u32 res = TIPC_OK; 1389 u32 res = TIPC_OK;
@@ -1397,7 +1396,7 @@ static u32 filter_rcv(struct sock *sk, struct sk_buff *buf)
1397 if (msg_connected(msg)) 1396 if (msg_connected(msg))
1398 return TIPC_ERR_NO_PORT; 1397 return TIPC_ERR_NO_PORT;
1399 } else { 1398 } else {
1400 res = filter_connect(tipc_sk(sk), &buf); 1399 res = filter_connect(tsk, &buf);
1401 if (res != TIPC_OK || buf == NULL) 1400 if (res != TIPC_OK || buf == NULL)
1402 return res; 1401 return res;
1403 } 1402 }
@@ -1411,7 +1410,7 @@ static u32 filter_rcv(struct sock *sk, struct sk_buff *buf)
1411 __skb_queue_tail(&sk->sk_receive_queue, buf); 1410 __skb_queue_tail(&sk->sk_receive_queue, buf);
1412 skb_set_owner_r(buf, sk); 1411 skb_set_owner_r(buf, sk);
1413 1412
1414 sk->sk_data_ready(sk, 0); 1413 sk->sk_data_ready(sk);
1415 return TIPC_OK; 1414 return TIPC_OK;
1416} 1415}
1417 1416
@@ -1435,17 +1434,16 @@ static int backlog_rcv(struct sock *sk, struct sk_buff *buf)
1435} 1434}
1436 1435
1437/** 1436/**
1438 * dispatch - handle incoming message 1437 * tipc_sk_rcv - handle incoming message
1439 * @tport: TIPC port that received message 1438 * @sk: socket receiving message
1440 * @buf: message 1439 * @buf: message
1441 * 1440 *
1442 * Called with port lock already taken. 1441 * Called with port lock already taken.
1443 * 1442 *
1444 * Returns TIPC error status code (TIPC_OK if message is not to be rejected) 1443 * Returns TIPC error status code (TIPC_OK if message is not to be rejected)
1445 */ 1444 */
1446static u32 dispatch(struct tipc_port *tport, struct sk_buff *buf) 1445u32 tipc_sk_rcv(struct sock *sk, struct sk_buff *buf)
1447{ 1446{
1448 struct sock *sk = tport->sk;
1449 u32 res; 1447 u32 res;
1450 1448
1451 /* 1449 /*
@@ -1468,19 +1466,6 @@ static u32 dispatch(struct tipc_port *tport, struct sk_buff *buf)
1468 return res; 1466 return res;
1469} 1467}
1470 1468
1471/**
1472 * wakeupdispatch - wake up port after congestion
1473 * @tport: port to wakeup
1474 *
1475 * Called with port lock already taken.
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) 1469static int tipc_wait_for_connect(struct socket *sock, long *timeo_p)
1485{ 1470{
1486 struct sock *sk = sock->sk; 1471 struct sock *sk = sock->sk;
@@ -1504,7 +1489,7 @@ static int tipc_wait_for_connect(struct socket *sock, long *timeo_p)
1504} 1489}
1505 1490
1506/** 1491/**
1507 * connect - establish a connection to another TIPC port 1492 * tipc_connect - establish a connection to another TIPC port
1508 * @sock: socket structure 1493 * @sock: socket structure
1509 * @dest: socket address for destination port 1494 * @dest: socket address for destination port
1510 * @destlen: size of socket address data structure 1495 * @destlen: size of socket address data structure
@@ -1512,8 +1497,8 @@ static int tipc_wait_for_connect(struct socket *sock, long *timeo_p)
1512 * 1497 *
1513 * Returns 0 on success, errno otherwise 1498 * Returns 0 on success, errno otherwise
1514 */ 1499 */
1515static int connect(struct socket *sock, struct sockaddr *dest, int destlen, 1500static int tipc_connect(struct socket *sock, struct sockaddr *dest,
1516 int flags) 1501 int destlen, int flags)
1517{ 1502{
1518 struct sock *sk = sock->sk; 1503 struct sock *sk = sock->sk;
1519 struct sockaddr_tipc *dst = (struct sockaddr_tipc *)dest; 1504 struct sockaddr_tipc *dst = (struct sockaddr_tipc *)dest;
@@ -1554,7 +1539,7 @@ static int connect(struct socket *sock, struct sockaddr *dest, int destlen,
1554 if (!timeout) 1539 if (!timeout)
1555 m.msg_flags = MSG_DONTWAIT; 1540 m.msg_flags = MSG_DONTWAIT;
1556 1541
1557 res = send_msg(NULL, sock, &m, 0); 1542 res = tipc_sendmsg(NULL, sock, &m, 0);
1558 if ((res < 0) && (res != -EWOULDBLOCK)) 1543 if ((res < 0) && (res != -EWOULDBLOCK))
1559 goto exit; 1544 goto exit;
1560 1545
@@ -1585,13 +1570,13 @@ exit:
1585} 1570}
1586 1571
1587/** 1572/**
1588 * listen - allow socket to listen for incoming connections 1573 * tipc_listen - allow socket to listen for incoming connections
1589 * @sock: socket structure 1574 * @sock: socket structure
1590 * @len: (unused) 1575 * @len: (unused)
1591 * 1576 *
1592 * Returns 0 on success, errno otherwise 1577 * Returns 0 on success, errno otherwise
1593 */ 1578 */
1594static int listen(struct socket *sock, int len) 1579static int tipc_listen(struct socket *sock, int len)
1595{ 1580{
1596 struct sock *sk = sock->sk; 1581 struct sock *sk = sock->sk;
1597 int res; 1582 int res;
@@ -1646,20 +1631,20 @@ static int tipc_wait_for_accept(struct socket *sock, long timeo)
1646} 1631}
1647 1632
1648/** 1633/**
1649 * accept - wait for connection request 1634 * tipc_accept - wait for connection request
1650 * @sock: listening socket 1635 * @sock: listening socket
1651 * @newsock: new socket that is to be connected 1636 * @newsock: new socket that is to be connected
1652 * @flags: file-related flags associated with socket 1637 * @flags: file-related flags associated with socket
1653 * 1638 *
1654 * Returns 0 on success, errno otherwise 1639 * Returns 0 on success, errno otherwise
1655 */ 1640 */
1656static int accept(struct socket *sock, struct socket *new_sock, int flags) 1641static int tipc_accept(struct socket *sock, struct socket *new_sock, int flags)
1657{ 1642{
1658 struct sock *new_sk, *sk = sock->sk; 1643 struct sock *new_sk, *sk = sock->sk;
1659 struct sk_buff *buf; 1644 struct sk_buff *buf;
1660 struct tipc_sock *new_tsock; 1645 struct tipc_port *new_port;
1661 struct tipc_port *new_tport;
1662 struct tipc_msg *msg; 1646 struct tipc_msg *msg;
1647 struct tipc_portid peer;
1663 u32 new_ref; 1648 u32 new_ref;
1664 long timeo; 1649 long timeo;
1665 int res; 1650 int res;
@@ -1670,7 +1655,6 @@ static int accept(struct socket *sock, struct socket *new_sock, int flags)
1670 res = -EINVAL; 1655 res = -EINVAL;
1671 goto exit; 1656 goto exit;
1672 } 1657 }
1673
1674 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); 1658 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
1675 res = tipc_wait_for_accept(sock, timeo); 1659 res = tipc_wait_for_accept(sock, timeo);
1676 if (res) 1660 if (res)
@@ -1683,9 +1667,8 @@ static int accept(struct socket *sock, struct socket *new_sock, int flags)
1683 goto exit; 1667 goto exit;
1684 1668
1685 new_sk = new_sock->sk; 1669 new_sk = new_sock->sk;
1686 new_tsock = tipc_sk(new_sk); 1670 new_port = &tipc_sk(new_sk)->port;
1687 new_tport = new_tsock->p; 1671 new_ref = new_port->ref;
1688 new_ref = new_tport->ref;
1689 msg = buf_msg(buf); 1672 msg = buf_msg(buf);
1690 1673
1691 /* we lock on new_sk; but lockdep sees the lock on sk */ 1674 /* we lock on new_sk; but lockdep sees the lock on sk */
@@ -1698,15 +1681,15 @@ static int accept(struct socket *sock, struct socket *new_sock, int flags)
1698 reject_rx_queue(new_sk); 1681 reject_rx_queue(new_sk);
1699 1682
1700 /* Connect new socket to it's peer */ 1683 /* Connect new socket to it's peer */
1701 new_tsock->peer_name.ref = msg_origport(msg); 1684 peer.ref = msg_origport(msg);
1702 new_tsock->peer_name.node = msg_orignode(msg); 1685 peer.node = msg_orignode(msg);
1703 tipc_connect(new_ref, &new_tsock->peer_name); 1686 tipc_port_connect(new_ref, &peer);
1704 new_sock->state = SS_CONNECTED; 1687 new_sock->state = SS_CONNECTED;
1705 1688
1706 tipc_set_portimportance(new_ref, msg_importance(msg)); 1689 tipc_port_set_importance(new_port, msg_importance(msg));
1707 if (msg_named(msg)) { 1690 if (msg_named(msg)) {
1708 new_tport->conn_type = msg_nametype(msg); 1691 new_port->conn_type = msg_nametype(msg);
1709 new_tport->conn_instance = msg_nameinst(msg); 1692 new_port->conn_instance = msg_nameinst(msg);
1710 } 1693 }
1711 1694
1712 /* 1695 /*
@@ -1717,21 +1700,20 @@ static int accept(struct socket *sock, struct socket *new_sock, int flags)
1717 struct msghdr m = {NULL,}; 1700 struct msghdr m = {NULL,};
1718 1701
1719 advance_rx_queue(sk); 1702 advance_rx_queue(sk);
1720 send_packet(NULL, new_sock, &m, 0); 1703 tipc_send_packet(NULL, new_sock, &m, 0);
1721 } else { 1704 } else {
1722 __skb_dequeue(&sk->sk_receive_queue); 1705 __skb_dequeue(&sk->sk_receive_queue);
1723 __skb_queue_head(&new_sk->sk_receive_queue, buf); 1706 __skb_queue_head(&new_sk->sk_receive_queue, buf);
1724 skb_set_owner_r(buf, new_sk); 1707 skb_set_owner_r(buf, new_sk);
1725 } 1708 }
1726 release_sock(new_sk); 1709 release_sock(new_sk);
1727
1728exit: 1710exit:
1729 release_sock(sk); 1711 release_sock(sk);
1730 return res; 1712 return res;
1731} 1713}
1732 1714
1733/** 1715/**
1734 * shutdown - shutdown socket connection 1716 * tipc_shutdown - shutdown socket connection
1735 * @sock: socket structure 1717 * @sock: socket structure
1736 * @how: direction to close (must be SHUT_RDWR) 1718 * @how: direction to close (must be SHUT_RDWR)
1737 * 1719 *
@@ -1739,10 +1721,11 @@ exit:
1739 * 1721 *
1740 * Returns 0 on success, errno otherwise 1722 * Returns 0 on success, errno otherwise
1741 */ 1723 */
1742static int shutdown(struct socket *sock, int how) 1724static int tipc_shutdown(struct socket *sock, int how)
1743{ 1725{
1744 struct sock *sk = sock->sk; 1726 struct sock *sk = sock->sk;
1745 struct tipc_port *tport = tipc_sk_port(sk); 1727 struct tipc_sock *tsk = tipc_sk(sk);
1728 struct tipc_port *port = &tsk->port;
1746 struct sk_buff *buf; 1729 struct sk_buff *buf;
1747 int res; 1730 int res;
1748 1731
@@ -1763,10 +1746,10 @@ restart:
1763 kfree_skb(buf); 1746 kfree_skb(buf);
1764 goto restart; 1747 goto restart;
1765 } 1748 }
1766 tipc_disconnect(tport->ref); 1749 tipc_port_disconnect(port->ref);
1767 tipc_reject_msg(buf, TIPC_CONN_SHUTDOWN); 1750 tipc_reject_msg(buf, TIPC_CONN_SHUTDOWN);
1768 } else { 1751 } else {
1769 tipc_shutdown(tport->ref); 1752 tipc_port_shutdown(port->ref);
1770 } 1753 }
1771 1754
1772 sock->state = SS_DISCONNECTING; 1755 sock->state = SS_DISCONNECTING;
@@ -1792,7 +1775,7 @@ restart:
1792} 1775}
1793 1776
1794/** 1777/**
1795 * setsockopt - set socket option 1778 * tipc_setsockopt - set socket option
1796 * @sock: socket structure 1779 * @sock: socket structure
1797 * @lvl: option level 1780 * @lvl: option level
1798 * @opt: option identifier 1781 * @opt: option identifier
@@ -1804,11 +1787,12 @@ restart:
1804 * 1787 *
1805 * Returns 0 on success, errno otherwise 1788 * Returns 0 on success, errno otherwise
1806 */ 1789 */
1807static int setsockopt(struct socket *sock, int lvl, int opt, char __user *ov, 1790static int tipc_setsockopt(struct socket *sock, int lvl, int opt,
1808 unsigned int ol) 1791 char __user *ov, unsigned int ol)
1809{ 1792{
1810 struct sock *sk = sock->sk; 1793 struct sock *sk = sock->sk;
1811 struct tipc_port *tport = tipc_sk_port(sk); 1794 struct tipc_sock *tsk = tipc_sk(sk);
1795 struct tipc_port *port = &tsk->port;
1812 u32 value; 1796 u32 value;
1813 int res; 1797 int res;
1814 1798
@@ -1826,16 +1810,16 @@ static int setsockopt(struct socket *sock, int lvl, int opt, char __user *ov,
1826 1810
1827 switch (opt) { 1811 switch (opt) {
1828 case TIPC_IMPORTANCE: 1812 case TIPC_IMPORTANCE:
1829 res = tipc_set_portimportance(tport->ref, value); 1813 tipc_port_set_importance(port, value);
1830 break; 1814 break;
1831 case TIPC_SRC_DROPPABLE: 1815 case TIPC_SRC_DROPPABLE:
1832 if (sock->type != SOCK_STREAM) 1816 if (sock->type != SOCK_STREAM)
1833 res = tipc_set_portunreliable(tport->ref, value); 1817 tipc_port_set_unreliable(port, value);
1834 else 1818 else
1835 res = -ENOPROTOOPT; 1819 res = -ENOPROTOOPT;
1836 break; 1820 break;
1837 case TIPC_DEST_DROPPABLE: 1821 case TIPC_DEST_DROPPABLE:
1838 res = tipc_set_portunreturnable(tport->ref, value); 1822 tipc_port_set_unreturnable(port, value);
1839 break; 1823 break;
1840 case TIPC_CONN_TIMEOUT: 1824 case TIPC_CONN_TIMEOUT:
1841 tipc_sk(sk)->conn_timeout = value; 1825 tipc_sk(sk)->conn_timeout = value;
@@ -1851,7 +1835,7 @@ static int setsockopt(struct socket *sock, int lvl, int opt, char __user *ov,
1851} 1835}
1852 1836
1853/** 1837/**
1854 * getsockopt - get socket option 1838 * tipc_getsockopt - get socket option
1855 * @sock: socket structure 1839 * @sock: socket structure
1856 * @lvl: option level 1840 * @lvl: option level
1857 * @opt: option identifier 1841 * @opt: option identifier
@@ -1863,11 +1847,12 @@ static int setsockopt(struct socket *sock, int lvl, int opt, char __user *ov,
1863 * 1847 *
1864 * Returns 0 on success, errno otherwise 1848 * Returns 0 on success, errno otherwise
1865 */ 1849 */
1866static int getsockopt(struct socket *sock, int lvl, int opt, char __user *ov, 1850static int tipc_getsockopt(struct socket *sock, int lvl, int opt,
1867 int __user *ol) 1851 char __user *ov, int __user *ol)
1868{ 1852{
1869 struct sock *sk = sock->sk; 1853 struct sock *sk = sock->sk;
1870 struct tipc_port *tport = tipc_sk_port(sk); 1854 struct tipc_sock *tsk = tipc_sk(sk);
1855 struct tipc_port *port = &tsk->port;
1871 int len; 1856 int len;
1872 u32 value; 1857 u32 value;
1873 int res; 1858 int res;
@@ -1884,13 +1869,13 @@ static int getsockopt(struct socket *sock, int lvl, int opt, char __user *ov,
1884 1869
1885 switch (opt) { 1870 switch (opt) {
1886 case TIPC_IMPORTANCE: 1871 case TIPC_IMPORTANCE:
1887 res = tipc_portimportance(tport->ref, &value); 1872 value = tipc_port_importance(port);
1888 break; 1873 break;
1889 case TIPC_SRC_DROPPABLE: 1874 case TIPC_SRC_DROPPABLE:
1890 res = tipc_portunreliable(tport->ref, &value); 1875 value = tipc_port_unreliable(port);
1891 break; 1876 break;
1892 case TIPC_DEST_DROPPABLE: 1877 case TIPC_DEST_DROPPABLE:
1893 res = tipc_portunreturnable(tport->ref, &value); 1878 value = tipc_port_unreturnable(port);
1894 break; 1879 break;
1895 case TIPC_CONN_TIMEOUT: 1880 case TIPC_CONN_TIMEOUT:
1896 value = tipc_sk(sk)->conn_timeout; 1881 value = tipc_sk(sk)->conn_timeout;
@@ -1925,20 +1910,20 @@ static int getsockopt(struct socket *sock, int lvl, int opt, char __user *ov,
1925static const struct proto_ops msg_ops = { 1910static const struct proto_ops msg_ops = {
1926 .owner = THIS_MODULE, 1911 .owner = THIS_MODULE,
1927 .family = AF_TIPC, 1912 .family = AF_TIPC,
1928 .release = release, 1913 .release = tipc_release,
1929 .bind = bind, 1914 .bind = tipc_bind,
1930 .connect = connect, 1915 .connect = tipc_connect,
1931 .socketpair = sock_no_socketpair, 1916 .socketpair = sock_no_socketpair,
1932 .accept = sock_no_accept, 1917 .accept = sock_no_accept,
1933 .getname = get_name, 1918 .getname = tipc_getname,
1934 .poll = poll, 1919 .poll = tipc_poll,
1935 .ioctl = sock_no_ioctl, 1920 .ioctl = sock_no_ioctl,
1936 .listen = sock_no_listen, 1921 .listen = sock_no_listen,
1937 .shutdown = shutdown, 1922 .shutdown = tipc_shutdown,
1938 .setsockopt = setsockopt, 1923 .setsockopt = tipc_setsockopt,
1939 .getsockopt = getsockopt, 1924 .getsockopt = tipc_getsockopt,
1940 .sendmsg = send_msg, 1925 .sendmsg = tipc_sendmsg,
1941 .recvmsg = recv_msg, 1926 .recvmsg = tipc_recvmsg,
1942 .mmap = sock_no_mmap, 1927 .mmap = sock_no_mmap,
1943 .sendpage = sock_no_sendpage 1928 .sendpage = sock_no_sendpage
1944}; 1929};
@@ -1946,20 +1931,20 @@ static const struct proto_ops msg_ops = {
1946static const struct proto_ops packet_ops = { 1931static const struct proto_ops packet_ops = {
1947 .owner = THIS_MODULE, 1932 .owner = THIS_MODULE,
1948 .family = AF_TIPC, 1933 .family = AF_TIPC,
1949 .release = release, 1934 .release = tipc_release,
1950 .bind = bind, 1935 .bind = tipc_bind,
1951 .connect = connect, 1936 .connect = tipc_connect,
1952 .socketpair = sock_no_socketpair, 1937 .socketpair = sock_no_socketpair,
1953 .accept = accept, 1938 .accept = tipc_accept,
1954 .getname = get_name, 1939 .getname = tipc_getname,
1955 .poll = poll, 1940 .poll = tipc_poll,
1956 .ioctl = sock_no_ioctl, 1941 .ioctl = sock_no_ioctl,
1957 .listen = listen, 1942 .listen = tipc_listen,
1958 .shutdown = shutdown, 1943 .shutdown = tipc_shutdown,
1959 .setsockopt = setsockopt, 1944 .setsockopt = tipc_setsockopt,
1960 .getsockopt = getsockopt, 1945 .getsockopt = tipc_getsockopt,
1961 .sendmsg = send_packet, 1946 .sendmsg = tipc_send_packet,
1962 .recvmsg = recv_msg, 1947 .recvmsg = tipc_recvmsg,
1963 .mmap = sock_no_mmap, 1948 .mmap = sock_no_mmap,
1964 .sendpage = sock_no_sendpage 1949 .sendpage = sock_no_sendpage
1965}; 1950};
@@ -1967,20 +1952,20 @@ static const struct proto_ops packet_ops = {
1967static const struct proto_ops stream_ops = { 1952static const struct proto_ops stream_ops = {
1968 .owner = THIS_MODULE, 1953 .owner = THIS_MODULE,
1969 .family = AF_TIPC, 1954 .family = AF_TIPC,
1970 .release = release, 1955 .release = tipc_release,
1971 .bind = bind, 1956 .bind = tipc_bind,
1972 .connect = connect, 1957 .connect = tipc_connect,
1973 .socketpair = sock_no_socketpair, 1958 .socketpair = sock_no_socketpair,
1974 .accept = accept, 1959 .accept = tipc_accept,
1975 .getname = get_name, 1960 .getname = tipc_getname,
1976 .poll = poll, 1961 .poll = tipc_poll,
1977 .ioctl = sock_no_ioctl, 1962 .ioctl = sock_no_ioctl,
1978 .listen = listen, 1963 .listen = tipc_listen,
1979 .shutdown = shutdown, 1964 .shutdown = tipc_shutdown,
1980 .setsockopt = setsockopt, 1965 .setsockopt = tipc_setsockopt,
1981 .getsockopt = getsockopt, 1966 .getsockopt = tipc_getsockopt,
1982 .sendmsg = send_stream, 1967 .sendmsg = tipc_send_stream,
1983 .recvmsg = recv_stream, 1968 .recvmsg = tipc_recv_stream,
1984 .mmap = sock_no_mmap, 1969 .mmap = sock_no_mmap,
1985 .sendpage = sock_no_sendpage 1970 .sendpage = sock_no_sendpage
1986}; 1971};