14bff34e3Sthurlow /* 24bff34e3Sthurlow * Copyright (c) 2000-2001 Boris Popov 34bff34e3Sthurlow * All rights reserved. 44bff34e3Sthurlow * 54bff34e3Sthurlow * Redistribution and use in source and binary forms, with or without 64bff34e3Sthurlow * modification, are permitted provided that the following conditions 74bff34e3Sthurlow * are met: 84bff34e3Sthurlow * 1. Redistributions of source code must retain the above copyright 94bff34e3Sthurlow * notice, this list of conditions and the following disclaimer. 104bff34e3Sthurlow * 2. Redistributions in binary form must reproduce the above copyright 114bff34e3Sthurlow * notice, this list of conditions and the following disclaimer in the 124bff34e3Sthurlow * documentation and/or other materials provided with the distribution. 134bff34e3Sthurlow * 3. All advertising materials mentioning features or use of this software 144bff34e3Sthurlow * must display the following acknowledgement: 154bff34e3Sthurlow * This product includes software developed by Boris Popov. 164bff34e3Sthurlow * 4. Neither the name of the author nor the names of any co-contributors 174bff34e3Sthurlow * may be used to endorse or promote products derived from this software 184bff34e3Sthurlow * without specific prior written permission. 194bff34e3Sthurlow * 204bff34e3Sthurlow * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 214bff34e3Sthurlow * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 224bff34e3Sthurlow * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 234bff34e3Sthurlow * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 244bff34e3Sthurlow * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 254bff34e3Sthurlow * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 264bff34e3Sthurlow * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 274bff34e3Sthurlow * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 284bff34e3Sthurlow * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 294bff34e3Sthurlow * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 304bff34e3Sthurlow * SUCH DAMAGE. 314bff34e3Sthurlow * 324bff34e3Sthurlow * $Id: smb_conn.h,v 1.32.42.1 2005/05/27 02:35:29 lindak Exp $ 334bff34e3Sthurlow */ 344bff34e3Sthurlow 354bff34e3Sthurlow /* 36*613a2f6bSGordon Ross * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 374bff34e3Sthurlow * Use is subject to license terms. 384bff34e3Sthurlow */ 394bff34e3Sthurlow 404bff34e3Sthurlow #ifndef _SMB_CONN_H 414bff34e3Sthurlow #define _SMB_CONN_H 424bff34e3Sthurlow 43*613a2f6bSGordon Ross #include <sys/dditypes.h> 444bff34e3Sthurlow #include <sys/t_lock.h> 454bff34e3Sthurlow #include <sys/queue.h> /* for SLIST below */ 464bff34e3Sthurlow #include <sys/uio.h> 474bff34e3Sthurlow #include <netsmb/smb_dev.h> 484bff34e3Sthurlow 494bff34e3Sthurlow /* 504bff34e3Sthurlow * Credentials of user/process for processing in the connection procedures 514bff34e3Sthurlow */ 524bff34e3Sthurlow typedef struct smb_cred { 53*613a2f6bSGordon Ross struct cred *scr_cred; 544bff34e3Sthurlow } smb_cred_t; 554bff34e3Sthurlow 564bff34e3Sthurlow /* 574bff34e3Sthurlow * Common object flags 584bff34e3Sthurlow */ 594bff34e3Sthurlow #define SMBO_GONE 0x1000000 604bff34e3Sthurlow 614bff34e3Sthurlow /* 624bff34e3Sthurlow * Bits in vc_flags (a.k.a. vc_co.co_flags) 634bff34e3Sthurlow * Many of these were duplicates of SMBVOPT_ flags 644bff34e3Sthurlow * and we now keep those too instead of merging 654bff34e3Sthurlow * them into vc_flags. 664bff34e3Sthurlow */ 674bff34e3Sthurlow 684bff34e3Sthurlow #define SMBV_WIN95 0x0010 /* used to apply bugfixes for this OS */ 694bff34e3Sthurlow #define SMBV_NT4 0x0020 /* used when NT4 issues invalid resp */ 709c9af259SGordon Ross #define SMBV_UNICODE 0x0040 /* conn configured to use Unicode */ 714bff34e3Sthurlow 724bff34e3Sthurlow /* 734bff34e3Sthurlow * Note: the common "obj" level uses this GONE flag by 744bff34e3Sthurlow * the name SMBO_GONE. Keep this alias as a reminder. 754bff34e3Sthurlow */ 76*613a2f6bSGordon Ross #define SMBV_GONE SMBO_GONE 774bff34e3Sthurlow 784bff34e3Sthurlow /* 794bff34e3Sthurlow * bits in smb_share ss_flags (a.k.a. ss_co.co_flags) 804bff34e3Sthurlow */ 814bff34e3Sthurlow #define SMBS_RECONNECTING 0x0002 824bff34e3Sthurlow #define SMBS_CONNECTED 0x0004 834bff34e3Sthurlow #define SMBS_TCON_WAIT 0x0008 844bff34e3Sthurlow #define SMBS_1980 0x0010 854bff34e3Sthurlow /* 864bff34e3Sthurlow * ^ This partition can't handle dates before 1980. It's probably a FAT 874bff34e3Sthurlow * partition but could be some other ancient FS type 884bff34e3Sthurlow */ 89*613a2f6bSGordon Ross #define SMBS_RESUMEKEYS 0x0020 /* must use resume keys */ 90*613a2f6bSGordon Ross #define SMBS_LONGNAMES 0x0040 /* share can use long names */ 914bff34e3Sthurlow /* 924bff34e3Sthurlow * Note: the common "obj" level uses this GONE flag by 934bff34e3Sthurlow * the name SMBO_GONE. Keep this alias as a reminder. 944bff34e3Sthurlow */ 95*613a2f6bSGordon Ross #define SMBS_GONE SMBO_GONE 964bff34e3Sthurlow 974bff34e3Sthurlow struct smb_rq; 984bff34e3Sthurlow /* This declares struct smb_rqhead */ 994bff34e3Sthurlow TAILQ_HEAD(smb_rqhead, smb_rq); 1004bff34e3Sthurlow 1014bff34e3Sthurlow #define SMB_NBTIMO 15 1024bff34e3Sthurlow #define SMB_DEFRQTIMO 30 /* 30 for oplock revoke/writeback */ 1034bff34e3Sthurlow #define SMBWRTTIMO 60 1044bff34e3Sthurlow #define SMBSSNSETUPTIMO 60 1054bff34e3Sthurlow #define SMBNOREPLYWAIT (0) 1064bff34e3Sthurlow 1074bff34e3Sthurlow #define SMB_DIALECT(vcp) ((vcp)->vc_sopt.sv_proto) 1084bff34e3Sthurlow 1094bff34e3Sthurlow /* 1104bff34e3Sthurlow * Connection object 1114bff34e3Sthurlow */ 1124bff34e3Sthurlow 1134bff34e3Sthurlow #define SMB_CO_LOCK(cp) mutex_enter(&(cp)->co_lock) 1144bff34e3Sthurlow #define SMB_CO_UNLOCK(cp) mutex_exit(&(cp)->co_lock) 1154bff34e3Sthurlow 1164bff34e3Sthurlow /* 1174bff34e3Sthurlow * Common part of smb_vc, smb_share 1184bff34e3Sthurlow * Locking: co_lock protects most 1194bff34e3Sthurlow * fields in this struct, except 1204bff34e3Sthurlow * as noted below: 1214bff34e3Sthurlow */ 1224bff34e3Sthurlow struct smb_connobj { 1234bff34e3Sthurlow kmutex_t co_lock; 1244bff34e3Sthurlow int co_level; /* SMBL_ */ 1254bff34e3Sthurlow int co_flags; 1264bff34e3Sthurlow int co_usecount; 1274bff34e3Sthurlow 1284bff34e3Sthurlow /* Note: must lock co_parent before child. */ 1294bff34e3Sthurlow struct smb_connobj *co_parent; 1304bff34e3Sthurlow 1314bff34e3Sthurlow /* this.co_lock protects the co_children list */ 1324bff34e3Sthurlow SLIST_HEAD(, smb_connobj) co_children; 1334bff34e3Sthurlow 1344bff34e3Sthurlow /* 1354bff34e3Sthurlow * Linkage in parent's list of children. 1364bff34e3Sthurlow * Must hold parent.co_lock to traverse. 1374bff34e3Sthurlow */ 1384bff34e3Sthurlow SLIST_ENTRY(smb_connobj) co_next; 1394bff34e3Sthurlow 1404bff34e3Sthurlow /* These two are set only at creation. */ 1414bff34e3Sthurlow void (*co_gone)(struct smb_connobj *); 1424bff34e3Sthurlow void (*co_free)(struct smb_connobj *); 1434bff34e3Sthurlow }; 1444bff34e3Sthurlow typedef struct smb_connobj smb_connobj_t; 1454bff34e3Sthurlow 1464bff34e3Sthurlow /* 147*613a2f6bSGordon Ross * "Level" in the connection object hierarchy 1484bff34e3Sthurlow */ 149*613a2f6bSGordon Ross #define SMBL_SM 0 150*613a2f6bSGordon Ross #define SMBL_VC 1 151*613a2f6bSGordon Ross #define SMBL_SHARE 2 1524bff34e3Sthurlow 153*613a2f6bSGordon Ross /* 154*613a2f6bSGordon Ross * Virtual Circuit to a server (really connection + session). 155*613a2f6bSGordon Ross * Yes, calling this a "Virtual Circuit" is confusining, 156*613a2f6bSGordon Ross * because it has nothing to do with the SMB notion of a 157*613a2f6bSGordon Ross * "Virtual Circuit". 158*613a2f6bSGordon Ross */ 1594bff34e3Sthurlow typedef struct smb_vc { 160*613a2f6bSGordon Ross struct smb_connobj vc_co; /* keep first! See CPTOVC */ 161*613a2f6bSGordon Ross enum smbiod_state vc_state; 162*613a2f6bSGordon Ross kcondvar_t vc_statechg; 1634bff34e3Sthurlow 164*613a2f6bSGordon Ross zoneid_t vc_zoneid; 165*613a2f6bSGordon Ross uid_t vc_owner; /* Unix owner */ 166*613a2f6bSGordon Ross int vc_genid; /* "generation" ID */ 167*613a2f6bSGordon Ross 168*613a2f6bSGordon Ross int vc_mackeylen; /* length of MAC key */ 169*613a2f6bSGordon Ross uint8_t *vc_mackey; /* MAC key */ 170*613a2f6bSGordon Ross 171*613a2f6bSGordon Ross ksema_t vc_sendlock; 172*613a2f6bSGordon Ross struct smb_tran_desc *vc_tdesc; /* transport ops. vector */ 173*613a2f6bSGordon Ross void *vc_tdata; /* transport control block */ 174*613a2f6bSGordon Ross 175*613a2f6bSGordon Ross kcondvar_t iod_idle; /* IOD thread idle CV */ 176*613a2f6bSGordon Ross krwlock_t iod_rqlock; /* iod_rqlist */ 1774bff34e3Sthurlow struct smb_rqhead iod_rqlist; /* list of outstanding reqs */ 1784bff34e3Sthurlow struct _kthread *iod_thr; /* the IOD (reader) thread */ 1794bff34e3Sthurlow int iod_flags; /* see SMBIOD_* below */ 1804bff34e3Sthurlow int iod_newrq; /* send needed (iod_rqlock) */ 1814bff34e3Sthurlow int iod_muxfull; /* maxmux limit reached */ 182*613a2f6bSGordon Ross 183*613a2f6bSGordon Ross /* This is copied in/out when IOD enters/returns */ 184*613a2f6bSGordon Ross smbioc_ssn_work_t vc_work; 185*613a2f6bSGordon Ross 186*613a2f6bSGordon Ross /* session identity, etc. */ 187*613a2f6bSGordon Ross smbioc_ossn_t vc_ssn; 1884bff34e3Sthurlow } smb_vc_t; 1894bff34e3Sthurlow 1904bff34e3Sthurlow #define vc_lock vc_co.co_lock 1914bff34e3Sthurlow #define vc_flags vc_co.co_flags 192*613a2f6bSGordon Ross 193*613a2f6bSGordon Ross /* defines for members in vc_ssn */ 194*613a2f6bSGordon Ross #define vc_owner vc_ssn.ssn_owner 195*613a2f6bSGordon Ross #define vc_srvname vc_ssn.ssn_srvname 196*613a2f6bSGordon Ross #define vc_srvaddr vc_ssn.ssn_id.id_srvaddr 197*613a2f6bSGordon Ross #define vc_domain vc_ssn.ssn_id.id_domain 198*613a2f6bSGordon Ross #define vc_username vc_ssn.ssn_id.id_user 199*613a2f6bSGordon Ross #define vc_vopt vc_ssn.ssn_vopt 200*613a2f6bSGordon Ross 201*613a2f6bSGordon Ross /* defines for members in vc_work */ 202*613a2f6bSGordon Ross #define vc_sopt vc_work.wk_sopt 203*613a2f6bSGordon Ross #define vc_maxmux vc_work.wk_sopt.sv_maxmux 204*613a2f6bSGordon Ross #define vc_tran_fd vc_work.wk_iods.is_tran_fd 205*613a2f6bSGordon Ross #define vc_hflags vc_work.wk_iods.is_hflags 206*613a2f6bSGordon Ross #define vc_hflags2 vc_work.wk_iods.is_hflags2 207*613a2f6bSGordon Ross #define vc_smbuid vc_work.wk_iods.is_smbuid 208*613a2f6bSGordon Ross #define vc_next_mid vc_work.wk_iods.is_next_mid 209*613a2f6bSGordon Ross #define vc_txmax vc_work.wk_iods.is_txmax 210*613a2f6bSGordon Ross #define vc_rwmax vc_work.wk_iods.is_rwmax 211*613a2f6bSGordon Ross #define vc_rxmax vc_work.wk_iods.is_rxmax 212*613a2f6bSGordon Ross #define vc_wxmax vc_work.wk_iods.is_wxmax 213*613a2f6bSGordon Ross #define vc_ssn_key vc_work.wk_iods.is_ssn_key 214*613a2f6bSGordon Ross #define vc_next_seq vc_work.wk_iods.is_next_seq 215*613a2f6bSGordon Ross #define vc_u_mackey vc_work.wk_iods.is_u_mackey 216*613a2f6bSGordon Ross #define vc_u_maclen vc_work.wk_iods.is_u_maclen 2174bff34e3Sthurlow 2184bff34e3Sthurlow #define SMB_VC_LOCK(vcp) mutex_enter(&(vcp)->vc_lock) 2194bff34e3Sthurlow #define SMB_VC_UNLOCK(vcp) mutex_exit(&(vcp)->vc_lock) 2204bff34e3Sthurlow 2214bff34e3Sthurlow #define SMB_UNICODE_STRINGS(vcp) ((vcp)->vc_hflags2 & SMB_FLAGS2_UNICODE) 2224bff34e3Sthurlow 2234bff34e3Sthurlow /* Bits in iod_flags */ 2244bff34e3Sthurlow #define SMBIOD_RUNNING 0x0001 2254bff34e3Sthurlow #define SMBIOD_SHUTDOWN 0x0002 2264bff34e3Sthurlow 2274bff34e3Sthurlow /* 2284bff34e3Sthurlow * smb_share structure describes connection to the given SMB share (tree). 2294bff34e3Sthurlow * Connection to share is always built on top of the VC. 2304bff34e3Sthurlow */ 2314bff34e3Sthurlow 2324bff34e3Sthurlow typedef struct smb_share { 233*613a2f6bSGordon Ross struct smb_connobj ss_co; /* keep first! See CPTOSS */ 2344bff34e3Sthurlow kcondvar_t ss_conn_done; /* wait for reconnect */ 2354bff34e3Sthurlow int ss_conn_waiters; 2364bff34e3Sthurlow int ss_vcgenid; /* check VC generation ID */ 237*613a2f6bSGordon Ross uint16_t ss_tid; /* TID */ 238*613a2f6bSGordon Ross uint16_t ss_options; /* option support bits */ 239*613a2f6bSGordon Ross smbioc_oshare_t ss_ioc; 2404bff34e3Sthurlow } smb_share_t; 2414bff34e3Sthurlow 2424bff34e3Sthurlow #define ss_lock ss_co.co_lock 2434bff34e3Sthurlow #define ss_flags ss_co.co_flags 2444bff34e3Sthurlow 245*613a2f6bSGordon Ross #define ss_name ss_ioc.sh_name 246*613a2f6bSGordon Ross #define ss_pwlen ss_ioc.sh_pwlen 247*613a2f6bSGordon Ross #define ss_pass ss_ioc.sh_pass 248*613a2f6bSGordon Ross #define ss_type_req ss_ioc.sh_type_req 249*613a2f6bSGordon Ross #define ss_type_ret ss_ioc.sh_type_ret 250*613a2f6bSGordon Ross 2514bff34e3Sthurlow #define SMB_SS_LOCK(ssp) mutex_enter(&(ssp)->ss_lock) 2524bff34e3Sthurlow #define SMB_SS_UNLOCK(ssp) mutex_exit(&(ssp)->ss_lock) 2534bff34e3Sthurlow 254*613a2f6bSGordon Ross #define CPTOVC(cp) ((struct smb_vc *)((void *)(cp))) 2554bff34e3Sthurlow #define VCTOCP(vcp) (&(vcp)->vc_co) 2564bff34e3Sthurlow 257*613a2f6bSGordon Ross #define CPTOSS(cp) ((struct smb_share *)((void *)(cp))) 2584bff34e3Sthurlow #define SSTOVC(ssp) CPTOVC(((ssp)->ss_co.co_parent)) 2594bff34e3Sthurlow #define SSTOCP(ssp) (&(ssp)->ss_co) 2604bff34e3Sthurlow 2614bff34e3Sthurlow /* 2624bff34e3Sthurlow * Call-back operations vector, so the netsmb module 2634bff34e3Sthurlow * can notify smbfs about events affecting mounts. 2644bff34e3Sthurlow * Installed in netsmb after smbfs loads. 2654bff34e3Sthurlow */ 2664bff34e3Sthurlow typedef struct smb_fscb { 267*613a2f6bSGordon Ross /* Called when the VC has disconnected. */ 268*613a2f6bSGordon Ross void (*fscb_disconn)(smb_share_t *); 269*613a2f6bSGordon Ross /* Called when the VC has reconnected. */ 270*613a2f6bSGordon Ross void (*fscb_connect)(smb_share_t *); 271*613a2f6bSGordon Ross /* Called when the server becomes unresponsive. */ 2724bff34e3Sthurlow void (*fscb_down)(smb_share_t *); 273*613a2f6bSGordon Ross /* Called when the server is responding again. */ 2744bff34e3Sthurlow void (*fscb_up)(smb_share_t *); 2754bff34e3Sthurlow } smb_fscb_t; 2764bff34e3Sthurlow /* Install the above vector, or pass NULL to clear it. */ 2774bff34e3Sthurlow int smb_fscb_set(smb_fscb_t *); 278*613a2f6bSGordon Ross 279*613a2f6bSGordon Ross /* 280*613a2f6bSGordon Ross * The driver per open instance object. 281*613a2f6bSGordon Ross * Mostly used in: smb_dev.c, smb_usr.c 282*613a2f6bSGordon Ross */ 283*613a2f6bSGordon Ross typedef struct smb_dev { 284*613a2f6bSGordon Ross int sd_opened; /* Opened or not */ 285*613a2f6bSGordon Ross int sd_level; /* Future use */ 286*613a2f6bSGordon Ross struct smb_vc *sd_vc; /* Reference to VC */ 287*613a2f6bSGordon Ross struct smb_share *sd_share; /* Reference to share if any */ 288*613a2f6bSGordon Ross int sd_vcgenid; /* Generation of share or VC */ 289*613a2f6bSGordon Ross int sd_poll; /* Future use */ 290*613a2f6bSGordon Ross int sd_seq; /* Kind of minor number/instance no */ 291*613a2f6bSGordon Ross int sd_flags; /* State of connection */ 292*613a2f6bSGordon Ross #define NSMBFL_OPEN 0x0001 293*613a2f6bSGordon Ross #define NSMBFL_IOD 0x0002 294*613a2f6bSGordon Ross zoneid_t zoneid; /* Zone id */ 295*613a2f6bSGordon Ross dev_info_t *smb_dip; /* ptr to dev_info node */ 296*613a2f6bSGordon Ross void *sd_devfs; /* Dont know how to use this. but */ 297*613a2f6bSGordon Ross struct cred *smb_cred; /* per dev credentails. Future use */ 298*613a2f6bSGordon Ross } smb_dev_t; 299*613a2f6bSGordon Ross 300*613a2f6bSGordon Ross extern const uint32_t nsmb_version; 301*613a2f6bSGordon Ross 302*613a2f6bSGordon Ross /* 303*613a2f6bSGordon Ross * smb_dev.c 304*613a2f6bSGordon Ross */ 305*613a2f6bSGordon Ross int smb_dev2share(int fd, struct smb_share **sspp); 306*613a2f6bSGordon Ross 307*613a2f6bSGordon Ross 308*613a2f6bSGordon Ross /* 309*613a2f6bSGordon Ross * smb_usr.c 310*613a2f6bSGordon Ross */ 311*613a2f6bSGordon Ross int smb_usr_get_flags2(smb_dev_t *sdp, intptr_t arg, int flags); 312*613a2f6bSGordon Ross int smb_usr_get_ssnkey(smb_dev_t *sdp, intptr_t arg, int flags); 313*613a2f6bSGordon Ross 314*613a2f6bSGordon Ross int smb_usr_simplerq(smb_dev_t *sdp, intptr_t arg, int flags, cred_t *cr); 315*613a2f6bSGordon Ross int smb_usr_t2request(smb_dev_t *sdp, intptr_t arg, int flags, cred_t *cr); 316*613a2f6bSGordon Ross int smb_usr_rw(smb_dev_t *sdp, int cmd, intptr_t arg, int flags, cred_t *cr); 317*613a2f6bSGordon Ross 318*613a2f6bSGordon Ross int smb_usr_get_ssn(smb_dev_t *, int, intptr_t, int, cred_t *); 319*613a2f6bSGordon Ross int smb_usr_drop_ssn(smb_dev_t *sdp, int cmd); 320*613a2f6bSGordon Ross 321*613a2f6bSGordon Ross int smb_usr_get_tree(smb_dev_t *, int, intptr_t, int, cred_t *); 322*613a2f6bSGordon Ross int smb_usr_drop_tree(smb_dev_t *sdp, int cmd); 323*613a2f6bSGordon Ross 324*613a2f6bSGordon Ross int smb_usr_iod_work(smb_dev_t *sdp, intptr_t arg, int flags, cred_t *cr); 325*613a2f6bSGordon Ross int smb_usr_iod_ioctl(smb_dev_t *sdp, int cmd, intptr_t arg, int flags); 326*613a2f6bSGordon Ross 3274bff34e3Sthurlow 3284bff34e3Sthurlow /* 3294bff34e3Sthurlow * IOD functions 3304bff34e3Sthurlow */ 331*613a2f6bSGordon Ross int smb_iod_create(smb_vc_t *vcp); 332*613a2f6bSGordon Ross int smb_iod_destroy(smb_vc_t *vcp); 333*613a2f6bSGordon Ross int smb_iod_connect(smb_vc_t *vcp); 334*613a2f6bSGordon Ross int smb_iod_disconnect(smb_vc_t *vcp); 3354bff34e3Sthurlow int smb_iod_addrq(struct smb_rq *rqp); 3364bff34e3Sthurlow int smb_iod_multirq(struct smb_rq *rqp); 3374bff34e3Sthurlow int smb_iod_waitrq(struct smb_rq *rqp); 3384bff34e3Sthurlow int smb_iod_removerq(struct smb_rq *rqp); 339*613a2f6bSGordon Ross void smb_iod_shutdown_share(smb_share_t *ssp); 340*613a2f6bSGordon Ross 341*613a2f6bSGordon Ross void smb_iod_sendall(smb_vc_t *); 342*613a2f6bSGordon Ross int smb_iod_recvall(smb_vc_t *); 343*613a2f6bSGordon Ross 344*613a2f6bSGordon Ross int smb_iod_vc_work(smb_vc_t *, cred_t *); 345*613a2f6bSGordon Ross int smb_iod_vc_idle(smb_vc_t *); 346*613a2f6bSGordon Ross int smb_iod_vc_rcfail(smb_vc_t *); 347*613a2f6bSGordon Ross int smb_iod_reconnect(smb_vc_t *); 3484bff34e3Sthurlow 3494bff34e3Sthurlow /* 3504bff34e3Sthurlow * Session level functions 3514bff34e3Sthurlow */ 3524bff34e3Sthurlow int smb_sm_init(void); 3534bff34e3Sthurlow int smb_sm_idle(void); 3544bff34e3Sthurlow void smb_sm_done(void); 3554bff34e3Sthurlow 3564bff34e3Sthurlow /* 3574bff34e3Sthurlow * VC level functions 3584bff34e3Sthurlow */ 359*613a2f6bSGordon Ross void smb_vc_hold(smb_vc_t *vcp); 360*613a2f6bSGordon Ross void smb_vc_rele(smb_vc_t *vcp); 361*613a2f6bSGordon Ross void smb_vc_kill(smb_vc_t *vcp); 362*613a2f6bSGordon Ross 363*613a2f6bSGordon Ross int smb_vc_findcreate(smbioc_ossn_t *, smb_cred_t *, smb_vc_t **); 364*613a2f6bSGordon Ross int smb_vc_create(smbioc_ossn_t *ossn, smb_cred_t *scred, smb_vc_t **vcpp); 365*613a2f6bSGordon Ross 366*613a2f6bSGordon Ross const char *smb_vc_getpass(smb_vc_t *vcp); 367*613a2f6bSGordon Ross uint16_t smb_vc_nextmid(smb_vc_t *vcp); 368*613a2f6bSGordon Ross void *smb_vc_getipaddr(smb_vc_t *vcp, int *ipvers); 369*613a2f6bSGordon Ross 370*613a2f6bSGordon Ross typedef void (*walk_share_func_t)(smb_share_t *); 371*613a2f6bSGordon Ross void smb_vc_walkshares(struct smb_vc *, walk_share_func_t); 3724bff34e3Sthurlow 3734bff34e3Sthurlow /* 3744bff34e3Sthurlow * share level functions 3754bff34e3Sthurlow */ 3764bff34e3Sthurlow 377*613a2f6bSGordon Ross int smb_share_findcreate(smbioc_tcon_t *, smb_vc_t *, 378*613a2f6bSGordon Ross smb_share_t **, smb_cred_t *); 379*613a2f6bSGordon Ross 380*613a2f6bSGordon Ross void smb_share_hold(smb_share_t *ssp); 381*613a2f6bSGordon Ross void smb_share_rele(smb_share_t *ssp); 382*613a2f6bSGordon Ross void smb_share_kill(smb_share_t *ssp); 3834bff34e3Sthurlow 384*613a2f6bSGordon Ross void smb_share_invalidate(smb_share_t *ssp); 385*613a2f6bSGordon Ross int smb_share_tcon(smb_share_t *, smb_cred_t *); 3864bff34e3Sthurlow 3874bff34e3Sthurlow /* 3884bff34e3Sthurlow * SMB protocol level functions 3894bff34e3Sthurlow */ 390*613a2f6bSGordon Ross int smb_smb_echo(smb_vc_t *vcp, smb_cred_t *scred, int timo); 391*613a2f6bSGordon Ross int smb_smb_treeconnect(smb_share_t *ssp, smb_cred_t *scred); 392*613a2f6bSGordon Ross int smb_smb_treedisconnect(smb_share_t *ssp, smb_cred_t *scred); 393*613a2f6bSGordon Ross 394*613a2f6bSGordon Ross int smb_rwuio(smb_share_t *ssp, uint16_t fid, uio_rw_t rw, 395*613a2f6bSGordon Ross uio_t *uiop, smb_cred_t *scred, int timo); 3964bff34e3Sthurlow 3974bff34e3Sthurlow #endif /* _SMB_CONN_H */ 398