xref: /freebsd/sys/netlink/netlink_debug.h (revision e536b197c0cf5c245e0b65f1b73447d53f3656f2)
17e5bf684SAlexander V. Chernikov /*-
27e5bf684SAlexander V. Chernikov  * Copyright (c) 2022 Alexander V. Chernikov <melifaro@FreeBSD.org>
37e5bf684SAlexander V. Chernikov  *
47e5bf684SAlexander V. Chernikov  * Redistribution and use in source and binary forms, with or without
57e5bf684SAlexander V. Chernikov  * modification, are permitted provided that the following conditions
67e5bf684SAlexander V. Chernikov  * are met:
77e5bf684SAlexander V. Chernikov  * 1. Redistributions of source code must retain the above copyright
87e5bf684SAlexander V. Chernikov  *    notice, this list of conditions and the following disclaimer.
97e5bf684SAlexander V. Chernikov  * 2. Redistributions in binary form must reproduce the above copyright
107e5bf684SAlexander V. Chernikov  *    notice, this list of conditions and the following disclaimer in the
117e5bf684SAlexander V. Chernikov  *    documentation and/or other materials provided with the distribution.
127e5bf684SAlexander V. Chernikov  * 3. Neither the name of the University nor the names of its contributors
137e5bf684SAlexander V. Chernikov  *    may be used to endorse or promote products derived from this software
147e5bf684SAlexander V. Chernikov  *    without specific prior written permission.
157e5bf684SAlexander V. Chernikov  *
167e5bf684SAlexander V. Chernikov  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
177e5bf684SAlexander V. Chernikov  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
187e5bf684SAlexander V. Chernikov  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
197e5bf684SAlexander V. Chernikov  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
207e5bf684SAlexander V. Chernikov  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
217e5bf684SAlexander V. Chernikov  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
227e5bf684SAlexander V. Chernikov  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
237e5bf684SAlexander V. Chernikov  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
247e5bf684SAlexander V. Chernikov  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
257e5bf684SAlexander V. Chernikov  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
267e5bf684SAlexander V. Chernikov  * SUCH DAMAGE.
277e5bf684SAlexander V. Chernikov  */
287e5bf684SAlexander V. Chernikov 
297e5bf684SAlexander V. Chernikov #ifndef _NETLINK_NETLINK_DEBUG_H_
307e5bf684SAlexander V. Chernikov #define	_NETLINK_NETLINK_DEBUG_H_
317e5bf684SAlexander V. Chernikov 
32dddafa8dSAlexander V. Chernikov #ifdef _KERNEL
33dddafa8dSAlexander V. Chernikov 
347e5bf684SAlexander V. Chernikov #define	_DEBUG_SYSCTL_OID	_net_netlink_debug
357e5bf684SAlexander V. Chernikov #include <net/route/route_debug.h>
367e5bf684SAlexander V. Chernikov 
377e5bf684SAlexander V. Chernikov SYSCTL_DECL(_net_netlink_debug);
387e5bf684SAlexander V. Chernikov 
397e5bf684SAlexander V. Chernikov /*
407e5bf684SAlexander V. Chernikov  * Generic debug
417e5bf684SAlexander V. Chernikov  * [nl_domain] func_name: debug text
427e5bf684SAlexander V. Chernikov  */
437e5bf684SAlexander V. Chernikov #define	NL_LOG	RT_LOG
447e5bf684SAlexander V. Chernikov 
457e5bf684SAlexander V. Chernikov /*
467e5bf684SAlexander V. Chernikov  * Logging for events specific for particular process
477e5bf684SAlexander V. Chernikov  * Example: [nl_domain] PID 4834 fdump_sa: unsupported family: 45
487e5bf684SAlexander V. Chernikov  */
49*e536b197SMark Johnston #define	NL_RAW_PID_LOG(_l, _pid, _fmt, ...)		\
50*e536b197SMark Johnston 	NL_RAW_PID_LOG_##_l(_l, _pid, _fmt, ## __VA_ARGS__)
51*e536b197SMark Johnston #define	_NL_RAW_PID_LOG(_l, _pid, _fmt, ...)		\
52*e536b197SMark Johnston 	if (_DEBUG_PASS_MSG(_l)) {			\
53*e536b197SMark Johnston 		_output("[" DEBUG_PREFIX_NAME "] PID %u %s: " _fmt "\n", _pid, \
54*e536b197SMark Johnston 		    __func__, ##__VA_ARGS__);		\
557e5bf684SAlexander V. Chernikov 	}
567e5bf684SAlexander V. Chernikov 
57*e536b197SMark Johnston #define	NLP_LOG(_l, _nlp, _fmt, ...)			\
58*e536b197SMark Johnston 	NL_RAW_PID_LOG_##_l(_l, nlp_get_pid(_nlp), _fmt, ## __VA_ARGS__)
597e5bf684SAlexander V. Chernikov 
607e5bf684SAlexander V. Chernikov #if DEBUG_MAX_LEVEL>=LOG_DEBUG3
617e5bf684SAlexander V. Chernikov #define	NL_RAW_PID_LOG_LOG_DEBUG3	_NL_RAW_PID_LOG
627e5bf684SAlexander V. Chernikov #else
637e5bf684SAlexander V. Chernikov #define	NL_RAW_PID_LOG_LOG_DEBUG3(_l, _pid, _fmt, ...)
647e5bf684SAlexander V. Chernikov #endif
657e5bf684SAlexander V. Chernikov #if DEBUG_MAX_LEVEL>=LOG_DEBUG2
667e5bf684SAlexander V. Chernikov #define	NL_RAW_PID_LOG_LOG_DEBUG2	_NL_RAW_PID_LOG
677e5bf684SAlexander V. Chernikov #else
687e5bf684SAlexander V. Chernikov #define	NL_RAW_PID_LOG_LOG_DEBUG2(_l, _pid, _fmt, ...)
697e5bf684SAlexander V. Chernikov #endif
707e5bf684SAlexander V. Chernikov #if DEBUG_MAX_LEVEL>=LOG_DEBUG
717e5bf684SAlexander V. Chernikov #define	NL_RAW_PID_LOG_LOG_DEBUG	_NL_RAW_PID_LOG
727e5bf684SAlexander V. Chernikov #else
737e5bf684SAlexander V. Chernikov #define	NL_RAW_PID_LOG_LOG_DEBUG(_l, _pid, _fmt, ...)
747e5bf684SAlexander V. Chernikov #endif
757e5bf684SAlexander V. Chernikov #if DEBUG_MAX_LEVEL>=LOG_INFO
767e5bf684SAlexander V. Chernikov #define	NL_RAW_PID_LOG_LOG_INFO	_NL_RAW_PID_LOG
777e5bf684SAlexander V. Chernikov #else
787e5bf684SAlexander V. Chernikov #define	NL_RAW_PID_LOG_LOG_INFO(_l, _pid, _fmt, ...)
797e5bf684SAlexander V. Chernikov #endif
807e5bf684SAlexander V. Chernikov #define	NL_RAW_PID_LOG_LOG_NOTICE	_NL_RAW_PID_LOG
817e5bf684SAlexander V. Chernikov #define	NL_RAW_PID_LOG_LOG_ERR         _NL_RAW_PID_LOG
827e5bf684SAlexander V. Chernikov #define	NL_RAW_PID_LOG_LOG_WARNING	_NL_RAW_PID_LOG
837e5bf684SAlexander V. Chernikov 
84*e536b197SMark Johnston #endif	/* _KERNEL */
85*e536b197SMark Johnston #endif	/* !_NETLINK_NETLINK_DEBUG_H_ */
86