wanpipe/patches/kdrivers/include/wanpipe_logger.h

338 lines
12 KiB
C

/******************************************************************************//**
* \file wanpipe_logger.h
* \brief WANPIPE(tm) Wanpipe Logger API Headers and Defines
*
* Authors: David Rokhvarg <davidr@sangoma.com>
*
* Copyright (c) 2007 - 09, Sangoma Technologies
* All rights reserved.
*
* * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the Sangoma Technologies nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* ===============================================================================
*/
#ifndef __WANPIPE_LOGGER_API_HDR__
#define __WANPIPE_LOGGER_API_HDR__
#include "wanpipe_abstr_types.h"
/***********************************************//**
Wanpipe Logger Event Structure
****************************************************/
/*!
\def WP_MAX_NO_BYTES_IN_LOGGER_EVENT
\brief Maximum length of event string
*/
#define WP_MAX_NO_BYTES_IN_LOGGER_EVENT 256
/*!
\def WP_MAX_NO_LOGGER_EVENTS
\brief Maximum number of logger events kept by API driver
*/
#define WP_MAX_NO_LOGGER_EVENTS 512
/*!
\struct wp_logger_event
\brief Wanpipe API Logger Event contains event type,
timestamp and data.
\typedef wp_logger_event_t
\brief Wanpipe API Logger Event contains event type,
timestamp and data.
*/
typedef struct wp_logger_event{
u_int32_t logger_type; /*!< Type of logger which produced the event. One of the types in wan_logger_type. */
u_int32_t event_type; /*!< A bitmap indicating type of the event. Only a single bit will be set by API. */
wan_time_t time_stamp_sec; /*!< Timestamp in seconds (Since January 1, 1970). */
wan_suseconds_t time_stamp_usec;/*!< microseconds portion of the timestamp */
unsigned char data[WP_MAX_NO_BYTES_IN_LOGGER_EVENT]; /*!< data area containing the logger event null-terminated string */
}wp_logger_event_t;
/* Definitions for 'logger_type' in wp_logger_event_t: */
enum wan_logger_type{
WAN_LOGGER_DEFAULT, /* controled by bitmaps in wp_default_logger_level */
WAN_LOGGER_TE1, /* controled by bitmaps in wp_te1_logger_level */
WAN_LOGGER_HWEC, /* controled by bitmaps in wp_hwec_logger_level */
WAN_LOGGER_TDMAPI, /* controled by bitmaps in wp_tdmapi_logger_level */
WAN_LOGGER_FE, /* controled by bitmaps in wp_fe_logger_level */
WAN_LOGGER_BRI, /* controled by bitmaps in wp_bri_logger_level */
WAN_LOGGER_FILE /* controled by bitmaps in wp_file_logger_level */
};
#define SANG_DECODE_LOGGER_TYPE(wplg_type) \
(wplg_type == WAN_LOGGER_DEFAULT) ? "WAN_LOGGER_DEFAULT": \
(wplg_type == WAN_LOGGER_TE1) ? "WAN_LOGGER_TE1": \
(wplg_type == WAN_LOGGER_HWEC) ? "WAN_LOGGER_HWEC": \
(wplg_type == WAN_LOGGER_TDMAPI) ? "WAN_LOGGER_TDMAPI": \
(wplg_type == WAN_LOGGER_FE) ? "WAN_LOGGER_FE": \
(wplg_type == WAN_LOGGER_BRI) ? "WAN_LOGGER_BRI": \
(wplg_type == WAN_LOGGER_FILE) ? "WAN_LOGGER_FILE": \
"Invalid Logger type"
/* Definitions for 'event_type' in wp_logger_event_t: */
/* General purpose Wanpipe Logger event types. */
enum wp_default_logger_level{
SANG_LOGGER_INFORMATION = (1),
SANG_LOGGER_WARNING = (1 << 1),
SANG_LOGGER_ERROR = (1 << 2)
};
#define SANG_DECODE_DEFAULT_LOGGER_EVENT_TYPE(bit) \
(bit & SANG_LOGGER_INFORMATION) ? "SANG_LOGGER_INFORMATION": \
(bit & SANG_LOGGER_WARNING) ? "SANG_LOGGER_WARNING" : \
(bit & SANG_LOGGER_ERROR) ? "SANG_LOGGER_ERROR" : \
"Invalid Bit for Default Logger"
/* Task-specific Wanpipe Logger event types - for advanced debugging only. */
/* T1/E1 */
enum wp_te1_logger_level{
SANG_LOGGER_TE1_DEFAULT = (1)
};
#define SANG_DECODE_TE1_LOGGER_EVENT_TYPE(bit) \
(bit & SANG_LOGGER_TE1_DEFAULT) ? "SANG_LOGGER_TE1_DEFAULT": \
"Invalid Bit for TE1 Logger"
/* HWEC */
enum wp_hwec_logger_level{
SANG_LOGGER_HWEC_DEFAULT = (1)
};
#define SANG_DECODE_HWEC_LOGGER_EVENT_TYPE(bit) \
(bit & SANG_LOGGER_HWEC_DEFAULT) ? "SANG_LOGGER_HWEC_DEFAULT": \
"Invalid Bit for HWEC Logger"
/* TDMAPI */
enum wp_tdmapi_logger_level{
SANG_LOGGER_TDMAPI_DEFAULT = (1)
};
#define SANG_DECODE_TDMAPI_LOGGER_EVENT_TYPE(bit) \
(bit & SANG_LOGGER_TDMAPI_DEFAULT) ? "SANG_LOGGER_TDMAPI_DEFAULT": \
"Invalid Bit for TDMAPI Logger"
/* FE */
enum wp_fe_logger_level{
SANG_LOGGER_FE_DEFAULT = (1)
};
#define SANG_DECODE_FE_LOGGER_EVENT_TYPE(bit) \
(bit & SANG_LOGGER_FE_DEFAULT) ? "SANG_LOGGER_FE_DEFAULT": \
"Invalid Bit for FE Logger"
/* BRI */
enum wp_bri_logger_level{
SANG_LOGGER_BRI_DEFAULT = (1),
SANG_LOGGER_BRI_HFC_S0_STATES = (1 << 1),
SANG_LOGGER_BRI_L2_TO_L1_ACTIVATION = (1 << 2)
};
#define SANG_DECODE_BRI_LOGGER_EVENT_TYPE(bit) \
(bit & SANG_LOGGER_BRI_DEFAULT) ? "SANG_LOGGER_BRI_DEFAULT": \
(bit & SANG_LOGGER_BRI_HFC_S0_STATES) ? "SANG_LOGGER_BRI_HFC_S0_STATES": \
(bit & SANG_LOGGER_BRI_L2_TO_L1_ACTIVATION) ? "SANG_LOGGER_BRI_L2_TO_L1_ACTIVATION": \
"Invalid Bit for BRI Logger"
/* File Logger. Controls printing of messages to Wanpipe Log file.
* Does *not* produce any Events in Wanpipe Logger queue.
* Windows: Windows\System32\drivers\wanpipelog.txt
* Linux: /var/log/messages */
enum wp_file_logger_level{
SANG_LOGGER_FILE_ON = (1),
SANG_LOGGER_FILE_OFF = (1 << 1)
};
/* Note: WAN_LOGGER_FILE does not produce events. */
static __inline const char* wp_decode_logger_event_type(u_int32_t logger_type, u_int32_t evt_type)
{
switch(logger_type)
{
case WAN_LOGGER_DEFAULT:
return SANG_DECODE_DEFAULT_LOGGER_EVENT_TYPE(evt_type);
case WAN_LOGGER_TE1:
return SANG_DECODE_TE1_LOGGER_EVENT_TYPE(evt_type);
case WAN_LOGGER_HWEC:
return SANG_DECODE_HWEC_LOGGER_EVENT_TYPE(evt_type);
case WAN_LOGGER_TDMAPI:
return SANG_DECODE_TDMAPI_LOGGER_EVENT_TYPE(evt_type);
case WAN_LOGGER_FE:
return SANG_DECODE_FE_LOGGER_EVENT_TYPE(evt_type);
case WAN_LOGGER_BRI:
return SANG_DECODE_BRI_LOGGER_EVENT_TYPE(evt_type);
default:
return "Error: unknown logger type";
}
}
/*!
\struct wp_logger_stats
\brief Wanpipe Logger API Statistics Structure. Used with WP_API_LOGGER_CMD_GET_STATS command.
\typedef wp_logger_stats_t
*/
typedef struct wp_logger_stats
{
ulong_t rx_events; /*!< total Events received */
ulong_t rx_events_dropped; /*!< number of Events discarded because no free buffer available */
ulong_t max_event_queue_length;/*!< maximum number of Events which can be stored in API queue */
ulong_t current_number_of_events_in_event_queue;/*!< number of Events currently in API queue */
}wp_logger_stats_t;
/*!
\struct wp_logger_level_control
\brief Wanpipe Logger API Levle Control Structure.
Used with WP_API_LOGGER_CMD_GET_LOGGER_LEVEL and WP_API_LOGGER_CMD_SET_LOGGER_LEVEL commands.
\typedef wp_logger_level_control_t
*/
typedef struct wp_logger_level_control
{
u_int32_t logger_type; /*!< Type of logger which level is being controlled. One of the types in wan_logger_type. */
u_int32_t logger_level; /*!< A bitmap indicating types of the events logged by Wanpipe Logger. */
}wp_logger_level_control_t;
/*!
\struct wp_logger_cmd
\brief Wanpipe Logger API Command Structure used with WANPIPE_IOCTL_LOGGER_CMD
Wanpipe Logger API Command structure used to execute WANPIPE_IOCTL_LOGGER_CMD commands
All commands are defined in:
enum wp_logger_cmds
\typedef wp_logger_cmd_t
*/
typedef struct wp_logger_cmd
{
unsigned int cmd; /*!< Command defined in enum wp_logger_cmds */
unsigned int result; /*!< Result defined in: enum SANG_STATUS or SANG_STATUS_T */
union {
wp_logger_event_t logger_event;
wp_logger_level_control_t logger_level_ctrl;
u_int32_t open_cnt; /*!< Number of Open file descriptors for the device.
Used with WP_API_LOGGER_CMD_OPEN_CNT command. */
wp_logger_stats_t stats;
};
}wp_logger_cmd_t;
/*!
\enum wanpipe_api_cmds
\brief Commands used with WANPIPE_IOCTL_LOGGER_CMD IOCTL
*/
enum wp_logger_cmds
{
WP_API_LOGGER_CMD_FLUSH_BUFFERS, /*!< Flush Buffers */
WP_API_LOGGER_CMD_READ_EVENT, /*!< Read Logger Event */
WP_API_LOGGER_CMD_GET_STATS, /*!< Get device statistics */
WP_API_LOGGER_CMD_RESET_STATS, /*!< Reset device statistics */
WP_API_LOGGER_CMD_OPEN_CNT, /*!< Get Number of Open file descriptors for the device */
WP_API_LOGGER_CMD_GET_LOGGER_LEVEL, /*!< Get current level (types of events) of Wanpipe Logger */
WP_API_LOGGER_CMD_SET_LOGGER_LEVEL /*!< Set current level (types of events) of Wanpipe Logger */
};
#if defined(__KERNEL__)
#if defined(__WINDOWS__)
# if defined(BUSENUM_DRV)
# define WPLOGGER_CALL
# else
# define WPLOGGER_CALL DECLSPEC_IMPORT
# endif
#elif defined(__LINUX__)
# define WPLOGGER_CALL
# define EXTERN_C extern
#endif /* __LINUX__ */
/* Wanpipe Logger functions and variables */
EXTERN_C WPLOGGER_CALL int wp_logger_create(void);
EXTERN_C WPLOGGER_CALL void wp_logger_delete(void);
EXTERN_C WPLOGGER_CALL void wp_logger_input(u_int32_t logger_type, u_int32_t evt_type, const char * fmt, ...);
EXTERN_C WPLOGGER_CALL u_int32_t wp_logger_level_default;
EXTERN_C WPLOGGER_CALL u_int32_t wp_logger_level_te1;
EXTERN_C WPLOGGER_CALL u_int32_t wp_logger_level_hwec;
EXTERN_C WPLOGGER_CALL u_int32_t wp_logger_level_tdmapi;
EXTERN_C WPLOGGER_CALL u_int32_t wp_logger_level_fe;
EXTERN_C WPLOGGER_CALL u_int32_t wp_logger_level_bri;
/* macros for checking if a level of debugging is enabled */
#define WAN_LOGGER_TEST_LEVEL_DEFAULT(level) (level & wp_logger_level_default)
#define WAN_LOGGER_TEST_LEVEL_TE1(level) (level & wp_logger_level_te1)
#define WAN_LOGGER_TEST_LEVEL_HWEC(level) (level & wp_logger_level_hwec)
#define WAN_LOGGER_TEST_LEVEL_TDMAPI(level) (level & wp_logger_level_tdmapi)
#define WAN_LOGGER_TEST_LEVEL_FE(level) (level & wp_logger_level_fe)
#define WAN_LOGGER_TEST_LEVEL_BRI(level) (level & wp_logger_level_bri)
#define WP_DEBUG(logger_type, logger_level, ...) \
{ \
char is_level_on = 0; \
\
switch(logger_type) \
{ \
case WAN_LOGGER_DEFAULT: \
is_level_on = WAN_LOGGER_TEST_LEVEL_DEFAULT(logger_level); \
break; \
case WAN_LOGGER_TE1: \
is_level_on = WAN_LOGGER_TEST_LEVEL_TE1(logger_level); \
break; \
case WAN_LOGGER_HWEC: \
is_level_on = WAN_LOGGER_TEST_LEVEL_HWEC(logger_level); \
break; \
case WAN_LOGGER_TDMAPI: \
is_level_on = WAN_LOGGER_TEST_LEVEL_TDMAPI(logger_level); \
break; \
case WAN_LOGGER_FE: \
is_level_on = WAN_LOGGER_TEST_LEVEL_FE(logger_level); \
break; \
case WAN_LOGGER_BRI: \
is_level_on = WAN_LOGGER_TEST_LEVEL_BRI(logger_level); \
break; \
}/* switch(type) */ \
\
if (is_level_on ) { \
wp_logger_input(logger_type, logger_level, ## __VA_ARGS__); \
} \
}
#endif/* __KERNEL__ */
#endif/* __WANPIPE_LOGGER_API_HDR__ */