40 #include <linux/export.h>
43 #define SS_LISTENING -1
46 #define OVERLOAD_LIMIT_BASE 5000
47 #define CONN_TIMEOUT_DEFAULT 8000
56 #define tipc_sk(sk) ((struct tipc_sock *)(sk))
57 #define tipc_sk_port(sk) (tipc_sk(sk)->p)
59 #define tipc_rx_ready(sock) (!skb_queue_empty(&sock->sk->sk_receive_queue) || \
60 (sock->state == SS_DISCONNECTING))
64 static void wakeupdispatch(
struct tipc_port *tport);
70 static struct proto tipc_proto;
72 static int sockets_enabled;
126 static void advance_rx_queue(
struct sock *
sk)
137 static void discard_rx_queue(
struct sock *sk)
152 static void reject_rx_queue(
struct sock *sk)
186 switch (sock->
type) {
227 spin_unlock_bh(tp_ptr->
lock);
256 struct sock *sk = sock->
sk;
299 discard_rx_queue(sk);
347 return (addr->
scope > 0) ?
366 int *uaddr_len,
int peer)
371 memset(addr, 0,
sizeof(*addr));
379 addr->
addr.
id.ref = tsock->
p->ref;
380 addr->
addr.
id.node = tipc_own_addr;
383 *uaddr_len =
sizeof(*addr);
435 struct sock *sk = sock->
sk;
438 poll_wait(file, sk_sleep(sk), wait);
440 switch ((
int)sock->
state) {
507 struct sock *sk = sock->
sk;
519 if ((total_len > TIPC_MAX_USER_MSG_SIZE) ||
554 res = dest_name_check(dest, m);
574 res = dest_name_check(dest, m);
584 if (needs_conn && (res >= 0))
588 if (timeout_val <= 0L) {
616 struct msghdr *m,
size_t total_len)
618 struct sock *sk = sock->
sk;
626 return send_msg(iocb, sock, m, total_len);
628 if ((total_len > TIPC_MAX_USER_MSG_SIZE) ||
650 if (timeout_val <= 0L) {
677 static int send_stream(
struct kiocb *iocb,
struct socket *sock,
678 struct msghdr *m,
size_t total_len)
680 struct sock *sk = sock->
sk;
684 struct iovec *curr_iov;
714 if ((total_len > (
unsigned int)INT_MAX) ||
729 my_msg.msg_iov = &my_iov;
730 my_msg.msg_iovlen = 1;
732 my_msg.msg_name =
NULL;
735 hdr_size = msg_hdr_sz(&tport->
phdr);
737 while (curr_iovlen--) {
743 if (bytes_to_send > TIPC_MAX_USER_MSG_SIZE)
745 if (curr_left < bytes_to_send)
746 bytes_to_send = curr_left;
747 my_iov.iov_base = curr_start;
748 my_iov.iov_len = bytes_to_send;
755 curr_left -= bytes_to_send;
756 curr_start += bytes_to_send;
757 bytes_sent += bytes_to_send;
779 if (msg_errcode(msg)) {
784 tsock->
peer_name.ref = msg_origport(msg);
785 tsock->
peer_name.node = msg_orignode(msg);
806 addr->
addr.
id.ref = msg_origport(msg);
807 addr->
addr.
id.node = msg_orignode(msg);
837 err = msg ? msg_errcode(msg) : 0;
840 anc_data[1] = msg_data_sz(msg);
857 anc_data[0] = msg_nametype(msg);
858 anc_data[1] = msg_namelower(msg);
859 anc_data[2] = msg_namelower(msg);
863 anc_data[0] = msg_nametype(msg);
864 anc_data[1] = msg_namelower(msg);
865 anc_data[2] = msg_nameupper(msg);
897 static int recv_msg(
struct kiocb *iocb,
struct socket *sock,
900 struct sock *sk = sock->
sk;
943 sz = msg_data_sz(msg);
944 err = msg_errcode(msg);
948 res = auto_connect(sock, msg);
954 if ((!sz) && (!err)) {
955 advance_rx_queue(sk);
960 set_orig_addr(m, msg);
963 res = anc_data_recv(m, msg, tport);
991 advance_rx_queue(sk);
1010 static int recv_stream(
struct kiocb *iocb,
struct socket *sock,
1011 struct msghdr *m,
size_t buf_len,
int flags)
1013 struct sock *sk = sock->
sk;
1019 int sz_to_copy,
target, needed;
1036 target = sock_rcvlowat(sk, flags &
MSG_WAITALL, buf_len);
1046 if (timeout <= 0L) {
1060 sz = msg_data_sz(msg);
1061 err = msg_errcode(msg);
1064 if ((!sz) && (!err)) {
1065 advance_rx_queue(sk);
1070 if (sz_copied == 0) {
1071 set_orig_addr(m, msg);
1072 res = anc_data_recv(m, msg, tport);
1082 needed = (buf_len - sz_copied);
1083 sz_to_copy = (sz <= needed) ? sz : needed;
1090 sz_copied += sz_to_copy;
1092 if (sz_to_copy < sz) {
1093 if (!(flags & MSG_PEEK))
1095 (
void *)(
unsigned long)(offset + sz_to_copy);
1109 if (
likely(!(flags & MSG_PEEK))) {
1112 advance_rx_queue(sk);
1116 if ((sz_copied < buf_len) &&
1118 (sz_copied < target)) &&
1119 (!(flags & MSG_PEEK)) &&
1125 return sz_copied ? sz_copied :
res;
1136 static int rx_queue_full(
struct tipc_msg *msg,
u32 queue_size,
u32 base)
1139 u32 imp = msg_importance(msg);
1144 threshold = base * 2;
1146 threshold = base * 100;
1150 if (msg_connected(msg))
1168 static u32 filter_rcv(
struct sock *sk,
struct sk_buff *buf)
1171 struct tipc_msg *msg = buf_msg(buf);
1179 if (msg_connected(msg))
1185 if (!msg_connected(msg) ||
1189 if (!msg_connected(msg) && (msg_errcode(msg) == 0))
1192 if (msg_connected(msg) || msg_errcode(msg))
1197 if (msg_connected(msg) || msg_errcode(msg))
1225 if (waitqueue_active(sk_sleep(sk)))
1239 static int backlog_rcv(
struct sock *sk,
struct sk_buff *buf)
1243 res = filter_rcv(sk, buf);
1260 struct sock *sk = (
struct sock *)tport->
usr_handle;
1271 res = filter_rcv(sk, buf);
1273 if (sk_add_backlog(sk, buf, sk->
sk_rcvbuf))
1289 static void wakeupdispatch(
struct tipc_port *tport)
1291 struct sock *sk = (
struct sock *)tport->
usr_handle;
1293 if (waitqueue_active(sk_sleep(sk)))
1306 static int connect(
struct socket *sock,
struct sockaddr *dest,
int destlen,
1309 struct sock *sk = sock->
sk;
1314 unsigned int timeout;
1357 reject_rx_queue(sk);
1362 res = send_msg(
NULL, sock, &m, 0);
1367 timeout =
tipc_sk(sk)->conn_timeout;
1380 res = auto_connect(sock, msg);
1382 if (!msg_data_sz(msg))
1383 advance_rx_queue(sk);
1411 static int listen(
struct socket *sock,
int len)
1413 struct sock *sk = sock->
sk;
1437 static int accept(
struct socket *sock,
struct socket *new_sock,
int flags)
1439 struct sock *sk = sock->
sk;
1451 if (flags & O_NONBLOCK) {
1465 res = tipc_create(sock_net(sock->
sk), new_sock, 0, 0);
1467 struct sock *new_sk = new_sock->
sk;
1470 u32 new_ref = new_tport->
ref;
1471 struct tipc_msg *msg = buf_msg(buf);
1479 reject_rx_queue(new_sk);
1482 new_tsock->
peer_name.ref = msg_origport(msg);
1483 new_tsock->
peer_name.node = msg_orignode(msg);
1488 if (msg_named(msg)) {
1489 new_tport->
conn_type = msg_nametype(msg);
1497 if (!msg_data_sz(msg)) {
1500 advance_rx_queue(sk);
1522 static int shutdown(
struct socket *sock,
int how)
1524 struct sock *sk = sock->
sk;
1534 switch (sock->
state) {
1560 discard_rx_queue(sk);
1561 if (waitqueue_active(sk_sleep(sk)))
1587 static int setsockopt(
struct socket *sock,
1588 int lvl,
int opt,
char __user *ov,
unsigned int ol)
1590 struct sock *sk = sock->
sk;
1599 if (ol <
sizeof(value))
1646 static int getsockopt(
struct socket *sock,
1647 int lvl,
int opt,
char __user *ov,
int __user *ol)
1649 struct sock *sk = sock->
sk;
1676 value =
tipc_sk(sk)->conn_timeout;
1694 if (len <
sizeof(value))
1700 return put_user(
sizeof(value), ol);
1705 static const struct proto_ops msg_ops = {
1713 .getname = get_name,
1720 .sendmsg = send_msg,
1721 .recvmsg = recv_msg,
1726 static const struct proto_ops packet_ops = {
1734 .getname = get_name,
1742 .recvmsg = recv_msg,
1747 static const struct proto_ops stream_ops = {
1755 .getname = get_name,
1762 .sendmsg = send_stream,
1763 .recvmsg = recv_stream,
1771 .create = tipc_create
1774 static struct proto tipc_proto = {
1791 pr_err(
"Failed to register TIPC protocol type\n");
1797 pr_err(
"Failed to register TIPC socket type\n");
1802 sockets_enabled = 1;
1812 if (!sockets_enabled)
1815 sockets_enabled = 0;