root/usr/src/uts/common/sys/attr.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
 */

#ifndef _SYS_ATTR_H
#define _SYS_ATTR_H

#ifdef  __cplusplus
extern "C" {
#endif

#ifdef _KERNEL
#include <sys/vnode.h>
#include <sys/vfs.h>
#include <nfs/nfs.h>
#endif
#include <sys/nvpair.h>

/* Attribute names for nvlist's */
#define A_CRTIME                "crtime"
#define A_HIDDEN                "hidden"
#define A_SYSTEM                "system"
#define A_READONLY              "readonly"
#define A_ARCHIVE               "archive"
#define A_NOUNLINK              "nounlink"
#define A_IMMUTABLE             "immutable"
#define A_APPENDONLY            "appendonly"
#define A_NODUMP                "nodump"
#define A_OPAQUE                "opaque"
#define A_AV_QUARANTINED        "av_quarantined"
#define A_AV_MODIFIED           "av_modified"
#define A_FSID                  "fsid"
#define A_AV_SCANSTAMP          "av_scanstamp"
#define A_OWNERSID              "ownersid"
#define A_GROUPSID              "groupsid"
#define A_REPARSE_POINT         "reparse"
#define A_GEN                   "generation"
#define A_OFFLINE               "offline"
#define A_SPARSE                "sparse"

/* Attribute option for utilities */
#define O_HIDDEN         "H"
#define O_SYSTEM         "S"
#define O_READONLY       "R"
#define O_ARCHIVE        "A"
#define O_NOUNLINK       "u"
#define O_IMMUTABLE      "i"
#define O_APPENDONLY     "a"
#define O_NODUMP         "d"
#define O_AV_QUARANTINED "q"
#define O_AV_MODIFIED    "m"
#define O_REPARSE_POINT  "r"
#define O_OFFLINE        "O"
#define O_SPARSE         "s"
#define O_NONE           ""

/* ownersid and groupsid are composed of two nvpairs */
#define SID_DOMAIN              "domain"
#define SID_RID                 "rid"

typedef enum {
        F_ATTR_INVAL = -1,
        F_ARCHIVE,
        F_HIDDEN,
        F_READONLY,
        F_SYSTEM,
        F_APPENDONLY,
        F_NODUMP,
        F_IMMUTABLE,
        F_AV_MODIFIED,
        F_OPAQUE,
        F_AV_SCANSTAMP,
        F_AV_QUARANTINED,
        F_NOUNLINK,
        F_CRTIME,
        F_OWNERSID,
        F_GROUPSID,
        F_FSID,
        F_REPARSE,
        F_GEN,
        F_OFFLINE,
        F_SPARSE,
        F_ATTR_ALL
} f_attr_t;

#define VIEW_READONLY   "SUNWattr_ro"
#define VIEW_READWRITE  "SUNWattr_rw"

/*
 * These are the supported views into the virtual sysattr directory.
 * Additional views should be added before XATTR_VIEW_LAST.
 */
typedef enum {
        XATTR_VIEW_INVALID = -1,
        XATTR_VIEW_READONLY,
        XATTR_VIEW_READWRITE,
        XATTR_VIEW_LAST
} xattr_view_t;

typedef struct {
        char            *x_name;
        char            *x_option;
        xattr_view_t    x_xattr_view;
        data_type_t     x_data_type;
} xattr_entry_t;

#ifdef _KERNEL
#define XATTR_MAXFIDSZ  NFS_FHMAXDATA

typedef struct {
        uint16_t        len;
        char            parent_fid[XATTR_MAXFIDSZ];
        uint16_t        parent_len;
        uint16_t        dir_offset;
} xattr_fid_t;

#define XATTR_FIDSZ (sizeof (xattr_fid_t) - sizeof (uint16_t))

int xattr_dir_vget(vfs_t *, vnode_t **, fid_t *);
int xattr_sysattr_casechk(char *name);
#endif

int attr_count(void);
const char *attr_to_name(f_attr_t);
const char *attr_to_option(f_attr_t);
f_attr_t name_to_attr(const char *name);
f_attr_t option_to_attr(const char *option);
xattr_view_t attr_to_xattr_view(f_attr_t attr);
data_type_t attr_to_data_type(f_attr_t attr);

#ifdef  __cplusplus
}
#endif

#endif  /* _SYS_ATTR_H */