111963SAfshin.Ardakani@Sun.COM /* 211963SAfshin.Ardakani@Sun.COM * CDDL HEADER START 311963SAfshin.Ardakani@Sun.COM * 411963SAfshin.Ardakani@Sun.COM * The contents of this file are subject to the terms of the 511963SAfshin.Ardakani@Sun.COM * Common Development and Distribution License (the "License"). 611963SAfshin.Ardakani@Sun.COM * You may not use this file except in compliance with the License. 711963SAfshin.Ardakani@Sun.COM * 811963SAfshin.Ardakani@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 911963SAfshin.Ardakani@Sun.COM * or http://www.opensolaris.org/os/licensing. 1011963SAfshin.Ardakani@Sun.COM * See the License for the specific language governing permissions 1111963SAfshin.Ardakani@Sun.COM * and limitations under the License. 1211963SAfshin.Ardakani@Sun.COM * 1311963SAfshin.Ardakani@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 1411963SAfshin.Ardakani@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1511963SAfshin.Ardakani@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 1611963SAfshin.Ardakani@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 1711963SAfshin.Ardakani@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 1811963SAfshin.Ardakani@Sun.COM * 1911963SAfshin.Ardakani@Sun.COM * CDDL HEADER END 2011963SAfshin.Ardakani@Sun.COM */ 2111963SAfshin.Ardakani@Sun.COM /* 22*12890SJoyce.McIntosh@Sun.COM * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 2311963SAfshin.Ardakani@Sun.COM */ 2411963SAfshin.Ardakani@Sun.COM 2511963SAfshin.Ardakani@Sun.COM #ifndef _SMB_DFS_H 2611963SAfshin.Ardakani@Sun.COM #define _SMB_DFS_H 2711963SAfshin.Ardakani@Sun.COM 2811963SAfshin.Ardakani@Sun.COM #include <sys/param.h> 2911963SAfshin.Ardakani@Sun.COM #include <sys/uuid.h> 3011963SAfshin.Ardakani@Sun.COM 3111963SAfshin.Ardakani@Sun.COM #ifdef __cplusplus 3211963SAfshin.Ardakani@Sun.COM extern "C" { 3311963SAfshin.Ardakani@Sun.COM #endif 3411963SAfshin.Ardakani@Sun.COM 3511963SAfshin.Ardakani@Sun.COM /* 3611963SAfshin.Ardakani@Sun.COM * DFS root or link states 3711963SAfshin.Ardakani@Sun.COM * 3811963SAfshin.Ardakani@Sun.COM * DFS_VOLUME_STATE_OK 3911963SAfshin.Ardakani@Sun.COM * The specified DFS root or DFS link is in the normal state. 4011963SAfshin.Ardakani@Sun.COM * 4111963SAfshin.Ardakani@Sun.COM * DFS_VOLUME_STATE_INCONSISTENT 4211963SAfshin.Ardakani@Sun.COM * The internal DFS database is inconsistent with the specified DFS root or 4311963SAfshin.Ardakani@Sun.COM * DFS link. Attempts to repair the inconsistency have failed. This is a 4411963SAfshin.Ardakani@Sun.COM * read-only state and MUST NOT be set by clients. 4511963SAfshin.Ardakani@Sun.COM * 4611963SAfshin.Ardakani@Sun.COM * DFS_VOLUME_STATE_OFFLINE 4711963SAfshin.Ardakani@Sun.COM * The specified DFS root or DFS link is offline or unavailable. 4811963SAfshin.Ardakani@Sun.COM * 4911963SAfshin.Ardakani@Sun.COM * DFS_VOLUME_STATE_ONLINE 5011963SAfshin.Ardakani@Sun.COM * The specified DFS root or DFS link is available. 5111963SAfshin.Ardakani@Sun.COM * 5211963SAfshin.Ardakani@Sun.COM * DFS_VOLUME_FLAVOR_STANDALONE Standalone namespace 5311963SAfshin.Ardakani@Sun.COM * DFS_VOLUME_FLAVOR_AD_BLOB Domain-based namespace 5411963SAfshin.Ardakani@Sun.COM */ 5511963SAfshin.Ardakani@Sun.COM #define DFS_VOLUME_STATE_OK 0x00000001 5611963SAfshin.Ardakani@Sun.COM #define DFS_VOLUME_STATE_INCONSISTENT 0x00000002 5711963SAfshin.Ardakani@Sun.COM #define DFS_VOLUME_STATE_OFFLINE 0x00000003 5811963SAfshin.Ardakani@Sun.COM #define DFS_VOLUME_STATE_ONLINE 0x00000004 5911963SAfshin.Ardakani@Sun.COM #define DFS_VOLUME_STATE_RESYNCHRONIZE 0x00000010 6011963SAfshin.Ardakani@Sun.COM #define DFS_VOLUME_STATE_STANDBY 0x00000020 6111963SAfshin.Ardakani@Sun.COM #define DFS_VOLUME_STATE_FORCE_SYNC 0x00000040 6211963SAfshin.Ardakani@Sun.COM 6311963SAfshin.Ardakani@Sun.COM #define DFS_VOLUME_FLAVOR_STANDALONE 0x00000100 6411963SAfshin.Ardakani@Sun.COM #define DFS_VOLUME_FLAVOR_AD_BLOB 0x00000200 6511963SAfshin.Ardakani@Sun.COM 6611963SAfshin.Ardakani@Sun.COM /* 6711963SAfshin.Ardakani@Sun.COM * The following bitmasks is only relevant when reading the volume state, not 6811963SAfshin.Ardakani@Sun.COM * for setting it. 6911963SAfshin.Ardakani@Sun.COM */ 7011963SAfshin.Ardakani@Sun.COM #define DFS_VOLUME_STATES 0x0000000F 7111963SAfshin.Ardakani@Sun.COM #define DFS_VOLUME_FLAVORS 0x00000300 7211963SAfshin.Ardakani@Sun.COM 7311963SAfshin.Ardakani@Sun.COM /* 7411963SAfshin.Ardakani@Sun.COM * States specified by this mask are used to perform a server operation and are 7511963SAfshin.Ardakani@Sun.COM * not persisted to the DFS metadata 7611963SAfshin.Ardakani@Sun.COM */ 7711963SAfshin.Ardakani@Sun.COM #define DFS_VOLUME_STATES_SRV_OPS 0x00000070 7811963SAfshin.Ardakani@Sun.COM 7911963SAfshin.Ardakani@Sun.COM /* 8011963SAfshin.Ardakani@Sun.COM * DFS Storage state 8111963SAfshin.Ardakani@Sun.COM */ 8211963SAfshin.Ardakani@Sun.COM #define DFS_STORAGE_STATE_OFFLINE 1 8311963SAfshin.Ardakani@Sun.COM #define DFS_STORAGE_STATE_ONLINE 2 8411963SAfshin.Ardakani@Sun.COM 8511963SAfshin.Ardakani@Sun.COM /* 8611963SAfshin.Ardakani@Sun.COM * Flags for NetrDfsAdd operation: 8711963SAfshin.Ardakani@Sun.COM * 8811963SAfshin.Ardakani@Sun.COM * 0x00000000 This creates a new link or adds a new target to an 8911963SAfshin.Ardakani@Sun.COM * existing link. 9011963SAfshin.Ardakani@Sun.COM * 9111963SAfshin.Ardakani@Sun.COM * DFS_ADD_VOLUME This creates a new link in the DFS namespace if one does 9211963SAfshin.Ardakani@Sun.COM * not already exist or fails if a link already exists. 9311963SAfshin.Ardakani@Sun.COM * 9411963SAfshin.Ardakani@Sun.COM * DFS_RESTORE_VOLUME This adds a target without verifying its existence. 9511963SAfshin.Ardakani@Sun.COM */ 9611963SAfshin.Ardakani@Sun.COM #define DFS_CREATE_VOLUME 0x00000000 9711963SAfshin.Ardakani@Sun.COM #define DFS_ADD_VOLUME 0x00000001 9811963SAfshin.Ardakani@Sun.COM #define DFS_RESTORE_VOLUME 0x00000002 9911963SAfshin.Ardakani@Sun.COM 10011963SAfshin.Ardakani@Sun.COM #define DFS_MOVE_FLAG_REPLACE_IF_EXISTS 1 10111963SAfshin.Ardakani@Sun.COM 10211963SAfshin.Ardakani@Sun.COM typedef enum { 10311963SAfshin.Ardakani@Sun.COM DfsInvalidPriorityClass = -1, 10411963SAfshin.Ardakani@Sun.COM DfsSiteCostNormalPriorityClass = 0, 10511963SAfshin.Ardakani@Sun.COM DfsGlobalHighPriorityClass = 1, 10611963SAfshin.Ardakani@Sun.COM DfsSiteCostHighPriorityClass = 2, 10711963SAfshin.Ardakani@Sun.COM DfsSiteCostLowPriorityClass = 3, 10811963SAfshin.Ardakani@Sun.COM DfsGlobalLowPriorityClass = 4 10911963SAfshin.Ardakani@Sun.COM } dfs_target_pclass_t; 11011963SAfshin.Ardakani@Sun.COM 111*12890SJoyce.McIntosh@Sun.COM #define DFS_PRIORITY_RANK_MAX 0x001F 112*12890SJoyce.McIntosh@Sun.COM 11311963SAfshin.Ardakani@Sun.COM #define DFS_PROPERTY_FLAG_INSITE_REFERRALS 0x00000001 11411963SAfshin.Ardakani@Sun.COM #define DFS_PROPERTY_FLAG_ROOT_SCALABILITY 0x00000002 11511963SAfshin.Ardakani@Sun.COM #define DFS_PROPERTY_FLAG_SITE_COSTING 0x00000004 11611963SAfshin.Ardakani@Sun.COM #define DFS_PROPERTY_FLAG_TARGET_FAILBACK 0x00000008 11711963SAfshin.Ardakani@Sun.COM #define DFS_PROPERTY_FLAG_CLUSTER_ENABLED 0x00000010 11811963SAfshin.Ardakani@Sun.COM #define DFS_PROPERTY_FLAG_ABDE 0x00000020 11911963SAfshin.Ardakani@Sun.COM 12011963SAfshin.Ardakani@Sun.COM #define DFS_NAME_MAX MAXNAMELEN 12111963SAfshin.Ardakani@Sun.COM #define DFS_PATH_MAX MAXPATHLEN 12211963SAfshin.Ardakani@Sun.COM #define DFS_COMMENT_MAX 256 12311963SAfshin.Ardakani@Sun.COM #define DFS_SRVNAME_MAX MAXNAMELEN 12411963SAfshin.Ardakani@Sun.COM 12511963SAfshin.Ardakani@Sun.COM #define DFS_REPARSE_SVCTYPE "SMB-DFS" 12611963SAfshin.Ardakani@Sun.COM 12711963SAfshin.Ardakani@Sun.COM #define DFS_OBJECT_LINK 1 12811963SAfshin.Ardakani@Sun.COM #define DFS_OBJECT_ROOT 2 12911963SAfshin.Ardakani@Sun.COM #define DFS_OBJECT_ANY 3 13011963SAfshin.Ardakani@Sun.COM 13111963SAfshin.Ardakani@Sun.COM /* 13211963SAfshin.Ardakani@Sun.COM * Referral Request Types 13311963SAfshin.Ardakani@Sun.COM */ 13411963SAfshin.Ardakani@Sun.COM typedef enum { 13511963SAfshin.Ardakani@Sun.COM DFS_REFERRAL_INVALID = 0, 13611963SAfshin.Ardakani@Sun.COM DFS_REFERRAL_DOMAIN, 13711963SAfshin.Ardakani@Sun.COM DFS_REFERRAL_DC, 13811963SAfshin.Ardakani@Sun.COM DFS_REFERRAL_SYSVOL, 13911963SAfshin.Ardakani@Sun.COM DFS_REFERRAL_ROOT, 14011963SAfshin.Ardakani@Sun.COM DFS_REFERRAL_LINK 14111963SAfshin.Ardakani@Sun.COM } dfs_reftype_t; 14211963SAfshin.Ardakani@Sun.COM 14311963SAfshin.Ardakani@Sun.COM typedef struct dfs_target_priority { 14411963SAfshin.Ardakani@Sun.COM dfs_target_pclass_t p_class; 14511963SAfshin.Ardakani@Sun.COM uint16_t p_rank; 14611963SAfshin.Ardakani@Sun.COM } dfs_target_priority_t; 14711963SAfshin.Ardakani@Sun.COM 14811963SAfshin.Ardakani@Sun.COM /* 14911963SAfshin.Ardakani@Sun.COM * t_server a null-terminated Unicode string that specifies the DFS link 15011963SAfshin.Ardakani@Sun.COM * target host name. 15111963SAfshin.Ardakani@Sun.COM * 15211963SAfshin.Ardakani@Sun.COM * t_share a null-terminated Unicode DFS link target share name string. 15311963SAfshin.Ardakani@Sun.COM * This may also be a share name with a path relative to the share, 15411963SAfshin.Ardakani@Sun.COM * for example, "share1\mydir1\mydir2". When specified this way, 15511963SAfshin.Ardakani@Sun.COM * each pathname component MUST be a directory 15611963SAfshin.Ardakani@Sun.COM * 15711963SAfshin.Ardakani@Sun.COM * t_state valid states are online/offline (see DFS_STORAGE_STATE_XXX in 15811963SAfshin.Ardakani@Sun.COM * lmdfs.h) 15911963SAfshin.Ardakani@Sun.COM * 16011963SAfshin.Ardakani@Sun.COM * t_priority priority class and rank 16111963SAfshin.Ardakani@Sun.COM */ 16211963SAfshin.Ardakani@Sun.COM typedef struct dfs_target { 16311963SAfshin.Ardakani@Sun.COM char t_server[DFS_SRVNAME_MAX]; 16411963SAfshin.Ardakani@Sun.COM char t_share[DFS_NAME_MAX]; 16511963SAfshin.Ardakani@Sun.COM uint32_t t_state; 16611963SAfshin.Ardakani@Sun.COM dfs_target_priority_t t_priority; 16711963SAfshin.Ardakani@Sun.COM } dfs_target_t; 16811963SAfshin.Ardakani@Sun.COM 16911963SAfshin.Ardakani@Sun.COM typedef struct dfs_info { 17011963SAfshin.Ardakani@Sun.COM char i_uncpath[DFS_PATH_MAX]; 17111963SAfshin.Ardakani@Sun.COM char i_comment[DFS_COMMENT_MAX]; 17211963SAfshin.Ardakani@Sun.COM char i_guid[UUID_PRINTABLE_STRING_LENGTH]; 17311963SAfshin.Ardakani@Sun.COM uint32_t i_state; 17411963SAfshin.Ardakani@Sun.COM uint32_t i_timeout; 175*12890SJoyce.McIntosh@Sun.COM uint32_t i_propflag_mask; 17611963SAfshin.Ardakani@Sun.COM uint32_t i_propflags; 17711963SAfshin.Ardakani@Sun.COM uint32_t i_type; 17811963SAfshin.Ardakani@Sun.COM uint32_t i_ntargets; 17911963SAfshin.Ardakani@Sun.COM dfs_target_t *i_targets; 180*12890SJoyce.McIntosh@Sun.COM uint32_t i_flavor; 18111963SAfshin.Ardakani@Sun.COM } dfs_info_t; 18211963SAfshin.Ardakani@Sun.COM 18311963SAfshin.Ardakani@Sun.COM #ifdef __cplusplus 18411963SAfshin.Ardakani@Sun.COM } 18511963SAfshin.Ardakani@Sun.COM #endif 18611963SAfshin.Ardakani@Sun.COM 18711963SAfshin.Ardakani@Sun.COM 18811963SAfshin.Ardakani@Sun.COM #endif /* _SMB_DFS_H */ 189