Print this page
NEX-19375 SMB2 durable handle create response missing timeout
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Cleanup duplicated lines from the "Feb merge".
NEX-18748 (Hyper-V 2016) VM goes to poweroff state when smbd is restarted
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Joyce McIntosh <joyce.mcintosh@nexenta.com>
NEX-17589 Get "too high" smbd error when copy big file to cifs share (redo)
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-16943 network outages with thread stuck in smb2_scoreboard_cancel
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-15681 Implement SMB2 ioctl FSCTL_QUERY_FILE_REGIONS
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-9808 SMB3 persistent handles
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-15578 SMB2 durable handle redesign
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-15581 SMB keep-alive feature is just noise
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-5665 SMB2 oplock leases
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
NEX-15555 SMB2 async redesign
NEX-15061 smtorture smb2.lock.cancel.cancel is failed
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
Also follow-up change to:
 NEX-1643 dtrace provider for smbsrv (remove "done2" probes,
 which don't make sense with the new async design)
NEX-15681 Implement SMB2 ioctl FSCTL_QUERY_FILE_REGIONS
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-9808 SMB3 persistent handles
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-15578 SMB2 durable handle redesign
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-15581 SMB keep-alive feature is just noise
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-5665 SMB2 oplock leases
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
NEX-15555 SMB2 async redesign
NEX-15061 smtorture smb2.lock.cancel.cancel is failed
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
Also follow-up change to:
 NEX-1643 dtrace provider for smbsrv (remove "done2" probes,
 which don't make sense with the new async design)
NEX-10231 SMB logon fails in fksmbd
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
NEX-9864 Some SMB cancel races remain after NEX-5845
Revert (part of) "NEX-5845 rework SMB immediate cancel"
reverts (part of) commit 7a5da69f6d42b17ebcc95ca3d02925d07a01343e.
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-5273 SMB 3 Encryption
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
NEX-5664 Offload Data Transfer (ODX) support for Hyper-V
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
NEX-6337 COPYCHUNKS should use sparse copy
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
NEX-6276 SMB sparse file support
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-5844 want SMB2 ioctl FSCTL_SRV_COPYCHUNK
NEX-6124 smb_fsop_read/write should allow file != sr->fid_ofile
NEX-6125 smbtorture invalid response with smb2.ioctl
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
NEX-5845 rework SMB immediate cancel
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
NEX-3553 SMB2/3 durable handles
Reviewed by: Gordon Ross <gwr@nexenta.com>
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
NEX-3906 Prefer that SMB change notify not tie up a worker thread
NEX-5278 SMB notify should buffer per file handle
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Matt Barden <Matt.Barden@nexenta.com>
NEX-3409 SMB2: OSX - cannot display nested folders in finder
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Matt Barden <Matt.Barden@nexenta.com>
NEX-3733 Want SMB2 Apple extensions
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Matt Barden <Matt.Barden@nexenta.com>
NEX-3610 CLONE NEX-3591 SMB3 signing
Reviewed by: Gordon Ross <gwr@nexenta.com>
Reviewed by: Dan Fields <dan.fields@nexenta.com>
SMB-55 SMB2 signing
NEX-1059 Shared folder is not available in Windows 7/8/2012 when SMB2 is enabled in Workgroup mode
(Implement "Secure Negotiation")
SMB-122 smbd core dumps in smbd_dc_update / smb_log
SMB-117 Win7 fails to open security properties
SMB-11 SMB2 message parse & dispatch
SMB-12 SMB2 Negotiate Protocol
SMB-13 SMB2 Session Setup
SMB-14 SMB2 Logoff
SMB-15 SMB2 Tree Connect
SMB-16 SMB2 Tree Disconnect
SMB-17 SMB2 Create
SMB-18 SMB2 Close
SMB-19 SMB2 Flush
SMB-20 SMB2 Read
SMB-21 SMB2 Write
SMB-22 SMB2 Lock/Unlock
SMB-23 SMB2 Ioctl
SMB-24 SMB2 Cancel
SMB-25 SMB2 Echo
SMB-26 SMB2 Query Dir
SMB-27 SMB2 Change Notify
SMB-28 SMB2 Query Info
SMB-29 SMB2 Set Info
SMB-30 SMB2 Oplocks
SMB-53 SMB2 Create Context options
(SMB2 code review cleanup 1, 2, 3)

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/smbsrv/smb2_kproto.h
          +++ new/usr/src/uts/common/smbsrv/smb2_kproto.h
↓ open down ↓ 2 lines elided ↑ open up ↑
   3    3   * Common Development and Distribution License ("CDDL"), version 1.0.
   4    4   * You may only use this file in accordance with the terms of version
   5    5   * 1.0 of the CDDL.
   6    6   *
   7    7   * A full copy of the text of the CDDL should have accompanied this
   8    8   * source.  A copy of the CDDL is also available via the Internet at
   9    9   * http://www.illumos.org/license/CDDL.
  10   10   */
  11   11  
  12   12  /*
  13      - * Copyright 2014 Nexenta Systems, Inc.  All rights reserved.
       13 + * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
  14   14   */
  15   15  
  16   16  #ifndef _SMB2_KPROTO_H_
  17   17  #define _SMB2_KPROTO_H_
  18   18  
  19   19  #include <smbsrv/smb_kproto.h>
  20   20  #include <smbsrv/smb2.h>
  21   21  
  22   22  #ifdef  __cplusplus
  23   23  extern "C" {
  24   24  #endif
  25   25  
  26   26  extern uint32_t smb2_tcp_rcvbuf;
  27   27  extern uint32_t smb2_max_rwsize;
  28   28  extern uint32_t smb2_max_trans;
  29   29  
       30 +extern int smb2_aapl_use_file_ids;
       31 +extern uint32_t smb2_dh_def_timeout;
       32 +extern uint32_t smb2_dh_max_timeout;
       33 +extern uint32_t smb2_res_def_timeout;
       34 +extern uint32_t smb2_res_max_timeout;
       35 +extern uint32_t smb2_persist_timeout;
       36 +extern int smb2_enable_dh;
       37 +
       38 +#define SMB2_KEYLEN     16
       39 +#define SMB3_KEYLEN     16      /* AES-128 keys */
       40 +
       41 +#define SMB3_CLIENT_ENCRYPTS(sr) \
       42 +        ((sr->session->capabilities & SMB2_CAP_ENCRYPTION) != 0)
       43 +
  30   44  void    smb2_dispatch_stats_init(smb_server_t *);
  31   45  void    smb2_dispatch_stats_fini(smb_server_t *);
  32   46  void    smb2_dispatch_stats_update(smb_server_t *,
  33   47                  smb_kstat_req_t *, int, int);
  34   48  
  35   49  int     smb2sr_newrq(smb_request_t *);
  36      -int     smb2sr_newrq_async(smb_request_t *);
  37      -int     smb2sr_newrq_cancel(smb_request_t *);
  38   50  void    smb2sr_work(smb_request_t *);
       51 +uint32_t smb2sr_go_async(smb_request_t *);
       52 +void smb2sr_append_postwork(smb_request_t *, smb_request_t *);
  39   53  
  40   54  int smb2_decode_header(smb_request_t *);
  41   55  int smb2_encode_header(smb_request_t *, boolean_t);
       56 +int smb3_decode_tform_header(smb_request_t *);
       57 +int smb3_encode_tform_header(smb_request_t *, struct mbuf_chain *mbc);
       58 +
  42   59  void smb2_send_reply(smb_request_t *);
  43   60  void smb2sr_put_error(smb_request_t *, uint32_t);
  44   61  void smb2sr_put_error_data(smb_request_t *, uint32_t, mbuf_chain_t *);
  45   62  void smb2sr_put_errno(struct smb_request *, int);
  46   63  uint32_t smb2sr_lookup_fid(smb_request_t *, smb2fid_t *);
  47   64  
  48   65  /* SMB2 signing routines - smb2_signing.c */
  49   66  int smb2_sign_check_request(smb_request_t *);
  50   67  void smb2_sign_reply(smb_request_t *);
       68 +void smb2_sign_init_mech(smb_session_t *);
  51   69  
  52      -uint32_t smb2_fsctl_vneginfo(smb_request_t *, smb_fsctl_t *);
       70 +int smb3_encrypt_sr(smb_request_t *, struct mbuf_chain *, struct mbuf_chain *);
       71 +int smb3_decrypt_sr(smb_request_t *);
       72 +int smb3_encrypt_init_mech(smb_session_t *s);
  53   73  
       74 +uint32_t smb2_fsctl_fs(smb_request_t *, smb_fsctl_t *);
       75 +uint32_t smb2_fsctl_netfs(smb_request_t *, smb_fsctl_t *);
       76 +uint32_t smb2_fsctl_copychunk(smb_request_t *, smb_fsctl_t *);
       77 +uint32_t smb2_fsctl_odx_read(smb_request_t *, smb_fsctl_t *);
       78 +uint32_t smb2_fsctl_odx_write(smb_request_t *, smb_fsctl_t *);
       79 +uint32_t smb2_fsctl_set_resilient(smb_request_t *, smb_fsctl_t *);
       80 +
       81 +/* smb2_fsctl_sparse.c */
       82 +uint32_t smb2_fsctl_set_sparse(smb_request_t *, smb_fsctl_t *);
       83 +uint32_t smb2_fsctl_set_zero_data(smb_request_t *, smb_fsctl_t *);
       84 +uint32_t smb2_fsctl_query_alloc_ranges(smb_request_t *, smb_fsctl_t *);
       85 +uint32_t smb2_fsctl_query_file_regions(smb_request_t *, smb_fsctl_t *);
       86 +uint32_t smb2_sparse_copy(smb_request_t *sr,
       87 +    smb_ofile_t *src_ofile, smb_ofile_t *dst_ofile,
       88 +    off64_t src_off, off64_t dst_off, uint32_t *residp,
       89 +    void *buffer, size_t bufsize);
       90 +
       91 +uint32_t smb2_nego_validate(smb_request_t *, smb_fsctl_t *);
       92 +
  54   93  smb_sdrc_t smb2_negotiate(smb_request_t *);
  55   94  smb_sdrc_t smb2_session_setup(smb_request_t *);
  56   95  smb_sdrc_t smb2_logoff(smb_request_t *);
  57   96  smb_sdrc_t smb2_tree_connect(smb_request_t *);
  58   97  smb_sdrc_t smb2_tree_disconn(smb_request_t *);
  59   98  smb_sdrc_t smb2_create(smb_request_t *);
  60   99  smb_sdrc_t smb2_close(smb_request_t *);
  61  100  smb_sdrc_t smb2_flush(smb_request_t *);
  62  101  smb_sdrc_t smb2_read(smb_request_t *);
  63  102  smb_sdrc_t smb2_write(smb_request_t *);
  64  103  smb_sdrc_t smb2_lock(smb_request_t *);
  65  104  smb_sdrc_t smb2_ioctl(smb_request_t *);
  66      -/* No smb2_cancel() - see smb2_dispatch.c */
      105 +smb_sdrc_t smb2_cancel(smb_request_t *);
  67  106  smb_sdrc_t smb2_echo(smb_request_t *);
  68  107  smb_sdrc_t smb2_query_dir(smb_request_t *);
  69  108  smb_sdrc_t smb2_change_notify(smb_request_t *);
  70  109  smb_sdrc_t smb2_query_info(smb_request_t *);
  71  110  smb_sdrc_t smb2_set_info(smb_request_t *);
  72  111  smb_sdrc_t smb2_oplock_break_ack(smb_request_t *);
      112 +smb_sdrc_t smb2_lease_break_ack(smb_request_t *);
  73  113  
  74  114  int smb2_newrq_negotiate(smb_request_t *);
      115 +int smb2_newrq_cancel(smb_request_t *);
  75  116  
      117 +uint32_t smb2_aapl_crctx(smb_request_t *,
      118 +        mbuf_chain_t *, mbuf_chain_t *);
      119 +
  76  120  uint32_t smb2_ofile_getattr(smb_request_t *, smb_ofile_t *, smb_attr_t *);
  77  121  uint32_t smb2_ofile_getstd(smb_ofile_t *, smb_queryinfo_t *);
  78  122  uint32_t smb2_ofile_getname(smb_ofile_t *, smb_queryinfo_t *);
  79  123  
  80  124  uint32_t smb2_qinfo_file(smb_request_t *, smb_queryinfo_t *);
  81  125  uint32_t smb2_qinfo_fs(smb_request_t *, smb_queryinfo_t *);
  82  126  uint32_t smb2_qinfo_sec(smb_request_t *, smb_queryinfo_t *);
  83  127  uint32_t smb2_qinfo_quota(smb_request_t *, smb_queryinfo_t *);
  84  128  uint32_t smb2_qinfo_stream(smb_request_t *, smb_queryinfo_t *);
  85  129  
  86  130  uint32_t smb2_setinfo_file(smb_request_t *, smb_setinfo_t *, int);
  87  131  uint32_t smb2_setinfo_fs(smb_request_t *, smb_setinfo_t *, int);
  88  132  uint32_t smb2_setinfo_sec(smb_request_t *, smb_setinfo_t *, uint32_t);
  89  133  uint32_t smb2_setinfo_quota(smb_request_t *, smb_setinfo_t *);
  90  134  
      135 +void smb2_oplock_acquire(smb_request_t *sr);
      136 +void smb2_lease_acquire(smb_request_t *sr);
      137 +uint32_t smb2_lease_create(smb_request_t *sr, uint8_t *);
      138 +void smb2_lease_rele(smb_lease_t *);
      139 +void smb2_lease_init(void);
      140 +void smb2_lease_fini(void);
      141 +void smb2_lease_ofile_close(smb_ofile_t *);
      142 +
      143 +void smb2_durable_timers(smb_server_t *);
      144 +
      145 +uint32_t smb2_dh_reconnect(smb_request_t *);
      146 +boolean_t smb_dh_should_save(smb_ofile_t *);
      147 +extern void smb2_dh_shutdown(smb_server_t *);
      148 +int smb2_dh_new_ca_share(smb_server_t *, smb_kshare_t *);
      149 +void smb2_dh_close_persistent(smb_ofile_t *);
      150 +void smb2_dh_close_my_orphans(smb_request_t *, smb_ofile_t *);
      151 +int smb2_dh_make_persistent(smb_request_t *, smb_ofile_t *);
      152 +void smb2_dh_setdoc_persistent(smb_ofile_t *);
      153 +void smb2_dh_update_nvfile(smb_request_t *);
      154 +void smb2_dh_update_oplock(smb_request_t *, smb_ofile_t *);
      155 +void smb2_dh_update_locks(smb_request_t *, smb_ofile_t *);
      156 +void smb2_dh_update_times(smb_request_t *, smb_ofile_t *, smb_attr_t *);
      157 +
  91  158  #ifdef  __cplusplus
  92  159  }
  93  160  #endif
  94  161  
  95  162  #endif /* _SMB2_KPROTO_H_ */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX