xref: /netbsd-src/sbin/sysctl/prog_ops.h (revision 997c4cdc979a262b9774f19adabfcae6ddf17622)
1*997c4cdcSkamil /*      $NetBSD: prog_ops.h,v 1.3 2019/08/18 04:10:22 kamil Exp $	*/
2f9740adaSpooka 
3f9740adaSpooka /*
4f9740adaSpooka  * Copyright (c) 2010 The NetBSD Foundation, Inc.
5f9740adaSpooka  * All rights reserved.
6f9740adaSpooka  *
7f9740adaSpooka  * Redistribution and use in source and binary forms, with or without
8f9740adaSpooka  * modification, are permitted provided that the following conditions
9f9740adaSpooka  * are met:
10f9740adaSpooka  * 1. Redistributions of source code must retain the above copyright
11f9740adaSpooka  *    notice, this list of conditions and the following disclaimer.
12f9740adaSpooka  * 2. Redistributions in binary form must reproduce the above copyright
13f9740adaSpooka  *    notice, this list of conditions and the following disclaimer in the
14f9740adaSpooka  *    documentation and/or other materials provided with the distribution.
15f9740adaSpooka  *
16f9740adaSpooka  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17f9740adaSpooka  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18f9740adaSpooka  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19f9740adaSpooka  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20f9740adaSpooka  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21f9740adaSpooka  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22f9740adaSpooka  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23f9740adaSpooka  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24f9740adaSpooka  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25f9740adaSpooka  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26f9740adaSpooka  * POSSIBILITY OF SUCH DAMAGE.
27f9740adaSpooka  */
28f9740adaSpooka 
29f9740adaSpooka #ifndef _PROG_OPS_H_
30f9740adaSpooka #define _PROG_OPS_H_
31f9740adaSpooka 
32f9740adaSpooka #include <sys/types.h>
33f9740adaSpooka 
3467a4f392Spooka #ifndef CRUNCHOPS
35*997c4cdcSkamil struct sysctlnode;
36*997c4cdcSkamil 
37f9740adaSpooka struct prog_ops {
38f9740adaSpooka 	int (*op_init)(void);
39f9740adaSpooka 
40f9740adaSpooka 	int (*op_sysctl)(const int *, u_int, void *, size_t *,
41f9740adaSpooka 			 const void *, size_t);
42*997c4cdcSkamil 
43*997c4cdcSkamil 	/* Indirection needed for sanitizers. */
44*997c4cdcSkamil 
45*997c4cdcSkamil 	int (*op_sysctlbyname)(const char *, void *, size_t *,
46*997c4cdcSkamil 			 const void *, size_t);
47*997c4cdcSkamil 
48*997c4cdcSkamil 	int (*op_sysctlgetmibinfo)(const char *, int *, u_int *, char *,
49*997c4cdcSkamil 			 size_t *, struct sysctlnode **, int);
50f9740adaSpooka };
51f9740adaSpooka extern const struct prog_ops prog_ops;
52f9740adaSpooka 
53f9740adaSpooka #define prog_init prog_ops.op_init
54f9740adaSpooka #define prog_sysctl prog_ops.op_sysctl
55*997c4cdcSkamil #define prog_sysctlbyname prog_ops.op_sysctlbyname
56*997c4cdcSkamil #define prog_sysctlgetmibinfo prog_ops.op_sysctlgetmibinfo
5767a4f392Spooka #else
5867a4f392Spooka #define prog_init ((int (*)(void))NULL)
5967a4f392Spooka #define prog_sysctl sysctl
60*997c4cdcSkamil #define prog_sysctlbyname sysctlbyname
61*997c4cdcSkamil #define prog_sysctlgetmibinfo sysctlgetmibinfo
6267a4f392Spooka #endif
63f9740adaSpooka 
64f9740adaSpooka #endif /* _PROG_OPS_H_ */
65