summaryrefslogtreecommitdiff
path: root/libcli
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2015-05-08 12:52:23 +0200
committerMichael Adam <obnox@samba.org>2015-05-08 13:00:28 +0200
commite97858433e62c6f3571a65b951c5fc7c47ab8c2f (patch)
tree41319970eda9cc3fb26d4f230b534c62caf6ffca /libcli
parent6ce14a9a8bdcd3537f55d434389d5672e2472d54 (diff)
downloadsamba-e97858433e62c6f3571a65b951c5fc7c47ab8c2f.tar.gz
libcli/smb: add support for SMB >= 3.1.1 io priorities
Pair-Programmed-With: Stefan Metzmacher <metze@samba.org> Signed-off-by: Michael Adam <obnox@samba.org> Signed-off-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'libcli')
-rw-r--r--libcli/smb/smbXcli_base.c22
-rw-r--r--libcli/smb/smbXcli_base.h3
2 files changed, 25 insertions, 0 deletions
diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c
index d4eedd905f1..075420323d0 100644
--- a/libcli/smb/smbXcli_base.c
+++ b/libcli/smb/smbXcli_base.c
@@ -130,6 +130,8 @@ struct smbXcli_conn {
uint16_t cur_credits;
uint16_t max_credits;
+ uint8_t io_priority;
+
uint8_t preauth_sha512[64];
} smb2;
@@ -405,6 +407,7 @@ struct smbXcli_conn *smbXcli_conn_create(TALLOC_CTX *mem_ctx,
conn->smb2.cur_credits = 1;
conn->smb2.max_credits = 0;
+ conn->smb2.io_priority = 1;
talloc_set_destructor(conn, smbXcli_conn_destructor);
return conn;
@@ -2577,6 +2580,21 @@ void smb2cli_conn_set_max_credits(struct smbXcli_conn *conn,
conn->smb2.max_credits = max_credits;
}
+uint8_t smb2cli_conn_get_io_priority(struct smbXcli_conn *conn)
+{
+ if (conn->protocol < PROTOCOL_SMB3_11) {
+ return 0;
+ }
+
+ return conn->smb2.io_priority;
+}
+
+void smb2cli_conn_set_io_priority(struct smbXcli_conn *conn,
+ uint8_t io_priority)
+{
+ conn->smb2.io_priority = io_priority;
+}
+
static void smb2cli_req_cancel_done(struct tevent_req *subreq);
static bool smb2cli_req_cancel(struct tevent_req *req)
@@ -2674,6 +2692,10 @@ struct tevent_req *smb2cli_req_create(TALLOC_CTX *mem_ctx,
use_replay_flag = true;
}
+ if (smbXcli_conn_protocol(conn) >= PROTOCOL_SMB3_11) {
+ flags |= SMB2_PRIORITY_VALUE_TO_MASK(conn->smb2.io_priority);
+ }
+
if (session) {
uid = session->smb2->session_id;
diff --git a/libcli/smb/smbXcli_base.h b/libcli/smb/smbXcli_base.h
index 2e13b57ef8f..8f27c20557e 100644
--- a/libcli/smb/smbXcli_base.h
+++ b/libcli/smb/smbXcli_base.h
@@ -303,6 +303,9 @@ uint32_t smb2cli_conn_max_read_size(struct smbXcli_conn *conn);
uint32_t smb2cli_conn_max_write_size(struct smbXcli_conn *conn);
void smb2cli_conn_set_max_credits(struct smbXcli_conn *conn,
uint16_t max_credits);
+uint8_t smb2cli_conn_get_io_priority(struct smbXcli_conn *conn);
+void smb2cli_conn_set_io_priority(struct smbXcli_conn *conn,
+ uint8_t io_priority);
struct tevent_req *smb2cli_req_create(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,