git add -f bin/default/librpc/gen_ndr/*.{c,h,ndr,pidl} bin/default/source*/librpc...
[metze/samba/wip.git] / bin / default / source3 / librpc / gen_ndr / ndr_smbXsrv.c
index eb15f1b76b08d0195debd9ab566bef25714d7cfc..f654cb7a2d748ca9094aa08390b6142f195396ea 100644 (file)
@@ -196,9 +196,9 @@ static enum ndr_err_code ndr_pull_smbXsrv_version_globalU(struct ndr_pull *ndr,
        uint32_t _ptr_info0;
        TALLOC_CTX *_mem_save_dummy_0 = NULL;
        uint32_t _ptr_dummy;
-       level = ndr_pull_get_switch_value(ndr, r);
        NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
        if (ndr_flags & NDR_SCALARS) {
+               level = ndr_pull_get_switch_value(ndr, r);
                NDR_CHECK(ndr_pull_union_align(ndr, 5));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
                if (_level != level) {
@@ -227,6 +227,8 @@ static enum ndr_err_code ndr_pull_smbXsrv_version_globalU(struct ndr_pull *ndr,
                }
        }
        if (ndr_flags & NDR_BUFFERS) {
+               /* The token is not needed after this. */
+               level = ndr_pull_steal_switch_value(ndr, r);
                switch (level) {
                        case 0:
                                if (r->info0) {
@@ -324,136 +326,901 @@ _PUBLIC_ void ndr_print_smbXsrv_version_globalB(struct ndr_print *ndr, const cha
        ndr->depth--;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push_smbXsrv_client(struct ndr_push *ndr, int ndr_flags, const struct smbXsrv_client *r)
+static enum ndr_err_code ndr_push_smbXsrv_client_global0(struct ndr_push *ndr, int ndr_flags, const struct smbXsrv_client_global0 *r)
 {
        NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 8));
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
-               /* [ignore] 'ev_ctx' */
-               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
-               /* [ignore] 'msg_ctx' */
-               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
-               /* [ignore] 'sconn' */
-               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
-               /* [ignore] 'session_table' */
-               NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->last_session_id));
+               /* [ignore] 'db_rec' */
+               NDR_CHECK(ndr_push_server_id(ndr, NDR_SCALARS, &r->server_id));
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->local_address, CH_UTF8)));
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
-               /* [ignore] 'tcon_table' */
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->local_address, CH_UTF8)));
+               NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->local_address, ndr_charset_length(r->local_address, CH_UTF8), sizeof(uint8_t), CH_UTF8));
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->remote_address, CH_UTF8)));
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
-               /* [ignore] 'open_table' */
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->remote_address, CH_UTF8)));
+               NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->remote_address, ndr_charset_length(r->remote_address, CH_UTF8), sizeof(uint8_t), CH_UTF8));
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->remote_name, CH_UTF8)));
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
-               /* [ignore] 'connections' */
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->remote_name, CH_UTF8)));
+               NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->remote_name, ndr_charset_length(r->remote_name, CH_UTF8), sizeof(uint8_t), CH_UTF8));
+               NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->initial_connect_time));
+               NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->client_guid));
+               NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->stored));
                NDR_CHECK(ndr_push_trailer_align(ndr, 8));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               /* [ignore] 'ev_ctx' */
-               /* [ignore] 'msg_ctx' */
-               /* [ignore] 'sconn' */
-               /* [ignore] 'session_table' */
-               /* [ignore] 'tcon_table' */
-               /* [ignore] 'open_table' */
-               /* [ignore] 'connections' */
+               /* [ignore] 'db_rec' */
        }
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_pull_smbXsrv_client(struct ndr_pull *ndr, int ndr_flags, struct smbXsrv_client *r)
+static enum ndr_err_code ndr_pull_smbXsrv_client_global0(struct ndr_pull *ndr, int ndr_flags, struct smbXsrv_client_global0 *r)
+{
+       uint32_t _ptr_db_rec;
+       uint32_t size_local_address_0 = 0;
+       uint32_t length_local_address_0 = 0;
+       uint32_t size_remote_address_0 = 0;
+       uint32_t length_remote_address_0 = 0;
+       uint32_t size_remote_name_0 = 0;
+       uint32_t length_remote_name_0 = 0;
+       NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_pull_align(ndr, 8));
+               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_db_rec));
+               _ptr_db_rec = 0;
+               if (_ptr_db_rec) {
+               } else {
+                       r->db_rec = NULL;
+               }
+               /* [ignore] 'db_rec' */
+               NDR_CHECK(ndr_pull_server_id(ndr, NDR_SCALARS, &r->server_id));
+               NDR_CHECK(ndr_pull_array_size(ndr, &r->local_address));
+               NDR_CHECK(ndr_pull_array_length(ndr, &r->local_address));
+               size_local_address_0 = ndr_get_array_size(ndr, &r->local_address);
+               length_local_address_0 = ndr_get_array_length(ndr, &r->local_address);
+               if (length_local_address_0 > size_local_address_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_local_address_0, length_local_address_0);
+               }
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_local_address_0, sizeof(uint8_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->local_address, length_local_address_0, sizeof(uint8_t), CH_UTF8));
+               NDR_CHECK(ndr_pull_array_size(ndr, &r->remote_address));
+               NDR_CHECK(ndr_pull_array_length(ndr, &r->remote_address));
+               size_remote_address_0 = ndr_get_array_size(ndr, &r->remote_address);
+               length_remote_address_0 = ndr_get_array_length(ndr, &r->remote_address);
+               if (length_remote_address_0 > size_remote_address_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_remote_address_0, length_remote_address_0);
+               }
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_remote_address_0, sizeof(uint8_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->remote_address, length_remote_address_0, sizeof(uint8_t), CH_UTF8));
+               NDR_CHECK(ndr_pull_array_size(ndr, &r->remote_name));
+               NDR_CHECK(ndr_pull_array_length(ndr, &r->remote_name));
+               size_remote_name_0 = ndr_get_array_size(ndr, &r->remote_name);
+               length_remote_name_0 = ndr_get_array_length(ndr, &r->remote_name);
+               if (length_remote_name_0 > size_remote_name_0) {
+                       return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", size_remote_name_0, length_remote_name_0);
+               }
+               NDR_CHECK(ndr_check_string_terminator(ndr, length_remote_name_0, sizeof(uint8_t)));
+               NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->remote_name, length_remote_name_0, sizeof(uint8_t), CH_UTF8));
+               NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->initial_connect_time));
+               NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->client_guid));
+               NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->stored));
+               NDR_CHECK(ndr_pull_trailer_align(ndr, 8));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               /* [ignore] 'db_rec' */
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_client_global0(struct ndr_print *ndr, const char *name, const struct smbXsrv_client_global0 *r)
+{
+       ndr_print_struct(ndr, name, "smbXsrv_client_global0");
+       if (r == NULL) { ndr_print_null(ndr); return; }
+       ndr->depth++;
+       ndr_print_ptr(ndr, "db_rec", r->db_rec);
+       /* [ignore] 'db_rec' */
+       ndr_print_server_id(ndr, "server_id", &r->server_id);
+       ndr_print_string(ndr, "local_address", r->local_address);
+       ndr_print_string(ndr, "remote_address", r->remote_address);
+       ndr_print_string(ndr, "remote_name", r->remote_name);
+       ndr_print_NTTIME(ndr, "initial_connect_time", r->initial_connect_time);
+       ndr_print_GUID(ndr, "client_guid", &r->client_guid);
+       ndr_print_uint8(ndr, "stored", r->stored);
+       ndr->depth--;
+}
+
+static enum ndr_err_code ndr_push_smbXsrv_client_globalU(struct ndr_push *ndr, int ndr_flags, const union smbXsrv_client_globalU *r)
+{
+       NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               uint32_t level = ndr_push_get_switch_value(ndr, r);
+               NDR_CHECK(ndr_push_union_align(ndr, 5));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
+               NDR_CHECK(ndr_push_union_align(ndr, 5));
+               switch (level) {
+                       case 0: {
+                               NDR_CHECK(ndr_push_unique_ptr(ndr, r->info0));
+                       break; }
+
+                       default: {
+                               NDR_CHECK(ndr_push_unique_ptr(ndr, r->dummy));
+                       break; }
+
+               }
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               uint32_t level = ndr_push_get_switch_value(ndr, r);
+               switch (level) {
+                       case 0:
+                               if (r->info0) {
+                                       NDR_CHECK(ndr_push_smbXsrv_client_global0(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
+                               }
+                       break;
+
+                       default:
+                               if (r->dummy) {
+                                       NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, *r->dummy));
+                               }
+                       break;
+
+               }
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_smbXsrv_client_globalU(struct ndr_pull *ndr, int ndr_flags, union smbXsrv_client_globalU *r)
+{
+       uint32_t level;
+       uint32_t _level;
+       TALLOC_CTX *_mem_save_info0_0 = NULL;
+       uint32_t _ptr_info0;
+       TALLOC_CTX *_mem_save_dummy_0 = NULL;
+       uint32_t _ptr_dummy;
+       NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               level = ndr_pull_get_switch_value(ndr, r);
+               NDR_CHECK(ndr_pull_union_align(ndr, 5));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
+               if (_level != level) {
+                       return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r at %s", _level, __location__);
+               }
+               NDR_CHECK(ndr_pull_union_align(ndr, 5));
+               switch (level) {
+                       case 0: {
+                               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info0));
+                               if (_ptr_info0) {
+                                       NDR_PULL_ALLOC(ndr, r->info0);
+                               } else {
+                                       r->info0 = NULL;
+                               }
+                       break; }
+
+                       default: {
+                               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dummy));
+                               if (_ptr_dummy) {
+                                       NDR_PULL_ALLOC(ndr, r->dummy);
+                               } else {
+                                       r->dummy = NULL;
+                               }
+                       break; }
+
+               }
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               /* The token is not needed after this. */
+               level = ndr_pull_steal_switch_value(ndr, r);
+               switch (level) {
+                       case 0:
+                               if (r->info0) {
+                                       _mem_save_info0_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                                       NDR_PULL_SET_MEM_CTX(ndr, r->info0, 0);
+                                       NDR_CHECK(ndr_pull_smbXsrv_client_global0(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
+                                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info0_0, 0);
+                               }
+                       break;
+
+                       default:
+                               if (r->dummy) {
+                                       _mem_save_dummy_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                                       NDR_PULL_SET_MEM_CTX(ndr, r->dummy, 0);
+                                       NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, r->dummy));
+                                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dummy_0, 0);
+                               }
+                       break;
+
+               }
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_client_globalU(struct ndr_print *ndr, const char *name, const union smbXsrv_client_globalU *r)
+{
+       uint32_t level;
+       level = ndr_print_get_switch_value(ndr, r);
+       ndr_print_union(ndr, name, level, "smbXsrv_client_globalU");
+       switch (level) {
+               case 0:
+                       ndr_print_ptr(ndr, "info0", r->info0);
+                       ndr->depth++;
+                       if (r->info0) {
+                               ndr_print_smbXsrv_client_global0(ndr, "info0", r->info0);
+                       }
+                       ndr->depth--;
+               break;
+
+               default:
+                       ndr_print_ptr(ndr, "dummy", r->dummy);
+                       ndr->depth++;
+                       if (r->dummy) {
+                               ndr_print_hyper(ndr, "dummy", *r->dummy);
+                       }
+                       ndr->depth--;
+               break;
+
+       }
+}
+
+_PUBLIC_ enum ndr_err_code ndr_push_smbXsrv_client_globalB(struct ndr_push *ndr, int ndr_flags, const struct smbXsrv_client_globalB *r)
+{
+       NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_push_align(ndr, 5));
+               NDR_CHECK(ndr_push_smbXsrv_version_values(ndr, NDR_SCALARS, r->version));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->seqnum));
+               NDR_CHECK(ndr_push_set_switch_value(ndr, &r->info, r->version));
+               NDR_CHECK(ndr_push_smbXsrv_client_globalU(ndr, NDR_SCALARS, &r->info));
+               NDR_CHECK(ndr_push_trailer_align(ndr, 5));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               NDR_CHECK(ndr_push_smbXsrv_client_globalU(ndr, NDR_BUFFERS, &r->info));
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_smbXsrv_client_globalB(struct ndr_pull *ndr, int ndr_flags, struct smbXsrv_client_globalB *r)
+{
+       NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_pull_align(ndr, 5));
+               NDR_CHECK(ndr_pull_smbXsrv_version_values(ndr, NDR_SCALARS, &r->version));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->seqnum));
+               NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->info, r->version));
+               NDR_CHECK(ndr_pull_smbXsrv_client_globalU(ndr, NDR_SCALARS, &r->info));
+               NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               NDR_CHECK(ndr_pull_smbXsrv_client_globalU(ndr, NDR_BUFFERS, &r->info));
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_client_globalB(struct ndr_print *ndr, const char *name, const struct smbXsrv_client_globalB *r)
+{
+       ndr_print_struct(ndr, name, "smbXsrv_client_globalB");
+       if (r == NULL) { ndr_print_null(ndr); return; }
+       ndr->depth++;
+       ndr_print_smbXsrv_version_values(ndr, "version", r->version);
+       ndr_print_uint32(ndr, "seqnum", r->seqnum);
+       ndr_print_set_switch_value(ndr, &r->info, r->version);
+       ndr_print_smbXsrv_client_globalU(ndr, "info", &r->info);
+       ndr->depth--;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_push_smbXsrv_client(struct ndr_push *ndr, int ndr_flags, const struct smbXsrv_client *r)
+{
+       NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               if (r->global == NULL) {
+                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+               }
+               NDR_CHECK(ndr_push_align(ndr, 8));
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
+               /* [ignore] 'table' */
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
+               /* [ignore] 'ev_ctx' */
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
+               /* [ignore] 'msg_ctx' */
+               NDR_CHECK(ndr_push_ref_ptr(ndr)); /* r->global */
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
+               /* [ignore] 'sconn' */
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
+               /* [ignore] 'session_table' */
+               NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->last_session_id));
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
+               /* [ignore] 'tcon_table' */
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
+               /* [ignore] 'open_table' */
+               NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
+               /* [ignore] 'connections' */
+               NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->server_multi_channel_enabled));
+               NDR_CHECK(ndr_push_trailer_align(ndr, 8));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               /* [ignore] 'table' */
+               /* [ignore] 'ev_ctx' */
+               /* [ignore] 'msg_ctx' */
+               NDR_CHECK(ndr_push_smbXsrv_client_global0(ndr, NDR_SCALARS|NDR_BUFFERS, r->global));
+               /* [ignore] 'sconn' */
+               /* [ignore] 'session_table' */
+               /* [ignore] 'tcon_table' */
+               /* [ignore] 'open_table' */
+               /* [ignore] 'connections' */
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_smbXsrv_client(struct ndr_pull *ndr, int ndr_flags, struct smbXsrv_client *r)
+{
+       uint32_t _ptr_table;
+       uint32_t _ptr_ev_ctx;
+       uint32_t _ptr_msg_ctx;
+       uint32_t _ptr_global;
+       TALLOC_CTX *_mem_save_global_0 = NULL;
+       uint32_t _ptr_sconn;
+       uint32_t _ptr_session_table;
+       uint32_t _ptr_tcon_table;
+       uint32_t _ptr_open_table;
+       uint32_t _ptr_connections;
+       NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_pull_align(ndr, 8));
+               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_table));
+               _ptr_table = 0;
+               if (_ptr_table) {
+               } else {
+                       r->table = NULL;
+               }
+               /* [ignore] 'table' */
+               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_ev_ctx));
+               _ptr_ev_ctx = 0;
+               if (_ptr_ev_ctx) {
+               } else {
+                       r->ev_ctx = NULL;
+               }
+               /* [ignore] 'ev_ctx' */
+               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_msg_ctx));
+               _ptr_msg_ctx = 0;
+               if (_ptr_msg_ctx) {
+               } else {
+                       r->msg_ctx = NULL;
+               }
+               /* [ignore] 'msg_ctx' */
+               NDR_CHECK(ndr_pull_ref_ptr(ndr, &_ptr_global));
+               if (_ptr_global) {
+                       NDR_PULL_ALLOC(ndr, r->global);
+               } else {
+                       r->global = NULL;
+               }
+               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_sconn));
+               _ptr_sconn = 0;
+               if (_ptr_sconn) {
+               } else {
+                       r->sconn = NULL;
+               }
+               /* [ignore] 'sconn' */
+               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_session_table));
+               _ptr_session_table = 0;
+               if (_ptr_session_table) {
+               } else {
+                       r->session_table = NULL;
+               }
+               /* [ignore] 'session_table' */
+               NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->last_session_id));
+               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_tcon_table));
+               _ptr_tcon_table = 0;
+               if (_ptr_tcon_table) {
+               } else {
+                       r->tcon_table = NULL;
+               }
+               /* [ignore] 'tcon_table' */
+               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_open_table));
+               _ptr_open_table = 0;
+               if (_ptr_open_table) {
+               } else {
+                       r->open_table = NULL;
+               }
+               /* [ignore] 'open_table' */
+               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_connections));
+               _ptr_connections = 0;
+               if (_ptr_connections) {
+               } else {
+                       r->connections = NULL;
+               }
+               /* [ignore] 'connections' */
+               NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->server_multi_channel_enabled));
+               NDR_CHECK(ndr_pull_trailer_align(ndr, 8));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               /* [ignore] 'table' */
+               /* [ignore] 'ev_ctx' */
+               /* [ignore] 'msg_ctx' */
+               _mem_save_global_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->global, 0);
+               NDR_CHECK(ndr_pull_smbXsrv_client_global0(ndr, NDR_SCALARS|NDR_BUFFERS, r->global));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_global_0, 0);
+               /* [ignore] 'sconn' */
+               /* [ignore] 'session_table' */
+               /* [ignore] 'tcon_table' */
+               /* [ignore] 'open_table' */
+               /* [ignore] 'connections' */
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_client(struct ndr_print *ndr, const char *name, const struct smbXsrv_client *r)
+{
+       ndr_print_struct(ndr, name, "smbXsrv_client");
+       if (r == NULL) { ndr_print_null(ndr); return; }
+       ndr->depth++;
+       ndr_print_ptr(ndr, "table", r->table);
+       /* [ignore] 'table' */
+       ndr_print_ptr(ndr, "ev_ctx", r->ev_ctx);
+       /* [ignore] 'ev_ctx' */
+       ndr_print_ptr(ndr, "msg_ctx", r->msg_ctx);
+       /* [ignore] 'msg_ctx' */
+       ndr_print_ptr(ndr, "global", r->global);
+       ndr->depth++;
+       ndr_print_smbXsrv_client_global0(ndr, "global", r->global);
+       ndr->depth--;
+       ndr_print_ptr(ndr, "sconn", r->sconn);
+       /* [ignore] 'sconn' */
+       ndr_print_ptr(ndr, "session_table", r->session_table);
+       /* [ignore] 'session_table' */
+       ndr_print_hyper(ndr, "last_session_id", r->last_session_id);
+       ndr_print_ptr(ndr, "tcon_table", r->tcon_table);
+       /* [ignore] 'tcon_table' */
+       ndr_print_ptr(ndr, "open_table", r->open_table);
+       /* [ignore] 'open_table' */
+       ndr_print_ptr(ndr, "connections", r->connections);
+       /* [ignore] 'connections' */
+       ndr_print_uint8(ndr, "server_multi_channel_enabled", r->server_multi_channel_enabled);
+       ndr->depth--;
+}
+
+static enum ndr_err_code ndr_push_smbXsrv_clientU(struct ndr_push *ndr, int ndr_flags, const union smbXsrv_clientU *r)
+{
+       NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               uint32_t level = ndr_push_get_switch_value(ndr, r);
+               NDR_CHECK(ndr_push_union_align(ndr, 5));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
+               NDR_CHECK(ndr_push_union_align(ndr, 5));
+               switch (level) {
+                       case 0: {
+                               NDR_CHECK(ndr_push_unique_ptr(ndr, r->info0));
+                       break; }
+
+                       default: {
+                               NDR_CHECK(ndr_push_unique_ptr(ndr, r->dummy));
+                       break; }
+
+               }
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               uint32_t level = ndr_push_get_switch_value(ndr, r);
+               switch (level) {
+                       case 0:
+                               if (r->info0) {
+                                       NDR_CHECK(ndr_push_smbXsrv_client(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
+                               }
+                       break;
+
+                       default:
+                               if (r->dummy) {
+                                       NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, *r->dummy));
+                               }
+                       break;
+
+               }
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_smbXsrv_clientU(struct ndr_pull *ndr, int ndr_flags, union smbXsrv_clientU *r)
+{
+       uint32_t level;
+       uint32_t _level;
+       TALLOC_CTX *_mem_save_info0_0 = NULL;
+       uint32_t _ptr_info0;
+       TALLOC_CTX *_mem_save_dummy_0 = NULL;
+       uint32_t _ptr_dummy;
+       NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               level = ndr_pull_get_switch_value(ndr, r);
+               NDR_CHECK(ndr_pull_union_align(ndr, 5));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
+               if (_level != level) {
+                       return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r at %s", _level, __location__);
+               }
+               NDR_CHECK(ndr_pull_union_align(ndr, 5));
+               switch (level) {
+                       case 0: {
+                               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info0));
+                               if (_ptr_info0) {
+                                       NDR_PULL_ALLOC(ndr, r->info0);
+                               } else {
+                                       r->info0 = NULL;
+                               }
+                       break; }
+
+                       default: {
+                               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dummy));
+                               if (_ptr_dummy) {
+                                       NDR_PULL_ALLOC(ndr, r->dummy);
+                               } else {
+                                       r->dummy = NULL;
+                               }
+                       break; }
+
+               }
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               /* The token is not needed after this. */
+               level = ndr_pull_steal_switch_value(ndr, r);
+               switch (level) {
+                       case 0:
+                               if (r->info0) {
+                                       _mem_save_info0_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                                       NDR_PULL_SET_MEM_CTX(ndr, r->info0, 0);
+                                       NDR_CHECK(ndr_pull_smbXsrv_client(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
+                                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info0_0, 0);
+                               }
+                       break;
+
+                       default:
+                               if (r->dummy) {
+                                       _mem_save_dummy_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                                       NDR_PULL_SET_MEM_CTX(ndr, r->dummy, 0);
+                                       NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, r->dummy));
+                                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dummy_0, 0);
+                               }
+                       break;
+
+               }
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_clientU(struct ndr_print *ndr, const char *name, const union smbXsrv_clientU *r)
+{
+       uint32_t level;
+       level = ndr_print_get_switch_value(ndr, r);
+       ndr_print_union(ndr, name, level, "smbXsrv_clientU");
+       switch (level) {
+               case 0:
+                       ndr_print_ptr(ndr, "info0", r->info0);
+                       ndr->depth++;
+                       if (r->info0) {
+                               ndr_print_smbXsrv_client(ndr, "info0", r->info0);
+                       }
+                       ndr->depth--;
+               break;
+
+               default:
+                       ndr_print_ptr(ndr, "dummy", r->dummy);
+                       ndr->depth++;
+                       if (r->dummy) {
+                               ndr_print_hyper(ndr, "dummy", *r->dummy);
+                       }
+                       ndr->depth--;
+               break;
+
+       }
+}
+
+_PUBLIC_ enum ndr_err_code ndr_push_smbXsrv_clientB(struct ndr_push *ndr, int ndr_flags, const struct smbXsrv_clientB *r)
+{
+       NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_push_align(ndr, 5));
+               NDR_CHECK(ndr_push_smbXsrv_version_values(ndr, NDR_SCALARS, r->version));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+               NDR_CHECK(ndr_push_set_switch_value(ndr, &r->info, r->version));
+               NDR_CHECK(ndr_push_smbXsrv_clientU(ndr, NDR_SCALARS, &r->info));
+               NDR_CHECK(ndr_push_trailer_align(ndr, 5));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               NDR_CHECK(ndr_push_smbXsrv_clientU(ndr, NDR_BUFFERS, &r->info));
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_smbXsrv_clientB(struct ndr_pull *ndr, int ndr_flags, struct smbXsrv_clientB *r)
+{
+       NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_pull_align(ndr, 5));
+               NDR_CHECK(ndr_pull_smbXsrv_version_values(ndr, NDR_SCALARS, &r->version));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->reserved));
+               NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->info, r->version));
+               NDR_CHECK(ndr_pull_smbXsrv_clientU(ndr, NDR_SCALARS, &r->info));
+               NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               NDR_CHECK(ndr_pull_smbXsrv_clientU(ndr, NDR_BUFFERS, &r->info));
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_clientB(struct ndr_print *ndr, const char *name, const struct smbXsrv_clientB *r)
+{
+       ndr_print_struct(ndr, name, "smbXsrv_clientB");
+       if (r == NULL) { ndr_print_null(ndr); return; }
+       ndr->depth++;
+       ndr_print_smbXsrv_version_values(ndr, "version", r->version);
+       ndr_print_uint32(ndr, "reserved", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?0:r->reserved);
+       ndr_print_set_switch_value(ndr, &r->info, r->version);
+       ndr_print_smbXsrv_clientU(ndr, "info", &r->info);
+       ndr->depth--;
+}
+
+static enum ndr_err_code ndr_push_smbXsrv_connection_pass0(struct ndr_push *ndr, int ndr_flags, const struct smbXsrv_connection_pass0 *r)
+{
+       NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_push_align(ndr, 4));
+               NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->initial_connect_time));
+               NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->client_guid));
+               NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->negotiate_request));
+               NDR_CHECK(ndr_push_trailer_align(ndr, 4));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_smbXsrv_connection_pass0(struct ndr_pull *ndr, int ndr_flags, struct smbXsrv_connection_pass0 *r)
+{
+       NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_pull_align(ndr, 4));
+               NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->initial_connect_time));
+               NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->client_guid));
+               NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->negotiate_request));
+               NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_connection_pass0(struct ndr_print *ndr, const char *name, const struct smbXsrv_connection_pass0 *r)
+{
+       ndr_print_struct(ndr, name, "smbXsrv_connection_pass0");
+       if (r == NULL) { ndr_print_null(ndr); return; }
+       ndr->depth++;
+       ndr_print_NTTIME(ndr, "initial_connect_time", r->initial_connect_time);
+       ndr_print_GUID(ndr, "client_guid", &r->client_guid);
+       ndr_print_DATA_BLOB(ndr, "negotiate_request", r->negotiate_request);
+       ndr->depth--;
+}
+
+static enum ndr_err_code ndr_push_smbXsrv_connection_passU(struct ndr_push *ndr, int ndr_flags, const union smbXsrv_connection_passU *r)
+{
+       NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               uint32_t level = ndr_push_get_switch_value(ndr, r);
+               NDR_CHECK(ndr_push_union_align(ndr, 5));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
+               NDR_CHECK(ndr_push_union_align(ndr, 5));
+               switch (level) {
+                       case 0: {
+                               NDR_CHECK(ndr_push_unique_ptr(ndr, r->info0));
+                       break; }
+
+                       default: {
+                               NDR_CHECK(ndr_push_unique_ptr(ndr, r->dummy));
+                       break; }
+
+               }
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               uint32_t level = ndr_push_get_switch_value(ndr, r);
+               switch (level) {
+                       case 0:
+                               if (r->info0) {
+                                       NDR_CHECK(ndr_push_smbXsrv_connection_pass0(ndr, NDR_SCALARS, r->info0));
+                               }
+                       break;
+
+                       default:
+                               if (r->dummy) {
+                                       NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, *r->dummy));
+                               }
+                       break;
+
+               }
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_smbXsrv_connection_passU(struct ndr_pull *ndr, int ndr_flags, union smbXsrv_connection_passU *r)
+{
+       uint32_t level;
+       uint32_t _level;
+       TALLOC_CTX *_mem_save_info0_0 = NULL;
+       uint32_t _ptr_info0;
+       TALLOC_CTX *_mem_save_dummy_0 = NULL;
+       uint32_t _ptr_dummy;
+       NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               level = ndr_pull_get_switch_value(ndr, r);
+               NDR_CHECK(ndr_pull_union_align(ndr, 5));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
+               if (_level != level) {
+                       return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r at %s", _level, __location__);
+               }
+               NDR_CHECK(ndr_pull_union_align(ndr, 5));
+               switch (level) {
+                       case 0: {
+                               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info0));
+                               if (_ptr_info0) {
+                                       NDR_PULL_ALLOC(ndr, r->info0);
+                               } else {
+                                       r->info0 = NULL;
+                               }
+                       break; }
+
+                       default: {
+                               NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dummy));
+                               if (_ptr_dummy) {
+                                       NDR_PULL_ALLOC(ndr, r->dummy);
+                               } else {
+                                       r->dummy = NULL;
+                               }
+                       break; }
+
+               }
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               /* The token is not needed after this. */
+               level = ndr_pull_steal_switch_value(ndr, r);
+               switch (level) {
+                       case 0:
+                               if (r->info0) {
+                                       _mem_save_info0_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                                       NDR_PULL_SET_MEM_CTX(ndr, r->info0, 0);
+                                       NDR_CHECK(ndr_pull_smbXsrv_connection_pass0(ndr, NDR_SCALARS, r->info0));
+                                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info0_0, 0);
+                               }
+                       break;
+
+                       default:
+                               if (r->dummy) {
+                                       _mem_save_dummy_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                                       NDR_PULL_SET_MEM_CTX(ndr, r->dummy, 0);
+                                       NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, r->dummy));
+                                       NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dummy_0, 0);
+                               }
+                       break;
+
+               }
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_connection_passU(struct ndr_print *ndr, const char *name, const union smbXsrv_connection_passU *r)
+{
+       uint32_t level;
+       level = ndr_print_get_switch_value(ndr, r);
+       ndr_print_union(ndr, name, level, "smbXsrv_connection_passU");
+       switch (level) {
+               case 0:
+                       ndr_print_ptr(ndr, "info0", r->info0);
+                       ndr->depth++;
+                       if (r->info0) {
+                               ndr_print_smbXsrv_connection_pass0(ndr, "info0", r->info0);
+                       }
+                       ndr->depth--;
+               break;
+
+               default:
+                       ndr_print_ptr(ndr, "dummy", r->dummy);
+                       ndr->depth++;
+                       if (r->dummy) {
+                               ndr_print_hyper(ndr, "dummy", *r->dummy);
+                       }
+                       ndr->depth--;
+               break;
+
+       }
+}
+
+_PUBLIC_ enum ndr_err_code ndr_push_smbXsrv_connection_passB(struct ndr_push *ndr, int ndr_flags, const struct smbXsrv_connection_passB *r)
+{
+       NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_push_align(ndr, 5));
+               NDR_CHECK(ndr_push_smbXsrv_version_values(ndr, NDR_SCALARS, r->version));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+               NDR_CHECK(ndr_push_set_switch_value(ndr, &r->info, r->version));
+               NDR_CHECK(ndr_push_smbXsrv_connection_passU(ndr, NDR_SCALARS, &r->info));
+               NDR_CHECK(ndr_push_trailer_align(ndr, 5));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               NDR_CHECK(ndr_push_smbXsrv_connection_passU(ndr, NDR_BUFFERS, &r->info));
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_smbXsrv_connection_passB(struct ndr_pull *ndr, int ndr_flags, struct smbXsrv_connection_passB *r)
 {
-       uint32_t _ptr_ev_ctx;
-       uint32_t _ptr_msg_ctx;
-       uint32_t _ptr_sconn;
-       uint32_t _ptr_session_table;
-       uint32_t _ptr_tcon_table;
-       uint32_t _ptr_open_table;
-       uint32_t _ptr_connections;
        NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
        if (ndr_flags & NDR_SCALARS) {
-               NDR_CHECK(ndr_pull_align(ndr, 8));
-               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_ev_ctx));
-               _ptr_ev_ctx = 0;
-               if (_ptr_ev_ctx) {
-               } else {
-                       r->ev_ctx = NULL;
-               }
-               /* [ignore] 'ev_ctx' */
-               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_msg_ctx));
-               _ptr_msg_ctx = 0;
-               if (_ptr_msg_ctx) {
-               } else {
-                       r->msg_ctx = NULL;
-               }
-               /* [ignore] 'msg_ctx' */
-               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_sconn));
-               _ptr_sconn = 0;
-               if (_ptr_sconn) {
-               } else {
-                       r->sconn = NULL;
-               }
-               /* [ignore] 'sconn' */
-               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_session_table));
-               _ptr_session_table = 0;
-               if (_ptr_session_table) {
-               } else {
-                       r->session_table = NULL;
-               }
-               /* [ignore] 'session_table' */
-               NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->last_session_id));
-               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_tcon_table));
-               _ptr_tcon_table = 0;
-               if (_ptr_tcon_table) {
-               } else {
-                       r->tcon_table = NULL;
-               }
-               /* [ignore] 'tcon_table' */
-               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_open_table));
-               _ptr_open_table = 0;
-               if (_ptr_open_table) {
-               } else {
-                       r->open_table = NULL;
-               }
-               /* [ignore] 'open_table' */
-               NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_connections));
-               _ptr_connections = 0;
-               if (_ptr_connections) {
-               } else {
-                       r->connections = NULL;
-               }
-               /* [ignore] 'connections' */
-               NDR_CHECK(ndr_pull_trailer_align(ndr, 8));
+               NDR_CHECK(ndr_pull_align(ndr, 5));
+               NDR_CHECK(ndr_pull_smbXsrv_version_values(ndr, NDR_SCALARS, &r->version));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->reserved));
+               NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->info, r->version));
+               NDR_CHECK(ndr_pull_smbXsrv_connection_passU(ndr, NDR_SCALARS, &r->info));
+               NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
        }
        if (ndr_flags & NDR_BUFFERS) {
-               /* [ignore] 'ev_ctx' */
-               /* [ignore] 'msg_ctx' */
-               /* [ignore] 'sconn' */
-               /* [ignore] 'session_table' */
-               /* [ignore] 'tcon_table' */
-               /* [ignore] 'open_table' */
-               /* [ignore] 'connections' */
+               NDR_CHECK(ndr_pull_smbXsrv_connection_passU(ndr, NDR_BUFFERS, &r->info));
        }
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ void ndr_print_smbXsrv_client(struct ndr_print *ndr, const char *name, const struct smbXsrv_client *r)
+_PUBLIC_ void ndr_print_smbXsrv_connection_passB(struct ndr_print *ndr, const char *name, const struct smbXsrv_connection_passB *r)
 {
-       ndr_print_struct(ndr, name, "smbXsrv_client");
+       ndr_print_struct(ndr, name, "smbXsrv_connection_passB");
        if (r == NULL) { ndr_print_null(ndr); return; }
        ndr->depth++;
-       ndr_print_ptr(ndr, "ev_ctx", r->ev_ctx);
-       /* [ignore] 'ev_ctx' */
-       ndr_print_ptr(ndr, "msg_ctx", r->msg_ctx);
-       /* [ignore] 'msg_ctx' */
-       ndr_print_ptr(ndr, "sconn", r->sconn);
-       /* [ignore] 'sconn' */
-       ndr_print_ptr(ndr, "session_table", r->session_table);
-       /* [ignore] 'session_table' */
-       ndr_print_hyper(ndr, "last_session_id", r->last_session_id);
-       ndr_print_ptr(ndr, "tcon_table", r->tcon_table);
-       /* [ignore] 'tcon_table' */
-       ndr_print_ptr(ndr, "open_table", r->open_table);
-       /* [ignore] 'open_table' */
-       ndr_print_ptr(ndr, "connections", r->connections);
-       /* [ignore] 'connections' */
+       ndr_print_smbXsrv_version_values(ndr, "version", r->version);
+       ndr_print_uint32(ndr, "reserved", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?0:r->reserved);
+       ndr_print_set_switch_value(ndr, &r->info, r->version);
+       ndr_print_smbXsrv_connection_passU(ndr, "info", &r->info);
+       ndr->depth--;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_push_smbXsrv_encrpytion_flags(struct ndr_push *ndr, int ndr_flags, uint8_t r)
+{
+       NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_smbXsrv_encrpytion_flags(struct ndr_pull *ndr, int ndr_flags, uint8_t *r)
+{
+       uint8_t v;
+       NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_encrpytion_flags(struct ndr_print *ndr, const char *name, uint8_t r)
+{
+       ndr_print_uint8(ndr, name, r);
+       ndr->depth++;
+       ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SMBXSRV_ENCRYPTION_REQUIRED", SMBXSRV_ENCRYPTION_REQUIRED, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SMBXSRV_ENCRYPTION_DESIRED", SMBXSRV_ENCRYPTION_DESIRED, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SMBXSRV_PROCESSED_ENCRYPTED_PACKET", SMBXSRV_PROCESSED_ENCRYPTED_PACKET, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SMBXSRV_PROCESSED_UNENCRYPTED_PACKET", SMBXSRV_PROCESSED_UNENCRYPTED_PACKET, r);
+       ndr->depth--;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_push_smbXsrv_signing_flags(struct ndr_push *ndr, int ndr_flags, uint8_t r)
+{
+       NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_smbXsrv_signing_flags(struct ndr_pull *ndr, int ndr_flags, uint8_t *r)
+{
+       uint8_t v;
+       NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_signing_flags(struct ndr_print *ndr, const char *name, uint8_t r)
+{
+       ndr_print_uint8(ndr, name, r);
+       ndr->depth++;
+       ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SMBXSRV_SIGNING_REQUIRED", SMBXSRV_SIGNING_REQUIRED, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SMBXSRV_PROCESSED_SIGNED_PACKET", SMBXSRV_PROCESSED_SIGNED_PACKET, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SMBXSRV_PROCESSED_UNSIGNED_PACKET", SMBXSRV_PROCESSED_UNSIGNED_PACKET, r);
        ndr->depth--;
 }
 
@@ -479,6 +1246,7 @@ static enum ndr_err_code ndr_push_smbXsrv_channel_global0(struct ndr_push *ndr,
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->auth_session_info_seqnum));
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
                /* [ignore] 'connection' */
+               NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->encryption_cipher));
                NDR_CHECK(ndr_push_trailer_align(ndr, 8));
        }
        if (ndr_flags & NDR_BUFFERS) {
@@ -536,6 +1304,7 @@ static enum ndr_err_code ndr_pull_smbXsrv_channel_global0(struct ndr_pull *ndr,
                        r->connection = NULL;
                }
                /* [ignore] 'connection' */
+               NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->encryption_cipher));
                NDR_CHECK(ndr_pull_trailer_align(ndr, 8));
        }
        if (ndr_flags & NDR_BUFFERS) {
@@ -556,6 +1325,7 @@ _PUBLIC_ void ndr_print_smbXsrv_channel_global0(struct ndr_print *ndr, const cha
        ndr_print_uint32(ndr, "auth_session_info_seqnum", r->auth_session_info_seqnum);
        ndr_print_ptr(ndr, "connection", r->connection);
        /* [ignore] 'connection' */
+       ndr_print_uint16(ndr, "encryption_cipher", r->encryption_cipher);
        ndr->depth--;
 }
 
@@ -575,8 +1345,8 @@ static enum ndr_err_code ndr_push_smbXsrv_session_global0(struct ndr_push *ndr,
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->auth_session_info_seqnum));
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->auth_session_info));
                NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->connection_dialect));
-               NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->signing_required));
-               NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->encryption_required));
+               NDR_CHECK(ndr_push_smbXsrv_signing_flags(ndr, NDR_SCALARS, r->signing_flags));
+               NDR_CHECK(ndr_push_smbXsrv_encrpytion_flags(ndr, NDR_SCALARS, r->encryption_flags));
                NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->signing_key));
                NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->encryption_key));
                NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->decryption_key));
@@ -630,8 +1400,8 @@ static enum ndr_err_code ndr_pull_smbXsrv_session_global0(struct ndr_pull *ndr,
                        r->auth_session_info = NULL;
                }
                NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->connection_dialect));
-               NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->signing_required));
-               NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->encryption_required));
+               NDR_CHECK(ndr_pull_smbXsrv_signing_flags(ndr, NDR_SCALARS, &r->signing_flags));
+               NDR_CHECK(ndr_pull_smbXsrv_encrpytion_flags(ndr, NDR_SCALARS, &r->encryption_flags));
                NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->signing_key));
                NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->encryption_key));
                NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->decryption_key));
@@ -690,8 +1460,8 @@ _PUBLIC_ void ndr_print_smbXsrv_session_global0(struct ndr_print *ndr, const cha
        }
        ndr->depth--;
        ndr_print_uint16(ndr, "connection_dialect", r->connection_dialect);
-       ndr_print_uint8(ndr, "signing_required", r->signing_required);
-       ndr_print_uint8(ndr, "encryption_required", r->encryption_required);
+       ndr_print_smbXsrv_signing_flags(ndr, "signing_flags", r->signing_flags);
+       ndr_print_smbXsrv_encrpytion_flags(ndr, "encryption_flags", r->encryption_flags);
        ndr_print_uint32(ndr, "num_channels", r->num_channels);
        ndr->print(ndr, "%s: ARRAY(%d)", "channels", (int)r->num_channels);
        ndr->depth++;
@@ -749,9 +1519,9 @@ static enum ndr_err_code ndr_pull_smbXsrv_session_globalU(struct ndr_pull *ndr,
        uint32_t _ptr_info0;
        TALLOC_CTX *_mem_save_dummy_0 = NULL;
        uint32_t _ptr_dummy;
-       level = ndr_pull_get_switch_value(ndr, r);
        NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
        if (ndr_flags & NDR_SCALARS) {
+               level = ndr_pull_get_switch_value(ndr, r);
                NDR_CHECK(ndr_pull_union_align(ndr, 5));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
                if (_level != level) {
@@ -780,6 +1550,8 @@ static enum ndr_err_code ndr_pull_smbXsrv_session_globalU(struct ndr_pull *ndr,
                }
        }
        if (ndr_flags & NDR_BUFFERS) {
+               /* The token is not needed after this. */
+               level = ndr_pull_steal_switch_value(ndr, r);
                switch (level) {
                        case 0:
                                if (r->info0) {
@@ -1042,7 +1814,6 @@ static enum ndr_err_code ndr_push_smbXsrv_session(struct ndr_push *ndr, int ndr_
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
                /* [ignore] 'tcon_table' */
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->pending_auth));
-               NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->encryption_desired));
                NDR_CHECK(ndr_push_trailer_align(ndr, 8));
        }
        if (ndr_flags & NDR_BUFFERS) {
@@ -1127,7 +1898,6 @@ static enum ndr_err_code ndr_pull_smbXsrv_session(struct ndr_pull *ndr, int ndr_
                } else {
                        r->pending_auth = NULL;
                }
-               NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->encryption_desired));
                NDR_CHECK(ndr_pull_trailer_align(ndr, 8));
        }
        if (ndr_flags & NDR_BUFFERS) {
@@ -1182,7 +1952,6 @@ _PUBLIC_ void ndr_print_smbXsrv_session(struct ndr_print *ndr, const char *name,
                ndr_print_smbXsrv_session_auth0(ndr, "pending_auth", r->pending_auth);
        }
        ndr->depth--;
-       ndr_print_uint8(ndr, "encryption_desired", r->encryption_desired);
        ndr->depth--;
 }
 
@@ -1233,9 +2002,9 @@ static enum ndr_err_code ndr_pull_smbXsrv_sessionU(struct ndr_pull *ndr, int ndr
        uint32_t _ptr_info0;
        TALLOC_CTX *_mem_save_dummy_0 = NULL;
        uint32_t _ptr_dummy;
-       level = ndr_pull_get_switch_value(ndr, r);
        NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
        if (ndr_flags & NDR_SCALARS) {
+               level = ndr_pull_get_switch_value(ndr, r);
                NDR_CHECK(ndr_pull_union_align(ndr, 5));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
                if (_level != level) {
@@ -1264,6 +2033,8 @@ static enum ndr_err_code ndr_pull_smbXsrv_sessionU(struct ndr_pull *ndr, int ndr
                }
        }
        if (ndr_flags & NDR_BUFFERS) {
+               /* The token is not needed after this. */
+               level = ndr_pull_steal_switch_value(ndr, r);
                switch (level) {
                        case 0:
                                if (r->info0) {
@@ -1452,9 +2223,9 @@ static enum ndr_err_code ndr_pull_smbXsrv_session_closeU(struct ndr_pull *ndr, i
        uint32_t _ptr_info0;
        TALLOC_CTX *_mem_save_dummy_0 = NULL;
        uint32_t _ptr_dummy;
-       level = ndr_pull_get_switch_value(ndr, r);
        NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
        if (ndr_flags & NDR_SCALARS) {
+               level = ndr_pull_get_switch_value(ndr, r);
                NDR_CHECK(ndr_pull_union_align(ndr, 5));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
                if (_level != level) {
@@ -1483,6 +2254,8 @@ static enum ndr_err_code ndr_pull_smbXsrv_session_closeU(struct ndr_pull *ndr, i
                }
        }
        if (ndr_flags & NDR_BUFFERS) {
+               /* The token is not needed after this. */
+               level = ndr_pull_steal_switch_value(ndr, r);
                switch (level) {
                        case 0:
                                if (r->info0) {
@@ -1595,8 +2368,9 @@ static enum ndr_err_code ndr_push_smbXsrv_tcon_global0(struct ndr_push *ndr, int
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->share_name, CH_UTF8)));
                NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->share_name, ndr_charset_length(r->share_name, CH_UTF8), sizeof(uint8_t), CH_UTF8));
-               NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->encryption_required));
+               NDR_CHECK(ndr_push_smbXsrv_encrpytion_flags(ndr, NDR_SCALARS, r->encryption_flags));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->session_global_id));
+               NDR_CHECK(ndr_push_smbXsrv_signing_flags(ndr, NDR_SCALARS, r->signing_flags));
                NDR_CHECK(ndr_push_trailer_align(ndr, 8));
        }
        if (ndr_flags & NDR_BUFFERS) {
@@ -1633,8 +2407,9 @@ static enum ndr_err_code ndr_pull_smbXsrv_tcon_global0(struct ndr_pull *ndr, int
                }
                NDR_CHECK(ndr_check_string_terminator(ndr, length_share_name_0, sizeof(uint8_t)));
                NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->share_name, length_share_name_0, sizeof(uint8_t), CH_UTF8));
-               NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->encryption_required));
+               NDR_CHECK(ndr_pull_smbXsrv_encrpytion_flags(ndr, NDR_SCALARS, &r->encryption_flags));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->session_global_id));
+               NDR_CHECK(ndr_pull_smbXsrv_signing_flags(ndr, NDR_SCALARS, &r->signing_flags));
                NDR_CHECK(ndr_pull_trailer_align(ndr, 8));
        }
        if (ndr_flags & NDR_BUFFERS) {
@@ -1655,8 +2430,9 @@ _PUBLIC_ void ndr_print_smbXsrv_tcon_global0(struct ndr_print *ndr, const char *
        ndr_print_server_id(ndr, "server_id", &r->server_id);
        ndr_print_NTTIME(ndr, "creation_time", r->creation_time);
        ndr_print_string(ndr, "share_name", r->share_name);
-       ndr_print_uint8(ndr, "encryption_required", r->encryption_required);
+       ndr_print_smbXsrv_encrpytion_flags(ndr, "encryption_flags", r->encryption_flags);
        ndr_print_uint32(ndr, "session_global_id", r->session_global_id);
+       ndr_print_smbXsrv_signing_flags(ndr, "signing_flags", r->signing_flags);
        ndr->depth--;
 }
 
@@ -1707,9 +2483,9 @@ static enum ndr_err_code ndr_pull_smbXsrv_tcon_globalU(struct ndr_pull *ndr, int
        uint32_t _ptr_info0;
        TALLOC_CTX *_mem_save_dummy_0 = NULL;
        uint32_t _ptr_dummy;
-       level = ndr_pull_get_switch_value(ndr, r);
        NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
        if (ndr_flags & NDR_SCALARS) {
+               level = ndr_pull_get_switch_value(ndr, r);
                NDR_CHECK(ndr_pull_union_align(ndr, 5));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
                if (_level != level) {
@@ -1738,6 +2514,8 @@ static enum ndr_err_code ndr_pull_smbXsrv_tcon_globalU(struct ndr_pull *ndr, int
                }
        }
        if (ndr_flags & NDR_BUFFERS) {
+               /* The token is not needed after this. */
+               level = ndr_pull_steal_switch_value(ndr, r);
                switch (level) {
                        case 0:
                                if (r->info0) {
@@ -1853,7 +2631,6 @@ static enum ndr_err_code ndr_push_smbXsrv_tcon(struct ndr_push *ndr, int ndr_fla
                NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->idle_time));
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
                /* [ignore] 'compat' */
-               NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->encryption_desired));
                NDR_CHECK(ndr_push_trailer_align(ndr, 5));
        }
        if (ndr_flags & NDR_BUFFERS) {
@@ -1905,7 +2682,6 @@ static enum ndr_err_code ndr_pull_smbXsrv_tcon(struct ndr_pull *ndr, int ndr_fla
                        r->compat = NULL;
                }
                /* [ignore] 'compat' */
-               NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->encryption_desired));
                NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
        }
        if (ndr_flags & NDR_BUFFERS) {
@@ -1938,7 +2714,6 @@ _PUBLIC_ void ndr_print_smbXsrv_tcon(struct ndr_print *ndr, const char *name, co
        ndr_print_NTTIME(ndr, "idle_time", r->idle_time);
        ndr_print_ptr(ndr, "compat", r->compat);
        /* [ignore] 'compat' */
-       ndr_print_uint8(ndr, "encryption_desired", r->encryption_desired);
        ndr->depth--;
 }
 
@@ -1989,9 +2764,9 @@ static enum ndr_err_code ndr_pull_smbXsrv_tconU(struct ndr_pull *ndr, int ndr_fl
        uint32_t _ptr_info0;
        TALLOC_CTX *_mem_save_dummy_0 = NULL;
        uint32_t _ptr_dummy;
-       level = ndr_pull_get_switch_value(ndr, r);
        NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
        if (ndr_flags & NDR_SCALARS) {
+               level = ndr_pull_get_switch_value(ndr, r);
                NDR_CHECK(ndr_pull_union_align(ndr, 5));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
                if (_level != level) {
@@ -2020,6 +2795,8 @@ static enum ndr_err_code ndr_pull_smbXsrv_tconU(struct ndr_pull *ndr, int ndr_fl
                }
        }
        if (ndr_flags & NDR_BUFFERS) {
+               /* The token is not needed after this. */
+               level = ndr_pull_steal_switch_value(ndr, r);
                switch (level) {
                        case 0:
                                if (r->info0) {
@@ -2117,6 +2894,29 @@ _PUBLIC_ void ndr_print_smbXsrv_tconB(struct ndr_print *ndr, const char *name, c
        ndr->depth--;
 }
 
+_PUBLIC_ enum ndr_err_code ndr_push_smbXsrv_open_flags(struct ndr_push *ndr, int ndr_flags, uint8_t r)
+{
+       NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_smbXsrv_open_flags(struct ndr_pull *ndr, int ndr_flags, uint8_t *r)
+{
+       uint8_t v;
+       NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
+       *r = v;
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_open_flags(struct ndr_print *ndr, const char *name, uint8_t r)
+{
+       ndr_print_uint8(ndr, name, r);
+       ndr->depth++;
+       ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SMBXSRV_OPEN_NEED_REPLAY_CACHE", SMBXSRV_OPEN_NEED_REPLAY_CACHE, r);
+       ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SMBXSRV_OPEN_HAVE_REPLAY_CACHE", SMBXSRV_OPEN_HAVE_REPLAY_CACHE, r);
+       ndr->depth--;
+}
+
 static enum ndr_err_code ndr_push_smbXsrv_open_global0(struct ndr_push *ndr, int ndr_flags, const struct smbXsrv_open_global0 *r)
 {
        NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
@@ -2137,6 +2937,7 @@ static enum ndr_err_code ndr_push_smbXsrv_open_global0(struct ndr_push *ndr, int
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->durable_timeout_msec));
                NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->durable));
                NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->backend_cookie));
+               NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->channel_sequence));
                NDR_CHECK(ndr_push_trailer_align(ndr, 8));
        }
        if (ndr_flags & NDR_BUFFERS) {
@@ -2171,6 +2972,7 @@ static enum ndr_err_code ndr_pull_smbXsrv_open_global0(struct ndr_pull *ndr, int
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->durable_timeout_msec));
                NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->durable));
                NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->backend_cookie));
+               NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->channel_sequence));
                NDR_CHECK(ndr_pull_trailer_align(ndr, 8));
        }
        if (ndr_flags & NDR_BUFFERS) {
@@ -2199,6 +3001,7 @@ _PUBLIC_ void ndr_print_smbXsrv_open_global0(struct ndr_print *ndr, const char *
        ndr_print_uint32(ndr, "durable_timeout_msec", r->durable_timeout_msec);
        ndr_print_uint8(ndr, "durable", r->durable);
        ndr_print_DATA_BLOB(ndr, "backend_cookie", r->backend_cookie);
+       ndr_print_hyper(ndr, "channel_sequence", r->channel_sequence);
        ndr->depth--;
 }
 
@@ -2249,9 +3052,9 @@ static enum ndr_err_code ndr_pull_smbXsrv_open_globalU(struct ndr_pull *ndr, int
        uint32_t _ptr_info0;
        TALLOC_CTX *_mem_save_dummy_0 = NULL;
        uint32_t _ptr_dummy;
-       level = ndr_pull_get_switch_value(ndr, r);
        NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
        if (ndr_flags & NDR_SCALARS) {
+               level = ndr_pull_get_switch_value(ndr, r);
                NDR_CHECK(ndr_pull_union_align(ndr, 5));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
                if (_level != level) {
@@ -2280,6 +3083,8 @@ static enum ndr_err_code ndr_pull_smbXsrv_open_globalU(struct ndr_pull *ndr, int
                }
        }
        if (ndr_flags & NDR_BUFFERS) {
+               /* The token is not needed after this. */
+               level = ndr_pull_steal_switch_value(ndr, r);
                switch (level) {
                        case 0:
                                if (r->info0) {
@@ -2384,7 +3189,7 @@ static enum ndr_err_code ndr_push_smbXsrv_open(struct ndr_push *ndr, int ndr_fla
                if (r->global == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_align(ndr, 5));
+               NDR_CHECK(ndr_push_align(ndr, 8));
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
                /* [ignore] 'table' */
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
@@ -2395,7 +3200,11 @@ static enum ndr_err_code ndr_push_smbXsrv_open(struct ndr_push *ndr, int ndr_fla
                NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->idle_time));
                NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
                /* [ignore] 'compat' */
-               NDR_CHECK(ndr_push_trailer_align(ndr, 5));
+               NDR_CHECK(ndr_push_smbXsrv_open_flags(ndr, NDR_SCALARS, r->flags));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->create_action));
+               NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->request_count));
+               NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->pre_request_count));
+               NDR_CHECK(ndr_push_trailer_align(ndr, 8));
        }
        if (ndr_flags & NDR_BUFFERS) {
                /* [ignore] 'table' */
@@ -2415,7 +3224,7 @@ static enum ndr_err_code ndr_pull_smbXsrv_open(struct ndr_pull *ndr, int ndr_fla
        uint32_t _ptr_compat;
        NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
        if (ndr_flags & NDR_SCALARS) {
-               NDR_CHECK(ndr_pull_align(ndr, 5));
+               NDR_CHECK(ndr_pull_align(ndr, 8));
                NDR_CHECK(ndr_pull_uint3264(ndr, NDR_SCALARS, &_ptr_table));
                _ptr_table = 0;
                if (_ptr_table) {
@@ -2446,7 +3255,11 @@ static enum ndr_err_code ndr_pull_smbXsrv_open(struct ndr_pull *ndr, int ndr_fla
                        r->compat = NULL;
                }
                /* [ignore] 'compat' */
-               NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
+               NDR_CHECK(ndr_pull_smbXsrv_open_flags(ndr, NDR_SCALARS, &r->flags));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->create_action));
+               NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->request_count));
+               NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->pre_request_count));
+               NDR_CHECK(ndr_pull_trailer_align(ndr, 8));
        }
        if (ndr_flags & NDR_BUFFERS) {
                /* [ignore] 'table' */
@@ -2478,6 +3291,10 @@ _PUBLIC_ void ndr_print_smbXsrv_open(struct ndr_print *ndr, const char *name, co
        ndr_print_NTTIME(ndr, "idle_time", r->idle_time);
        ndr_print_ptr(ndr, "compat", r->compat);
        /* [ignore] 'compat' */
+       ndr_print_smbXsrv_open_flags(ndr, "flags", r->flags);
+       ndr_print_uint32(ndr, "create_action", r->create_action);
+       ndr_print_hyper(ndr, "request_count", r->request_count);
+       ndr_print_hyper(ndr, "pre_request_count", r->pre_request_count);
        ndr->depth--;
 }
 
@@ -2528,9 +3345,9 @@ static enum ndr_err_code ndr_pull_smbXsrv_openU(struct ndr_pull *ndr, int ndr_fl
        uint32_t _ptr_info0;
        TALLOC_CTX *_mem_save_dummy_0 = NULL;
        uint32_t _ptr_dummy;
-       level = ndr_pull_get_switch_value(ndr, r);
        NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
        if (ndr_flags & NDR_SCALARS) {
+               level = ndr_pull_get_switch_value(ndr, r);
                NDR_CHECK(ndr_pull_union_align(ndr, 5));
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
                if (_level != level) {
@@ -2559,6 +3376,8 @@ static enum ndr_err_code ndr_pull_smbXsrv_openU(struct ndr_pull *ndr, int ndr_fl
                }
        }
        if (ndr_flags & NDR_BUFFERS) {
+               /* The token is not needed after this. */
+               level = ndr_pull_steal_switch_value(ndr, r);
                switch (level) {
                        case 0:
                                if (r->info0) {
@@ -2700,6 +3519,138 @@ _PUBLIC_ void ndr_print_smbXsrv_version_global_decode(struct ndr_print *ndr, con
        ndr->depth--;
 }
 
+static enum ndr_err_code ndr_push_smbXsrv_client_global_decode(struct ndr_push *ndr, int flags, const struct smbXsrv_client_global_decode *r)
+{
+       NDR_PUSH_CHECK_FN_FLAGS(ndr, flags);
+       if (flags & NDR_IN) {
+               NDR_CHECK(ndr_push_smbXsrv_client_globalB(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.blob));
+       }
+       if (flags & NDR_OUT) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_smbXsrv_client_global_decode(struct ndr_pull *ndr, int flags, struct smbXsrv_client_global_decode *r)
+{
+       NDR_PULL_CHECK_FN_FLAGS(ndr, flags);
+       if (flags & NDR_IN) {
+               NDR_CHECK(ndr_pull_smbXsrv_client_globalB(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.blob));
+       }
+       if (flags & NDR_OUT) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_client_global_decode(struct ndr_print *ndr, const char *name, int flags, const struct smbXsrv_client_global_decode *r)
+{
+       ndr_print_struct(ndr, name, "smbXsrv_client_global_decode");
+       if (r == NULL) { ndr_print_null(ndr); return; }
+       ndr->depth++;
+       if (flags & NDR_SET_VALUES) {
+               ndr->flags |= LIBNDR_PRINT_SET_VALUES;
+       }
+       if (flags & NDR_IN) {
+               ndr_print_struct(ndr, "in", "smbXsrv_client_global_decode");
+               ndr->depth++;
+               ndr_print_smbXsrv_client_globalB(ndr, "blob", &r->in.blob);
+               ndr->depth--;
+       }
+       if (flags & NDR_OUT) {
+               ndr_print_struct(ndr, "out", "smbXsrv_client_global_decode");
+               ndr->depth++;
+               ndr->depth--;
+       }
+       ndr->depth--;
+}
+
+static enum ndr_err_code ndr_push_smbXsrv_client_decode(struct ndr_push *ndr, int flags, const struct smbXsrv_client_decode *r)
+{
+       NDR_PUSH_CHECK_FN_FLAGS(ndr, flags);
+       if (flags & NDR_IN) {
+               NDR_CHECK(ndr_push_smbXsrv_clientB(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.blob));
+       }
+       if (flags & NDR_OUT) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_smbXsrv_client_decode(struct ndr_pull *ndr, int flags, struct smbXsrv_client_decode *r)
+{
+       NDR_PULL_CHECK_FN_FLAGS(ndr, flags);
+       if (flags & NDR_IN) {
+               NDR_CHECK(ndr_pull_smbXsrv_clientB(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.blob));
+       }
+       if (flags & NDR_OUT) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_client_decode(struct ndr_print *ndr, const char *name, int flags, const struct smbXsrv_client_decode *r)
+{
+       ndr_print_struct(ndr, name, "smbXsrv_client_decode");
+       if (r == NULL) { ndr_print_null(ndr); return; }
+       ndr->depth++;
+       if (flags & NDR_SET_VALUES) {
+               ndr->flags |= LIBNDR_PRINT_SET_VALUES;
+       }
+       if (flags & NDR_IN) {
+               ndr_print_struct(ndr, "in", "smbXsrv_client_decode");
+               ndr->depth++;
+               ndr_print_smbXsrv_clientB(ndr, "blob", &r->in.blob);
+               ndr->depth--;
+       }
+       if (flags & NDR_OUT) {
+               ndr_print_struct(ndr, "out", "smbXsrv_client_decode");
+               ndr->depth++;
+               ndr->depth--;
+       }
+       ndr->depth--;
+}
+
+static enum ndr_err_code ndr_push_smbXsrv_connection_pass_decode(struct ndr_push *ndr, int flags, const struct smbXsrv_connection_pass_decode *r)
+{
+       NDR_PUSH_CHECK_FN_FLAGS(ndr, flags);
+       if (flags & NDR_IN) {
+               NDR_CHECK(ndr_push_smbXsrv_connection_passB(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.blob));
+       }
+       if (flags & NDR_OUT) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_smbXsrv_connection_pass_decode(struct ndr_pull *ndr, int flags, struct smbXsrv_connection_pass_decode *r)
+{
+       NDR_PULL_CHECK_FN_FLAGS(ndr, flags);
+       if (flags & NDR_IN) {
+               NDR_CHECK(ndr_pull_smbXsrv_connection_passB(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.blob));
+       }
+       if (flags & NDR_OUT) {
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_smbXsrv_connection_pass_decode(struct ndr_print *ndr, const char *name, int flags, const struct smbXsrv_connection_pass_decode *r)
+{
+       ndr_print_struct(ndr, name, "smbXsrv_connection_pass_decode");
+       if (r == NULL) { ndr_print_null(ndr); return; }
+       ndr->depth++;
+       if (flags & NDR_SET_VALUES) {
+               ndr->flags |= LIBNDR_PRINT_SET_VALUES;
+       }
+       if (flags & NDR_IN) {
+               ndr_print_struct(ndr, "in", "smbXsrv_connection_pass_decode");
+               ndr->depth++;
+               ndr_print_smbXsrv_connection_passB(ndr, "blob", &r->in.blob);
+               ndr->depth--;
+       }
+       if (flags & NDR_OUT) {
+               ndr_print_struct(ndr, "out", "smbXsrv_connection_pass_decode");
+               ndr->depth++;
+               ndr->depth--;
+       }
+       ndr->depth--;
+}
+
 static enum ndr_err_code ndr_push_smbXsrv_session_global_decode(struct ndr_push *ndr, int flags, const struct smbXsrv_session_global_decode *r)
 {
        NDR_PUSH_CHECK_FN_FLAGS(ndr, flags);
@@ -3018,6 +3969,33 @@ static const struct ndr_interface_call smbXsrv_calls[] = {
                { 0, NULL },
                { 0, NULL },
        },
+       {
+               "smbXsrv_client_global_decode",
+               sizeof(struct smbXsrv_client_global_decode),
+               (ndr_push_flags_fn_t) ndr_push_smbXsrv_client_global_decode,
+               (ndr_pull_flags_fn_t) ndr_pull_smbXsrv_client_global_decode,
+               (ndr_print_function_t) ndr_print_smbXsrv_client_global_decode,
+               { 0, NULL },
+               { 0, NULL },
+       },
+       {
+               "smbXsrv_client_decode",
+               sizeof(struct smbXsrv_client_decode),
+               (ndr_push_flags_fn_t) ndr_push_smbXsrv_client_decode,
+               (ndr_pull_flags_fn_t) ndr_pull_smbXsrv_client_decode,
+               (ndr_print_function_t) ndr_print_smbXsrv_client_decode,
+               { 0, NULL },
+               { 0, NULL },
+       },
+       {
+               "smbXsrv_connection_pass_decode",
+               sizeof(struct smbXsrv_connection_pass_decode),
+               (ndr_push_flags_fn_t) ndr_push_smbXsrv_connection_pass_decode,
+               (ndr_pull_flags_fn_t) ndr_pull_smbXsrv_connection_pass_decode,
+               (ndr_print_function_t) ndr_print_smbXsrv_connection_pass_decode,
+               { 0, NULL },
+               { 0, NULL },
+       },
        {
                "smbXsrv_session_global_decode",
                sizeof(struct smbXsrv_session_global_decode),
@@ -3110,7 +4088,7 @@ const struct ndr_interface_table ndr_table_smbXsrv = {
                NDR_SMBXSRV_VERSION
        },
        .helpstring     = NDR_SMBXSRV_HELPSTRING,
-       .num_calls      = 8,
+       .num_calls      = 11,
        .calls          = smbXsrv_calls,
        .endpoints      = &smbXsrv_endpoints,
        .authservices   = &smbXsrv_authservices