Home | History | Annotate | Download | only in common
      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 2008 Sun Microsystems, Inc.  All rights reserved.
     23  * Use is subject to license terms.
     24  */
     25 
     26 #ifndef	_LABELD_H
     27 #define	_LABELD_H
     28 
     29 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     30 
     31 #include <sys/types.h>
     32 #include <tsol/label.h>
     33 #include <sys/tsol/label_macro.h>
     34 
     35 #ifdef	__cplusplus
     36 extern "C" {
     37 #endif
     38 
     39 /*
     40  *	Definitions for the call parameters for the door-based label
     41  * translation service.
     42  */
     43 
     44 #define	BUFSIZE	4096
     45 
     46 #define	DOOR_PATH	"/var/tsol/doors/"
     47 #define	DOOR_NAME	"labeld"
     48 #define	COOKIE		(void *)0x6c616264	/* "labd" */
     49 
     50 /*	Op codes */
     51 
     52 /*	Labeld Commands */
     53 
     54 #define	LABELDNULL	1
     55 
     56 /*	Miscellaneous */
     57 
     58 #define	BLINSET		10
     59 #define	BSLVALID	11
     60 #define	BILVALID	12
     61 #define	BCLEARVALID	13
     62 #define	LABELINFO	14
     63 #define	LABELVERS	15
     64 #define	BLTOCOLOR	16
     65 
     66 /*	Binary to String Label Translation */
     67 
     68 #define	BSLTOS		23
     69 #define	BCLEARTOS	25
     70 
     71 /*	String to Binary Label Translation */
     72 
     73 #define	STOBSL		31
     74 #define	STOBCLEAR	33
     75 
     76 /*
     77  *	Dimming List Routines
     78  *	Contract private for label builders
     79  */
     80 
     81 #define	BSLCVT		40
     82 #define	BCLEARCVT	42
     83 #define	LABELFIELDS	43
     84 #define	UDEFS		44
     85 
     86 #define	GETFLABEL	45
     87 #define	SETFLABEL	46
     88 #define	ZCOPY		47
     89 
     90 /* NEW LABELS */
     91 /* DIA printer banner labels */
     92 
     93 #define	PR_CAVEATS	101
     94 #define	PR_CHANNELS	102
     95 #define	PR_LABEL	103
     96 #define	PR_TOP		104
     97 
     98 /* DIA label to string  */
     99 
    100 #define	LTOS		105
    101 
    102 /* DIA string to label */
    103 
    104 #define	STOL		106
    105 
    106 /*	Structures */
    107 
    108 typedef	uint_t	bufp_t;		/* offset into buf[] in/out string buffer */
    109 
    110 /* Null call */
    111 
    112 typedef	struct {
    113 	int	null;
    114 } null_call_t;
    115 
    116 typedef	struct {
    117 	int	null;
    118 } null_ret_t;
    119 
    120 /* Miscellaneous interfaces */
    121 
    122 typedef	struct {
    123 	bslabel_t label;
    124 	int	type;
    125 } inset_call_t;
    126 
    127 typedef	struct {
    128 	int	inset;
    129 } inset_ret_t;
    130 
    131 typedef	struct {
    132 	bslabel_t label;
    133 } slvalid_call_t;
    134 
    135 typedef	struct {
    136 	int	valid;
    137 } slvalid_ret_t;
    138 
    139 typedef	struct {
    140 	bclear_t clear;
    141 } clrvalid_call_t;
    142 
    143 typedef	struct {
    144 	int	valid;
    145 } clrvalid_ret_t;
    146 
    147 typedef	struct {
    148 	int	null;
    149 } info_call_t;
    150 
    151 typedef	struct {
    152 	struct label_info info;
    153 } info_ret_t;
    154 
    155 typedef	struct {
    156 	int	null;
    157 } vers_call_t;
    158 
    159 typedef	struct {
    160 	char	vers[BUFSIZE];
    161 } vers_ret_t;
    162 
    163 typedef struct {
    164 	blevel_t label;
    165 } color_call_t;
    166 
    167 typedef struct {
    168 	char	color[BUFSIZE];
    169 } color_ret_t;
    170 
    171 /* Binary Label to String interfaces */
    172 
    173 typedef	struct {
    174 	bslabel_t label;
    175 	uint_t	flags;
    176 } bsltos_call_t;
    177 
    178 typedef	struct {
    179 	char	slabel[BUFSIZE];
    180 } bsltos_ret_t;
    181 
    182 typedef	struct {
    183 	bclear_t clear;
    184 	uint_t	flags;
    185 } bcleartos_call_t;
    186 
    187 typedef	struct {
    188 	char	cslabel[BUFSIZE];
    189 } bcleartos_ret_t;
    190 
    191 /* String to Binary Label interfaces */
    192 
    193 typedef	struct {
    194 	bslabel_t label;
    195 	uint_t	flags;
    196 	char	string[BUFSIZE];
    197 } stobsl_call_t;
    198 
    199 typedef	struct {
    200 	bslabel_t label;
    201 } stobsl_ret_t;
    202 
    203 typedef	struct {
    204 	bclear_t clear;
    205 	uint_t	flags;
    206 	char	string[BUFSIZE];
    207 } stobclear_call_t;
    208 
    209 typedef	struct {
    210 	bclear_t clear;
    211 } stobclear_ret_t;
    212 
    213 /*
    214  * The following Dimming List and Miscellaneous interfaces
    215  * implement contract private interfaces for the label builder
    216  * interfaces.
    217  */
    218 
    219 /* Dimming List interfaces */
    220 
    221 typedef	struct {
    222 	bslabel_t label;
    223 	brange_t bounds;
    224 	uint_t	flags;
    225 } bslcvt_call_t;
    226 
    227 typedef	struct {
    228 	bufp_t	string;
    229 	bufp_t	dim;
    230 	bufp_t	lwords;
    231 	bufp_t	swords;
    232 	size_t	d_len;
    233 	size_t	l_len;
    234 	size_t	s_len;
    235 	int	first_comp;
    236 	int	first_mark;
    237 	char	buf[BUFSIZE];
    238 } cvt_ret_t;
    239 
    240 typedef cvt_ret_t bslcvt_ret_t;
    241 
    242 typedef	struct {
    243 	bclear_t clear;
    244 	brange_t bounds;
    245 	uint_t	flags;
    246 } bclearcvt_call_t;
    247 
    248 typedef cvt_ret_t bclearcvt_ret_t;
    249 
    250 /* Miscellaneous interfaces */
    251 
    252 typedef	struct {
    253 	int	null;
    254 } fields_call_t;
    255 
    256 typedef	struct {
    257 	bufp_t	classi;
    258 	bufp_t	compsi;
    259 	bufp_t	marksi;
    260 	char	buf[BUFSIZE];
    261 } fields_ret_t;
    262 
    263 typedef	struct {
    264 	int	null;
    265 } udefs_call_t;
    266 
    267 typedef	struct {
    268 	bslabel_t sl;
    269 	bclear_t  clear;
    270 } udefs_ret_t;
    271 
    272 typedef	struct {
    273 	bslabel_t  sl;
    274 	char	pathname[BUFSIZE];
    275 } setfbcl_call_t;
    276 
    277 typedef	struct {
    278 	int	status;
    279 } setfbcl_ret_t;
    280 
    281 typedef	struct {
    282 	bslabel_t  src_win_sl;
    283 	int	transfer_mode;
    284 	bufp_t  remote_dir;
    285 	bufp_t  filename;
    286 	bufp_t  local_dir;
    287 	bufp_t  display;
    288 	char    buf[BUFSIZE];
    289 } zcopy_call_t;
    290 
    291 typedef	struct {
    292 	int	status;
    293 } zcopy_ret_t;
    294 
    295 typedef	struct {
    296 	m_label_t label;
    297 	uint_t	flags;
    298 } pr_call_t;
    299 
    300 typedef	struct {
    301 	char	buf[BUFSIZE];
    302 } pr_ret_t;
    303 
    304 typedef	struct {
    305 	m_label_t label;
    306 	uint_t	flags;
    307 } ls_call_t;
    308 
    309 typedef	struct {
    310 	char	buf[BUFSIZE];
    311 } ls_ret_t;
    312 
    313 typedef	struct {
    314 	m_label_t label;
    315 	uint_t	flags;
    316 	char	string[BUFSIZE];
    317 } sl_call_t;
    318 
    319 typedef	struct {
    320 	m_label_t label;
    321 } sl_ret_t;
    322 
    323 /* Labeld operation call structure */
    324 
    325 typedef	struct {
    326 	uint_t	op;
    327 	union	{
    328 		null_call_t	null_arg;
    329 
    330 		inset_call_t	inset_arg;
    331 		slvalid_call_t	slvalid_arg;
    332 		clrvalid_call_t	clrvalid_arg;
    333 		info_call_t	info_arg;
    334 		vers_call_t	vers_arg;
    335 		color_call_t	color_arg;
    336 
    337 		bsltos_call_t	bsltos_arg;
    338 		bcleartos_call_t	bcleartos_arg;
    339 
    340 		stobsl_call_t	stobsl_arg;
    341 		stobclear_call_t	stobclear_arg;
    342 
    343 		bslcvt_call_t	bslcvt_arg;
    344 		bclearcvt_call_t	bclearcvt_arg;
    345 		fields_call_t	fields_arg;
    346 		udefs_call_t	udefs_arg;
    347 		setfbcl_call_t	setfbcl_arg;
    348 		zcopy_call_t	zcopy_arg;
    349 		pr_call_t	pr_arg;
    350 		ls_call_t	ls_arg;
    351 		sl_call_t	sl_arg;
    352 	} cargs;
    353 } labeld_call_t;
    354 
    355 /* Labeld operation return structure */
    356 
    357 typedef struct {
    358 	int	ret;		/* labeld return codes */
    359 	int	err;		/* function error codes */
    360 	union	{
    361 		null_ret_t	null_ret;
    362 
    363 		inset_ret_t	inset_ret;
    364 		slvalid_ret_t	slvalid_ret;
    365 		clrvalid_ret_t	clrvalid_ret;
    366 		info_ret_t	info_ret;
    367 		vers_ret_t	vers_ret;
    368 		color_ret_t	color_ret;
    369 
    370 		bsltos_ret_t	bsltos_ret;
    371 		bcleartos_ret_t	bcleartos_ret;
    372 
    373 		stobsl_ret_t	stobsl_ret;
    374 		stobclear_ret_t	stobclear_ret;
    375 
    376 		bslcvt_ret_t	bslcvt_ret;
    377 		bclearcvt_ret_t	bclearcvt_ret;
    378 		fields_ret_t	fields_ret;
    379 		udefs_ret_t	udefs_ret;
    380 		setfbcl_ret_t	setfbcl_ret;
    381 		zcopy_ret_t	zcopy_ret;
    382 		pr_ret_t	pr_ret;
    383 		ls_ret_t	ls_ret;
    384 		sl_ret_t	sl_ret;
    385 	} rvals;
    386 } labeld_ret_t;
    387 
    388 /* Labeld call/return structure */
    389 
    390 typedef	struct {
    391 	union {
    392 		labeld_call_t	acall;
    393 		labeld_ret_t	aret;
    394 	} param;
    395 } labeld_data_t;
    396 
    397 #define	callop	param.acall.op
    398 #define	retret	param.aret.ret
    399 #define	reterr	param.aret.err
    400 
    401 #define	CALL_SIZE(type, buf)	(size_t)(sizeof (type) + sizeof (int) + (buf))
    402 #define	RET_SIZE(type, buf)	(size_t)(sizeof (type) + 2*sizeof (int) + (buf))
    403 #define	CALL_SIZE_STR(type, buf)	CALL_SIZE(type, (-BUFSIZE +(buf)))
    404 
    405 /* Labeld common client call function */
    406 
    407 int
    408 __call_labeld(labeld_data_t **dptr, size_t *ndata, size_t *adata);
    409 
    410 /* Return Codes */
    411 
    412 #define	SUCCESS		1	/* Call OK */
    413 #define	NOTFOUND	-1	/* Function not found */
    414 #define	SERVERFAULT	-2	/* Internal labeld error */
    415 #define	NOSERVER	-3	/* No server thread available, try later */
    416 
    417 /* Flag Translation Values */
    418 
    419 #define	L_NEW_LABEL		0x10000000
    420 
    421 /* GFI FLAGS */
    422 
    423 #define	GFI_FLAG_MASK		 0x0000FFFF
    424 #define	GFI_ACCESS_RELATED	 0x00000001
    425 
    426 /* binary to ASCII */
    427 
    428 #define	LABELS_NO_CLASS		 0x00010000
    429 #define	LABELS_SHORT_CLASS	 0x00020000
    430 #define	LABELS_SHORT_WORDS	 0x00040000
    431 
    432 /* Label view */
    433 
    434 #define	LABELS_VIEW_INTERNAL	 0x00100000
    435 #define	LABELS_VIEW_EXTERNAL	 0x00200000
    436 
    437 /* Dimming list (convert -- b*cvt* ) */
    438 
    439 #define	LABELS_FULL_CONVERT	 0x00010000
    440 
    441 /* ASCII to binary */
    442 
    443 #define	LABELS_NEW_LABEL	 0x00010000
    444 #define	LABELS_FULL_PARSE	 0x00020000
    445 #define	LABELS_ONLY_INFO_LABEL	 0x00040000
    446 
    447 #define	MOVE_FILE	0
    448 #define	COPY_FILE	1
    449 #define	LINK_FILE	2
    450 
    451 #define	PIPEMSG_FILEOP_ERROR	1
    452 #define	PIPEMSG_EXIST_ERROR	2
    453 #define	PIPEMSG_DONE 		7
    454 #define	PIPEMSG_PATH_ERROR	20
    455 #define	PIPEMSG_ZONE_ERROR	21
    456 #define	PIPEMSG_LABEL_ERROR	22
    457 #define	PIPEMSG_READ_ERROR	23
    458 #define	PIPEMSG_READONLY_ERROR  24
    459 #define	PIPEMSG_WRITE_ERROR	25
    460 #define	PIPEMSG_CREATE_ERROR	26
    461 #define	PIPEMSG_DELETE_ERROR	27
    462 #define	PIPEMSG_CANCEL		101
    463 #define	PIPEMSG_PROCEED		102
    464 #define	PIPEMSG_MERGE		103
    465 #define	PIPEMSG_REPLACE_BUFFER	104
    466 #define	PIPEMSG_RENAME_BUFFER	105
    467 #define	PIPEMSG_MULTI_PROCEED	106
    468 #define	PIPEMSG_RENAME_FILE	107
    469 
    470 #ifdef	__cplusplus
    471 }
    472 #endif
    473 
    474 #endif	/* _LABELD_H */
    475