1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _LIBDLPI_IMPL_H 27 #define _LIBDLPI_IMPL_H 28 29 #pragma ident "%Z%%M% %I% %E% SMI" 30 31 #include <libdlpi.h> 32 #include <sys/sysmacros.h> 33 34 #ifdef __cplusplus 35 extern "C" { 36 #endif 37 38 /* 39 * Maximum DLPI response size, in bytes. 40 */ 41 #define DLPI_CHUNKSIZE 8192 42 43 /* 44 * Maximum SAP length, in bytes. 45 */ 46 #define DLPI_SAPLEN_MAX 4 47 48 /* 49 * Maximum number of modules that can be pushed onto a device stream. 50 */ 51 #define DLPI_MODS_MAX 9 52 53 /* 54 * Number of elements in 'arr'. 55 */ 56 #define NELEMS(arr) (sizeof (arr) / sizeof ((arr)[0])) 57 58 /* 59 * Allocate buffer size for DLPI message, in bytes and set DLPI primitive. 60 */ 61 #define DLPI_MSG_CREATE(dlmsg, dlprimitive) \ 62 (dlmsg).dlm_msgsz = i_dlpi_getprimsize((dlprimitive)); \ 63 (dlmsg).dlm_msg = alloca((dlmsg).dlm_msgsz); \ 64 (dlmsg).dlm_msg->dl_primitive = (dlprimitive); 65 66 /* 67 * Used in a mactype lookup table. 68 */ 69 typedef struct dlpi_mactype_s { 70 uint_t dm_mactype; /* DLPI/Private mactype */ 71 char *dm_desc; /* Description of mactype */ 72 } dlpi_mactype_t; 73 74 /* 75 * Used to get the maximum DLPI message buffer size, in bytes. 76 */ 77 typedef struct dlpi_primsz { 78 t_uscalar_t dp_prim; /* store DLPI primitive */ 79 size_t dp_primsz; 80 /* max. message size, in bytes, for dp_prim */ 81 } dlpi_primsz_t; 82 83 /* 84 * Used to create DLPI message. 85 */ 86 typedef struct dlpi_msg { 87 union DL_primitives *dlm_msg; 88 /* store DLPI primitive message */ 89 size_t dlm_msgsz; 90 /* provide buffer size for dlm_msg */ 91 } dlpi_msg_t; 92 93 /* 94 * Private libdlpi structure associated with each DLPI handle. 95 */ 96 typedef struct dlpi_impl_s { 97 int dli_fd; /* fd attached to stream */ 98 int dli_timeout; /* timeout for operations, in sec */ 99 char dli_linkname[DLPI_LINKNAME_MAX]; 100 /* full linkname including PPA */ 101 char dli_provider[DLPI_LINKNAME_MAX]; 102 /* only provider name */ 103 t_uscalar_t dli_style; /* style 1 or 2 */ 104 uint_t dli_saplen; /* bound SAP length */ 105 uint_t dli_sap; /* bound SAP value */ 106 boolean_t dli_sapbefore; /* true if SAP precedes address */ 107 uint_t dli_ppa; /* physical point of attachment */ 108 uint_t dli_mod_cnt; /* number of modules to be pushed */ 109 uint_t dli_mod_pushed; /* number of modules pushed */ 110 char dli_modlist[DLPI_MODS_MAX][DLPI_LINKNAME_MAX]; 111 /* array of mods */ 112 uint_t dli_mactype; /* mac type */ 113 uint_t dli_oflags; /* flags set at open */ 114 } dlpi_impl_t; 115 116 #ifdef __cplusplus 117 } 118 #endif 119 120 #endif /* _LIBDLPI_IMPL_H */ 121