a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * CDDL HEADER START
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * The contents of this file are subject to the terms of the
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Common Development and Distribution License (the "License").
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * You may not use this file except in compliance with the License.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * See the License for the specific language governing permissions
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * and limitations under the License.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * When distributing Covered Code, include this CDDL HEADER in each
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * If applicable, add the following below this CDDL HEADER, with the
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * fields enclosed by brackets "[]" replaced with your own identifying
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * information: Portions Copyright [yyyy] [name of copyright owner]
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * CDDL HEADER END
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Use is subject to license terms.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Dispatch function for SMB2_IOCTL
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * [MS-SMB2] 3.3.5.15
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross uint32_t (*te_func)(smb_request_t *, smb_fsctl_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross/* te_flags */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * SMB2 Ioctl request
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross /* reserved .. */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross /* reserved2 4. */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross cmn_err(CE_NOTE, "smb2_ioctl: unknown code 0x%x",
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Some requests are only valid on IPC$
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Note: some ioctl commands don't need a FID.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Note: some ioctls require a "disk" fid.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * If there's an input buffer, setup a shadow.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross sr->smb2_cmd_hdr + InputOffset, fsctl.InputCount);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * If output is possible, setup the output mbuf_chain
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Dispatch to the handler for CtlCode
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross if (NT_SC_SEVERITY(status) == NT_STATUS_SEVERITY_ERROR)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross /* Warnings like NT_STATUS_BUFFER_OVERFLOW are OK. */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross OutputOffset = (fsctl.OutputCount) ? InputOffset : 0;
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * SMB2 Ioctl reply
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross /* reserved .. */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross /* reserved2 4. */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross/* ARGSUSED */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_fsctl_notsup(smb_request_t *sr, smb_fsctl_t *fsctl)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FILE_DEVICE_DFS (6)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross ITF_IPC_ONLY | ITF_NO_FID, smb_dfs_get_referrals },
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross ITF_IPC_ONLY | ITF_NO_FID, smb_dfs_get_referrals },
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FILE_DEVICE_FILE_SYSTEM (9)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross { FSCTL_SET_REPARSE_POINT, 0, smb2_fsctl_notsup },
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross { FSCTL_CREATE_OR_GET_OBJECT_ID, 0, smb2_fsctl_notsup },
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross { FSCTL_FILE_LEVEL_TRIM, 0, smb2_fsctl_notsup },
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FILE_DEVICE_NAMED_PIPE (17)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FILE_DEVICE_NETWORK_FILE_SYSTEM (20)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross { FSCTL_SRV_REQUEST_RESUME_KEY, 0, smb2_fsctl_notsup },
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross { FSCTL_SRV_COPYCHUNK_WRITE, 0, smb2_fsctl_notsup },
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * End marker