xref: /freebsd/usr.sbin/fifolog/lib/fifolog_write.h (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
1662cb04cSPoul-Henning Kamp /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
31de7b4b8SPedro F. Giffuni  *
4662cb04cSPoul-Henning Kamp  * Copyright (c) 2005-2008 Poul-Henning Kamp
5662cb04cSPoul-Henning Kamp  * All rights reserved.
6662cb04cSPoul-Henning Kamp  *
7662cb04cSPoul-Henning Kamp  * Redistribution and use in source and binary forms, with or without
8662cb04cSPoul-Henning Kamp  * modification, are permitted provided that the following conditions
9662cb04cSPoul-Henning Kamp  * are met:
10662cb04cSPoul-Henning Kamp  * 1. Redistributions of source code must retain the above copyright
11662cb04cSPoul-Henning Kamp  *    notice, this list of conditions and the following disclaimer.
12662cb04cSPoul-Henning Kamp  * 2. Redistributions in binary form must reproduce the above copyright
13662cb04cSPoul-Henning Kamp  *    notice, this list of conditions and the following disclaimer in the
14662cb04cSPoul-Henning Kamp  *    documentation and/or other materials provided with the distribution.
15662cb04cSPoul-Henning Kamp  *
16662cb04cSPoul-Henning Kamp  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17662cb04cSPoul-Henning Kamp  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18662cb04cSPoul-Henning Kamp  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19662cb04cSPoul-Henning Kamp  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20662cb04cSPoul-Henning Kamp  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21662cb04cSPoul-Henning Kamp  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22662cb04cSPoul-Henning Kamp  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23662cb04cSPoul-Henning Kamp  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24662cb04cSPoul-Henning Kamp  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25662cb04cSPoul-Henning Kamp  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26662cb04cSPoul-Henning Kamp  * SUCH DAMAGE.
27662cb04cSPoul-Henning Kamp  */
28662cb04cSPoul-Henning Kamp 
29662cb04cSPoul-Henning Kamp #define FIFOLOG_PT_BYTES_PRE		0
30662cb04cSPoul-Henning Kamp #define FIFOLOG_PT_BYTES_POST		1
31662cb04cSPoul-Henning Kamp #define FIFOLOG_PT_WRITES		2
32662cb04cSPoul-Henning Kamp #define FIFOLOG_PT_FLUSH		3
33662cb04cSPoul-Henning Kamp #define FIFOLOG_PT_SYNC			4
34662cb04cSPoul-Henning Kamp #define FIFOLOG_PT_RUNTIME		5
35662cb04cSPoul-Henning Kamp #define FIFOLOG_NPOINT			6
36662cb04cSPoul-Henning Kamp 
37662cb04cSPoul-Henning Kamp struct fifolog_writer {
38662cb04cSPoul-Henning Kamp 	unsigned			magic;
39662cb04cSPoul-Henning Kamp #define FIFOLOG_WRITER_MAGIC		0xf1f0706
40662cb04cSPoul-Henning Kamp 
41662cb04cSPoul-Henning Kamp 	struct fifolog_file		*ff;
42662cb04cSPoul-Henning Kamp 
43662cb04cSPoul-Henning Kamp 	unsigned			writerate;
44662cb04cSPoul-Henning Kamp 	unsigned			syncrate;
45662cb04cSPoul-Henning Kamp 	unsigned			compression;
46662cb04cSPoul-Henning Kamp 
47662cb04cSPoul-Henning Kamp 	int				cleanup;
48662cb04cSPoul-Henning Kamp 
49662cb04cSPoul-Henning Kamp 	intmax_t			cnt[FIFOLOG_NPOINT];
50662cb04cSPoul-Henning Kamp 
51662cb04cSPoul-Henning Kamp 	uint32_t			seq;
52662cb04cSPoul-Henning Kamp 	off_t				recno;
536e482ac5SPoul-Henning Kamp 	uint8_t				flag;
54662cb04cSPoul-Henning Kamp 	time_t				last;
55662cb04cSPoul-Henning Kamp 
566e482ac5SPoul-Henning Kamp 	ssize_t				obufsize;
575d964b5cSPoul-Henning Kamp 	u_char				*obuf;
585d964b5cSPoul-Henning Kamp 
596e482ac5SPoul-Henning Kamp 	ssize_t				ibufsize;
606e482ac5SPoul-Henning Kamp 	ssize_t				ibufptr;
61662cb04cSPoul-Henning Kamp 	u_char				*ibuf;
62662cb04cSPoul-Henning Kamp 
63662cb04cSPoul-Henning Kamp 	time_t				starttime;
64662cb04cSPoul-Henning Kamp 	time_t				lastwrite;
65662cb04cSPoul-Henning Kamp 	time_t				lastsync;
66662cb04cSPoul-Henning Kamp };
676e482ac5SPoul-Henning Kamp 
686e482ac5SPoul-Henning Kamp struct fifolog_writer *fifolog_write_new(void);
696e482ac5SPoul-Henning Kamp const char *fifolog_write_open(struct fifolog_writer *f, const char *fn, unsigned writerate, unsigned syncrate, unsigned compression);
706e482ac5SPoul-Henning Kamp int fifolog_write_record(struct fifolog_writer *f, uint32_t id, time_t now, const void *ptr, ssize_t len);
716e482ac5SPoul-Henning Kamp int fifolog_write_poll(struct fifolog_writer *f, time_t now);
726e482ac5SPoul-Henning Kamp int fifolog_write_record_poll(struct fifolog_writer *f, uint32_t id, time_t now, const void *ptr, ssize_t len);
736e482ac5SPoul-Henning Kamp void fifolog_write_close(struct fifolog_writer *f);
746e482ac5SPoul-Henning Kamp void fifolog_write_destroy(struct fifolog_writer *f);
756e482ac5SPoul-Henning Kamp extern const char *fifolog_write_statnames[];
76