blob: 5e001504889548ef48a53b7faef453a697ed220b [file] [log] [blame]
/* $NetBSD: types.h,v 1.13 2000/06/13 01:02:44 thorpej Exp $ */
/*
* Copyright (c) 2009, Sun Microsystems, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* - Neither the name of Sun Microsystems, Inc. nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* from: @(#)types.h 1.18 87/07/24 SMI
* from: @(#)types.h 2.3 88/08/15 4.0 RPCSRC
* $FreeBSD: src/include/rpc/types.h,v 1.10.6.1 2003/12/18 00:59:50 peter Exp $
*/
/*
* Rpc additions to <sys/types.h>
*/
#ifndef _TIRPC_TYPES_H
#define _TIRPC_TYPES_H
#ifdef _MSC_VER
#include <misc/stdint.h>
#else
#include <stdint.h>
#endif
#include <sys/socket.h>
#include <sys/types.h>
#include <inttypes.h>
#if defined(_WIN32)
#define __BEGIN_DECLS
#define __END_DECLS
/* integral types */
#ifndef _MSC_VER
#include <_bsd_types.h> /* XXX mingw (defines u_long) */
#endif
typedef uint8_t u_char;
typedef uint16_t u_int16_t;
typedef uint16_t u_short_t;
typedef uint16_t u_short;
typedef uint32_t u_int;
typedef uint32_t u_int32_t;
typedef int64_t quad_t;
typedef uint64_t u_int64_t;
typedef uint64_t u_quad_t;
/* misc */
typedef char *caddr_t;
typedef uint32_t uid_t;
typedef uint32_t gid_t;
struct iovec {
void *iov_base;
size_t iov_len;
};
#include <winsock2.h>
#include <ws2tcpip.h> /* XXX mingw */
#endif
typedef int32_t bool_t;
typedef int32_t enum_t;
typedef u_int32_t rpcprog_t;
typedef u_int32_t rpcvers_t;
typedef u_int32_t rpcproc_t;
typedef u_int32_t rpcprot_t;
typedef u_int32_t rpcport_t;
typedef int32_t rpc_inline_t;
#ifndef NULL
#define NULL 0
#endif
#define __dontcare__ -1
#define honey_badger __dontcare__
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef TRUE
#define TRUE (1)
#endif
/*
* Package params support
*/
#define TIRPC_GET_PARAMETERS 0
#define TIRPC_PUT_PARAMETERS 1
#define TIRPC_GET_DEBUG_FLAGS 2
#define TIRPC_SET_DEBUG_FLAGS 3
#define TIRPC_GET_OTHER_FLAGS 4
#define TIRPC_SET_OTHER_FLAGS 5
/*
* Debug flags support
*/
#define TIRPC_FLAG_NONE 0x0000000
#define TIRPC_DEBUG_FLAG_NONE 0x0000000
#define TIRPC_DEBUG_FLAG_ERROR 0x0000001
#define TIRPC_DEBUG_FLAG_EVENT 0x0000002
#define TIRPC_DEBUG_FLAG_REFCNT 0x0000004
#define TIRPC_DEBUG_FLAG_LOCK 0x0000008
#define TIRPC_DEBUG_FLAG_MEM 0x0000010
#define TIRPC_DEBUG_FLAG_RBTREE 0x0000020
#define TIRPC_DEBUG_FLAG_RPCSEC_GSS 0x0000040
#define TIRPC_DEBUG_FLAG_AUTH 0x0000080
#define TIRPC_DEBUG_FLAG_CLNT_BCAST 0x0000100
#define TIRPC_DEBUG_FLAG_CLNT_DG 0x0000200
#define TIRPC_DEBUG_FLAG_CLNT_GEN 0x0000400
#define TIRPC_DEBUG_FLAG_CLNT_RAW 0x0000800
#define TIRPC_DEBUG_FLAG_CLNT_RDMA 0x0001000
#define TIRPC_DEBUG_FLAG_CLNT_SCTP 0x0002000
#define TIRPC_DEBUG_FLAG_CLNT_VC 0x0004000
#define TIRPC_DEBUG_FLAG_SVC 0x0008000
#define TIRPC_DEBUG_FLAG_SVC_DG 0x0010000
#define TIRPC_DEBUG_FLAG_SVC_RQST 0x0020000
#define TIRPC_DEBUG_FLAG_SVC_XPRT 0x0040000
#define TIRPC_DEBUG_FLAG_SVC_RDMA 0x0080000
#define TIRPC_DEBUG_FLAG_SVC_SCTP 0x0100000
#define TIRPC_DEBUG_FLAG_SVC_VC 0x0200000
#define TIRPC_DEBUG_FLAG_XDRREC 0x0400000
#define TIRPC_DEBUG_FLAG_XDR 0x0800000
#define TIRPC_DEBUG_FLAG_RPC_CTX 0x1000000
#define TIRPC_DEBUG_FLAG_RPC_CACHE 0x2000000
#define TIRPC_DEBUG_FLAG_RPC_MSG 0x4000000
#define TIRPC_DEBUG_FLAG_RPC_RDMA 0x8000000
/* or symbolic names for default */
#define TIRPC_DEBUG_FLAG_DEFAULT \
(TIRPC_DEBUG_FLAG_ERROR | TIRPC_DEBUG_FLAG_EVENT)
typedef void *(*mem_1_size_t) (size_t,
const char *file, int line, const char *function);
typedef void *(*mem_2_size_t) (size_t, size_t,
const char *file, int line, const char *function);
typedef void *(*mem_p_size_t) (void *, size_t,
const char *file, int line, const char *function);
typedef void (*mem_free_size_t) (void *, size_t);
typedef void (*mem_format_t) (const char *fmt, ...);
/*
* Package params support
*/
typedef struct tirpc_pkg_params {
uint32_t debug_flags;
uint32_t other_flags;
mem_format_t warnx_;
mem_free_size_t free_size_;
mem_1_size_t malloc_;
mem_2_size_t aligned_;
mem_2_size_t calloc_;
mem_p_size_t realloc_;
} tirpc_pkg_params;
extern tirpc_pkg_params __ntirpc_pkg_params;
#include <misc/abstract_atomic.h>
#define __warnx(flags, ...) \
do { \
if (__ntirpc_pkg_params.debug_flags & (flags)) { \
__ntirpc_pkg_params.warnx_(__VA_ARGS__); \
} \
} while (0)
#define __debug_flag(flags) (__ntirpc_pkg_params.debug_flags & (flags))
#define mem_alloc(size) __ntirpc_pkg_params.malloc_((size), \
__FILE__, __LINE__, __func__)
#define mem_aligned(align, size) __ntirpc_pkg_params.aligned_((align), (size), \
__FILE__, __LINE__, __func__)
#define mem_calloc(count, size) __ntirpc_pkg_params.calloc_((count), (size), \
__FILE__, __LINE__, __func__)
#define mem_realloc(p, size) __ntirpc_pkg_params.realloc_((p), (size), \
__FILE__, __LINE__, __func__)
#define mem_zalloc(size) __ntirpc_pkg_params.calloc_(1, (size), \
__FILE__, __LINE__, __func__)
static inline void
mem_free(void *p, size_t n)
{
__ntirpc_pkg_params.free_size_(p, n);
}
/*
* Uses allocator with indirections, if any.
*/
#include <string.h>
static inline void *
mem_strdup_(const char *s, const char *file, int line, const char *function)
{
size_t l = strlen(s) + 1;
void *t = __ntirpc_pkg_params.malloc_(l, file, line, function);
memcpy(t, s, l);
return (t);
}
#define mem_strdup(s) mem_strdup_((s), __FILE__, __LINE__, __func__)
#ifndef _MSC_VER
#include <sys/time.h>
#include <sys/param.h>
#endif
#include <stdlib.h>
#include <netconfig.h>
/*
* The netbuf structure is defined here, because FreeBSD / NetBSD only use
* it inside the RPC code. It's in <xti.h> on SVR4, but it would be confusing
* to have an xti.h, since FreeBSD / NetBSD do not support XTI/TLI.
*/
/*
* The netbuf structure is used for transport-independent address storage.
*/
struct netbuf {
unsigned int maxlen;
unsigned int len;
void *buf;
};
struct rpc_address {
struct netbuf nb;
struct sockaddr_storage ss; /* address buffer */
};
/*
* The format of the addres and options arguments of the XTI t_bind call.
* Only provided for compatibility, it should not be used.
*/
struct t_bind {
struct netbuf addr;
unsigned int qlen;
};
/*
* Internal library and rpcbind use. This is not an exported interface, do
* not use.
*/
struct __rpc_sockinfo {
int si_af;
int si_proto;
int si_socktype;
int si_alen;
};
#endif /* _TIRPC_TYPES_H */