The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/net/route/route_debug.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2021
    3  *      Alexander V. Chernikov <melifaro@FreeBSD.org>
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  * 3. Neither the name of the University nor the names of its contributors
   14  *    may be used to endorse or promote products derived from this software
   15  *    without specific prior written permission.
   16  *
   17  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   27  * SUCH DAMAGE.
   28  *
   29  * $FreeBSD$
   30  */
   31 
   32 #ifndef _NET_ROUTE_DEBUG_H_
   33 #define _NET_ROUTE_DEBUG_H_
   34 
   35 #include <sys/sysctl.h>
   36 #include <sys/syslog.h>
   37 
   38 /* DEBUG logic */
   39 #if defined(DEBUG_MOD_NAME) && defined(DEBUG_MAX_LEVEL)
   40 
   41 #ifndef _DEBUG_SYSCTL_OID
   42 #define _DEBUG_SYSCTL_OID       _net_route_debug
   43 SYSCTL_DECL(_net_route_debug);
   44 #endif
   45 
   46 #define DEBUG_VAR_NAME                          _DEBUG_VAR_NAME(DEBUG_MOD_NAME)
   47 #define _DEBUG_VAR_NAME(a)                      _DEBUG_VAR_NAME_INDIRECT(a)
   48 #define _DEBUG_VAR_NAME_INDIRECT(prefix)        prefix##_debug_level
   49 
   50 #define DEBUG_PREFIX_NAME                       _DEBUG_PREFIX_NAME(DEBUG_MOD_NAME)
   51 #define _DEBUG_PREFIX_NAME(n)                   __DEBUG_PREFIX_NAME(n)
   52 #define __DEBUG_PREFIX_NAME(n)                  #n
   53 
   54 #define _DECLARE_DEBUG(_default_level)                                  \
   55         static int DEBUG_VAR_NAME = _default_level;                     \
   56         SYSCTL_INT(_DEBUG_SYSCTL_OID, OID_AUTO, DEBUG_VAR_NAME,          \
   57                 CTLFLAG_RW | CTLFLAG_RWTUN,                             \
   58                 &(DEBUG_VAR_NAME), 0, "debuglevel")
   59 
   60 /* Additional tracing levels not defined by log.h */
   61 #ifndef LOG_DEBUG2
   62 #define LOG_DEBUG2      8
   63 #endif
   64 #ifndef LOG_DEBUG3
   65 #define LOG_DEBUG3      9
   66 #endif
   67 
   68 /*
   69  * Severity usage guidelines:
   70  *
   71  * LOG_WARNING - subsystem-global errors ("multipath init failed")
   72  *
   73  * LOG_INFO - subsystem non-transient errors ("Failed to unlink nexhop").
   74  *  All logging <= LOG_INFO by default will be written to syslog.
   75  *
   76  * LOG_DEBUG - subsystem debug. Not-too often events (hash resizes, recoverable failures).
   77  *  These are compiled in by default on production. Turning it it should NOT notable affect
   78  *  performance
   79  * LOG_DEBUG2 - more debug. Per-item level (nhg,nh,route) debug, up to multiple lines per item.
   80  *  This is NOT compiled in by default. Turning it on should NOT seriously impact performance
   81  * LOG_DEBUG3 - last debug level. Per-item large debug outputs.
   82  *  This is NOT compiled in by default. All performance bets are off.
   83  *
   84  */
   85 
   86 #define _output                 printf
   87 #define _DEBUG_PASS_MSG(_l)     (DEBUG_VAR_NAME >= (_l))
   88 
   89 #define IF_DEBUG_LEVEL(_l)      if ((DEBUG_MAX_LEVEL >= (_l)) && (__predict_false(DEBUG_VAR_NAME >= (_l))))
   90 
   91 /*
   92  * Logging for events specific for particular family and fib
   93  * Example: [nhop_neigh] inet.0 find_lle: nhop nh#4/inet/vtnet0/10.0.0.1: mapped to lle NULL
   94  */
   95 #define FIB_LOG(_l, _fib, _fam, _fmt, ...)      FIB_LOG_##_l(_l, _fib, _fam, _fmt, ## __VA_ARGS__)
   96 #define _FIB_LOG(_l, _fib, _fam, _fmt, ...)     if (_DEBUG_PASS_MSG(_l)) {      \
   97         _output("[" DEBUG_PREFIX_NAME "] %s.%u %s: " _fmt "\n", rib_print_family(_fam), _fib, __func__, ##__VA_ARGS__); \
   98 }
   99 
  100 /* Same as FIB_LOG, but uses nhop to get fib and family */
  101 #define FIB_NH_LOG(_l, _nh, _fmt, ...)  FIB_LOG_##_l(_l, nhop_get_fibnum(_nh), nhop_get_upper_family(_nh), _fmt, ## __VA_ARGS__)
  102 /* Same as FIB_LOG, but uses rib_head to get fib and family */
  103 #define FIB_RH_LOG(_l, _rh, _fmt, ...)  FIB_LOG_##_l(_l, (_rh)->rib_fibnum, (_rh)->rib_family, _fmt, ## __VA_ARGS__)
  104 /* Same as FIB_LOG, but uses nh_control to get fib and family from linked rib */
  105 #define FIB_CTL_LOG(_l, _ctl, _fmt, ...)  FIB_LOG_##_l(_l, (_ctl)->ctl_rh->rib_fibnum, (_ctl)->ctl_rh->rib_family, _fmt, ## __VA_ARGS__)
  106 
  107 /*
  108  * Generic logging for routing subsystem
  109  * Example: [nhop_neigh] nhops_update_neigh: L2 prepend update from lle/inet/valid/vtnet0/10.0.0.157
  110  */
  111 #define RT_LOG(_l, _fmt, ...)   RT_LOG_##_l(_l, _fmt, ## __VA_ARGS__)
  112 #define _RT_LOG(_l, _fmt, ...)  if (_DEBUG_PASS_MSG(_l)) {      \
  113         _output("[" DEBUG_PREFIX_NAME "] %s: " _fmt "\n",  __func__, ##__VA_ARGS__);    \
  114 }
  115 
  116 
  117 /*
  118  * Wrapper logic to avoid compiling high levels of debugging messages for production systems.
  119  */
  120 #if DEBUG_MAX_LEVEL>=LOG_DEBUG3
  121 #define FIB_LOG_LOG_DEBUG3      _FIB_LOG
  122 #define RT_LOG_LOG_DEBUG3       _RT_LOG
  123 #else
  124 #define FIB_LOG_LOG_DEBUG3(_l, _fib, _fam, _fmt, ...)
  125 #define RT_LOG_LOG_DEBUG3(_l, _fmt, ...)
  126 #endif
  127 #if DEBUG_MAX_LEVEL>=LOG_DEBUG2
  128 #define FIB_LOG_LOG_DEBUG2      _FIB_LOG
  129 #define RT_LOG_LOG_DEBUG2       _RT_LOG
  130 #else
  131 #define FIB_LOG_LOG_DEBUG2(_l, _fib, _fam, _fmt, ...)
  132 #define RT_LOG_LOG_DEBUG2(_l, _fmt, ...)
  133 #endif
  134 #if DEBUG_MAX_LEVEL>=LOG_DEBUG
  135 #define FIB_LOG_LOG_DEBUG       _FIB_LOG
  136 #define RT_LOG_LOG_DEBUG        _RT_LOG
  137 #else
  138 #define FIB_LOG_LOG_DEBUG(_l, _fib, _fam, _fmt, ...)
  139 #define RT_LOG_LOG_DEBUG(_l, _fmt, ...)
  140 #endif
  141 #if DEBUG_MAX_LEVEL>=LOG_INFO
  142 #define FIB_LOG_LOG_INFO        _FIB_LOG
  143 #define RT_LOG_LOG_INFO _RT_LOG
  144 #else
  145 #define FIB_LOG_LOG_INFO(_l, _fib, _fam, _fmt, ...)
  146 #define RT_LOG_LOG_INFO(_l, _fmt, ...)
  147 #endif
  148 #define FIB_LOG_LOG_NOTICE      _FIB_LOG
  149 #define FIB_LOG_LOG_ERR         _FIB_LOG
  150 #define FIB_LOG_LOG_WARNING     _FIB_LOG
  151 #define RT_LOG_LOG_NOTICE       _RT_LOG
  152 #define RT_LOG_LOG_ERR          _RT_LOG
  153 #define RT_LOG_LOG_WARNING      _RT_LOG
  154 
  155 #endif
  156 
  157 /* Helpers for fancy-printing various objects */
  158 struct nhop_object;
  159 struct nhgrp_object;
  160 struct llentry;
  161 struct nhop_neigh;
  162 struct rtentry;
  163 struct ifnet;
  164 
  165 #define NHOP_PRINT_BUFSIZE      48
  166 char *nhop_print_buf(const struct nhop_object *nh, char *buf, size_t bufsize);
  167 char *nhop_print_buf_any(const struct nhop_object *nh, char *buf, size_t bufsize);
  168 char *nhgrp_print_buf(const struct nhgrp_object *nhg, char *buf, size_t bufsize);
  169 char *llentry_print_buf(const struct llentry *lle, struct ifnet *ifp, int family, char *buf,
  170     size_t bufsize);
  171 char *llentry_print_buf_lltable(const struct llentry *lle, char *buf, size_t bufsize);
  172 char *neigh_print_buf(const struct nhop_neigh *nn, char *buf, size_t bufsize);
  173 char *rt_print_buf(const struct rtentry *rt, char *buf, size_t bufsize);
  174 const char *rib_print_cmd(int rib_cmd);
  175 
  176 #endif

Cache object: 4aaad1b99dfdbed55f837839753900de


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.