LCOV - code coverage report
Current view: top level - vnet/syslog - syslog.h (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 6 6 100.0 %
Date: 2023-07-05 22:20:52 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2018 Cisco and/or its affiliates.
       3             :  * Licensed under the Apache License, Version 2.0 (the "License");
       4             :  * you may not use this file except in compliance with the License.
       5             :  * You may obtain a copy of the License at:
       6             :  *
       7             :  *     http://www.apache.org/licenses/LICENSE-2.0
       8             :  *
       9             :  * Unless required by applicable law or agreed to in writing, software
      10             :  * distributed under the License is distributed on an "AS IS" BASIS,
      11             :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      12             :  * See the License for the specific language governing permissions and
      13             :  * limitations under the License.
      14             :  */
      15             : /**
      16             :  * @file syslog.h
      17             :  * RFC5424 syslog protocol declarations
      18             :  */
      19             : #ifndef __included_syslog_h__
      20             : #define __included_syslog_h__
      21             : 
      22             : #include <vlib/vlib.h>
      23             : #include <vnet/vnet.h>
      24             : #include <vnet/ip/ip4_packet.h>
      25             : 
      26             : /* syslog message facilities */
      27             : #define foreach_syslog_facility                 \
      28             :   _(0, KERNEL, "kernel")                        \
      29             :   _(1, USER_LEVEL, "user-level")                \
      30             :   _(2, MAIL_SYSTEM, "mail-system")              \
      31             :   _(3, SYSTEM_DAEMONS, "system-daemons")        \
      32             :   _(4, SEC_AUTH, "security-authorization")      \
      33             :   _(5, SYSLOGD, "syslogd")                      \
      34             :   _(6, LINE_PRINTER, "line-printer")            \
      35             :   _(7, NETWORK_NEWS, "network-news")            \
      36             :   _(8, UUCP, "uucp")                            \
      37             :   _(9, CLOCK, "clock-daemon")                   \
      38             :   _(11, FTP, "ftp-daemon")                      \
      39             :   _(12, NTP, "ntp-subsystem")                   \
      40             :   _(13, LOG_AUDIT, "log-audit")                 \
      41             :   _(14, LOG_ALERT, "log-alert")                 \
      42             :   _(16, LOCAL0, "local0")                       \
      43             :   _(17, LOCAL1, "local1")                       \
      44             :   _(18, LOCAL2, "local2")                       \
      45             :   _(19, LOCAL3, "local3")                       \
      46             :   _(20, LOCAL4, "local4")                       \
      47             :   _(21, LOCAL5, "local5")                       \
      48             :   _(22, LOCAL6, "local6")                       \
      49             :   _(23, LOCAL7, "local7")
      50             : 
      51             : typedef enum
      52             : {
      53             : #define _(v, N, s) SYSLOG_FACILITY_##N = v,
      54             :   foreach_syslog_facility
      55             : #undef _
      56             : } syslog_facility_t;
      57             : 
      58             : /* syslog message severities */
      59             : #define foreach_syslog_severity        \
      60             :   _(0, EMERGENCY, "emergency")         \
      61             :   _(1, ALERT, "alert")                 \
      62             :   _(2, CRITICAL, "critical")           \
      63             :   _(3, ERROR, "error")                 \
      64             :   _(4, WARNING, "warning")             \
      65             :   _(5, NOTICE, "notice")               \
      66             :   _(6, INFORMATIONAL, "informational") \
      67             :   _(7, DEBUG, "debug")
      68             : 
      69             : typedef enum
      70             : {
      71             : #define _(v, N, s) SYSLOG_SEVERITY_##N = v,
      72             :   foreach_syslog_severity
      73             : #undef _
      74             : } syslog_severity_t;
      75             : 
      76             : /** syslog header */
      77             : typedef struct
      78             : {
      79             :   /** facility value, part of priority */
      80             :   syslog_facility_t facility;
      81             : 
      82             :   /** severity value, part of priority */
      83             :   syslog_severity_t severity;
      84             : 
      85             :   /** message timestamp */
      86             :   f64 timestamp;
      87             : 
      88             :   /** application that originated the message RFC5424 6.2.5. */
      89             :   char *app_name;
      90             : 
      91             :   /** identify the type of message RFC5424 6.2.7. */
      92             :   char *msgid;
      93             : } syslog_header_t;
      94             : 
      95             : /** syslog message */
      96             : typedef struct
      97             : {
      98             :   /** header */
      99             :   syslog_header_t header;
     100             : 
     101             :   /** structured data RFC5424 6.3. */
     102             :   u8 **structured_data;
     103             :   u32 curr_sd_index;
     104             : 
     105             :   /** free-form message RFC5424 6.4. */
     106             :   u8 *msg;
     107             : } syslog_msg_t;
     108             : 
     109             : typedef struct
     110             : {
     111             :   /** process ID RFC5424 6.2.6. */
     112             :   u32 procid;
     113             : 
     114             :   /** time offset */
     115             :   f64 time_offset;
     116             : 
     117             :   /** IPv4 address of remote host (destination) */
     118             :   ip4_address_t collector;
     119             : 
     120             :   /** UDP port number of remote host (destination) */
     121             :   u16 collector_port;
     122             : 
     123             :   /** IPv4 address of sender (source) */
     124             :   ip4_address_t src_address;
     125             : 
     126             :   /** FIB table index */
     127             :   u32 fib_index;
     128             : 
     129             :   /** message size limit */
     130             :   u32 max_msg_size;
     131             : 
     132             :   /** severity filter (specified severity and greater match) */
     133             :   syslog_severity_t severity_filter;
     134             : 
     135             :   /** ip4-lookup node index */
     136             :   u32 ip4_lookup_node_index;
     137             : 
     138             :   /** convenience variables */
     139             :   vnet_main_t *vnet_main;
     140             : 
     141             :   u16 msg_id_base;
     142             : } syslog_main_t;
     143             : 
     144             : extern syslog_main_t syslog_main;
     145             : 
     146             : /**
     147             :  * @brief Initialize syslog message header
     148             :  *
     149             :  * @param facility facility value
     150             :  * @param severity severity level
     151             :  * @param app_name application that originated message RFC424 6.2.5. (optional)
     152             :  * @param msgid identify the type of message RFC5424 6.2.7. (optional)
     153             :  */
     154             : void syslog_msg_init (syslog_msg_t * syslog_msg, syslog_facility_t facility,
     155             :                       syslog_severity_t severity, char *app_name,
     156             :                       char *msgid);
     157             : /**
     158             :  * @brief Initialize structured data element
     159             :  *
     160             :  * @param sd_id structured data element name RFC5424 6.3.2.
     161             :  */
     162             : void syslog_msg_sd_init (syslog_msg_t * syslog_msg, char *sd_id);
     163             : 
     164             : /**
     165             :  * @brief Add structured data elemnt parameter name-value pair RFC5424 6.3.3.
     166             :  */
     167             : void syslog_msg_add_sd_param (syslog_msg_t * syslog_msg, char *name,
     168             :                               char *fmt, ...);
     169             : 
     170             : /**
     171             :  * @brief Add free-form message RFC5424 6.4.
     172             :  */
     173             : void syslog_msg_add_msg (syslog_msg_t * syslog_msg, char *fmt, ...);
     174             : 
     175             : /**
     176             :  * @brief Send syslog message
     177             :  */
     178             : int syslog_msg_send (syslog_msg_t * syslog_msg);
     179             : 
     180             : /**
     181             :  * @brief Set syslog sender configuration
     182             :  *
     183             :  * @param collector IPv4 address of syslog collector (destination)
     184             :  * @param collector_port UDP port of syslog colector (destination)
     185             :  * @param src IPv4 address of syslog sender (source)
     186             :  * @param vrf_id VRF/FIB table ID
     187             :  * @param max_msg_size maximum message length
     188             :  */
     189             : vnet_api_error_t set_syslog_sender (ip4_address_t * collector,
     190             :                                     u16 collector_port, ip4_address_t * src,
     191             :                                     u32 vrf_id, u32 max_msg_size);
     192             : 
     193             : /**
     194             :  * @brief Check if syslog logging is enabled
     195             :  *
     196             :  * @return 1 if syslog logging is enabled, 0 otherwise
     197             :  */
     198             : always_inline int
     199       77836 : syslog_is_enabled (void)
     200             : {
     201       77836 :   syslog_main_t *sm = &syslog_main;
     202             : 
     203       77836 :   return sm->collector.as_u32 ? 1 : 0;
     204             : }
     205             : 
     206             : /**
     207             :  * @brief Severity filter test
     208             :  *
     209             :  * @return 1 if message with specified severity is not selected to be logged
     210             :  */
     211             : always_inline int
     212          43 : syslog_severity_filter_block (syslog_severity_t s)
     213             : {
     214          43 :   syslog_main_t *sm = &syslog_main;
     215             : 
     216          43 :   return (sm->severity_filter < s);
     217             : }
     218             : 
     219             : #endif /* __included_syslog_h__ */
     220             : 
     221             : /*
     222             :  * fd.io coding-style-patch-verification: ON
     223             :  *
     224             :  * Local Variables:
     225             :  * eval: (c-set-style "gnu")
     226             :  * End:
     227             :  */

Generated by: LCOV version 1.14