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 2010 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 * 25 */ 26 27#ifndef _QUEUE_H 28#define _QUEUE_H 29 30#ifdef __cplusplus 31extern "C" { 32#endif 33 34#include <pthread.h> 35#include <stddef.h> 36 37typedef struct aln audit_link_t; 38struct aln { 39 audit_link_t *aln_next; 40}; 41 42/* one audit_rec_t per audit record */ 43 44typedef struct abq audit_rec_t; 45struct abq { 46 audit_link_t abq_l; 47 int abq_ref_count; 48 size_t abq_buf_len; /* space allocated */ 49 size_t abq_data_len; /* space used */ 50 char abq_buffer[1]; /* variable length */ 51}; 52#define AUDIT_REC_HEADER offsetof(audit_rec_t, abq_buffer[0]) 53 54/* one audit_q_t entry per audit record per plugin */ 55 56typedef struct aqq audit_q_t; /* plugin queued data */ 57struct aqq { 58 audit_link_t aqq_l; 59 audit_rec_t *aqq_data; 60 uint64_t aqq_sequence; 61}; 62 63/* queue head */ 64 65typedef struct auq au_queue_t; 66 67struct auq { 68 void *auq_head; 69 void *auq_tail; 70 int auq_count; 71 pthread_mutex_t auq_lock; 72}; 73 74int audit_dequeue(au_queue_t *, void **); 75void audit_queue_destroy(au_queue_t *); 76void audit_enqueue(au_queue_t *, void *); 77int audit_queue_size(au_queue_t *); 78void audit_queue_init(au_queue_t *); 79audit_rec_t *audit_release(pthread_mutex_t *, audit_rec_t *); 80void audit_incr_ref(pthread_mutex_t *, audit_rec_t *); 81 82#ifdef __cplusplus 83} 84#endif 85 86#endif /* _QUEUE_H */ 87