summaryrefslogtreecommitdiff
path: root/source3/librpc/idl
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2020-06-03 10:57:59 +0200
committerStefan Metzmacher <metze@samba.org>2020-07-08 15:54:40 +0000
commit3cd775af053f95a35492e66299110d4087c452d0 (patch)
treedf1b629ca33728714c02d7d6dc2cb95d883a1233 /source3/librpc/idl
parent557adf8ccccf0aed8084ffde0dfeecc5695b5265 (diff)
downloadsamba-3cd775af053f95a35492e66299110d4087c452d0.tar.gz
s3:smbd: add infrastructure to wait for TCP acks
This will be the core of the logic that allows us to retry break notifications. When we start the "pending break cycle" we ask for the current retransmission timemout (rto) on the TCP connection and remember how many unacked bytes are in the kernel's send queue. Each time we send bytes into the kernel we add them to the unacked bytes. We use a timer using the rto interval in order to check the amount of unacked bytes again. The provides send_queu_entry.ack.req will be completed with tevent_req_done() when everything is completely acked, tevent_req_nterror(NT_STATUS_IO_TIMEOUT) when send_queu_entry.ack.timeout is expired or tevent_req_nterror(connection_error) when the connection gets disconnected. It works with support from the FreeBSD and Linux kernels. For other platforms we just have a fixed rto of 1 second. And pretend all bytes are acked when we recheck after 1 second. So only a connection error could trigger tevent_req_nterror(), but there's no timeout. A follow up commit will most likely disable support for multi-channel if we don't have kernel support. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11897 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Günther Deschner <gd@samba.org>
Diffstat (limited to 'source3/librpc/idl')
-rw-r--r--source3/librpc/idl/smbXsrv.idl5
1 files changed, 5 insertions, 0 deletions
diff --git a/source3/librpc/idl/smbXsrv.idl b/source3/librpc/idl/smbXsrv.idl
index 2e8e2bbcd31..1ecc40fcaac 100644
--- a/source3/librpc/idl/smbXsrv.idl
+++ b/source3/librpc/idl/smbXsrv.idl
@@ -142,6 +142,11 @@ interface smbXsrv
[ignore] struct smbXsrv_connection *connections;
boolean8 server_multi_channel_enabled;
hyper next_channel_id;
+
+ /*
+ * A List of pending breaks.
+ */
+ [ignore] struct smbXsrv_pending_break *pending_breaks;
} smbXsrv_client;
typedef union {