[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200530163159.932749-1-richard_siegfried@systemli.org>
Date: Sat, 30 May 2020 18:31:59 +0200
From: Richard Sailer <richard_siegfried@...temli.org>
To: gerrit@....abdn.ac.uk, davem@...emloft.net, dccp@...r.kernel.org
Cc: netdev@...r.kernel.org
Subject: [PATCH v2] net: dccp: Add SIOCOUTQ IOCTL support (send buffer fill)
From: Richard Sailer <rs@...edocomputers.com>
This adds support for the SIOCOUTQ IOCTL to call send buffer fill
from the DCCP socket, like UDP and TCP already have.
Regarding the used data field. DCCP uses per packet sequence numbers,
not per byte, so sequence numbers can't be used like in TCP. sk_wmem_queued
is not used by DCCP and always 0, even in test on highly congested paths.
Therefore this uses sk_wmem_alloc like in UDP.
Signed-off-by: Richard Sailer <richard_siegfried@...temli.org>
---
v2: Add Signed-off-by line and fix tab-vs-space error produced by badly
configuerd emacs
---
Documentation/networking/dccp.txt | 2 ++
net/dccp/proto.c | 8 ++++++++
2 files changed, 10 insertions(+)
diff --git a/Documentation/networking/dccp.txt b/Documentation/networking/dccp.txt
index 55c575fcaf17d..682ecf8288827 100644
--- a/Documentation/networking/dccp.txt
+++ b/Documentation/networking/dccp.txt
@@ -185,6 +185,8 @@ FIONREAD
Works as in udp(7): returns in the `int' argument pointer the size of
the next pending datagram in bytes, or 0 when no datagram is pending.
+SIOCOUTQ
+ Returns the number of data bytes in the local send queue.
Other tunables
==============
diff --git a/net/dccp/proto.c b/net/dccp/proto.c
index 4af8a98fe7846..53ed36705b820 100644
--- a/net/dccp/proto.c
+++ b/net/dccp/proto.c
@@ -375,6 +375,14 @@ int dccp_ioctl(struct sock *sk, int cmd, unsigned long arg)
goto out;
switch (cmd) {
+ case SIOCOUTQ: {
+ /* Using sk_wmem_alloc here because sk_wmem_queued is not used by DCCP and
+ * always 0, comparably to UDP.
+ */
+ int amount = sk_wmem_alloc_get(sk);
+ rc = put_user(amount, (int __user *)arg);
+ }
+ break;
case SIOCINQ: {
struct sk_buff *skb;
unsigned long amount = 0;
--
2.26.2
Powered by blists - more mailing lists