tipc: Add socket options to get number of queued messages
oscar.medina@motorola.com [Tue, 30 Jun 2009 03:25:39 +0000 (03:25 +0000)]
This patch allows a TIPC application to determine the number of messages
currently waiting in a socket's receive queue (TIPC_SOCK_RECVQ_DEPTH) or
in all TIPC socket receive queues (TIPC_NODE_RECVQ_DEPTH).

Signed-off-by: Oscar Medina <oscar.medina@motorola.com>
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

include/linux/tipc.h
net/tipc/socket.c

index bea4694..3d92396 100644 (file)
@@ -209,5 +209,7 @@ struct sockaddr_tipc {
 #define TIPC_SRC_DROPPABLE     128     /* Default: 0 (resend congested msg) */
 #define TIPC_DEST_DROPPABLE    129     /* Default: based on socket type */
 #define TIPC_CONN_TIMEOUT      130     /* Default: 8000 (ms)  */
+#define TIPC_NODE_RECVQ_DEPTH  131     /* Default: none (read only) */
+#define TIPC_SOCK_RECVQ_DEPTH  132     /* Default: none (read only) */
 
 #endif
index 1848693..e8254e8 100644 (file)
@@ -1748,6 +1748,12 @@ static int getsockopt(struct socket *sock,
                value = jiffies_to_msecs(sk->sk_rcvtimeo);
                /* no need to set "res", since already 0 at this point */
                break;
+        case TIPC_NODE_RECVQ_DEPTH:
+               value = (u32)atomic_read(&tipc_queue_size);
+               break;
+        case TIPC_SOCK_RECVQ_DEPTH:
+               value = skb_queue_len(&sk->sk_receive_queue);
+               break;
        default:
                res = -EINVAL;
        }