/* * Copyright (c) 2024 Real-Time Innovations, Inc. All rights reserved. * No duplications, whole or partial, manual or electronic, may be made * without express written permission. Any such copies, or revisions thereof, * must display this notice unaltered. * This code contains trade secrets of Real-Time Innovations, Inc. */ #ifndef netio_log_h #define netio_log_h #ifndef osapi_ntptime_h #include "osapi/osapi_ntptime.h" #endif #ifndef log_common_h #include "log/log_common.h" #endif #ifndef reda_sequenceNumber_h #include "reda/reda_sequenceNumber.h" #endif #include "netio/netio_dll.h" #ifdef __cplusplus extern "C" { #endif /* ================================================================= */ /* Main Documentation */ /* ================================================================= */ /*e \mainpage * * NETIO handles sending and receiving in a transport independent * manner. It presents an abstract communication model that is * independent of the network hardware and API, to the higher layers of * NDDS. The NETIO Core handles difficult issues such as efficient * state management and thread safety, so that the user pluggable * transport can be simple. * * To plug in a new transport, implement the function prototypes * described in \ref NDDS_Transport_PluginComponent, and install a * transport instance using the \ref RTINetioConfiguratorComponent. * The \ref RTINetioConfiguratorComponent, in conjunction with the \ref * RTINetioSenderComponent and \ref RTINetioReceiverComponent, ensure * that the correct transport plugin instances serve the appropriate * entryport or destination request. * * - Infrastructure * - \ref RTINetioLogComponent * - \ref RTINetioCommonComponent * * - NETIO Core * - \ref RTINetioConfiguratorComponent * - \ref RTINetioSenderComponent * - \ref RTINetioReceiverComponent * */ /* ----------------------------------------------------------------- */ /* Component Hierarchy */ /*IGNORE \defgroup RTINetioComponent NETIO API Reference * \ingroup RTIComponent * \brief The NETIO component takes care of gather write and * blocking/polled read using built-in and user supplied pluggable * transports, using IPv6 address notation. */ /*e \defgroup RTINetioLogComponent Logging * \ingroup RTINetioComponent * \brief Logging utlities. */ /*e \defgroup RTINetioCommonComponent Common * \ingroup RTINetioComponent * \brief Common elements to all the components and pluggable transports. */ /*e \defgroup RTINetioConfiguratorComponent Configurator * \ingroup RTINetioComponent * * \brief The Configurator component is responsible for installation of * custom transport plugins, selection of the actual transport plugin * instances used to send and receive mesages, and for updating * internal NETIO state upon dynamic change events occuring in a * transport plugin instance. */ /*e \defgroup RTINetioSenderComponent Sender * \ingroup RTINetioComponent * * \brief Sender component is responsible for sending messages using a * pluggable transport. * * @mtsafety See RTINetio_Sender_public UML diagram. */ /*e \defgroup RTINetioReceiverComponent Receiver * \ingroup RTINetioComponent * * \brief Receiver component is responsible for receiving messages from * a pluggable transport. */ /*e \defgroup NDDS_Transport_PluginComponent Transport * \ingroup RTINetioComponent * * \brief Pluggable transport interface; this is all you need to know * to implmement a new transport for NETIO. */ /* ================================================================= */ /* Component: Logging */ /* ================================================================= */ /*e \file * \ingroup RTINetioLogComponent * * \brief Logging component interface and definitions. Also defines * the organization and layout of the online API documentation. */ /* ================================================================= */ /* Log Messages */ /* ================================================================= */ /*e \defgroup RTINetioLogMessageClass RTINetioLogMessage * \ingroup RTINetioLogComponent * \brief Standard log message format strings with matching log message number. * Use these message format strings to provide a common look and feel for * Netio log messages. * * Example usage: * \code * * ... * * RTINetioLog_exception( * &RTI_NETIO_LOG_SHMEM_FAILED_TO_INIT_s, * "incompatible properties"); * \endcode * * @see RTILogMessageClass */ /*e \ingroup RTINetioLogMessageClass * \brief Not really a submodule per se, but a way to get unique number for * transport API error code * @see RTILogNumberBitmapClass */ #define SUBMODULE_NETIO_TRANSPORT (0x0000) /*e \ingroup RTINetioLogMessageClass * \brief Netio core submodule identifier. For use in log message numbers. * @see RTILogNumberBitmapClass */ #define SUBMODULE_NETIO_CORE (0x1000) /*e \ingroup RTINetioLogMessageClass * \brief Netio transport table submodule identifier. For use in log message numbers. * @see RTILogNumberBitmapClass */ #define SUBMODULE_NETIO_CONFIGURATOR (0x5000) /*e \ingroup RTINetioLogMessageClass * \brief Netio sender submodule identifier. For use in log message numbers. * @see RTILogNumberBitmapClass */ #define SUBMODULE_NETIO_SENDER (0x6000) /*e \ingroup RTINetioLogMessageClass * \brief Netio receiver submodule identifier. For use in log message numbers. * @see RTILogNumberBitmapClass */ #define SUBMODULE_NETIO_RECEIVER (0x7000) /* ================================================================= */ /* Log Verbosity */ /* ================================================================= */ /*e \ingroup RTINetioLogVerbosityClass * \brief Core submodule identifier. Used for enabling log messages * in the core submodule. * @see \c RTINetioLog_setBitmaps */ #define RTI_NETIO_SUBMODULE_MASK_COMMON (0x0001) /*e \ingroup RTINetioLogVerbosityClass * \brief Transport table submodule identifier. Used for enabling log messages * in the transport table submodule. * @see \c RTINetioLog_setBitmaps */ #define RTI_NETIO_SUBMODULE_MASK_CONFIGURATOR (0x0010) /*e \ingroup RTINetioLogVerbosityClass * \brief Sender submodule identifier. Used for enabling log messages * in the sender submodule. * @see \c RTINetioLog_setBitmaps */ #define RTI_NETIO_SUBMODULE_MASK_SENDER (0x0020) /*e \ingroup RTINetioLogVerbosityClass * \brief Receiver submodule identifier. Used for enabling log messages * in the receiver submodule. * @see \c RTINetioLog_setBitmaps */ #define RTI_NETIO_SUBMODULE_MASK_RECEIVER (0x0040) /*e \ingroup RTINetioLogVerbosityClass * \brief Convenient way to say "enable logging for all netio submodules". * @see \c RTINetioLog_setBitmaps */ #define RTI_NETIO_SUBMODULE_MASK_ALL RTI_LOG_SUBMODULE_MASK_ALL /*e \ingroup RTINetioLogMessageClass * \brief Send failed. Specify destination. */ extern RTINetioDllVariable const struct RTILogMessage RTI_NETIO_LOG_SEND_FAILURE_s; #ifdef __cplusplus } /* extern "C" */ #endif #endif /* netio_log_h */