/* * Copyright (c) 2014, University of Bristol - http://www.bris.ac.uk * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of the copyright holder 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 THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``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 THE * COPYRIGHT HOLDER OR CONTRIBUTORS 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 SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Header file for IPv6 multicast forwarding stats maintenance * * \author * George Oikonomou - */ #ifndef UIP_MCAST6_STATS_H_ #define UIP_MCAST6_STATS_H_ /*---------------------------------------------------------------------------*/ #include "contiki-conf.h" #include /*---------------------------------------------------------------------------*/ /* The platform can override the stats datatype */ #ifdef UIP_MCAST6_CONF_STATS_DATATYPE #define UIP_MCAST6_STATS_DATATYPE UIP_MCAST6_CONF_STATS_DATATYPE #else #define UIP_MCAST6_STATS_DATATYPE uint16_t #endif /*---------------------------------------------------------------------------*/ #ifdef UIP_MCAST6_CONF_STATS #define UIP_MCAST6_STATS UIP_MCAST6_CONF_STATS #else #define UIP_MCAST6_STATS 0 #endif /*---------------------------------------------------------------------------*/ /* Stats datatype */ /*---------------------------------------------------------------------------*/ typedef struct uip_mcast6_stats { UIP_MCAST6_STATS_DATATYPE mcast_in_unique; UIP_MCAST6_STATS_DATATYPE mcast_in_all; /* At layer 3 */ UIP_MCAST6_STATS_DATATYPE mcast_in_ours; /* Unique and we are a group member */ UIP_MCAST6_STATS_DATATYPE mcast_fwd; /* Forwarded by us but we are not the seed */ UIP_MCAST6_STATS_DATATYPE mcast_out; /* We are the seed */ UIP_MCAST6_STATS_DATATYPE mcast_bad; UIP_MCAST6_STATS_DATATYPE mcast_dropped; void *engine_stats; /* Opaque pointer to an engine's additional stats */ } uip_mcast6_stats_t; /*---------------------------------------------------------------------------*/ /* Access macros */ /*---------------------------------------------------------------------------*/ #if UIP_MCAST6_STATS /* Don't access this variable directly, use the macros below */ extern uip_mcast6_stats_t uip_mcast6_stats; #define UIP_MCAST6_STATS_ADD(x) uip_mcast6_stats.x++ #define UIP_MCAST6_STATS_GET(x) uip_mcast6_stats.x #define UIP_MCAST6_STATS_INIT(s) uip_mcast6_stats_init(s) #else /* UIP_MCAST6_STATS */ #define UIP_MCAST6_STATS_ADD(x) #define UIP_MCAST6_STATS_GET(x) 0 #define UIP_MCAST6_STATS_INIT(s) #endif /* UIP_MCAST6_STATS */ /*---------------------------------------------------------------------------*/ /** * \brief Initialise multicast stats * \param stats A pointer to a struct holding an engine's additional statistics */ void uip_mcast6_stats_init(void *stats); /*---------------------------------------------------------------------------*/ #endif /* UIP_MCAST6_STATS_H_ */