about summary refs log tree commit diff
path: root/src/core/devices/nm-device-logging.h
blob: c2602189f3929338ae4e1578b497af75f07bb628 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Copyright (C) 2014 Red Hat, Inc.
 */

#ifndef __NETWORKMANAGER_DEVICE_LOGGING_H__
#define __NETWORKMANAGER_DEVICE_LOGGING_H__

#include "nm-device.h"

#if !_NM_CC_SUPPORT_GENERIC
#define _NM_DEVICE_CAST(self) ((NMDevice *) (self))
#elif !defined(_NMLOG_DEVICE_TYPE)
#define _NM_DEVICE_CAST(self) \
    _Generic((self), NMDevice * : ((NMDevice *) (self)), NMDevice *const : ((NMDevice *) (self)))
#else
#define _NM_DEVICE_CAST(self) \
    _Generic((self), \
                 _NMLOG_DEVICE_TYPE *      : ((NMDevice *) (self)), \
                 _NMLOG_DEVICE_TYPE * const: ((NMDevice *) (self)), \
                 NMDevice *                : ((NMDevice *) (self)), \
                 NMDevice *           const: ((NMDevice *) (self)))
#endif

#undef _NMLOG_ENABLED
#define _NMLOG_ENABLED(level, domain) (nm_logging_enabled((level), (domain)))
#define _NMLOG(level, domain, ...)                                                       \
    G_STMT_START                                                                         \
    {                                                                                    \
        const NMLogLevel  _level  = (level);                                             \
        const NMLogDomain _domain = (domain);                                            \
                                                                                         \
        if (nm_logging_enabled(_level, _domain)) {                                       \
            typeof(*self) *const _self   = (self);                                       \
            const char *const    _ifname = _nm_device_get_iface(_NM_DEVICE_CAST(_self)); \
                                                                                         \
            nm_log_obj(_level,                                                           \
                       _domain,                                                          \
                       _ifname,                                                          \
                       NULL,                                                             \
                       _self,                                                            \
                       "device",                                                         \
                       "%s%s%s: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__),                    \
                       NM_PRINT_FMT_QUOTED(_ifname, "(", _ifname, ")", "[null]")         \
                           _NM_UTILS_MACRO_REST(__VA_ARGS__));                           \
        }                                                                                \
    }                                                                                    \
    G_STMT_END

#endif /* __NETWORKMANAGER_DEVICE_LOGGING_H__ */