meta_basic.x revision 1fcced4c370617db71610fecffd5451a5894ca5e
%/*
% * 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 2009 Sun Microsystems, Inc. All rights reserved.
% * Use is subject to license terms.
% */
%
%/* get timeval32 definition */
%#include <sys/types32.h>
#ifndef _KERNEL
%#ifdef _KERNEL
%#error "Compiling kernel file rpcgened without _KERNEL define."
%#endif /* _KERNEL */
#endif /* _KERNEL */
%#include <sys/dditypes.h>
#ifdef RPC_XDR
#ifndef _KERNEL
%bool_t
%xdr_uint_t(XDR *xdrs, uint_t *objp)
%{
% if (!xdr_u_int(xdrs, (u_int *)objp))
% return (FALSE);
% return (TRUE);
%}
%bool_t
%xdr_ushort_t(XDR *xdrs, ushort_t *objp)
%{
% if (!xdr_u_short(xdrs, (u_short *)objp))
% return (FALSE);
% return (TRUE);
%}
%bool_t
%xdr_dev_t(XDR *xdrs, dev_t *objp)
%{
% if (!xdr_u_int(xdrs, (u_int *)objp))
% return (FALSE);
% return (TRUE);
%}
%bool_t
%xdr_dev32_t(XDR *xdrs, dev32_t *objp)
%{
% if (!xdr_u_int(xdrs, (u_int *)objp))
% return (FALSE);
% return (TRUE);
%}
%bool_t
%xdr_md_dev64_t(XDR *xdrs, md_dev64_t *objp)
%{
% if (!xdr_u_longlong_t(xdrs, objp))
% return (FALSE);
% return (TRUE);
%}
%bool_t
%xdr_size_t(XDR *xdrs, size_t *objp)
%{
% if (!xdr_u_int(xdrs, (u_int *) objp))
% return (FALSE);
% return (TRUE);
%}
%bool_t
%xdr_daddr_t(XDR *xdrs, daddr_t *objp)
%{
% if (!xdr_int(xdrs, (int *) objp))
% return (FALSE);
% return (TRUE);
%}
%bool_t
%xdr_daddr32_t(XDR *xdrs, daddr32_t *objp)
%{
% if (!xdr_int(xdrs, (int *) objp))
% return (FALSE);
% return (TRUE);
%}
%bool_t
%xdr_diskaddr_t(XDR *xdrs, diskaddr_t *objp)
%{
% if (!xdr_u_longlong_t(xdrs, objp))
% return (FALSE);
% return (TRUE);
%}
%bool_t
%xdr_ddi_devid_t(XDR *xdrs, ddi_devid_t *objp)
%{
% /* device ids not supported for non-local sets */
% return (TRUE);
%}
%bool_t
%xdr_off_t(XDR *xdrs, off_t *objp)
%{
% if (!xdr_int(xdrs, (int *) objp))
% return (FALSE);
% return (TRUE);
%}
%bool_t
%xdr_timeval(XDR *xdrs, struct timeval *objp)
%{
% if (!xdr_int(xdrs, (int *)&objp->tv_sec))
% return (FALSE);
% if (!xdr_int(xdrs, (int *)&objp->tv_usec))
% return (FALSE);
% return (TRUE);
%}
%
%bool_t
%xdr_md_timeval32_t(XDR *xdrs, md_timeval32_t *objp)
%{
% if (!xdr_int(xdrs, &objp->tv_sec))
% return (FALSE);
% if (!xdr_int(xdrs, &objp->tv_usec))
% return (FALSE);
% return (TRUE);
%}
%
#else /* _KERNEL */
%#ifdef _LP64
%bool_t
%xdr_timeval(XDR *xdrs, struct timeval *objp)
%{
% struct timeval32 tv32;
% if (xdrs->x_op == XDR_ENCODE)
% TIMEVAL_TO_TIMEVAL32(&tv32, objp);
% if (!xdr_int(xdrs, &tv32.tv_sec))
% return (FALSE);
% if (!xdr_int(xdrs, &tv32.tv_usec))
% return (FALSE);
% if (xdrs->x_op == XDR_DECODE)
% TIMEVAL32_TO_TIMEVAL(objp, &tv32);
% return (TRUE);
%}
%#else /* !_LP64 */
%bool_t
%xdr_timeval(XDR *xdrs, struct timeval *objp)
%{
% if (!xdr_int(xdrs, (int *)&objp->tv_sec))
% return (FALSE);
% if (!xdr_int(xdrs, (int *)&objp->tv_usec))
% return (FALSE);
% return (TRUE);
%}
%#endif /* _LP64 */
#endif /* !_KERNEL */
%
%bool_t
%xdr_minor_t(XDR *xdrs, minor_t *objp)
%{
% if (!xdr_u_int(xdrs, (u_int *)objp))
% return (FALSE);
% return (TRUE);
%}
%
%bool_t
%xdr_clnt_stat(XDR *xdrs, enum clnt_stat *objp)
%{
% if (!xdr_enum(xdrs, (enum_t *)objp))
% return (FALSE);
% return (TRUE);
%}
#endif /* RPC_XDR */
#ifdef RPC_HDR
%
%/*
% * Some constants
% */
const MD_MAX_SETNAME = 50;
const MD_MAX_NODENAME = 63;
const MAX_HOST_ADDRS = 3;
const MD_MAX_MNNODENAME = 256;
const MED_MAX_HOSTS = 3;
const MED_DEF_HOSTS = 3;
const MD_MAXSIDES = 8;
const MD_LOCAL_SET = 0;
const MD_MNMAXSIDES = 128;
const MDDB_SN_LEN = 12;
const MDDB_MINOR_NAME_MAX = 32;
const MD_MAXDRVNM = 16;
const MD_MAX_BLKS_FOR_SMALL_DEVS = 2147483647;
%#define MD_MAX_BLKS_FOR_EXTVTOC 4294967295ULL
%
%/* Minimum number of metadevice database replicas needed */
const MD_MINREPLICAS = 1;
%#define MD_MAX_SETNAME_PLUS_1 (MD_MAX_SETNAME + 1)
%#define MD_MAX_NODENAME_PLUS_1 (MD_MAX_NODENAME + 1)
%#define MD_MAX_MNNODENAME_PLUS_1 (MD_MAX_MNNODENAME + 1)
%
%#define MD_SET_BAD ((set_t)~0UL)
%
%#define MD_LOCAL_NAME ""
%
%#define MD_SIDEWILD ((side_t)~0UL)
%
%#define MD_KEYWILD ((mdkey_t)0)
%#define MD_KEYBAD ((mdkey_t)~0UL)
%#define MD_UNITBAD ((unit_t)~0UL)
%#define MD_HSPID_WILD ((hsp_t)~0UL)
%/* Maximum length of a metadevice name */
%#define MD_MAX_SIDENAME_LEN (MD_MAXDRVNM + MD_MAX_SETNAME + 2)
%
%/*
% * dev_t is 64 bit now across userland and kernel. Whereever 32 bit value
% * is specifically needed, dev32_t will be used. Internally dev_t is used.
% * timeval is always 32 bit across userland and kernel.
% */
%typedef u_longlong_t md_dev64_t;
%typedef struct timeval32 md_timeval32_t;
%
%/*
% * The following definitions are not available, when operating in
% * a 32 bit environment. As we are always dealing with
% * 64 bit devices, md_dev64_t, we need those definitions also in
% * a 32 bit environment
% */
%#ifndef NBITSMAJOR64
%#define NBITSMAJOR64 32 /* # of major device bits in 64-bit Solaris */
%#endif /* NBITSMAJOR64 */
%
%#ifndef NBITSMINOR64
%#define NBITSMINOR64 32 /* # of minor device bits in 64-bit Solaris */
%#endif /* NBITSMINOR64 */
%
%#ifndef MAXMAJ64
%#define MAXMAJ64 0xfffffffful /* max major value */
%#endif /* MAXMAJ64 */
%
%#ifndef MAXMIN64
%#define MAXMIN64 0xfffffffful /* max minor value */
%#endif /* MAXMIN64 */
%
%#ifndef NODEV64
%#define NODEV64 0xffffffffffffffffuLL
%#endif /* NODEV64 */
%
%#ifndef NODEV32
%#define NODEV32 0xffffffffuL
%#endif /* NODEV32 */
%
%#ifndef MD_DISKADDR_ERROR
%#define MD_DISKADDR_ERROR 0xffffffffffffffffuLL
%#endif /* MD_DISKADDR_ERROR */
#endif /* RPC_HDR */
#if defined(RPC_HDR) || defined(RPC_XDR)
%
%/* namespace key */
typedef int mdkey_t;
%
%/* set ID */
typedef u_int set_t;
%
%/* record ID type */
typedef int mddb_recid_t;
%
%/* side ID */
typedef u_int side_t;
%
%/* Multi-node node ID */
typedef uint32_t md_mn_nodeid_t;
%
%/* Shared definitions */
#include "meta_arr.x"
#endif /* defined(RPC_HDR) || defined(RPC_XDR) */
#ifdef RPC_HDR
%
%#if defined(__STDC__) || defined(__cplusplus)
#ifndef _KERNEL
%extern bool_t xdr_uint_t(XDR *xdrs, uint_t *objp);
%extern bool_t xdr_ushort_t(XDR *xdrs, ushort_t *objp);
%extern bool_t xdr_dev_t(XDR *xdrs, dev_t *objp);
%extern bool_t xdr_dev32_t(XDR *xdrs, dev32_t *objp);
%extern bool_t xdr_md_dev64_t(XDR *xdrs, md_dev64_t *objp);
%extern bool_t xdr_size_t(XDR *xdrs, size_t *objp);
%extern bool_t xdr_daddr_t(XDR *xdrs, daddr_t *objp);
%extern bool_t xdr_daddr32_t(XDR *xdrs, daddr32_t *objp);
%extern bool_t xdr_diskaddr_t(XDR *xdrs, diskaddr_t *objp);
%extern bool_t xdr_ddi_devid_t(XDR *xdrs, ddi_devid_t *objp);
%extern bool_t xdr_off_t(XDR *xdrs, off_t *objp);
%extern bool_t xdr_md_timeval32_t(XDR *xdrs, md_timeval32_t *objp);
#endif /* !_KERNEL */
%extern bool_t xdr_minor_t(XDR *xdrs, minor_t *objp);
%extern bool_t xdr_timeval(XDR *xdrs, struct timeval *objp);
%extern bool_t xdr_clnt_stat(XDR *xdrs, enum clnt_stat *objp);
%#else /* K&R C */
#ifndef _KERNEL
%extern bool_t xdr_uint_t();
%extern bool_t xdr_ushort_t();
%extern bool_t xdr_dev_t();
%extern bool_t xdr_dev32_t();
%extern bool_t xdr_md_dev64_t();
%extern bool_t xdr_size_t();
%extern bool_t xdr_daddr_t();
%extern bool_t xdr_daddr32_t();
%extern bool_t xdr_diskaddr_t();
%extern bool_t xdr_ddi_devid_t();
%extern bool_t xdr_off_t();
%extern bool_t xdr_md_timeval32_t();
#endif /* !_KERNEL */
%extern bool_t xdr_minor_t();
%extern bool_t xdr_timeval();
%extern bool_t xdr_clnt_stat();
%#endif /* K&R C */
#endif /* RPC_HDR */