Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cbf39195 authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by David S. Miller
Browse files

unix_diag: Receive queue lenght NLA

parent 2aac7a2c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ struct unix_diag_req {
#define UDIAG_SHOW_VFS		0x00000002	/* show VFS inode info */
#define UDIAG_SHOW_PEER		0x00000004	/* show peer socket info */
#define UDIAG_SHOW_ICONS	0x00000008	/* show pending connections */
#define UDIAG_SHOW_RQLEN	0x00000010	/* show skb receive queue len */

struct unix_diag_msg {
	__u8	udiag_family;
@@ -31,6 +32,7 @@ enum {
	UNIX_DIAG_VFS,
	UNIX_DIAG_PEER,
	UNIX_DIAG_ICONS,
	UNIX_DIAG_RQLEN,

	UNIX_DIAG_MAX,
};
+13 −0
Original line number Diff line number Diff line
@@ -98,6 +98,15 @@ static int sk_diag_dump_icons(struct sock *sk, struct sk_buff *nlskb)
	return -EMSGSIZE;
}

static int sk_diag_show_rqlen(struct sock *sk, struct sk_buff *nlskb)
{
	RTA_PUT_U32(nlskb, UNIX_DIAG_RQLEN, sk->sk_receive_queue.qlen);
	return 0;

rtattr_failure:
	return -EMSGSIZE;
}

static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_req *req,
		u32 pid, u32 seq, u32 flags, int sk_ino)
{
@@ -132,6 +141,10 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_r
			sk_diag_dump_icons(sk, skb))
		goto nlmsg_failure;

	if ((req->udiag_show & UDIAG_SHOW_RQLEN) &&
			sk_diag_show_rqlen(sk, skb))
		goto nlmsg_failure;

	nlh->nlmsg_len = skb_tail_pointer(skb) - b;
	return skb->len;