From e97858433e62c6f3571a65b951c5fc7c47ab8c2f Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Fri, 8 May 2015 12:52:23 +0200 Subject: libcli/smb: add support for SMB >= 3.1.1 io priorities Pair-Programmed-With: Stefan Metzmacher Signed-off-by: Michael Adam Signed-off-by: Stefan Metzmacher --- libcli/smb/smbXcli_base.c | 22 ++++++++++++++++++++++ libcli/smb/smbXcli_base.h | 3 +++ 2 files changed, 25 insertions(+) (limited to 'libcli') 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, -- cgit v1.2.1