Coverage Report

Created: 2026-01-25 06:17

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/frr/lib/zlog.h
Line
Count
Source
1
// SPDX-License-Identifier: ISC
2
/*
3
 * Copyright (c) 2015-19  David Lamparter, for NetDEF, Inc.
4
 */
5
6
#ifndef _FRR_ZLOG_H
7
#define _FRR_ZLOG_H
8
9
#include <stdarg.h>
10
#include <stdbool.h>
11
#include <stdint.h>
12
#include <string.h>
13
#include <syslog.h>
14
#include <unistd.h>
15
#include <sys/uio.h>
16
17
#include <assert.h>
18
19
#include "atomlist.h"
20
#include "frrcu.h"
21
#include "memory.h"
22
#include "hook.h"
23
#include "printfrr.h"
24
25
#ifdef __cplusplus
26
extern "C" {
27
#endif
28
29
DECLARE_MGROUP(LOG);
30
31
extern char zlog_prefix[];
32
extern size_t zlog_prefixsz;
33
extern int zlog_tmpdirfd;
34
extern int zlog_instance;
35
extern const char *zlog_progname;
36
37
struct xref_logmsg {
38
  struct xref xref;
39
40
  const char *fmtstring;
41
  uint32_t priority;
42
  uint32_t ec;
43
  const char *args;
44
};
45
46
/* whether flag was added in config mode or enable mode */
47
0
#define LOGMSG_FLAG_EPHEMERAL (1 << 0)
48
0
#define LOGMSG_FLAG_PERSISTENT  (1 << 1)
49
50
struct xrefdata_logmsg {
51
  struct xrefdata xrefdata;
52
53
  uint8_t fl_print_bt;
54
};
55
56
/* These functions are set up to write to stdout/stderr without explicit
57
 * initialization and/or before config load.  There is no need to call e.g.
58
 * fprintf(stderr, ...) just because it's "too early" at startup.  Depending
59
 * on context, it may still be the right thing to use fprintf though -- try to
60
 * determine whether something is a log message or something else.
61
 */
62
63
extern void vzlogx(const struct xref_logmsg *xref, int prio, const char *fmt,
64
       va_list ap) PRINTFRR(3, 0);
65
1.38k
#define vzlog(prio, ...) vzlogx(NULL, prio, __VA_ARGS__)
66
67
PRINTFRR(2, 3)
68
static inline void zlog(int prio, const char *fmt, ...)
69
1.38k
{
70
1.38k
  va_list ap;
71
72
1.38k
  va_start(ap, fmt);
73
1.38k
  vzlog(prio, fmt, ap);
74
1.38k
  va_end(ap);
75
1.38k
}
Unexecuted instantiation: ospf_main.c:zlog
Unexecuted instantiation: frr-ospf-route-map.yang.c:zlog
Unexecuted instantiation: ospf_bfd.c:zlog
Unexecuted instantiation: ospf_dump.c:zlog
Unexecuted instantiation: ospf_dump_api.c:zlog
Unexecuted instantiation: ospf_errors.c:zlog
Unexecuted instantiation: ospf_interface.c:zlog
Unexecuted instantiation: ospf_lsa.c:zlog
Unexecuted instantiation: ospf_lsdb.c:zlog
Unexecuted instantiation: ospf_neighbor.c:zlog
Unexecuted instantiation: ospf_network.c:zlog
Unexecuted instantiation: ospf_nsm.c:zlog
Unexecuted instantiation: ospf_opaque.c:zlog
Unexecuted instantiation: ospf_packet.c:zlog
Unexecuted instantiation: ospf_ri.c:zlog
Unexecuted instantiation: ospf_routemap.c:zlog
Unexecuted instantiation: ospf_routemap_nb.c:zlog
Unexecuted instantiation: ospf_routemap_nb_config.c:zlog
Unexecuted instantiation: ospf_spf.c:zlog
Unexecuted instantiation: ospf_ti_lfa.c:zlog
Unexecuted instantiation: ospf_sr.c:zlog
Unexecuted instantiation: ospf_te.c:zlog
Unexecuted instantiation: ospf_vty.c:zlog
Unexecuted instantiation: ospf_zebra.c:zlog
Unexecuted instantiation: ospfd.c:zlog
Unexecuted instantiation: ospf_gr_helper.c:zlog
Unexecuted instantiation: ospf_abr.c:zlog
Unexecuted instantiation: ospf_apiserver.c:zlog
Unexecuted instantiation: ospf_asbr.c:zlog
Unexecuted instantiation: ospf_ase.c:zlog
Unexecuted instantiation: ospf_ext.c:zlog
Unexecuted instantiation: ospf_flood.c:zlog
Unexecuted instantiation: ospf_gr.c:zlog
Unexecuted instantiation: ospf_ia.c:zlog
Unexecuted instantiation: ospf_ism.c:zlog
Unexecuted instantiation: ospf_ldp_sync.c:zlog
Unexecuted instantiation: ospf_route.c:zlog
Unexecuted instantiation: ospf_api.c:zlog
Unexecuted instantiation: affinitymap.c:zlog
Unexecuted instantiation: affinitymap_cli.c:zlog
Unexecuted instantiation: affinitymap_northbound.c:zlog
Unexecuted instantiation: agg_table.c:zlog
Unexecuted instantiation: asn.c:zlog
Unexecuted instantiation: bfd.c:zlog
Unexecuted instantiation: buffer.c:zlog
Unexecuted instantiation: command.c:zlog
Unexecuted instantiation: command_graph.c:zlog
Unexecuted instantiation: command_lex.c:zlog
Unexecuted instantiation: command_match.c:zlog
Unexecuted instantiation: command_parse.c:zlog
Unexecuted instantiation: cspf.c:zlog
Unexecuted instantiation: debug.c:zlog
Unexecuted instantiation: distribute.c:zlog
Unexecuted instantiation: ferr.c:zlog
Unexecuted instantiation: filter.c:zlog
Unexecuted instantiation: filter_cli.c:zlog
Unexecuted instantiation: filter_nb.c:zlog
Unexecuted instantiation: flex_algo.c:zlog
Unexecuted instantiation: frr_pthread.c:zlog
Unexecuted instantiation: grammar_sandbox.c:zlog
Unexecuted instantiation: hash.c:zlog
Unexecuted instantiation: id_alloc.c:zlog
Unexecuted instantiation: if.c:zlog
Unexecuted instantiation: if_rmap.c:zlog
Unexecuted instantiation: json.c:zlog
Unexecuted instantiation: keychain.c:zlog
Unexecuted instantiation: ldp_sync.c:zlog
Unexecuted instantiation: lib_errors.c:zlog
Unexecuted instantiation: lib_vty.c:zlog
Unexecuted instantiation: libfrr.c:zlog
Unexecuted instantiation: link_state.c:zlog
log.c:zlog
Line
Count
Source
69
1.38k
{
70
1.38k
  va_list ap;
71
72
1.38k
  va_start(ap, fmt);
73
1.38k
  vzlog(prio, fmt, ap);
74
  va_end(ap);
75
1.38k
}
Unexecuted instantiation: log_filter.c:zlog
Unexecuted instantiation: log_vty.c:zlog
Unexecuted instantiation: memory.c:zlog
Unexecuted instantiation: mgmt_be_client.c:zlog
Unexecuted instantiation: mgmt_fe_client.c:zlog
Unexecuted instantiation: mgmt_msg.c:zlog
Unexecuted instantiation: mlag.c:zlog
Unexecuted instantiation: srv6.c:zlog
Unexecuted instantiation: network.c:zlog
Unexecuted instantiation: nexthop.c:zlog
Unexecuted instantiation: netns_linux.c:zlog
Unexecuted instantiation: nexthop_group.c:zlog
Unexecuted instantiation: northbound.c:zlog
Unexecuted instantiation: northbound_cli.c:zlog
Unexecuted instantiation: northbound_db.c:zlog
Unexecuted instantiation: pid_output.c:zlog
Unexecuted instantiation: plist.c:zlog
Unexecuted instantiation: prefix.c:zlog
Unexecuted instantiation: privs.c:zlog
Unexecuted instantiation: pullwr.c:zlog
Unexecuted instantiation: qobj.c:zlog
Unexecuted instantiation: routemap.c:zlog
Unexecuted instantiation: routemap_cli.c:zlog
Unexecuted instantiation: routemap_northbound.c:zlog
Unexecuted instantiation: sbuf.c:zlog
Unexecuted instantiation: sigevent.c:zlog
Unexecuted instantiation: skiplist.c:zlog
Unexecuted instantiation: sockopt.c:zlog
Unexecuted instantiation: sockunion.c:zlog
Unexecuted instantiation: spf_backoff.c:zlog
Unexecuted instantiation: srcdest_table.c:zlog
Unexecuted instantiation: stream.c:zlog
Unexecuted instantiation: systemd.c:zlog
Unexecuted instantiation: table.c:zlog
Unexecuted instantiation: termtable.c:zlog
Unexecuted instantiation: event.c:zlog
Unexecuted instantiation: vrf.c:zlog
Unexecuted instantiation: vty.c:zlog
Unexecuted instantiation: wheel.c:zlog
Unexecuted instantiation: workqueue.c:zlog
Unexecuted instantiation: xref.c:zlog
Unexecuted instantiation: yang.c:zlog
Unexecuted instantiation: yang_translator.c:zlog
Unexecuted instantiation: yang_wrappers.c:zlog
Unexecuted instantiation: zclient.c:zlog
Unexecuted instantiation: zlog.c:zlog
Unexecuted instantiation: zlog_5424.c:zlog
Unexecuted instantiation: zlog_5424_cli.c:zlog
Unexecuted instantiation: zlog_live.c:zlog
Unexecuted instantiation: zlog_targets.c:zlog
Unexecuted instantiation: routing_nb.c:zlog
Unexecuted instantiation: routing_nb_config.c:zlog
Unexecuted instantiation: tc.c:zlog
Unexecuted instantiation: frr-affinity-map.yang.c:zlog
Unexecuted instantiation: frr-filter.yang.c:zlog
Unexecuted instantiation: frr-if-rmap.yang.c:zlog
Unexecuted instantiation: frr-interface.yang.c:zlog
Unexecuted instantiation: frr-route-map.yang.c:zlog
Unexecuted instantiation: frr-route-types.yang.c:zlog
Unexecuted instantiation: frr-vrf.yang.c:zlog
Unexecuted instantiation: frr-routing.yang.c:zlog
Unexecuted instantiation: frr-nexthop.yang.c:zlog
Unexecuted instantiation: ietf-routing-types.yang.c:zlog
Unexecuted instantiation: ietf-interfaces.yang.c:zlog
Unexecuted instantiation: ietf-bgp-types.yang.c:zlog
Unexecuted instantiation: frr-module-translator.yang.c:zlog
Unexecuted instantiation: connected.c:zlog
Unexecuted instantiation: if_netlink.c:zlog
Unexecuted instantiation: interface.c:zlog
Unexecuted instantiation: ioctl.c:zlog
Unexecuted instantiation: ipforward_proc.c:zlog
Unexecuted instantiation: kernel_netlink.c:zlog
Unexecuted instantiation: label_manager.c:zlog
Unexecuted instantiation: main.c:zlog
Unexecuted instantiation: netconf_netlink.c:zlog
Unexecuted instantiation: redistribute.c:zlog
Unexecuted instantiation: router-id.c:zlog
Unexecuted instantiation: rt_netlink.c:zlog
Unexecuted instantiation: rtadv.c:zlog
Unexecuted instantiation: rtread_netlink.c:zlog
Unexecuted instantiation: rule_netlink.c:zlog
Unexecuted instantiation: table_manager.c:zlog
Unexecuted instantiation: tc_netlink.c:zlog
Unexecuted instantiation: zapi_msg.c:zlog
Unexecuted instantiation: zebra_affinitymap.c:zlog
Unexecuted instantiation: zebra_dplane.c:zlog
Unexecuted instantiation: zebra_errors.c:zlog
Unexecuted instantiation: zebra_gr.c:zlog
Unexecuted instantiation: zebra_l2.c:zlog
Unexecuted instantiation: zebra_l2_bridge_if.c:zlog
Unexecuted instantiation: zebra_evpn.c:zlog
Unexecuted instantiation: zebra_evpn_mac.c:zlog
Unexecuted instantiation: zebra_evpn_neigh.c:zlog
Unexecuted instantiation: zebra_mlag.c:zlog
Unexecuted instantiation: zebra_mlag_vty.c:zlog
Unexecuted instantiation: zebra_mpls.c:zlog
Unexecuted instantiation: zebra_mpls_netlink.c:zlog
Unexecuted instantiation: zebra_mpls_null.c:zlog
Unexecuted instantiation: zebra_mpls_vty.c:zlog
Unexecuted instantiation: zebra_srv6.c:zlog
Unexecuted instantiation: zebra_srv6_vty.c:zlog
Unexecuted instantiation: zebra_mroute.c:zlog
Unexecuted instantiation: zebra_nb.c:zlog
Unexecuted instantiation: zebra_nb_config.c:zlog
Unexecuted instantiation: zebra_nb_rpcs.c:zlog
Unexecuted instantiation: zebra_nb_state.c:zlog
Unexecuted instantiation: zebra_netns_id.c:zlog
Unexecuted instantiation: zebra_netns_notify.c:zlog
Unexecuted instantiation: zebra_nhg.c:zlog
Unexecuted instantiation: zebra_ns.c:zlog
Unexecuted instantiation: zebra_opaque.c:zlog
Unexecuted instantiation: zebra_pbr.c:zlog
Unexecuted instantiation: zebra_ptm.c:zlog
Unexecuted instantiation: zebra_ptm_redistribute.c:zlog
Unexecuted instantiation: zebra_pw.c:zlog
Unexecuted instantiation: zebra_rib.c:zlog
Unexecuted instantiation: zebra_router.c:zlog
Unexecuted instantiation: zebra_rnh.c:zlog
Unexecuted instantiation: zebra_routemap.c:zlog
Unexecuted instantiation: zebra_routemap_nb.c:zlog
Unexecuted instantiation: zebra_routemap_nb_config.c:zlog
Unexecuted instantiation: zebra_script.c:zlog
Unexecuted instantiation: zebra_srte.c:zlog
Unexecuted instantiation: zebra_tc.c:zlog
Unexecuted instantiation: zebra_vrf.c:zlog
Unexecuted instantiation: zebra_vty.c:zlog
Unexecuted instantiation: zebra_vxlan.c:zlog
Unexecuted instantiation: zebra_vxlan_if.c:zlog
Unexecuted instantiation: zebra_evpn_mh.c:zlog
Unexecuted instantiation: zebra_neigh.c:zlog
Unexecuted instantiation: zserv.c:zlog
Unexecuted instantiation: debug_nl.c:zlog
Unexecuted instantiation: frr-zebra.yang.c:zlog
Unexecuted instantiation: frr-zebra-route-map.yang.c:zlog
Unexecuted instantiation: bgp_main.c:zlog
Unexecuted instantiation: frr-bgp-types.yang.c:zlog
Unexecuted instantiation: frr-bgp.yang.c:zlog
Unexecuted instantiation: frr-bgp-common-structure.yang.c:zlog
Unexecuted instantiation: frr-bgp-common.yang.c:zlog
Unexecuted instantiation: frr-bgp-common-multiprotocol.yang.c:zlog
Unexecuted instantiation: frr-bgp-neighbor.yang.c:zlog
Unexecuted instantiation: frr-bgp-peer-group.yang.c:zlog
Unexecuted instantiation: frr-bgp-bmp.yang.c:zlog
Unexecuted instantiation: frr-bgp-rpki.yang.c:zlog
Unexecuted instantiation: frr-deviations-bgp-datacenter.yang.c:zlog
Unexecuted instantiation: frr-bgp-filter.yang.c:zlog
Unexecuted instantiation: frr-bgp-route-map.yang.c:zlog
Unexecuted instantiation: bgp_attr.c:zlog
Unexecuted instantiation: bgp_attr_evpn.c:zlog
Unexecuted instantiation: bgp_clist.c:zlog
Unexecuted instantiation: bgp_community.c:zlog
Unexecuted instantiation: bgp_community_alias.c:zlog
Unexecuted instantiation: bgp_debug.c:zlog
Unexecuted instantiation: bgp_dump.c:zlog
Unexecuted instantiation: bgp_ecommunity.c:zlog
Unexecuted instantiation: bgp_errors.c:zlog
Unexecuted instantiation: bgp_evpn.c:zlog
Unexecuted instantiation: bgp_evpn_mh.c:zlog
Unexecuted instantiation: bgp_evpn_vty.c:zlog
Unexecuted instantiation: bgp_filter.c:zlog
Unexecuted instantiation: bgp_flowspec_vty.c:zlog
Unexecuted instantiation: bgp_fsm.c:zlog
Unexecuted instantiation: bgp_io.c:zlog
Unexecuted instantiation: bgp_keepalives.c:zlog
Unexecuted instantiation: bgp_labelpool.c:zlog
Unexecuted instantiation: bgp_lcommunity.c:zlog
Unexecuted instantiation: bgp_mac.c:zlog
Unexecuted instantiation: bgp_mpath.c:zlog
Unexecuted instantiation: bgp_mplsvpn.c:zlog
Unexecuted instantiation: bgp_network.c:zlog
Unexecuted instantiation: bgp_nexthop.c:zlog
Unexecuted instantiation: bgp_nht.c:zlog
Unexecuted instantiation: bgp_packet.c:zlog
Unexecuted instantiation: bgp_pbr.c:zlog
Unexecuted instantiation: bgp_rd.c:zlog
Unexecuted instantiation: bgp_regex.c:zlog
Unexecuted instantiation: bgp_route.c:zlog
Unexecuted instantiation: bgp_routemap.c:zlog
Unexecuted instantiation: bgp_routemap_nb.c:zlog
Unexecuted instantiation: bgp_routemap_nb_config.c:zlog
Unexecuted instantiation: bgp_table.c:zlog
Unexecuted instantiation: bgp_updgrp.c:zlog
Unexecuted instantiation: bgp_updgrp_adv.c:zlog
Unexecuted instantiation: bgp_updgrp_packet.c:zlog
Unexecuted instantiation: bgp_vpn.c:zlog
Unexecuted instantiation: bgp_vty.c:zlog
Unexecuted instantiation: bgp_zebra.c:zlog
Unexecuted instantiation: bgpd.c:zlog
Unexecuted instantiation: bgp_rfapi_cfg.c:zlog
Unexecuted instantiation: rfapi_import.c:zlog
Unexecuted instantiation: rfapi.c:zlog
Unexecuted instantiation: rfapi_ap.c:zlog
Unexecuted instantiation: rfapi_encap_tlv.c:zlog
Unexecuted instantiation: rfapi_nve_addr.c:zlog
Unexecuted instantiation: rfapi_monitor.c:zlog
Unexecuted instantiation: rfapi_rib.c:zlog
Unexecuted instantiation: rfapi_vty.c:zlog
Unexecuted instantiation: vnc_debug.c:zlog
Unexecuted instantiation: vnc_export_bgp.c:zlog
Unexecuted instantiation: vnc_export_table.c:zlog
Unexecuted instantiation: vnc_import_bgp.c:zlog
Unexecuted instantiation: vnc_zebra.c:zlog
Unexecuted instantiation: bgp_addpath.c:zlog
Unexecuted instantiation: bgp_advertise.c:zlog
Unexecuted instantiation: bgp_aspath.c:zlog
Unexecuted instantiation: bgp_bfd.c:zlog
Unexecuted instantiation: bgp_conditional_adv.c:zlog
Unexecuted instantiation: bgp_damp.c:zlog
Unexecuted instantiation: bgp_encap_tlv.c:zlog
Unexecuted instantiation: bgp_flowspec.c:zlog
Unexecuted instantiation: bgp_flowspec_util.c:zlog
Unexecuted instantiation: bgp_label.c:zlog
Unexecuted instantiation: bgp_open.c:zlog
Unexecuted instantiation: rfp_example.c:zlog
Unexecuted instantiation: pim_addr.c:zlog
Unexecuted instantiation: pim_assert.c:zlog
Unexecuted instantiation: pim_bfd.c:zlog
Unexecuted instantiation: pim_bsm.c:zlog
Unexecuted instantiation: pim_cmd_common.c:zlog
Unexecuted instantiation: pim_errors.c:zlog
Unexecuted instantiation: pim_hello.c:zlog
Unexecuted instantiation: pim_iface.c:zlog
Unexecuted instantiation: pim_ifchannel.c:zlog
Unexecuted instantiation: pim_instance.c:zlog
Unexecuted instantiation: pim_join.c:zlog
Unexecuted instantiation: pim_jp_agg.c:zlog
Unexecuted instantiation: pim_macro.c:zlog
Unexecuted instantiation: pim_mroute.c:zlog
Unexecuted instantiation: pim_msg.c:zlog
Unexecuted instantiation: pim_nb.c:zlog
Unexecuted instantiation: pim_nb_config.c:zlog
Unexecuted instantiation: pim_neighbor.c:zlog
Unexecuted instantiation: pim_nht.c:zlog
Unexecuted instantiation: pim_oil.c:zlog
Unexecuted instantiation: pim_pim.c:zlog
Unexecuted instantiation: pim_routemap.c:zlog
Unexecuted instantiation: pim_rp.c:zlog
Unexecuted instantiation: pim_rpf.c:zlog
Unexecuted instantiation: pim_sock.c:zlog
Unexecuted instantiation: pim_ssm.c:zlog
Unexecuted instantiation: pim_ssmpingd.c:zlog
Unexecuted instantiation: pim_static.c:zlog
Unexecuted instantiation: pim_str.c:zlog
Unexecuted instantiation: pim_tib.c:zlog
Unexecuted instantiation: pim_time.c:zlog
Unexecuted instantiation: pim_tlv.c:zlog
Unexecuted instantiation: pim_upstream.c:zlog
Unexecuted instantiation: pim_util.c:zlog
Unexecuted instantiation: pim_vty.c:zlog
Unexecuted instantiation: pim_zebra.c:zlog
Unexecuted instantiation: pim_zlookup.c:zlog
Unexecuted instantiation: pim_vxlan.c:zlog
Unexecuted instantiation: pim_register.c:zlog
Unexecuted instantiation: pimd.c:zlog
Unexecuted instantiation: pim_cmd.c:zlog
Unexecuted instantiation: pim_igmp.c:zlog
Unexecuted instantiation: pim_igmp_mtrace.c:zlog
Unexecuted instantiation: pim_igmpv2.c:zlog
Unexecuted instantiation: pim_igmpv3.c:zlog
Unexecuted instantiation: pim_main.c:zlog
Unexecuted instantiation: pim_mlag.c:zlog
Unexecuted instantiation: pim_msdp.c:zlog
Unexecuted instantiation: pim_msdp_packet.c:zlog
Unexecuted instantiation: pim_msdp_socket.c:zlog
Unexecuted instantiation: pim_signals.c:zlog
Unexecuted instantiation: pim_zpthread.c:zlog
Unexecuted instantiation: frr-pim.yang.c:zlog
Unexecuted instantiation: frr-pim-rp.yang.c:zlog
Unexecuted instantiation: frr-gmp.yang.c:zlog
76
77
PRINTFRR(2, 3)
78
static inline void zlog_ref(const struct xref_logmsg *xref,
79
          const char *fmt, ...)
80
0
{
81
0
  va_list ap;
82
0
83
0
  va_start(ap, fmt);
84
0
  vzlogx(xref, xref->priority, fmt, ap);
85
0
  va_end(ap);
86
0
}
Unexecuted instantiation: ospf_main.c:zlog_ref
Unexecuted instantiation: frr-ospf-route-map.yang.c:zlog_ref
Unexecuted instantiation: ospf_bfd.c:zlog_ref
Unexecuted instantiation: ospf_dump.c:zlog_ref
Unexecuted instantiation: ospf_dump_api.c:zlog_ref
Unexecuted instantiation: ospf_errors.c:zlog_ref
Unexecuted instantiation: ospf_interface.c:zlog_ref
Unexecuted instantiation: ospf_lsa.c:zlog_ref
Unexecuted instantiation: ospf_lsdb.c:zlog_ref
Unexecuted instantiation: ospf_neighbor.c:zlog_ref
Unexecuted instantiation: ospf_network.c:zlog_ref
Unexecuted instantiation: ospf_nsm.c:zlog_ref
Unexecuted instantiation: ospf_opaque.c:zlog_ref
Unexecuted instantiation: ospf_packet.c:zlog_ref
Unexecuted instantiation: ospf_ri.c:zlog_ref
Unexecuted instantiation: ospf_routemap.c:zlog_ref
Unexecuted instantiation: ospf_routemap_nb.c:zlog_ref
Unexecuted instantiation: ospf_routemap_nb_config.c:zlog_ref
Unexecuted instantiation: ospf_spf.c:zlog_ref
Unexecuted instantiation: ospf_ti_lfa.c:zlog_ref
Unexecuted instantiation: ospf_sr.c:zlog_ref
Unexecuted instantiation: ospf_te.c:zlog_ref
Unexecuted instantiation: ospf_vty.c:zlog_ref
Unexecuted instantiation: ospf_zebra.c:zlog_ref
Unexecuted instantiation: ospfd.c:zlog_ref
Unexecuted instantiation: ospf_gr_helper.c:zlog_ref
Unexecuted instantiation: ospf_abr.c:zlog_ref
Unexecuted instantiation: ospf_apiserver.c:zlog_ref
Unexecuted instantiation: ospf_asbr.c:zlog_ref
Unexecuted instantiation: ospf_ase.c:zlog_ref
Unexecuted instantiation: ospf_ext.c:zlog_ref
Unexecuted instantiation: ospf_flood.c:zlog_ref
Unexecuted instantiation: ospf_gr.c:zlog_ref
Unexecuted instantiation: ospf_ia.c:zlog_ref
Unexecuted instantiation: ospf_ism.c:zlog_ref
Unexecuted instantiation: ospf_ldp_sync.c:zlog_ref
Unexecuted instantiation: ospf_route.c:zlog_ref
Unexecuted instantiation: ospf_api.c:zlog_ref
Unexecuted instantiation: affinitymap.c:zlog_ref
Unexecuted instantiation: affinitymap_cli.c:zlog_ref
Unexecuted instantiation: affinitymap_northbound.c:zlog_ref
Unexecuted instantiation: agg_table.c:zlog_ref
Unexecuted instantiation: asn.c:zlog_ref
Unexecuted instantiation: bfd.c:zlog_ref
Unexecuted instantiation: buffer.c:zlog_ref
Unexecuted instantiation: command.c:zlog_ref
Unexecuted instantiation: command_graph.c:zlog_ref
Unexecuted instantiation: command_lex.c:zlog_ref
Unexecuted instantiation: command_match.c:zlog_ref
Unexecuted instantiation: command_parse.c:zlog_ref
Unexecuted instantiation: cspf.c:zlog_ref
Unexecuted instantiation: debug.c:zlog_ref
Unexecuted instantiation: distribute.c:zlog_ref
Unexecuted instantiation: ferr.c:zlog_ref
Unexecuted instantiation: filter.c:zlog_ref
Unexecuted instantiation: filter_cli.c:zlog_ref
Unexecuted instantiation: filter_nb.c:zlog_ref
Unexecuted instantiation: flex_algo.c:zlog_ref
Unexecuted instantiation: frr_pthread.c:zlog_ref
Unexecuted instantiation: grammar_sandbox.c:zlog_ref
Unexecuted instantiation: hash.c:zlog_ref
Unexecuted instantiation: id_alloc.c:zlog_ref
Unexecuted instantiation: if.c:zlog_ref
Unexecuted instantiation: if_rmap.c:zlog_ref
Unexecuted instantiation: json.c:zlog_ref
Unexecuted instantiation: keychain.c:zlog_ref
Unexecuted instantiation: ldp_sync.c:zlog_ref
Unexecuted instantiation: lib_errors.c:zlog_ref
Unexecuted instantiation: lib_vty.c:zlog_ref
Unexecuted instantiation: libfrr.c:zlog_ref
Unexecuted instantiation: link_state.c:zlog_ref
Unexecuted instantiation: log.c:zlog_ref
Unexecuted instantiation: log_filter.c:zlog_ref
Unexecuted instantiation: log_vty.c:zlog_ref
Unexecuted instantiation: memory.c:zlog_ref
Unexecuted instantiation: mgmt_be_client.c:zlog_ref
Unexecuted instantiation: mgmt_fe_client.c:zlog_ref
Unexecuted instantiation: mgmt_msg.c:zlog_ref
Unexecuted instantiation: mlag.c:zlog_ref
Unexecuted instantiation: srv6.c:zlog_ref
Unexecuted instantiation: network.c:zlog_ref
Unexecuted instantiation: nexthop.c:zlog_ref
Unexecuted instantiation: netns_linux.c:zlog_ref
Unexecuted instantiation: nexthop_group.c:zlog_ref
Unexecuted instantiation: northbound.c:zlog_ref
Unexecuted instantiation: northbound_cli.c:zlog_ref
Unexecuted instantiation: northbound_db.c:zlog_ref
Unexecuted instantiation: pid_output.c:zlog_ref
Unexecuted instantiation: plist.c:zlog_ref
Unexecuted instantiation: prefix.c:zlog_ref
Unexecuted instantiation: privs.c:zlog_ref
Unexecuted instantiation: pullwr.c:zlog_ref
Unexecuted instantiation: qobj.c:zlog_ref
Unexecuted instantiation: routemap.c:zlog_ref
Unexecuted instantiation: routemap_cli.c:zlog_ref
Unexecuted instantiation: routemap_northbound.c:zlog_ref
Unexecuted instantiation: sbuf.c:zlog_ref
Unexecuted instantiation: sigevent.c:zlog_ref
Unexecuted instantiation: skiplist.c:zlog_ref
Unexecuted instantiation: sockopt.c:zlog_ref
Unexecuted instantiation: sockunion.c:zlog_ref
Unexecuted instantiation: spf_backoff.c:zlog_ref
Unexecuted instantiation: srcdest_table.c:zlog_ref
Unexecuted instantiation: stream.c:zlog_ref
Unexecuted instantiation: systemd.c:zlog_ref
Unexecuted instantiation: table.c:zlog_ref
Unexecuted instantiation: termtable.c:zlog_ref
Unexecuted instantiation: event.c:zlog_ref
Unexecuted instantiation: vrf.c:zlog_ref
Unexecuted instantiation: vty.c:zlog_ref
Unexecuted instantiation: wheel.c:zlog_ref
Unexecuted instantiation: workqueue.c:zlog_ref
Unexecuted instantiation: xref.c:zlog_ref
Unexecuted instantiation: yang.c:zlog_ref
Unexecuted instantiation: yang_translator.c:zlog_ref
Unexecuted instantiation: yang_wrappers.c:zlog_ref
Unexecuted instantiation: zclient.c:zlog_ref
Unexecuted instantiation: zlog.c:zlog_ref
Unexecuted instantiation: zlog_5424.c:zlog_ref
Unexecuted instantiation: zlog_5424_cli.c:zlog_ref
Unexecuted instantiation: zlog_live.c:zlog_ref
Unexecuted instantiation: zlog_targets.c:zlog_ref
Unexecuted instantiation: routing_nb.c:zlog_ref
Unexecuted instantiation: routing_nb_config.c:zlog_ref
Unexecuted instantiation: tc.c:zlog_ref
Unexecuted instantiation: frr-affinity-map.yang.c:zlog_ref
Unexecuted instantiation: frr-filter.yang.c:zlog_ref
Unexecuted instantiation: frr-if-rmap.yang.c:zlog_ref
Unexecuted instantiation: frr-interface.yang.c:zlog_ref
Unexecuted instantiation: frr-route-map.yang.c:zlog_ref
Unexecuted instantiation: frr-route-types.yang.c:zlog_ref
Unexecuted instantiation: frr-vrf.yang.c:zlog_ref
Unexecuted instantiation: frr-routing.yang.c:zlog_ref
Unexecuted instantiation: frr-nexthop.yang.c:zlog_ref
Unexecuted instantiation: ietf-routing-types.yang.c:zlog_ref
Unexecuted instantiation: ietf-interfaces.yang.c:zlog_ref
Unexecuted instantiation: ietf-bgp-types.yang.c:zlog_ref
Unexecuted instantiation: frr-module-translator.yang.c:zlog_ref
Unexecuted instantiation: connected.c:zlog_ref
Unexecuted instantiation: if_netlink.c:zlog_ref
Unexecuted instantiation: interface.c:zlog_ref
Unexecuted instantiation: ioctl.c:zlog_ref
Unexecuted instantiation: ipforward_proc.c:zlog_ref
Unexecuted instantiation: kernel_netlink.c:zlog_ref
Unexecuted instantiation: label_manager.c:zlog_ref
Unexecuted instantiation: main.c:zlog_ref
Unexecuted instantiation: netconf_netlink.c:zlog_ref
Unexecuted instantiation: redistribute.c:zlog_ref
Unexecuted instantiation: router-id.c:zlog_ref
Unexecuted instantiation: rt_netlink.c:zlog_ref
Unexecuted instantiation: rtadv.c:zlog_ref
Unexecuted instantiation: rtread_netlink.c:zlog_ref
Unexecuted instantiation: rule_netlink.c:zlog_ref
Unexecuted instantiation: table_manager.c:zlog_ref
Unexecuted instantiation: tc_netlink.c:zlog_ref
Unexecuted instantiation: zapi_msg.c:zlog_ref
Unexecuted instantiation: zebra_affinitymap.c:zlog_ref
Unexecuted instantiation: zebra_dplane.c:zlog_ref
Unexecuted instantiation: zebra_errors.c:zlog_ref
Unexecuted instantiation: zebra_gr.c:zlog_ref
Unexecuted instantiation: zebra_l2.c:zlog_ref
Unexecuted instantiation: zebra_l2_bridge_if.c:zlog_ref
Unexecuted instantiation: zebra_evpn.c:zlog_ref
Unexecuted instantiation: zebra_evpn_mac.c:zlog_ref
Unexecuted instantiation: zebra_evpn_neigh.c:zlog_ref
Unexecuted instantiation: zebra_mlag.c:zlog_ref
Unexecuted instantiation: zebra_mlag_vty.c:zlog_ref
Unexecuted instantiation: zebra_mpls.c:zlog_ref
Unexecuted instantiation: zebra_mpls_netlink.c:zlog_ref
Unexecuted instantiation: zebra_mpls_null.c:zlog_ref
Unexecuted instantiation: zebra_mpls_vty.c:zlog_ref
Unexecuted instantiation: zebra_srv6.c:zlog_ref
Unexecuted instantiation: zebra_srv6_vty.c:zlog_ref
Unexecuted instantiation: zebra_mroute.c:zlog_ref
Unexecuted instantiation: zebra_nb.c:zlog_ref
Unexecuted instantiation: zebra_nb_config.c:zlog_ref
Unexecuted instantiation: zebra_nb_rpcs.c:zlog_ref
Unexecuted instantiation: zebra_nb_state.c:zlog_ref
Unexecuted instantiation: zebra_netns_id.c:zlog_ref
Unexecuted instantiation: zebra_netns_notify.c:zlog_ref
Unexecuted instantiation: zebra_nhg.c:zlog_ref
Unexecuted instantiation: zebra_ns.c:zlog_ref
Unexecuted instantiation: zebra_opaque.c:zlog_ref
Unexecuted instantiation: zebra_pbr.c:zlog_ref
Unexecuted instantiation: zebra_ptm.c:zlog_ref
Unexecuted instantiation: zebra_ptm_redistribute.c:zlog_ref
Unexecuted instantiation: zebra_pw.c:zlog_ref
Unexecuted instantiation: zebra_rib.c:zlog_ref
Unexecuted instantiation: zebra_router.c:zlog_ref
Unexecuted instantiation: zebra_rnh.c:zlog_ref
Unexecuted instantiation: zebra_routemap.c:zlog_ref
Unexecuted instantiation: zebra_routemap_nb.c:zlog_ref
Unexecuted instantiation: zebra_routemap_nb_config.c:zlog_ref
Unexecuted instantiation: zebra_script.c:zlog_ref
Unexecuted instantiation: zebra_srte.c:zlog_ref
Unexecuted instantiation: zebra_tc.c:zlog_ref
Unexecuted instantiation: zebra_vrf.c:zlog_ref
Unexecuted instantiation: zebra_vty.c:zlog_ref
Unexecuted instantiation: zebra_vxlan.c:zlog_ref
Unexecuted instantiation: zebra_vxlan_if.c:zlog_ref
Unexecuted instantiation: zebra_evpn_mh.c:zlog_ref
Unexecuted instantiation: zebra_neigh.c:zlog_ref
Unexecuted instantiation: zserv.c:zlog_ref
Unexecuted instantiation: debug_nl.c:zlog_ref
Unexecuted instantiation: frr-zebra.yang.c:zlog_ref
Unexecuted instantiation: frr-zebra-route-map.yang.c:zlog_ref
Unexecuted instantiation: bgp_main.c:zlog_ref
Unexecuted instantiation: frr-bgp-types.yang.c:zlog_ref
Unexecuted instantiation: frr-bgp.yang.c:zlog_ref
Unexecuted instantiation: frr-bgp-common-structure.yang.c:zlog_ref
Unexecuted instantiation: frr-bgp-common.yang.c:zlog_ref
Unexecuted instantiation: frr-bgp-common-multiprotocol.yang.c:zlog_ref
Unexecuted instantiation: frr-bgp-neighbor.yang.c:zlog_ref
Unexecuted instantiation: frr-bgp-peer-group.yang.c:zlog_ref
Unexecuted instantiation: frr-bgp-bmp.yang.c:zlog_ref
Unexecuted instantiation: frr-bgp-rpki.yang.c:zlog_ref
Unexecuted instantiation: frr-deviations-bgp-datacenter.yang.c:zlog_ref
Unexecuted instantiation: frr-bgp-filter.yang.c:zlog_ref
Unexecuted instantiation: frr-bgp-route-map.yang.c:zlog_ref
Unexecuted instantiation: bgp_attr.c:zlog_ref
Unexecuted instantiation: bgp_attr_evpn.c:zlog_ref
Unexecuted instantiation: bgp_clist.c:zlog_ref
Unexecuted instantiation: bgp_community.c:zlog_ref
Unexecuted instantiation: bgp_community_alias.c:zlog_ref
Unexecuted instantiation: bgp_debug.c:zlog_ref
Unexecuted instantiation: bgp_dump.c:zlog_ref
Unexecuted instantiation: bgp_ecommunity.c:zlog_ref
Unexecuted instantiation: bgp_errors.c:zlog_ref
Unexecuted instantiation: bgp_evpn.c:zlog_ref
Unexecuted instantiation: bgp_evpn_mh.c:zlog_ref
Unexecuted instantiation: bgp_evpn_vty.c:zlog_ref
Unexecuted instantiation: bgp_filter.c:zlog_ref
Unexecuted instantiation: bgp_flowspec_vty.c:zlog_ref
Unexecuted instantiation: bgp_fsm.c:zlog_ref
Unexecuted instantiation: bgp_io.c:zlog_ref
Unexecuted instantiation: bgp_keepalives.c:zlog_ref
Unexecuted instantiation: bgp_labelpool.c:zlog_ref
Unexecuted instantiation: bgp_lcommunity.c:zlog_ref
Unexecuted instantiation: bgp_mac.c:zlog_ref
Unexecuted instantiation: bgp_mpath.c:zlog_ref
Unexecuted instantiation: bgp_mplsvpn.c:zlog_ref
Unexecuted instantiation: bgp_network.c:zlog_ref
Unexecuted instantiation: bgp_nexthop.c:zlog_ref
Unexecuted instantiation: bgp_nht.c:zlog_ref
Unexecuted instantiation: bgp_packet.c:zlog_ref
Unexecuted instantiation: bgp_pbr.c:zlog_ref
Unexecuted instantiation: bgp_rd.c:zlog_ref
Unexecuted instantiation: bgp_regex.c:zlog_ref
Unexecuted instantiation: bgp_route.c:zlog_ref
Unexecuted instantiation: bgp_routemap.c:zlog_ref
Unexecuted instantiation: bgp_routemap_nb.c:zlog_ref
Unexecuted instantiation: bgp_routemap_nb_config.c:zlog_ref
Unexecuted instantiation: bgp_table.c:zlog_ref
Unexecuted instantiation: bgp_updgrp.c:zlog_ref
Unexecuted instantiation: bgp_updgrp_adv.c:zlog_ref
Unexecuted instantiation: bgp_updgrp_packet.c:zlog_ref
Unexecuted instantiation: bgp_vpn.c:zlog_ref
Unexecuted instantiation: bgp_vty.c:zlog_ref
Unexecuted instantiation: bgp_zebra.c:zlog_ref
Unexecuted instantiation: bgpd.c:zlog_ref
Unexecuted instantiation: bgp_rfapi_cfg.c:zlog_ref
Unexecuted instantiation: rfapi_import.c:zlog_ref
Unexecuted instantiation: rfapi.c:zlog_ref
Unexecuted instantiation: rfapi_ap.c:zlog_ref
Unexecuted instantiation: rfapi_encap_tlv.c:zlog_ref
Unexecuted instantiation: rfapi_nve_addr.c:zlog_ref
Unexecuted instantiation: rfapi_monitor.c:zlog_ref
Unexecuted instantiation: rfapi_rib.c:zlog_ref
Unexecuted instantiation: rfapi_vty.c:zlog_ref
Unexecuted instantiation: vnc_debug.c:zlog_ref
Unexecuted instantiation: vnc_export_bgp.c:zlog_ref
Unexecuted instantiation: vnc_export_table.c:zlog_ref
Unexecuted instantiation: vnc_import_bgp.c:zlog_ref
Unexecuted instantiation: vnc_zebra.c:zlog_ref
Unexecuted instantiation: bgp_addpath.c:zlog_ref
Unexecuted instantiation: bgp_advertise.c:zlog_ref
Unexecuted instantiation: bgp_aspath.c:zlog_ref
Unexecuted instantiation: bgp_bfd.c:zlog_ref
Unexecuted instantiation: bgp_conditional_adv.c:zlog_ref
Unexecuted instantiation: bgp_damp.c:zlog_ref
Unexecuted instantiation: bgp_encap_tlv.c:zlog_ref
Unexecuted instantiation: bgp_flowspec.c:zlog_ref
Unexecuted instantiation: bgp_flowspec_util.c:zlog_ref
Unexecuted instantiation: bgp_label.c:zlog_ref
Unexecuted instantiation: bgp_open.c:zlog_ref
Unexecuted instantiation: rfp_example.c:zlog_ref
Unexecuted instantiation: pim_addr.c:zlog_ref
Unexecuted instantiation: pim_assert.c:zlog_ref
Unexecuted instantiation: pim_bfd.c:zlog_ref
Unexecuted instantiation: pim_bsm.c:zlog_ref
Unexecuted instantiation: pim_cmd_common.c:zlog_ref
Unexecuted instantiation: pim_errors.c:zlog_ref
Unexecuted instantiation: pim_hello.c:zlog_ref
Unexecuted instantiation: pim_iface.c:zlog_ref
Unexecuted instantiation: pim_ifchannel.c:zlog_ref
Unexecuted instantiation: pim_instance.c:zlog_ref
Unexecuted instantiation: pim_join.c:zlog_ref
Unexecuted instantiation: pim_jp_agg.c:zlog_ref
Unexecuted instantiation: pim_macro.c:zlog_ref
Unexecuted instantiation: pim_mroute.c:zlog_ref
Unexecuted instantiation: pim_msg.c:zlog_ref
Unexecuted instantiation: pim_nb.c:zlog_ref
Unexecuted instantiation: pim_nb_config.c:zlog_ref
Unexecuted instantiation: pim_neighbor.c:zlog_ref
Unexecuted instantiation: pim_nht.c:zlog_ref
Unexecuted instantiation: pim_oil.c:zlog_ref
Unexecuted instantiation: pim_pim.c:zlog_ref
Unexecuted instantiation: pim_routemap.c:zlog_ref
Unexecuted instantiation: pim_rp.c:zlog_ref
Unexecuted instantiation: pim_rpf.c:zlog_ref
Unexecuted instantiation: pim_sock.c:zlog_ref
Unexecuted instantiation: pim_ssm.c:zlog_ref
Unexecuted instantiation: pim_ssmpingd.c:zlog_ref
Unexecuted instantiation: pim_static.c:zlog_ref
Unexecuted instantiation: pim_str.c:zlog_ref
Unexecuted instantiation: pim_tib.c:zlog_ref
Unexecuted instantiation: pim_time.c:zlog_ref
Unexecuted instantiation: pim_tlv.c:zlog_ref
Unexecuted instantiation: pim_upstream.c:zlog_ref
Unexecuted instantiation: pim_util.c:zlog_ref
Unexecuted instantiation: pim_vty.c:zlog_ref
Unexecuted instantiation: pim_zebra.c:zlog_ref
Unexecuted instantiation: pim_zlookup.c:zlog_ref
Unexecuted instantiation: pim_vxlan.c:zlog_ref
Unexecuted instantiation: pim_register.c:zlog_ref
Unexecuted instantiation: pimd.c:zlog_ref
Unexecuted instantiation: pim_cmd.c:zlog_ref
Unexecuted instantiation: pim_igmp.c:zlog_ref
Unexecuted instantiation: pim_igmp_mtrace.c:zlog_ref
Unexecuted instantiation: pim_igmpv2.c:zlog_ref
Unexecuted instantiation: pim_igmpv3.c:zlog_ref
Unexecuted instantiation: pim_main.c:zlog_ref
Unexecuted instantiation: pim_mlag.c:zlog_ref
Unexecuted instantiation: pim_msdp.c:zlog_ref
Unexecuted instantiation: pim_msdp_packet.c:zlog_ref
Unexecuted instantiation: pim_msdp_socket.c:zlog_ref
Unexecuted instantiation: pim_signals.c:zlog_ref
Unexecuted instantiation: pim_zpthread.c:zlog_ref
Unexecuted instantiation: frr-pim.yang.c:zlog_ref
Unexecuted instantiation: frr-pim-rp.yang.c:zlog_ref
Unexecuted instantiation: frr-gmp.yang.c:zlog_ref
87
88
#define _zlog_ecref(ec_, prio, msg, ...)                                       \
89
  do {                                                                   \
90
    static struct xrefdata_logmsg _xrefdata = {                    \
91
      .xrefdata =                                            \
92
        {                                              \
93
          .xref = NULL,                          \
94
          .uid = {},                             \
95
          .hashstr = (msg),                      \
96
          .hashu32 = {(prio), (ec_)},            \
97
        },                                             \
98
    };                                                             \
99
    static const struct xref_logmsg _xref __attribute__(           \
100
      (used)) = {                                            \
101
      .xref = XREF_INIT(XREFT_LOGMSG, &_xrefdata.xrefdata,   \
102
            __func__),                           \
103
      .fmtstring = (msg),                                    \
104
      .priority = (prio),                                    \
105
      .ec = (ec_),                                           \
106
      .args = (#__VA_ARGS__),                                \
107
    };                                                             \
108
    XREF_LINK(_xref.xref);                                         \
109
    zlog_ref(&_xref, (msg), ##__VA_ARGS__);                        \
110
  } while (0)
111
112
#ifndef FUZZING
113
114
#define zlog_err(...)    _zlog_ecref(0, LOG_ERR, __VA_ARGS__)
115
#define zlog_warn(...)   _zlog_ecref(0, LOG_WARNING, __VA_ARGS__)
116
#define zlog_info(...)   _zlog_ecref(0, LOG_INFO, __VA_ARGS__)
117
#define zlog_notice(...) _zlog_ecref(0, LOG_NOTICE, __VA_ARGS__)
118
#define zlog_debug(...)  _zlog_ecref(0, LOG_DEBUG, __VA_ARGS__)
119
120
#define flog_err(ferr_id, format, ...)                                         \
121
  _zlog_ecref(ferr_id, LOG_ERR, format, ## __VA_ARGS__)
122
#define flog_warn(ferr_id, format, ...)                                        \
123
  _zlog_ecref(ferr_id, LOG_WARNING, format, ## __VA_ARGS__)
124
125
#define flog_err_sys(ferr_id, format, ...)                                     \
126
  _zlog_ecref(ferr_id, LOG_ERR, format, ## __VA_ARGS__)
127
128
#else
129
130
161
#define zlog_err(...) 0
131
86.9k
#define zlog_warn(...) 0
132
4.65k
#define zlog_info(...) 0
133
99.7k
#define zlog_notice(...) 0
134
944
#define zlog_debug(...) 0
135
136
6.54M
#define flog_err(ferr_id, format, ...) 0
137
32.1k
#define flog_warn(ferr_id, format, ...) 0
138
9
#define flog_err_sys(ferr_id, format, ...) 0
139
140
#endif
141
142
extern void zlog_sigsafe(const char *text, size_t len);
143
144
/* extra priority value to disable a target without deleting it */
145
8
#define ZLOG_DISABLED (LOG_EMERG-1)
146
147
/* zlog_msg encapsulates a particular logging call from somewhere in the code.
148
 * The same struct is passed around to all zlog_targets.
149
 *
150
 * This is used to defer formatting the log message until it is actually
151
 * requested by one of the targets.  If none of the targets needs the message
152
 * formatted, the formatting call is avoided entirely.
153
 *
154
 * This struct is opaque / private to the core zlog code.  Logging targets
155
 * should use zlog_msg_* functions to get text / timestamps / ... for a
156
 * message.
157
 */
158
159
struct zlog_msg;
160
161
extern int zlog_msg_prio(struct zlog_msg *msg);
162
extern const struct xref_logmsg *zlog_msg_xref(struct zlog_msg *msg);
163
164
/* text is NOT \0 terminated; instead there is a \n after textlen since the
165
 * logging targets would jump extra hoops otherwise for a single byte.  (the
166
 * \n is not included in textlen)
167
 *
168
 * calling this with NULL textlen is likely wrong.
169
 * use  "%.*s", (int)textlen, text  when passing to printf-like functions
170
 */
171
extern const char *zlog_msg_text(struct zlog_msg *msg, size_t *textlen);
172
173
extern void zlog_msg_args(struct zlog_msg *msg, size_t *hdrlen,
174
        size_t *n_argpos, const struct fmt_outpos **argpos);
175
176
/* timestamp formatting control flags */
177
178
/* sub-second digit count */
179
1.38k
#define ZLOG_TS_PREC    0xfU
180
181
/* 8601:   0000-00-00T00:00:00Z      (if used with ZLOG_TS_UTC)
182
 *         0000-00-00T00:00:00+00:00 (otherwise)
183
 * Legacy: 0000/00/00 00:00:00       (no TZ indicated!)
184
 */
185
4.16k
#define ZLOG_TS_ISO8601   (1 << 8)
186
5.55k
#define ZLOG_TS_LEGACY    (1 << 9)
187
188
/* default is local time zone */
189
4.16k
#define ZLOG_TS_UTC   (1 << 10)
190
191
struct timespec;
192
193
extern size_t zlog_msg_ts(struct zlog_msg *msg, struct fbuf *out,
194
        uint32_t flags);
195
extern void zlog_msg_tsraw(struct zlog_msg *msg, struct timespec *ts);
196
197
/* "mmm dd hh:mm:ss" for RFC3164 syslog.  Only ZLOG_TS_UTC for flags. */
198
extern size_t zlog_msg_ts_3164(struct zlog_msg *msg, struct fbuf *out,
199
             uint32_t flags);
200
201
/* currently just returns the current PID/TID since we never write another
202
 * thread's messages
203
 */
204
extern void zlog_msg_pid(struct zlog_msg *msg, intmax_t *pid, intmax_t *tid);
205
206
/* This list & struct implements the actual logging targets.  It is accessed
207
 * lock-free from all threads, and thus MUST only be changed atomically, i.e.
208
 * RCU.
209
 *
210
 * Since there's no atomic replace, the replacement action is an add followed
211
 * by a delete.  This means that during logging config changes, log messages
212
 * may be duplicated in the log target that is being changed.  The old entry
213
 * being changed MUST also at the very least not crash or do other stupid
214
 * things.
215
 *
216
 * This list and struct are NOT related to config.  Logging config is kept
217
 * separately, and results in creating appropriate zlog_target(s) to realize
218
 * the config.  Log targets may also be created from varying sources, e.g.
219
 * command line options, or VTY commands ("log monitor").
220
 *
221
 * struct zlog_target is intended to be embedded into a larger structure that
222
 * contains additional field for the specific logging target, e.g. an fd or
223
 * additional options.  It MUST be the first field in that larger struct.
224
 */
225
226
PREDECL_ATOMLIST(zlog_targets);
227
struct zlog_target {
228
  struct zlog_targets_item head;
229
230
  int prio_min;
231
232
  void (*logfn)(struct zlog_target *zt, struct zlog_msg *msg[],
233
          size_t nmsgs);
234
235
  /* for crash handlers, set to NULL if log target can't write crash logs
236
   * without possibly deadlocking (AS-Safe)
237
   *
238
   * text is not \0 terminated & split up into lines (e.g. no \n)
239
   */
240
  void (*logfn_sigsafe)(struct zlog_target *zt, const char *text,
241
            size_t len);
242
243
  struct rcu_head rcu_head;
244
};
245
246
/* make a copy for RCUpdating.  oldzt may be NULL to allocate a fresh one. */
247
extern struct zlog_target *zlog_target_clone(struct memtype *mt,
248
               struct zlog_target *oldzt,
249
               size_t size);
250
251
/* update the zlog_targets list;  both oldzt and newzt may be NULL.  You
252
 * still need to zlog_target_free() the old target afterwards if it wasn't
253
 * NULL.
254
 *
255
 * Returns oldzt so you can zlog_target_free(zlog_target_replace(old, new));
256
 * (Some log targets may need extra cleanup inbetween, but remember the old
257
 * target MUST remain functional until the end of the current RCU cycle.)
258
 */
259
extern struct zlog_target *zlog_target_replace(struct zlog_target *oldzt,
260
                 struct zlog_target *newzt);
261
262
/* Mostly for symmetry for zlog_target_clone(), just rcu_free() internally. */
263
#define zlog_target_free(mt, zt) \
264
0
  rcu_free(mt, zt, rcu_head)
265
266
extern void zlog_init(const char *progname, const char *protoname,
267
          unsigned short instance, uid_t uid, gid_t gid);
268
DECLARE_HOOK(zlog_init, (const char *progname, const char *protoname,
269
       unsigned short instance, uid_t uid, gid_t gid),
270
      (progname, protoname, instance, uid, gid));
271
272
extern void zlog_fini(void);
273
DECLARE_KOOH(zlog_fini, (), ());
274
275
extern void zlog_set_prefix_ec(bool enable);
276
extern bool zlog_get_prefix_ec(void);
277
extern void zlog_set_prefix_xid(bool enable);
278
extern bool zlog_get_prefix_xid(void);
279
280
/* for tools & test programs, i.e. anything not a daemon.
281
 * (no cleanup needed at exit)
282
 */
283
extern void zlog_aux_init(const char *prefix, int prio_min);
284
DECLARE_HOOK(zlog_aux_init, (const char *prefix, int prio_min),
285
          (prefix, prio_min));
286
287
extern void zlog_startup_end(void);
288
289
extern void zlog_tls_buffer_init(void);
290
extern void zlog_tls_buffer_flush(void);
291
extern void zlog_tls_buffer_fini(void);
292
293
/* Enable or disable 'immediate' output - default is to buffer messages. */
294
extern void zlog_set_immediate(bool set_p);
295
296
extern const char *zlog_priority_str(int priority);
297
298
#ifdef __cplusplus
299
}
300
#endif
301
302
#endif /* _FRR_ZLOG_H */