1/* 2 * Copyright (c) 2010 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. Neither the name of Apple Inc. ("Apple") nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 20 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 * 30 * Portions of this software have been released under the following terms: 31 * 32 * (c) Copyright 1989-1993 OPEN SOFTWARE FOUNDATION, INC. 33 * (c) Copyright 1989-1993 HEWLETT-PACKARD COMPANY 34 * (c) Copyright 1989-1993 DIGITAL EQUIPMENT CORPORATION 35 * 36 * To anyone who acknowledges that this file is provided "AS IS" 37 * without any express or implied warranty: 38 * permission to use, copy, modify, and distribute this file for any 39 * purpose is hereby granted without fee, provided that the above 40 * copyright notices and this notice appears in all source code copies, 41 * and that none of the names of Open Software Foundation, Inc., Hewlett- 42 * Packard Company or Digital Equipment Corporation be used 43 * in advertising or publicity pertaining to distribution of the software 44 * without specific, written prior permission. Neither Open Software 45 * Foundation, Inc., Hewlett-Packard Company nor Digital 46 * Equipment Corporation makes any representations about the suitability 47 * of this software for any purpose. 48 * 49 * Copyright (c) 2007, Novell, Inc. All rights reserved. 50 * Redistribution and use in source and binary forms, with or without 51 * modification, are permitted provided that the following conditions 52 * are met: 53 * 54 * 1. Redistributions of source code must retain the above copyright 55 * notice, this list of conditions and the following disclaimer. 56 * 2. Redistributions in binary form must reproduce the above copyright 57 * notice, this list of conditions and the following disclaimer in the 58 * documentation and/or other materials provided with the distribution. 59 * 3. Neither the name of Novell Inc. nor the names of its contributors 60 * may be used to endorse or promote products derived from this 61 * this software without specific prior written permission. 62 * 63 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 64 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 65 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 66 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY 67 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 68 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 69 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 70 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 71 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 72 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 73 * 74 * @APPLE_LICENSE_HEADER_END@ 75 */ 76 77/* 78** 79** NAME 80** 81** cnfbuf.h 82** 83** FACILITY: 84** 85** Remote Procedure Call (RPC) 86** 87** ABSTRACT: 88** 89** Definitions of types and interfaces to the fragment buffer 90** routines for connection based protocol services. 91** 92** 93*/ 94 95#ifndef _CNFBUF_H 96#define _CNFBUF_H 1 97 98/* 99 * NOTE: rpc_c_cn_large_frag_size must always be at least 100 * rpc_c_assoc_must_recv_frag_size as defined in cnassm.h. This is 101 * an architectural requirement. 102 */ 103#include <cnassm.h> 104 105#if (RPC_C_CN_LARGE_FRAG_SIZE < RPC_C_ASSOC_MUST_RECV_FRAG_SIZE) 106#error "large frag size < architecural minimum" 107#endif 108 109#define RPC_C_CN_LG_FRAGBUF_ALLOC_SIZE (sizeof(rpc_cn_fragbuf_t)\ 110 + RPC_C_CN_LARGE_FRAG_SIZE - 1) 111 112#define RPC_C_CN_SM_FRAGBUF_ALLOC_SIZE (sizeof(rpc_cn_fragbuf_t)\ 113 + RPC_C_CN_SMALL_FRAG_SIZE - 1 ) 114 115EXTERNAL unsigned32 rpc_g_cn_large_frag_size; 116 117/***********************************************************************/ 118/* 119 * R P C _ C N _ F R A G B U F _ P K T _ H D R 120 * 121 * The unpacked header for a received fragment starts at the used 122 * portion of the header overhead area. 123 */ 124 125#define RPC_CN_FRAGBUF_PKT_HDR(fbuf) \ 126 (rpc_cn_packet_p_t) ((rpc_cn_fragbuf_p_t)(fbuf))->data_p 127 128/***********************************************************************/ 129/* 130 * R P C _ C N _ F R A G B U F _ A L L O C 131 * 132 */ 133 134#define RPC_CN_FRAGBUF_ALLOC(fragbuf, size, st)\ 135 if ((size) <= RPC_C_CN_SMALL_FRAG_SIZE)\ 136 {\ 137 (fragbuf) = rpc__cn_fragbuf_alloc (false);\ 138 }\ 139 else\ 140 {\ 141 (fragbuf) = rpc__cn_fragbuf_alloc (true);\ 142 }\ 143 (fragbuf)->data_size = (size);\ 144 *(st) = rpc_s_ok; 145 146/***********************************************************************/ 147/* 148 * R P C _ C N _ F R A G B U F _ S E T _ D A T A _ P 149 * 150 */ 151 152#define RPC_CN_FRAGBUF_SET_DATA_P(fbp)\ 153 (fbp)->data_p = (dce_pointer_t) RPC_CN_ALIGN_PTR((fbp)->data_area, 8); 154 155/***********************************************************************/ 156/* 157 * R P C _ _ C N _ F R A G B U F _ F R E E 158 * 159 */ 160 161void rpc__cn_fragbuf_free (rpc_cn_fragbuf_p_t /*fragbuf_p*/); 162 163/***********************************************************************/ 164/* 165 * R P C _ _ C N _ S M F R A G B U F _ F R E E 166 * 167 */ 168 169void rpc__cn_smfragbuf_free (rpc_cn_fragbuf_p_t /*fragbuf_p*/); 170 171/***********************************************************************/ 172/* 173 * R P C _ _ C N _ F R A G B U F _ A L L O C 174 * 175 */ 176#define RPC_C_CN_LARGE_FRAGBUF true 177#define RPC_C_CN_SMALL_FRAGBUF false 178 179rpc_cn_fragbuf_p_t rpc__cn_fragbuf_alloc ( 180 boolean32 /* alloc_large_buf */); 181 182/***********************************************************************/ 183/* 184 * R P C _ _ C N _ F R A G B U F _ A L L O C _ D Y N 185 * 186 */ 187rpc_cn_fragbuf_p_t rpc__cn_fragbuf_alloc_dyn ( 188 unsigned32 /* alloc_size */); 189 190#endif /* _CNFBUF_H */ 191